From 249353cf54e038df9447bdec162af0f0ab2461bf Mon Sep 17 00:00:00 2001 From: Jiri Novak Date: Tue, 30 Aug 2022 09:16:37 +0200 Subject: [PATCH] release 2.1.21 --- CycloBranch/CycloBranch-Linux.pro | 42 +- CycloBranch/CycloBranch-MacOSX.pro | 40 +- CycloBranch/CycloBranch.vcxproj | 878 +++-- CycloBranch/CycloBranch.vcxproj.filters | 228 +- CycloBranch/core/cDeNovoGraph.cpp | 2 +- CycloBranch/core/cFragmentIons.cpp | 1 - CycloBranch/core/cGlobalPreferences.cpp | 152 +- CycloBranch/core/cGlobalPreferences.h | 59 +- CycloBranch/core/cImzML.cpp | 8 +- CycloBranch/core/cMzML.cpp | 12 + CycloBranch/core/cParameters.cpp | 2297 +++++++------ CycloBranch/core/cParameters.h | 122 +- CycloBranch/core/cPeak.cpp | 136 + CycloBranch/core/cPeak.h | 8 + CycloBranch/core/cPeakListSeries.cpp | 16 +- CycloBranch/core/cPeakListSeries.h | 10 +- CycloBranch/core/cPeaksList.cpp | 87 +- CycloBranch/core/cPeaksList.h | 39 +- CycloBranch/core/cSequence.cpp | 52 +- CycloBranch/core/cSequence.h | 29 +- CycloBranch/core/cSequenceDatabase.cpp | 83 +- CycloBranch/core/cSequenceDatabase.h | 23 +- CycloBranch/core/cSummaryFormula.cpp | 51 +- CycloBranch/core/cSummaryFormula.h | 13 +- CycloBranch/core/cTheoreticalSpectrum.cpp | 496 ++- CycloBranch/core/cTheoreticalSpectrum.h | 53 +- CycloBranch/core/cTheoreticalSpectrumList.cpp | 116 +- CycloBranch/core/cTheoreticalSpectrumList.h | 69 +- CycloBranch/core/utilities.cpp | 184 +- CycloBranch/core/utilities.h | 75 +- CycloBranch/docs/cyclobranch_2_bib.txt | 10 + CycloBranch/docs/cyclobranch_2_ris.txt | 14 + CycloBranch/gui/cAboutWidget.cpp | 26 +- CycloBranch/gui/cAboutWidget.h | 1 + CycloBranch/gui/cBricksDatabaseWidget.cpp | 33 + CycloBranch/gui/cCalibrationChart.cpp | 581 ++++ CycloBranch/gui/cCalibrationChart.h | 212 ++ .../gui/cCalibrationChartProxyModel.cpp | 35 + CycloBranch/gui/cCalibrationChartProxyModel.h | 47 + CycloBranch/gui/cCalibrationChartScene.cpp | 958 ++++++ CycloBranch/gui/cCalibrationChartScene.h | 303 ++ CycloBranch/gui/cChromatogramWindow.cpp | 56 +- CycloBranch/gui/cChromatogramWindow.h | 40 +- CycloBranch/gui/cChromatogramWindowWidget.cpp | 1230 ++++++- CycloBranch/gui/cChromatogramWindowWidget.h | 177 +- CycloBranch/gui/cDefineCalibrationWidget.cpp | 631 ++++ CycloBranch/gui/cDefineCalibrationWidget.h | 199 ++ CycloBranch/gui/cFormulaPredictor.cpp | 720 ++++ CycloBranch/gui/cFormulaPredictor.h | 192 ++ CycloBranch/gui/cImageWindow.cpp | 2360 ++++++++++++-- CycloBranch/gui/cImageWindow.h | 211 +- CycloBranch/gui/cImageWindowImportDialog.cpp | 122 + CycloBranch/gui/cImageWindowImportDialog.h | 98 + CycloBranch/gui/cImageWindowTabElectron.cpp | 75 + CycloBranch/gui/cImageWindowTabElectron.h | 84 + CycloBranch/gui/cImageWindowTabOptical.cpp | 856 +++++ CycloBranch/gui/cImageWindowTabOptical.h | 425 +++ CycloBranch/gui/cImageWindowWidget.cpp | 329 +- CycloBranch/gui/cImageWindowWidget.h | 109 +- CycloBranch/gui/cMainThread.cpp | 1324 ++++++-- CycloBranch/gui/cMainThread.h | 39 +- CycloBranch/gui/cMainWindow.cpp | 1025 +++++- CycloBranch/gui/cMainWindow.h | 81 +- CycloBranch/gui/cModificationsWidget.cpp | 33 + .../gui/cMultipleDatasetsTableProxyModel.cpp | 35 + .../gui/cMultipleDatasetsTableProxyModel.h | 47 + .../gui/cMultipleDatasetsTableWidget.cpp | 2891 +++++++++++++++++ .../gui/cMultipleDatasetsTableWidget.h | 332 ++ CycloBranch/gui/cNeutralLossesListWidget.cpp | 54 +- CycloBranch/gui/cNeutralLossesListWidget.h | 7 +- CycloBranch/gui/cParametersWidget.cpp | 1092 ++++++- CycloBranch/gui/cParametersWidget.h | 26 + .../gui/cPatternSimulatorSceneWidget.cpp | 917 ++++++ .../gui/cPatternSimulatorSceneWidget.h | 268 ++ CycloBranch/gui/cPatternSimulatorWidget.cpp | 782 +++++ CycloBranch/gui/cPatternSimulatorWidget.h | 228 ++ CycloBranch/gui/cPreferencesDialog.cpp | 6 +- .../gui/cPreferencesTabDataProcessing.cpp | 48 +- .../gui/cPreferencesTabDataProcessing.h | 9 +- CycloBranch/gui/cPreferencesTabURLs.cpp | 217 +- CycloBranch/gui/cPreferencesTabURLs.h | 38 + CycloBranch/gui/cPubChemSearchWidget.cpp | 82 + CycloBranch/gui/cPubChemSearchWidget.h | 369 +++ CycloBranch/gui/cSequenceDatabaseWidget.cpp | 115 +- CycloBranch/gui/cSequenceDatabaseWidget.h | 3 + CycloBranch/gui/cSpectrumDetailWidget.cpp | 234 +- CycloBranch/gui/cSpectrumDetailWidget.h | 122 +- CycloBranch/gui/cSpectrumSceneWidget.cpp | 13 +- CycloBranch/gui/cSpectrumSceneWidget.h | 5 +- CycloBranch/gui/cSummaryPeaksTableWidget.cpp | 985 +++++- CycloBranch/gui/cSummaryPeaksTableWidget.h | 67 +- CycloBranch/images.qrc | 13 +- CycloBranch/images/formula.cdr | Bin 0 -> 1487604 bytes CycloBranch/images/icons/25.png | Bin 1088 -> 0 bytes CycloBranch/images/icons/5.png | Bin 1507 -> 0 bytes CycloBranch/images/icons/clear.png | Bin 0 -> 1227 bytes CycloBranch/images/icons/db_delete.png | Bin 0 -> 1079 bytes CycloBranch/images/icons/db_export.png | Bin 0 -> 1019 bytes CycloBranch/images/icons/features.png | Bin 0 -> 238 bytes CycloBranch/images/icons/formula.png | Bin 0 -> 3494 bytes .../icons/{image.png => image_edit.png} | Bin CycloBranch/images/icons/image_open.png | Bin 0 -> 815 bytes CycloBranch/images/icons/import.png | Bin 0 -> 476 bytes CycloBranch/images/icons/pattern.png | Bin 0 -> 224 bytes CycloBranch/images/icons/search.png | Bin 0 -> 894 bytes CycloBranch/images/splash.cdr | Bin 1885452 -> 1852320 bytes CycloBranch/images/splash.png | Bin 51817 -> 46344 bytes CycloBranch/main.cpp | 6 +- .../parallel/cFormulaPredictorThread.cpp | 353 ++ .../parallel/cFormulaPredictorThread.h | 120 + .../parallel/cSpectrumAnalyzerThreadMS1.cpp | 72 + .../parallel/cSpectrumAnalyzerThreadMS1.h | 63 + .../parallel/cSpectrumComparatorThreadMS1.cpp | 71 + .../parallel/cSpectrumComparatorThreadMS1.h | 68 + ...d.cpp => cSpectrumComparatorThreadMS2.cpp} | 6 +- ...hread.h => cSpectrumComparatorThreadMS2.h} | 12 +- .../parallel/cSpectrumGeneratorThreadMS1.cpp | 36 + .../parallel/cSpectrumGeneratorThreadMS1.h | 63 + CycloBranch/readme-macosx-compile.txt | 1 + 119 files changed, 25353 insertions(+), 2540 deletions(-) create mode 100644 CycloBranch/docs/cyclobranch_2_bib.txt create mode 100644 CycloBranch/docs/cyclobranch_2_ris.txt create mode 100644 CycloBranch/gui/cCalibrationChart.cpp create mode 100644 CycloBranch/gui/cCalibrationChart.h create mode 100644 CycloBranch/gui/cCalibrationChartProxyModel.cpp create mode 100644 CycloBranch/gui/cCalibrationChartProxyModel.h create mode 100644 CycloBranch/gui/cCalibrationChartScene.cpp create mode 100644 CycloBranch/gui/cCalibrationChartScene.h create mode 100644 CycloBranch/gui/cDefineCalibrationWidget.cpp create mode 100644 CycloBranch/gui/cDefineCalibrationWidget.h create mode 100644 CycloBranch/gui/cFormulaPredictor.cpp create mode 100644 CycloBranch/gui/cFormulaPredictor.h create mode 100644 CycloBranch/gui/cImageWindowImportDialog.cpp create mode 100644 CycloBranch/gui/cImageWindowImportDialog.h create mode 100644 CycloBranch/gui/cImageWindowTabElectron.cpp create mode 100644 CycloBranch/gui/cImageWindowTabElectron.h create mode 100644 CycloBranch/gui/cImageWindowTabOptical.cpp create mode 100644 CycloBranch/gui/cImageWindowTabOptical.h create mode 100644 CycloBranch/gui/cMultipleDatasetsTableProxyModel.cpp create mode 100644 CycloBranch/gui/cMultipleDatasetsTableProxyModel.h create mode 100644 CycloBranch/gui/cMultipleDatasetsTableWidget.cpp create mode 100644 CycloBranch/gui/cMultipleDatasetsTableWidget.h create mode 100644 CycloBranch/gui/cPatternSimulatorSceneWidget.cpp create mode 100644 CycloBranch/gui/cPatternSimulatorSceneWidget.h create mode 100644 CycloBranch/gui/cPatternSimulatorWidget.cpp create mode 100644 CycloBranch/gui/cPatternSimulatorWidget.h create mode 100644 CycloBranch/gui/cPubChemSearchWidget.cpp create mode 100644 CycloBranch/gui/cPubChemSearchWidget.h create mode 100644 CycloBranch/images/formula.cdr delete mode 100644 CycloBranch/images/icons/25.png delete mode 100644 CycloBranch/images/icons/5.png create mode 100644 CycloBranch/images/icons/clear.png create mode 100644 CycloBranch/images/icons/db_delete.png create mode 100644 CycloBranch/images/icons/db_export.png create mode 100644 CycloBranch/images/icons/features.png create mode 100644 CycloBranch/images/icons/formula.png rename CycloBranch/images/icons/{image.png => image_edit.png} (100%) create mode 100644 CycloBranch/images/icons/image_open.png create mode 100644 CycloBranch/images/icons/import.png create mode 100644 CycloBranch/images/icons/pattern.png create mode 100644 CycloBranch/images/icons/search.png create mode 100644 CycloBranch/parallel/cFormulaPredictorThread.cpp create mode 100644 CycloBranch/parallel/cFormulaPredictorThread.h create mode 100644 CycloBranch/parallel/cSpectrumAnalyzerThreadMS1.cpp create mode 100644 CycloBranch/parallel/cSpectrumAnalyzerThreadMS1.h create mode 100644 CycloBranch/parallel/cSpectrumComparatorThreadMS1.cpp create mode 100644 CycloBranch/parallel/cSpectrumComparatorThreadMS1.h rename CycloBranch/parallel/{cSpectrumComparatorThread.cpp => cSpectrumComparatorThreadMS2.cpp} (92%) rename CycloBranch/parallel/{cSpectrumComparatorThread.h => cSpectrumComparatorThreadMS2.h} (91%) create mode 100644 CycloBranch/parallel/cSpectrumGeneratorThreadMS1.cpp create mode 100644 CycloBranch/parallel/cSpectrumGeneratorThreadMS1.h diff --git a/CycloBranch/CycloBranch-Linux.pro b/CycloBranch/CycloBranch-Linux.pro index ec8cf46..2b6dbe8 100644 --- a/CycloBranch/CycloBranch-Linux.pro +++ b/CycloBranch/CycloBranch-Linux.pro @@ -4,9 +4,9 @@ TEMPLATE = app TARGET = CycloBranch -QT += core gui widgets printsupport svg +QT += core gui widgets printsupport svg network concurrent INCLUDEPATH += . core gui parallel -QMAKE_CXXFLAGS += -std=c++11 -DLINUX -m64 +QMAKE_CXXFLAGS += -std=c++17 -DLINUX -m64 QMAKE_LIBS += -lboost_regex -lboost_iostreams -lxerces-c OBJECTS_DIR = build/ MOC_DIR = moc/ @@ -39,20 +39,28 @@ HEADERS += core/cBrick.h \ gui/cBranchedWidget.h \ gui/cBricksDatabaseProxyModel.h \ gui/cBricksDatabaseWidget.h \ + gui/cCalibrationChart.h \ + gui/cCalibrationChartProxyModel.h \ + gui/cCalibrationChartScene.h \ gui/cCheckBoxDelegate.h \ gui/cChromatogramWindow.h \ gui/cChromatogramWindowWidget.h \ gui/cComboBoxDelegate.h \ gui/cCyclicWidget.h \ + gui/cDefineCalibrationWidget.h \ gui/cDrawPeptideWidget.h \ gui/cEventFilter.h \ gui/cExportDialog.h \ gui/cFindDialog.h \ + gui/cFormulaPredictor.h \ gui/cFragmentIonsListWidget.h \ gui/cGraphWidget.h \ gui/cHTMLDelegate.h \ gui/cHTMLExportDialog.h \ gui/cImageWindow.h \ + gui/cImageWindowImportDialog.h \ + gui/cImageWindowTabElectron.h \ + gui/cImageWindowTabOptical.h \ gui/cImageWindowWidget.h \ gui/cLinearWidget.h \ gui/cMainThread.h \ @@ -61,14 +69,19 @@ HEADERS += core/cBrick.h \ gui/cModificationsProxyModel.h \ gui/cModificationsWidget.h \ gui/cMultipleButtonDelegate.h \ + gui/cMultipleDatasetsTableProxyModel.h \ + gui/cMultipleDatasetsTableWidget.h \ gui/cNeutralLossesListWidget.h \ gui/cParametersWidget.h \ + gui/cPatternSimulatorSceneWidget.h \ + gui/cPatternSimulatorWidget.h \ gui/cPreferencesDialog.h \ gui/cPreferencesIonTypeDialog.h \ gui/cPreferencesTabDataProcessing.h \ gui/cPreferencesTabDirectories.h \ gui/cPreferencesTabIonTypes.h \ gui/cPreferencesTabURLs.h \ + gui/cPubChemSearchWidget.h \ gui/cSequenceDatabaseProxyModel.h \ gui/cSequenceDatabaseWidget.h \ gui/cSpectrumDetailProxyModel.h \ @@ -77,8 +90,12 @@ HEADERS += core/cBrick.h \ gui/cSummaryPeaksTableProxyModel.h \ gui/cSummaryPeaksTableWidget.h \ gui/cViewButtonDelegate.h \ + parallel/cFormulaPredictorThread.h \ parallel/cGraphReaderThread.h \ - parallel/cSpectrumComparatorThread.h + parallel/cSpectrumAnalyzerThreadMS1.h \ + parallel/cSpectrumComparatorThreadMS1.h \ + parallel/cSpectrumComparatorThreadMS2.h \ + parallel/cSpectrumGeneratorThreadMS1.h SOURCES += core/cBrick.cpp \ core/cBricksDatabase.cpp \ core/cCandidate.cpp \ @@ -105,20 +122,28 @@ SOURCES += core/cBrick.cpp \ gui/cBranchedWidget.cpp \ gui/cBricksDatabaseProxyModel.cpp \ gui/cBricksDatabaseWidget.cpp \ + gui/cCalibrationChart.cpp \ + gui/cCalibrationChartProxyModel.cpp \ + gui/cCalibrationChartScene.cpp \ gui/cCheckBoxDelegate.cpp \ gui/cChromatogramWindow.cpp \ gui/cChromatogramWindowWidget.cpp \ gui/cComboBoxDelegate.cpp \ gui/cCyclicWidget.cpp \ + gui/cDefineCalibrationWidget.cpp \ gui/cDrawPeptideWidget.cpp \ gui/cEventFilter.cpp \ gui/cExportDialog.cpp \ gui/cFindDialog.cpp \ + gui/cFormulaPredictor.cpp \ gui/cFragmentIonsListWidget.cpp \ gui/cGraphWidget.cpp \ gui/cHTMLDelegate.cpp \ gui/cHTMLExportDialog.cpp \ gui/cImageWindow.cpp \ + gui/cImageWindowImportDialog.cpp \ + gui/cImageWindowTabElectron.cpp \ + gui/cImageWindowTabOptical.cpp \ gui/cImageWindowWidget.cpp \ gui/cLinearWidget.cpp \ gui/cMainThread.cpp \ @@ -127,14 +152,19 @@ SOURCES += core/cBrick.cpp \ gui/cModificationsProxyModel.cpp \ gui/cModificationsWidget.cpp \ gui/cMultipleButtonDelegate.cpp \ + gui/cMultipleDatasetsTableProxyModel.cpp \ + gui/cMultipleDatasetsTableWidget.cpp \ gui/cNeutralLossesListWidget.cpp \ gui/cParametersWidget.cpp \ + gui/cPatternSimulatorSceneWidget.cpp \ + gui/cPatternSimulatorWidget.cpp \ gui/cPreferencesDialog.cpp \ gui/cPreferencesIonTypeDialog.cpp \ gui/cPreferencesTabDataProcessing.cpp \ gui/cPreferencesTabDirectories.cpp \ gui/cPreferencesTabIonTypes.cpp \ gui/cPreferencesTabURLs.cpp \ + gui/cPubChemSearchWidget.cpp \ gui/cSequenceDatabaseProxyModel.cpp \ gui/cSequenceDatabaseWidget.cpp \ gui/cSpectrumDetailProxyModel.cpp \ @@ -143,6 +173,10 @@ SOURCES += core/cBrick.cpp \ gui/cSummaryPeaksTableProxyModel.cpp \ gui/cSummaryPeaksTableWidget.cpp \ gui/cViewButtonDelegate.cpp \ + parallel/cFormulaPredictorThread.cpp \ parallel/cGraphReaderThread.cpp \ - parallel/cSpectrumComparatorThread.cpp \ + parallel/cSpectrumAnalyzerThreadMS1.cpp \ + parallel/cSpectrumComparatorThreadMS1.cpp \ + parallel/cSpectrumComparatorThreadMS2.cpp \ + parallel/cSpectrumGeneratorThreadMS1.cpp \ main.cpp diff --git a/CycloBranch/CycloBranch-MacOSX.pro b/CycloBranch/CycloBranch-MacOSX.pro index 879d9d2..ffac9d5 100644 --- a/CycloBranch/CycloBranch-MacOSX.pro +++ b/CycloBranch/CycloBranch-MacOSX.pro @@ -4,7 +4,7 @@ TEMPLATE = app TARGET = CycloBranch -QT += core gui widgets printsupport svg +QT += core gui widgets printsupport svg network concurrent INCLUDEPATH += . core gui parallel /usr/local/opt/boost/include /usr/local/opt/xerces-c/include QMAKE_CXXFLAGS += -std=c++11 -DMACOSX -m64 QMAKE_LIBS += -lboost_regex -lboost_iostreams -lxerces-c @@ -41,20 +41,28 @@ HEADERS += core/cBrick.h \ gui/cBranchedWidget.h \ gui/cBricksDatabaseProxyModel.h \ gui/cBricksDatabaseWidget.h \ + gui/cCalibrationChart.h \ + gui/cCalibrationChartProxyModel.h \ + gui/cCalibrationChartScene.h \ gui/cCheckBoxDelegate.h \ gui/cChromatogramWindow.h \ gui/cChromatogramWindowWidget.h \ gui/cComboBoxDelegate.h \ gui/cCyclicWidget.h \ + gui/cDefineCalibrationWidget.h \ gui/cDrawPeptideWidget.h \ gui/cEventFilter.h \ gui/cExportDialog.h \ gui/cFindDialog.h \ + gui/cFormulaPredictor.h \ gui/cFragmentIonsListWidget.h \ gui/cGraphWidget.h \ gui/cHTMLDelegate.h \ gui/cHTMLExportDialog.h \ gui/cImageWindow.h \ + gui/cImageWindowImportDialog.h \ + gui/cImageWindowTabElectron.h \ + gui/cImageWindowTabOptical.h \ gui/cImageWindowWidget.h \ gui/cLinearWidget.h \ gui/cMainThread.h \ @@ -63,14 +71,19 @@ HEADERS += core/cBrick.h \ gui/cModificationsProxyModel.h \ gui/cModificationsWidget.h \ gui/cMultipleButtonDelegate.h \ + gui/cMultipleDatasetsTableProxyModel.h \ + gui/cMultipleDatasetsTableWidget.h \ gui/cNeutralLossesListWidget.h \ gui/cParametersWidget.h \ + gui/cPatternSimulatorSceneWidget.h \ + gui/cPatternSimulatorWidget.h \ gui/cPreferencesDialog.h \ gui/cPreferencesIonTypeDialog.h \ gui/cPreferencesTabDataProcessing.h \ gui/cPreferencesTabDirectories.h \ gui/cPreferencesTabIonTypes.h \ gui/cPreferencesTabURLs.h \ + gui/cPubChemSearchWidget.h \ gui/cSequenceDatabaseProxyModel.h \ gui/cSequenceDatabaseWidget.h \ gui/cSpectrumDetailProxyModel.h \ @@ -79,8 +92,12 @@ HEADERS += core/cBrick.h \ gui/cSummaryPeaksTableProxyModel.h \ gui/cSummaryPeaksTableWidget.h \ gui/cViewButtonDelegate.h \ + parallel/cFormulaPredictorThread.h \ parallel/cGraphReaderThread.h \ - parallel/cSpectrumComparatorThread.h + parallel/cSpectrumAnalyzerThreadMS1.h \ + parallel/cSpectrumComparatorThreadMS1.h \ + parallel/cSpectrumComparatorThreadMS2.h \ + parallel/cSpectrumGeneratorThreadMS1.h SOURCES += core/cBrick.cpp \ core/cBricksDatabase.cpp \ core/cCandidate.cpp \ @@ -107,20 +124,28 @@ SOURCES += core/cBrick.cpp \ gui/cBranchedWidget.cpp \ gui/cBricksDatabaseProxyModel.cpp \ gui/cBricksDatabaseWidget.cpp \ + gui/cCalibrationChart.cpp \ + gui/cCalibrationChartProxyModel.cpp \ + gui/cCalibrationChartScene.cpp \ gui/cCheckBoxDelegate.cpp \ gui/cChromatogramWindow.cpp \ gui/cChromatogramWindowWidget.cpp \ gui/cComboBoxDelegate.cpp \ gui/cCyclicWidget.cpp \ + gui/cDefineCalibrationWidget.cpp \ gui/cDrawPeptideWidget.cpp \ gui/cEventFilter.cpp \ gui/cExportDialog.cpp \ gui/cFindDialog.cpp \ + gui/cFormulaPredictor.cpp \ gui/cFragmentIonsListWidget.cpp \ gui/cGraphWidget.cpp \ gui/cHTMLDelegate.cpp \ gui/cHTMLExportDialog.cpp \ gui/cImageWindow.cpp \ + gui/cImageWindowImportDialog.cpp \ + gui/cImageWindowTabElectron.cpp \ + gui/cImageWindowTabOptical.cpp \ gui/cImageWindowWidget.cpp \ gui/cLinearWidget.cpp \ gui/cMainThread.cpp \ @@ -129,14 +154,19 @@ SOURCES += core/cBrick.cpp \ gui/cModificationsProxyModel.cpp \ gui/cModificationsWidget.cpp \ gui/cMultipleButtonDelegate.cpp \ + gui/cMultipleDatasetsTableProxyModel.cpp \ + gui/cMultipleDatasetsTableWidget.cpp \ gui/cNeutralLossesListWidget.cpp \ gui/cParametersWidget.cpp \ + gui/cPatternSimulatorSceneWidget.cpp \ + gui/cPatternSimulatorWidget.cpp \ gui/cPreferencesDialog.cpp \ gui/cPreferencesIonTypeDialog.cpp \ gui/cPreferencesTabDataProcessing.cpp \ gui/cPreferencesTabDirectories.cpp \ gui/cPreferencesTabIonTypes.cpp \ gui/cPreferencesTabURLs.cpp \ + gui/cPubChemSearchWidget.cpp \ gui/cSequenceDatabaseProxyModel.cpp \ gui/cSequenceDatabaseWidget.cpp \ gui/cSpectrumDetailProxyModel.cpp \ @@ -145,6 +175,10 @@ SOURCES += core/cBrick.cpp \ gui/cSummaryPeaksTableProxyModel.cpp \ gui/cSummaryPeaksTableWidget.cpp \ gui/cViewButtonDelegate.cpp\ + parallel/cFormulaPredictorThread.cpp \ parallel/cGraphReaderThread.cpp \ - parallel/cSpectrumComparatorThread.cpp \ + parallel/cSpectrumAnalyzerThreadMS1.cpp \ + parallel/cSpectrumComparatorThreadMS1.cpp \ + parallel/cSpectrumComparatorThreadMS2.cpp \ + parallel/cSpectrumGeneratorThreadMS1.cpp \ main.cpp diff --git a/CycloBranch/CycloBranch.vcxproj b/CycloBranch/CycloBranch.vcxproj index d1c499e..8879f53 100644 --- a/CycloBranch/CycloBranch.vcxproj +++ b/CycloBranch/CycloBranch.vcxproj @@ -75,8 +75,8 @@ - UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtPrintSupport;$(QTDIR)\include\QtSvg;%(AdditionalIncludeDirectories) + UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtPrintSupport;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) Disabled ProgramDatabase MultiThreadedDebugDLL @@ -87,13 +87,13 @@ $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;%(AdditionalLibraryDirectories) true - qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;Qt5PrintSupportd.lib;Qt5Svgd.lib;%(AdditionalDependencies) + qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;Qt5PrintSupportd.lib;Qt5Svgd.lib;Qt5Networkd.lib;%(AdditionalDependencies) - UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtPrintSupport;$(QTDIR)\include\QtSvg;%(AdditionalIncludeDirectories) + UNICODE;WIN32;WIN64;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtPrintSupport;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) Disabled ProgramDatabase MultiThreadedDebugDLL @@ -104,13 +104,13 @@ $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;%(AdditionalLibraryDirectories) true - qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;Qt5PrintSupportd.lib;Qt5Svgd.lib;%(AdditionalDependencies) + qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;Qt5PrintSupportd.lib;Qt5Svgd.lib;Qt5Networkd.lib;%(AdditionalDependencies) - UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;%(PreprocessorDefinitions) - .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtPrintSupport;$(QTDIR)\include\QtSvg;%(AdditionalIncludeDirectories) + UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;QT_NETWORK_LIB;%(PreprocessorDefinitions) + .\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtPrintSupport;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtNetwork;%(AdditionalIncludeDirectories) MultiThreadedDLL false @@ -120,13 +120,13 @@ $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;%(AdditionalLibraryDirectories) false - qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;Qt5PrintSupport.lib;Qt5Svg.lib;%(AdditionalDependencies) + qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;Qt5PrintSupport.lib;Qt5Svg.lib;Qt5Network.lib;%(AdditionalDependencies) - UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;%(PreprocessorDefinitions) - .;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtPrintSupport;C:\boost_1_71_0;C:\xerces-c-3.1.1\include;%(AdditionalIncludeDirectories) + UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;QT_PRINTSUPPORT_LIB;QT_SVG_LIB;QT_NETWORK_LIB;QT_CONCURRENT_LIB;%(PreprocessorDefinitions) + .;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtPrintSupport;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtConcurrent;C:\boost_1_71_0;C:\xerces-c-3.1.1\include;%(AdditionalIncludeDirectories) ProgramDatabase MultiThreadedDLL true @@ -135,13 +135,14 @@ true true true + stdcpp17 Windows $(OutDir)\$(ProjectName).exe $(QTDIR)\lib;C:\boost_1_71_0\lib64-msvc-14.1;C:\xerces-c-3.1.1\lib;%(AdditionalLibraryDirectories) false - shell32.lib;qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;Qt5Svg.lib;Qt5PrintSupport.lib;xerces-c_3.lib + shell32.lib;qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;Qt5Svg.lib;Qt5PrintSupport.lib;Qt5Network.lib;Qt5Concurrent.lib;xerces-c_3.lib true true UseLinkTimeCodeGeneration @@ -189,6 +190,18 @@ true true + + true + true + + + true + true + + + true + true + true true @@ -209,6 +222,10 @@ true true + + true + true + true true @@ -225,6 +242,14 @@ true true + + true + true + + + true + true + true true @@ -249,6 +274,18 @@ true true + + true + true + + + true + true + + + true + true + true true @@ -281,6 +318,14 @@ true true + + true + true + + + true + true + true true @@ -289,6 +334,14 @@ true true + + true + true + + + true + true + true true @@ -313,6 +366,10 @@ true true + + true + true + true true @@ -321,7 +378,15 @@ true true - + + true + true + + + true + true + + true true @@ -333,6 +398,10 @@ true true + + true + true + true true @@ -379,6 +448,18 @@ true true + + true + true + + + true + true + + + true + true + true true @@ -399,6 +480,10 @@ true true + + true + true + true true @@ -415,6 +500,14 @@ true true + + true + true + + + true + true + true true @@ -439,6 +532,18 @@ true true + + true + true + + + true + true + + + true + true + true true @@ -471,6 +576,14 @@ true true + + true + true + + + true + true + true true @@ -479,6 +592,14 @@ true true + + true + true + + + true + true + true true @@ -503,6 +624,10 @@ true true + + true + true + true true @@ -511,7 +636,15 @@ true true - + + true + true + + + true + true + + true true @@ -523,6 +656,10 @@ true true + + true + true + true true @@ -544,20 +681,28 @@ + + + + + + + + @@ -566,14 +711,19 @@ + + + + + @@ -583,8 +733,12 @@ + - + + + + @@ -606,527 +760,851 @@ + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cNeutralLossesListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cNeutralLossesListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cNeutralLossesListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cNeutralLossesListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cChromatogramWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMultipleButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMultipleButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMultipleButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMultipleButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cViewButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cViewButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cViewButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cViewButtonDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cComboBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cComboBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cComboBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cComboBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCheckBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCheckBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCheckBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCheckBoxDelegate.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindowProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindowProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindowProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindowProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableProxyModel.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindowWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cImageWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSummaryPeaksTableWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cHTMLExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cExportDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFindDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFindDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFindDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFindDialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumSceneWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumSceneWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumSceneWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumSceneWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cEventFilter.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cEventFilter.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cEventFilter.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cEventFilter.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" @@ -1158,199 +1636,181 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cDrawPeptideWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cDrawPeptideWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cDrawPeptideWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cDrawPeptideWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cModificationsWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSequenceDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBricksDatabaseWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cLinearWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cLinearWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cLinearWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cLinearWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cCyclicWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchedWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchedWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchedWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cBranchedWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFragmentIonsListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFragmentIonsListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFragmentIonsListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cFragmentIonsListWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphReaderThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphReaderThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphReaderThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphReaderThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" - - - Moc%27ing cSpectrumComparatorThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" - Moc%27ing cSpectrumComparatorThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" - Moc%27ing cSpectrumComparatorThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" - Moc%27ing cSpectrumComparatorThread.h... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" - $(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath) - $(QTDIR)\bin\moc.exe;%(FullPath) + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cSpectrumDetailWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" @@ -1382,91 +1842,91 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainWindow.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cMainThread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cParametersWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cParametersWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cParametersWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cParametersWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cGraphWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cAboutWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cAboutWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cAboutWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -D%(PreprocessorDefinitions) "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtNetwork" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing cAboutWidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_SVG_LIB -DQT_NETWORK_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtConcurrent" "-IC:\boost_1_71_0" "-IC:\xerces-c-3.1.1\include" diff --git a/CycloBranch/CycloBranch.vcxproj.filters b/CycloBranch/CycloBranch.vcxproj.filters index 5acf206..d2bbf53 100644 --- a/CycloBranch/CycloBranch.vcxproj.filters +++ b/CycloBranch/CycloBranch.vcxproj.filters @@ -140,15 +140,6 @@ Source Files\core - - Source Files\parallel - - - Generated Files\Debug - - - Generated Files\Release - Generated Files\Debug @@ -521,6 +512,168 @@ Generated Files\Release + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Source Files\gui + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\parallel + + + Source Files\parallel + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\parallel + + + Source Files\parallel + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\parallel + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + + + Generated Files\Debug + + + Generated Files\Release + + + Source Files\gui + @@ -544,9 +697,6 @@ Header Files\gui - - Header Files\parallel - Header Files\parallel @@ -667,6 +817,60 @@ Header Files\gui + + Header Files\gui + + + Header Files\gui + + + Header Files\gui + + + Header Files\parallel + + + Header Files\parallel + + + Header Files\parallel + + + Header Files\parallel + + + Header Files\gui + + + Header Files\gui + + + Header Files\gui + + + Header Files\gui + + + Header Files\parallel + + + Header Files\gui + + + Header Files\gui + + + Header Files\gui + + + Header Files\gui + + + Header Files\gui + + + Header Files\gui + diff --git a/CycloBranch/core/cDeNovoGraph.cpp b/CycloBranch/core/cDeNovoGraph.cpp index 8d83a8c..1fbd6b8 100644 --- a/CycloBranch/core/cDeNovoGraph.cpp +++ b/CycloBranch/core/cDeNovoGraph.cpp @@ -146,7 +146,7 @@ int cDeNovoGraph::createGraph(bool& terminatecomputation) { double unchargedprecursormass = charge(uncharge(parameters->precursormass, parameters->precursorcharge), (parameters->precursorcharge > 0)?1:-1); double unchargedmz; - sortedpeaklist = parameters->peaklistseries[parameters->scannumber - 1]; + sortedpeaklist = parameters->peaklistseriesvector[0][parameters->scannumber - 1]; // insert the single charged precursor, if neccessary sortedpeaklist.sortbyMass(); sortedpeaklist.cropMaximumMZRatio(unchargedprecursormass, parameters->precursormasserrortolerance); diff --git a/CycloBranch/core/cFragmentIons.cpp b/CycloBranch/core/cFragmentIons.cpp index f5a8763..e23626a 100644 --- a/CycloBranch/core/cFragmentIons.cpp +++ b/CycloBranch/core/cFragmentIons.cpp @@ -1481,7 +1481,6 @@ cFragmentIonType &cFragmentIons::operator[](eFragmentIonType iontype) { void cFragmentIons::recalculateFragments(bool cyclicnterminus, bool cycliccterminus, string& precursoradduct) { - fragmentions.clear(); double nterminusshift = cyclicnterminus?-H2O:0; diff --git a/CycloBranch/core/cGlobalPreferences.cpp b/CycloBranch/core/cGlobalPreferences.cpp index 411acbe..4b02900 100644 --- a/CycloBranch/core/cGlobalPreferences.cpp +++ b/CycloBranch/core/cGlobalPreferences.cpp @@ -52,8 +52,12 @@ void cGlobalPreferences::loadSettings() { customions.push_back(ion); } - if (settings.contains("bafprocessingmethod")) { - bafprocessingmethod = settings.value("bafprocessingmethod").toInt(); + if (settings.contains("linebafprocessingmethod")) { + linebafprocessingmethod = settings.value("linebafprocessingmethod").toInt(); + } + + if (settings.contains("profilebafprocessingmethod")) { + profilebafprocessingmethod = settings.value("profilebafprocessingmethod").toInt(); } if (settings.contains("rawdataprocessingmethod")) { @@ -108,13 +112,87 @@ void cGlobalPreferences::loadSettings() { exportimagedefaultdir = settings.value("exportimagedefaultdir ").toString(); } + if (settings.contains("bookmarkname1")) { + bookmarkname1 = settings.value("bookmarkname1").toString(); + } + if (settings.contains("bookmarkurl1")) { bookmarkurl1 = settings.value("bookmarkurl1").toString(); } + if (settings.contains("bookmarkname2")) { + bookmarkname2 = settings.value("bookmarkname2").toString(); + } + if (settings.contains("bookmarkurl2")) { bookmarkurl2 = settings.value("bookmarkurl2").toString(); } + + if (settings.contains("bookmarkname3")) { + bookmarkname3 = settings.value("bookmarkname3").toString(); + } + + if (settings.contains("bookmarkurl3")) { + bookmarkurl3 = settings.value("bookmarkurl3").toString(); + } + + if (settings.contains("bookmarkname4")) { + bookmarkname4 = settings.value("bookmarkname4").toString(); + } + + if (settings.contains("bookmarkurl4")) { + bookmarkurl4 = settings.value("bookmarkurl4").toString(); + } + + if (settings.contains("bookmarkname5")) { + bookmarkname5 = settings.value("bookmarkname5").toString(); + } + + if (settings.contains("bookmarkurl5")) { + bookmarkurl5 = settings.value("bookmarkurl5").toString(); + } + + if (settings.contains("bookmarkname6")) { + bookmarkname6 = settings.value("bookmarkname6").toString(); + } + + if (settings.contains("bookmarkurl6")) { + bookmarkurl6 = settings.value("bookmarkurl6").toString(); + } + + if (settings.contains("bookmarkname7")) { + bookmarkname7 = settings.value("bookmarkname7").toString(); + } + + if (settings.contains("bookmarkurl7")) { + bookmarkurl7 = settings.value("bookmarkurl7").toString(); + } + + if (settings.contains("bookmarkname8")) { + bookmarkname8 = settings.value("bookmarkname8").toString(); + } + + if (settings.contains("bookmarkurl8")) { + bookmarkurl8 = settings.value("bookmarkurl8").toString(); + } + + if (settings.contains("bookmarkname9")) { + bookmarkname9 = settings.value("bookmarkname9").toString(); + } + + if (settings.contains("bookmarkurl9")) { + bookmarkurl9 = settings.value("bookmarkurl9").toString(); + } + + if (settings.contains("bookmarkname10")) { + bookmarkname10 = settings.value("bookmarkname10").toString(); + } + + if (settings.contains("bookmarkurl10")) { + bookmarkurl10 = settings.value("bookmarkurl10").toString(); + } + + viewbookmarks = settings.value("viewbookmarks", 0).toInt() == 0 ? false : true; } @@ -139,7 +217,9 @@ void cGlobalPreferences::saveSettings() { settings.setValue(customionvalue, customions[i].multiplier); } - settings.setValue("bafprocessingmethod", bafprocessingmethod); + settings.setValue("linebafprocessingmethod", linebafprocessingmethod); + settings.setValue("profilebafprocessingmethod", profilebafprocessingmethod); + settings.setValue("rawdataprocessingmethod", rawdataprocessingmethod); settings.setValue("settingsdefaultdir", settingsdefaultdir); @@ -155,8 +235,37 @@ void cGlobalPreferences::saveSettings() { settings.setValue("exporthtmldefaultdir", exporthtmldefaultdir); settings.setValue("exportimagedefaultdir", exportimagedefaultdir); + settings.setValue("bookmarkname1", bookmarkname1); settings.setValue("bookmarkurl1", bookmarkurl1); + + settings.setValue("bookmarkname2", bookmarkname2); settings.setValue("bookmarkurl2", bookmarkurl2); + + settings.setValue("bookmarkname3", bookmarkname3); + settings.setValue("bookmarkurl3", bookmarkurl3); + + settings.setValue("bookmarkname4", bookmarkname4); + settings.setValue("bookmarkurl4", bookmarkurl4); + + settings.setValue("bookmarkname5", bookmarkname5); + settings.setValue("bookmarkurl5", bookmarkurl5); + + settings.setValue("bookmarkname6", bookmarkname6); + settings.setValue("bookmarkurl6", bookmarkurl6); + + settings.setValue("bookmarkname7", bookmarkname7); + settings.setValue("bookmarkurl7", bookmarkurl7); + + settings.setValue("bookmarkname8", bookmarkname8); + settings.setValue("bookmarkurl8", bookmarkurl8); + + settings.setValue("bookmarkname9", bookmarkname9); + settings.setValue("bookmarkurl9", bookmarkurl9); + + settings.setValue("bookmarkname10", bookmarkname10); + settings.setValue("bookmarkurl10", bookmarkurl10); + + viewbookmarks ? settings.setValue("viewbookmarks", 1) : settings.setValue("viewbookmarks", 0); } @@ -859,7 +968,9 @@ void cGlobalPreferences::setDefaultIonTypes() { void cGlobalPreferences::setDefaultDataProcessingMethods() { - bafprocessingmethod = 0; + linebafprocessingmethod = 0; + profilebafprocessingmethod = 0; + rawdataprocessingmethod = 0; } @@ -896,7 +1007,36 @@ void cGlobalPreferences::setDefaultDirectories() { void cGlobalPreferences::setDefaultURLs() { - bookmarkurl1 = "https://bioinfo.lifl.fr/norine/"; - bookmarkurl2 = "https://ms.biomed.cas.cz/bbdgnc/"; + bookmarkname1 = appname; + bookmarkurl1 = "https://ms.biomed.cas.cz/cyclobranch/"; + + bookmarkname2 = "MassSpecBlocks"; + bookmarkurl2 = "https://ms.biomed.cas.cz/msb/"; + + bookmarkname3 = "PubChem"; + bookmarkurl3 = "https://pubchem.ncbi.nlm.nih.gov/"; + + bookmarkname4 = "ChemSpider"; + bookmarkurl4 = "https://www.chemspider.com/"; + + bookmarkname5 = "ChEBI"; + bookmarkurl5 = "https://www.ebi.ac.uk/chebi/"; + + bookmarkname6 = "Lipid Maps"; + bookmarkurl6 = "https://lipidmaps.org/"; + + bookmarkname7 = "Reaxys"; + bookmarkurl7 = "https://www.reaxys.com/"; + + bookmarkname8 = "Norine"; + bookmarkurl8 = "https://bioinfo.lifl.fr/norine/"; + + bookmarkname9 = ""; + bookmarkurl9 = ""; + + bookmarkname10 = ""; + bookmarkurl10 = ""; + + viewbookmarks = false; } diff --git a/CycloBranch/core/cGlobalPreferences.h b/CycloBranch/core/cGlobalPreferences.h index 90ccfb2..c9d0767 100644 --- a/CycloBranch/core/cGlobalPreferences.h +++ b/CycloBranch/core/cGlobalPreferences.h @@ -69,6 +69,32 @@ struct cIonType { multiplier = 1; } + + /** + \brief Store the structure into an output stream. + \param os an output stream + */ + void store(ofstream& os) { + storeString(name, os); + storeString(formula, os); + os.write((char *)&massdifference, sizeof(double)); + os.write((char *)&positive, sizeof(bool)); + os.write((char *)&multiplier, sizeof(int)); + } + + + /** + \brief Load the structure from an input stream. + \param is an input stream + */ + void load(ifstream& is) { + loadString(name, is); + loadString(formula, is); + is.read((char *)&massdifference, sizeof(double)); + is.read((char *)&positive, sizeof(bool)); + is.read((char *)&multiplier, sizeof(int)); + } + }; @@ -83,7 +109,9 @@ class cGlobalPreferences { vector customions; - int bafprocessingmethod; + int linebafprocessingmethod; + int profilebafprocessingmethod; + int rawdataprocessingmethod; QString settingsdefaultdir; @@ -99,9 +127,38 @@ class cGlobalPreferences { QString exporthtmldefaultdir; QString exportimagedefaultdir; + QString bookmarkname1; QString bookmarkurl1; + + QString bookmarkname2; QString bookmarkurl2; + QString bookmarkname3; + QString bookmarkurl3; + + QString bookmarkname4; + QString bookmarkurl4; + + QString bookmarkname5; + QString bookmarkurl5; + + QString bookmarkname6; + QString bookmarkurl6; + + QString bookmarkname7; + QString bookmarkurl7; + + QString bookmarkname8; + QString bookmarkurl8; + + QString bookmarkname9; + QString bookmarkurl9; + + QString bookmarkname10; + QString bookmarkurl10; + + bool viewbookmarks; + /** \brief The constructor. diff --git a/CycloBranch/core/cImzML.cpp b/CycloBranch/core/cImzML.cpp index e55049b..00bdfa4 100644 --- a/CycloBranch/core/cImzML.cpp +++ b/CycloBranch/core/cImzML.cpp @@ -336,22 +336,22 @@ int cImzML::parse(string& filename, int& defaultmaxx, int& defaultmaxy, int& def // max count of pixel x if (accession.compare("IMS:1000042") == 0) { - defaultmaxx = stoi(value); + defaultmaxx = QVariant(value.c_str()).toInt(); } // max count of pixel y if (accession.compare("IMS:1000043") == 0) { - defaultmaxy = stoi(value); + defaultmaxy = QVariant(value.c_str()).toInt(); } // pixel size x if (accession.compare("IMS:1000046") == 0) { - defaultpixelsizex = stoi(value); + defaultpixelsizex = QVariant(value.c_str()).toInt(); } // pixel size y if (accession.compare("IMS:1000047") == 0) { - defaultpixelsizey = stoi(value); + defaultpixelsizey = QVariant(value.c_str()).toInt(); } } diff --git a/CycloBranch/core/cMzML.cpp b/CycloBranch/core/cMzML.cpp index e4cb643..ac61271 100644 --- a/CycloBranch/core/cMzML.cpp +++ b/CycloBranch/core/cMzML.cpp @@ -221,6 +221,16 @@ int cMzML::parse(string& filename, vector& peaklists, int profilespe if (accession.compare("MS:1000016") == 0) { double rt = atof(getAttribute(currentElement6, "value").c_str()); peaklist.setRetentionTime(rt); + + string rtunit = getAttribute(currentElement6, "unitAccession"); + if (rtunit.compare("UO:0000010") == 0) { + // set second + peaklist.setRetentionTimeUnit(0); + } + else { + // set minute + peaklist.setRetentionTimeUnit(1); + } } @@ -461,6 +471,8 @@ int cMzML::parse(string& filename, vector& peaklists, int profilespe if ((profilespectrumid == -1) || (profilespectrumid == count)) { cPeaksList emptypeaklist; emptypeaklist.setTitle(title); + emptypeaklist.setRetentionTime(peaklist.getRetentionTime()); + emptypeaklist.setRetentionTimeUnit(peaklist.getRetentionTimeUnit()); peaklists.push_back(emptypeaklist); } diff --git a/CycloBranch/core/cParameters.cpp b/CycloBranch/core/cParameters.cpp index 8f38709..882888f 100644 --- a/CycloBranch/core/cParameters.cpp +++ b/CycloBranch/core/cParameters.cpp @@ -1,9 +1,365 @@ #include "core/cParameters.h" +#include +#include +#include + #include "gui/cMainThread.h" #include "core/cSummaryFormula.h" +bool checkSeniorRules(vector& combarray, vector& valences, int maxcomponents) { + int totalvalence = 0; + int i, size; + + i = 0; + size = (int)combarray.size(); + while ((i < size) && (combarray[i] > 0)) { + totalvalence += valences[combarray[i] - 1]; + i++; + } + + // SENIOR rule 1 - the sum of valences must be even + // SENIOR rule 3 - the sum of valences >= 2 * (atomscount - maximum number of allowed components in the graph); edges - nodes + components >= 0 + if ((totalvalence % 2 == 1) || (totalvalence < 2 * (i - maxcomponents))) { + return false; + } + + return true; +} + + +bool checkAdvancedFilteringRules(bool noratiocheck, double sumofmasses, vector& countsofelements, vector& namesofelements) { + int countH = 0; + int countC = 0; + int countO = 0; + int countN = 0; + int countS = 0; + int countP = 0; + int countF = 0; + int countCl = 0; + int countBr = 0; + int countSi = 0; + + double elementsratio; + + int size = (int)countsofelements.size(); + for (int j = 0; j < size; j++) { + if (countsofelements[j] > 0) { + if (namesofelements[j].compare("H") == 0) { + countH = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("C") == 0) { + countC = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("O") == 0) { + countO = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("N") == 0) { + countN = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("S") == 0) { + countS = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("P") == 0) { + countP = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("F") == 0) { + countF = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("Cl") == 0) { + countCl = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("Br") == 0) { + countBr = countsofelements[j]; + continue; + } + if (namesofelements[j].compare("Si") == 0) { + countSi = countsofelements[j]; + continue; + } + } + } + + if ((countH == 0) || (countC == 0)) { + return true; + } + + if (noratiocheck) { + if (countN > countO) { + return true; + } + } + + if (sumofmasses < 500.0) { + + if (countC > 39) { + return true; + } + if (countH > 72) { + return true; + } + if (countN > 20) { + return true; + } + if (countO > 20) { + return true; + } + if (countP > 9) { + return true; + } + if (countS > 10) { + return true; + } + if (countF > 16) { + return true; + } + if (countCl > 10) { + return true; + } + if (countBr > 5) { + return true; + } + if (countSi > 8) { + return true; + } + + } + else if (sumofmasses < 1000.0) { + + if (countC > 78) { + return true; + } + if (countH > 126) { + return true; + } + if (countN > 25) { + return true; + } + if (countO > 27) { + return true; + } + if (countP > 9) { + return true; + } + if (countS > 14) { + return true; + } + if (countF > 34) { + return true; + } + if (countCl > 12) { + return true; + } + if (countBr > 8) { + return true; + } + if (countSi > 14) { + return true; + } + + } + else if (sumofmasses < 2000.0) { + + if (countC > 156) { + return true; + } + if (countH > 236) { + return true; + } + if (countN > 32) { + return true; + } + if (countO > 63) { + return true; + } + if (countP > 9) { + return true; + } + if (countS > 14) { + return true; + } + if (countF > 48) { + return true; + } + if (countCl > 12) { + return true; + } + if (countBr > 10) { + return true; + } + if (countSi > 15) { + return true; + } + + } + else if (sumofmasses < 3000.0) { + + if (countC > 162) { + return true; + } + if (countH > 208) { + return true; + } + if (countN > 48) { + return true; + } + if (countO > 78) { + return true; + } + if (countP > 9) { + return true; + } + if (countS > 14) { + return true; + } + if (countF > 48) { + return true; + } + if (countCl > 12) { + return true; + } + if (countBr > 10) { + return true; + } + if (countSi > 15) { + return true; + } + + } + + if ((countH > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countH)) / ((double)(countC)); + if ((elementsratio < 0.2) || (elementsratio > 3.1)) { + return true; + } + } + + if ((countN > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countN)) / ((double)(countC)); + if (elementsratio > 1.3) { + return true; + } + } + + if ((countO > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countO)) / ((double)(countC)); + if (elementsratio > 1.2) { + return true; + } + } + + if ((countP > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countP)) / ((double)(countC)); + if (elementsratio > 0.3) { + return true; + } + } + + if ((countS > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countS)) / ((double)(countC)); + if (elementsratio > 0.8) { + return true; + } + } + + if ((countF > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countF)) / ((double)(countC)); + if (elementsratio > 1.5) { + return true; + } + } + + if ((countCl > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countCl)) / ((double)(countC)); + if (elementsratio > 0.8) { + return true; + } + } + + if ((countBr > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countBr)) / ((double)(countC)); + if (elementsratio > 0.8) { + return true; + } + } + + if ((countSi > 0) && (countC >= 0)) { + if (countC == 0) { + return true; + } + elementsratio = ((double)(countSi)) / ((double)(countC)); + if (elementsratio > 0.5) { + return true; + } + } + + if ((countN > 1) && (countO > 1) && (countP > 1) && (countS > 1)) { + if ((countN >= 10) || (countO >= 20) || (countP >= 4) || (countS >= 3)) { + return true; + } + } + + if ((countN > 3) && (countO > 3) && (countP > 3)) { + if ((countN >= 11) || (countO >= 22) || (countP >= 6)) { + return true; + } + } + + if ((countO > 1) && (countP > 1) && (countS > 1)) { + if ((countO >= 14) || (countP >= 3) || (countS >= 3)) { + return true; + } + } + + if ((countP > 1) && (countS > 1) && (countN > 1)) { + if ((countP >= 3) || (countS >= 3) || (countN >= 4)) { + return true; + } + } + + if ((countN > 6) && (countO > 6) && (countS > 6)) { + if ((countN >= 19) || (countO >= 14) || (countS >= 8)) { + return true; + } + } + + return false; +} + + void cParameters::fixIntensities(cPeaksList& centroidspectrum, cPeaksList& profilespectrum) { if ((centroidspectrum.size() == 0) || (profilespectrum.size() == 0)) { return; @@ -28,24 +384,24 @@ void cParameters::fixIntensities(cPeaksList& centroidspectrum, cPeaksList& profi } -bool cParameters::checkSeniorRules(vector& combarray, vector& valences, int maxcomponents) { - int totalvalence = 0; - int i, size; - - i = 0; - size = (int)combarray.size(); - while ((i < size) && (combarray[i] > 0)) { - totalvalence += valences[combarray[i] - 1]; - i++; +void cParameters::pushLossItem(vector& lossitems, string lossstr) { + string shortstr; + size_t pos = lossstr.find(':'); + if (pos == string::npos) { + shortstr = lossstr; } - - // SENIOR rule 1 - the sum of valences must be even - // SENIOR rule 3 - the sum of valences >= 2 * (atomscount - maximum number of allowed components in the graph); edges - nodes + components >= 0 - if ((totalvalence % 2 == 1) || (totalvalence < 2 * (i - maxcomponents))) { - return false; + else { + shortstr = lossstr.substr(0, pos); } - return true; + cSummaryFormula tmpformula; + neutralLoss lossitem; + + lossitem.summary = lossstr; + addStringFormulaToMap(shortstr, lossitem.summarymap); + tmpformula.setFormula(shortstr); + lossitem.massdifference = tmpformula.getMass(); + lossitems.push_back(lossitem); } @@ -87,12 +443,14 @@ void cParameters::clear() { os = 0; iondefinitions.recalculateFragments(false, false, s); peptidetype = linear; - peaklistfilename = ""; + peaklistfilenames.clear(); + originalpeaklistfilenames.clear(); useprofiledata = false; convertprofiledata = true; profiledatafilename = ""; - peaklistfileformat = txt; - peaklistseries.clear(); + linebafprocessing = 0; + peaklistfileformats.clear(); + peaklistseriesvector.clear(); scannumber = 1; precursormass = 0; precursoradduct = ""; @@ -104,7 +462,11 @@ void cParameters::clear() { minimumabsoluteintensitythreshold = 0; minimummz = 150; maximummz = 0; + minimumrt = 0; + maximumrt = 0; fwhm = 0.05; + minratio54Fe56Fe = 0.01; + maxratio54Fe56Fe = 0.1; bricksdatabasefilename = ""; bricksdatabase.clear(); maximumbricksincombinationbegin = 1; @@ -118,10 +480,14 @@ void cParameters::clear() { mode = dereplication; scoretype = number_of_matched_peaks; maximumcombinedlosses = 2; + maximumcombinedelements = 200; //clearhitswithoutparent = false; basicformulacheck = true; advancedformulacheck = true; noratiocheck = true; + calculatefdrs = true; + minimumannotationintensityrelative = 0; + minimumannotationintensityabsolute = 0; mzdifftolerance = 0; intensitytolerance = 0; reportunmatchedtheoreticalpeaks = false; @@ -152,16 +518,12 @@ void cParameters::clear() { ionsfortheoreticalspectraMS1.clear(); ionsfortheoreticalspectraMS2.clear(); - neutrallossesdefinitions.clear(); - neutralLoss loss; cSummaryFormula tmpformula; + neutralLoss lossitem; + + neutrallossesdefinitions.clear(); for (int i = 0; i < (int)defaultneutrallosses.getNeutralLosses().size(); i++) { - loss.clear(); - loss.summary = defaultneutrallosses.getNeutralLosses()[i]; - addStringFormulaToMap(loss.summary, loss.summarymap); - tmpformula.setFormula(loss.summary); - loss.massdifference = tmpformula.getMass(); - neutrallossesdefinitions.push_back(loss); + pushLossItem(neutrallossesdefinitions, defaultneutrallosses.getNeutralLosses()[i]); } neutrallossesfortheoreticalspectra.clear(); numberofgeneratedneutrallosses = 0; @@ -169,8 +531,24 @@ void cParameters::clear() { originalneutrallossesdefinitions = neutrallossesdefinitions; originalneutrallossesfortheoreticalspectra = neutrallossesfortheoreticalspectra; + originalelementsdefinitions.clear(); + originalelementsfortheoreticalspectra.clear(); + + pushLossItem(originalelementsdefinitions, "H"); + pushLossItem(originalelementsdefinitions, "C"); + pushLossItem(originalelementsdefinitions, "O"); + pushLossItem(originalelementsdefinitions, "N"); + pushLossItem(originalelementsdefinitions, "S:1"); + pushLossItem(originalelementsdefinitions, "P:1"); + + originalelementsfortheoreticalspectra.push_back(0); + originalelementsfortheoreticalspectra.push_back(1); + originalelementsfortheoreticalspectra.push_back(2); + originalelementsfortheoreticalspectra.push_back(3); + peakidtodesc.clear(); isotopeformulaidtodesc.clear(); + pchemresults.clear(); defaultmaxx = 1; defaultmaxy = 1; @@ -196,6 +574,7 @@ int cParameters::checkAndPrepare(bool& terminatecomputation) { string foldername; string ibdfilename; string mzmlname; + string linespectramgfname; cPeaksList profilelist; ifstream profilestream; @@ -206,600 +585,768 @@ int cParameters::checkAndPrepare(bool& terminatecomputation) { QTime time; bool good; - if (peaklistfilename.empty()) { + if (peaklistfilenames.empty()) { error = true; - errormessage = "A peaklist is not specified. Have you configured the engine (Search -> Settings...) ?\n"; + errormessage = "A peaklist must be selected. Have you configured the engine (Search -> Settings...) ?\n"; } + peaklistseriesvector.clear(); + peaklistseriesvector.resize(peaklistfilenames.size()); + peaklistfileformats.resize(peaklistfilenames.size()); + // peaklist check if (!error) { - peaklistfileformat = txt; - - try { + for (int h = 0; h < (int)peaklistfilenames.size(); h++) { - rx = "\\.[mM][gG][fF]$"; - // Mascot Generic Format - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = mgf; + if (terminatecomputation) { + error = true; + errormessage = "Aborted by user.\n"; + break; } + + peaklistfileformats[h] = txt; - rx = "\\.[mM][zZ][mM][lL]$"; - // mzML - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = mzML; - } + try { + + rx = "\\.[mM][gG][fF]$"; + // Mascot Generic Format + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = mgf; + } - rx = "\\.[mM][zZ][xX][mM][lL]$"; - // mzXML - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = mzXML; - } + rx = "\\.[mM][zZ][mM][lL]$"; + // mzML + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = mzML; + } - #if OS_TYPE == WIN - rx = "\\.[bB][aA][fF]$"; - // Bruker Analysis File - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = baf; + rx = "\\.[mM][zZ][xX][mM][lL]$"; + // mzXML + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = mzXML; } + + #if OS_TYPE == WIN + rx = "\\.[bB][aA][fF]$"; + // Bruker Analysis File + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = baf; + } - rx = "\\.[rR][aA][wW]$"; - // Thermo RAW file - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = raw; - } + rx = "\\.[rR][aA][wW]$"; + // Thermo RAW file + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = raw; + } - rx = "\\.[dD][aA][tT]$"; - // dat file in Waters raw directory - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = dat; - } + rx = "\\.[dD][aA][tT]$"; + // dat file in Waters raw directory + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = dat; + } - rx = "\\.[mM][iI][sS]$"; - // flexImaging File - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = mis; - } + rx = "\\.[mM][iI][sS]$"; + // flexImaging File + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = mis; + } + + rx = "ser$"; + // apex File + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = ser; + } + #endif - rx = "ser$"; - // apex File - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = ser; + rx = "\\.[iI][mM][zZ][mM][lL]$"; + // imzML File + if (regex_search(peaklistfilenames[h], rx)) { + peaklistfileformats[h] = imzML; } - #endif - rx = "\\.[iI][mM][zZ][mM][lL]$"; - // imzML File - if (regex_search(peaklistfilename, rx)) { - peaklistfileformat = imzML; + } + catch (regex_error& e) { + error = true; + errormessage = "cParameters::checkAndPrepare: regex_search failed, error no. " + to_string((int)e.code()) + "\n"; } - } - catch (regex_error& e) { - error = true; - errormessage = "cParameters::checkAndPrepare: regex_search failed, error no. " + to_string((int)e.code()) + "\n"; - } + if (!error) { - if (!error) { + QDir peaksdir; - switch (peaklistfileformat) { - case txt: - peakliststream.open(peaklistfilename); - break; - case mgf: - peakliststream.open(peaklistfilename); - break; - case mzXML: - *os << "Converting the file " + peaklistfilename + " to mzML ... "; + switch (peaklistfileformats[h]) { + case txt: + peakliststream.open(peaklistfilenames[h]); + break; + case mgf: + peakliststream.open(peaklistfilenames[h]); + break; + case mzXML: + *os << "Converting the file " + peaklistfilenames[h] + " to mzML ... "; - #if OS_TYPE == UNX - s = installdir.toStdString() + "External/linux/any2mzml.sh " + peaklistfilename; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The file cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have FileConverter installed (OpenMS 2.x must be installed) ?\n"; - errormessage += "Do you have 'any2mzml.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; - errormessage += "Is the file 'any2mzml.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/any2mzml.sh) ? \n"; - } - #else - #if OS_TYPE == OSX - s = installdir.toStdString() + "External/macosx/any2mzml.sh " + peaklistfilename; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The file cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have FileConverter installed (OpenMS 2.x must be installed) ?\n"; - errormessage += "Do you have 'any2mzml.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; - errormessage += "Is the file 'any2mzml.sh' executable ? \n"; - } - #else - s = "External\\windows\\any2mzml.bat \"" + peaklistfilename + "\""; + #if OS_TYPE == UNX + s = installdir.toStdString() + "External/linux/any2mzml.sh " + peaklistfilenames[h]; if (system(s.c_str()) != 0) { error = true; errormessage = "The file cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; errormessage += "Do you have FileConverter installed (OpenMS 2.x must be installed) ?\n"; - errormessage += "Do you have a path to FileConverter in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; - errormessage += "Do you have 'any2mzml.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + errormessage += "Do you have 'any2mzml.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; + errormessage += "Is the file 'any2mzml.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/any2mzml.sh) ? \n"; } + #else + #if OS_TYPE == OSX + s = installdir.toStdString() + "External/macosx/any2mzml.sh " + peaklistfilenames[h]; + if (system(s.c_str()) != 0) { + error = true; + errormessage = "The file cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have FileConverter installed (OpenMS 2.x must be installed) ?\n"; + errormessage += "Do you have 'any2mzml.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; + errormessage += "Is the file 'any2mzml.sh' executable ? \n"; + } + #else + s = "External\\windows\\any2mzml.bat \"" + peaklistfilenames[h] + "\""; + if (system(s.c_str()) != 0) { + error = true; + errormessage = "The file cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have FileConverter installed (OpenMS 2.x must be installed) ?\n"; + errormessage += "Do you have a path to FileConverter in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; + errormessage += "Do you have 'any2mzml.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + } + #endif #endif - #endif - - if (!error) { - *os << "ok" << endl << endl; - mzmlname = peaklistfilename + ".mzML"; - peakliststream.open(mzmlname); - } - break; - case baf: - #if OS_TYPE == WIN - time.start(); - - *os << "Processing the file " + peaklistfilename + ":" << endl; - - /* - s = "External\\windows\\baf2csv.bat \"" + peaklistfilename + "\""; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The file cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; - errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have 'baf2csv.bat' file located in the 'External/windows' folder ?\n"; - } if (!error) { - *os << "ok" << endl; - peakliststream.open(peaklistfilename + ".csv"); + *os << "ok" << endl << endl; + mzmlname = peaklistfilenames[h] + ".mzML"; + peakliststream.open(mzmlname); } - */ + break; + case baf: + #if OS_TYPE == WIN + time.start(); - mzmlname = peaklistfilename + ".mzML"; - peakliststream.open(mzmlname); - good = peakliststream.good(); - peakliststream.close(); + *os << "Processing the file " + peaklistfilenames[h] + ":" << endl; - if (good) { - *os << "The previously converted centroid spectra were found." << endl; - *os << "The following file was used: " << mzmlname << endl; - } - else { - *os << "centroid spectra ... "; - - s = "External\\windows\\baf2mzml.bat \"" + peaklistfilename + "\""; + /* + s = "External\\windows\\baf2csv.bat \"" + peaklistfilenames[h] + "\""; if (system(s.c_str()) != 0) { error = true; errormessage = "The file cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have 'baf2mzml.bat' file located in the 'External/windows' folder ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have 'baf2csv.bat' file located in the 'External/windows' folder ?\n"; } + if (!error) { *os << "ok" << endl; + peakliststream.open(peaklistfilenames[h] + ".csv"); } - } - - if (!error) { - peakliststream.open(mzmlname); - } - - if (!error && useprofiledata && convertprofiledata) { - *os << "profile spectra ... "; - s = "External\\windows\\baf2profile.bat \"" + peaklistfilename + "\""; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The file cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; - errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have 'baf2profile.bat' file located in the 'External/windows' folder ?\n"; + */ + + if (linebafprocessing == 0) { + mzmlname = peaklistfilenames[h] + ".mzML"; + peakliststream.open(mzmlname); + good = peakliststream.good(); + peakliststream.close(); + + if (good) { + *os << "The previously converted centroid spectra were found." << endl; + *os << "The following file was used: " << mzmlname << endl; + } + else { + *os << "centroid spectra ... "; + + //s = "External\\windows\\baf2mzml.bat \"" + peaklistfilenames[h] + "\""; + //if (system(s.c_str()) != 0) { + // error = true; + // errormessage = "The file cannot be converted.\n"; + // errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + // errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; + // errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; + // errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + // errormessage += "Do you have 'baf2mzml.bat' file located in the 'External/windows' folder ?\n"; + //} + + QString command = "External\\windows\\baf2mzml.bat"; + QString param = peaklistfilenames[h].c_str(); + + QStringList params; + params << param; + + QProcess convert; + convert.start(command, params); + + if (!convert.waitForStarted(-1)) { + error = true; + } + + if (!error) { + convert.closeWriteChannel(); + if (!convert.waitForFinished(-1)) { + error = true; + } + } + + if (!error) { + *os << "ok" << endl; + } + else { + errormessage = "The file cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; + errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have 'baf2mzml.bat' file located in the 'External/windows' folder ?\n"; + } + } + + if (!error) { + peakliststream.open(mzmlname); + } + } + else { + linespectramgfname = peaklistfilenames[h] + ".mgf"; + + peakliststream.open(linespectramgfname, ifstream::binary); + good = peakliststream.good(); + + string endstr; + if (good) { + peakliststream.seekg(0, ios::end); + unsigned long long spos = (unsigned long long)peakliststream.tellg(); + if (spos > 12) { + spos -= 12; + peakliststream.seekg(spos, ios::beg); + } + + char c; + while (peakliststream.good()) { + peakliststream.get(c); + endstr += c; + } + } + + peakliststream.close(); + peakliststream.clear(); + + if (endstr.find("END IONS") != string::npos) { + *os << "The previously converted centroid spectra were found." << endl; + *os << "The following file was used: " << linespectramgfname << endl; + } + else { + *os << "centroid spectra ... "; + + if (!QFile(peaklistfilenames[h].c_str()).exists()) { + error = true; + errormessage = "The file '" + peaklistfilenames[h] + "' does not exist.\n"; + } + else { + //s = "External\\windows\\linespectrumreader.exe \"" + peaklistfilenames[h] + "\""; + //if (system(s.c_str()) != 0) { + // error = true; + // errormessage = "The file cannot be converted.\n"; + // errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + // errormessage += "Do you have Bruker Daltonik's CompassXtract installed ?\n"; + // //errormessage += "Do you have path to the CompassXtract.exe in your PATH variable ?\n"; + // errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + // errormessage += "Do you have 'linespectrumreader.exe' file located in the 'External/windows' folder ?\n"; + //} + + QString command = "External\\windows\\linespectrumreader.exe"; + QString param = peaklistfilenames[h].c_str(); + + QStringList params; + params << param; + + QProcess convert; + convert.start(command, params); + + if (!convert.waitForStarted(-1)) { + error = true; + } + + if (!error) { + convert.closeWriteChannel(); + if (!convert.waitForFinished(-1)) { + error = true; + } + } + + if (error) { + errormessage = "The file cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Do you have Bruker Daltonik's CompassXtract installed ?\n"; + //errormessage += "Do you have path to the CompassXtract.exe in your PATH variable ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have 'linespectrumreader.exe' file located in the 'External/windows' folder ?\n"; + } + } + + if (!error) { + *os << "ok" << endl; + } + } + + if (!error) { + peakliststream.open(linespectramgfname); + } } - if (!error) { - *os << "ok" << endl; + if (!error && useprofiledata && convertprofiledata) { + *os << "profile spectra ... "; + + s = "External\\windows\\baf2profile.bat \"" + peaklistfilenames[h] + "\""; + if (system(s.c_str()) != 0) { + error = true; + errormessage = "The file cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; + errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have 'baf2profile.bat' file located in the 'External/windows' folder ?\n"; + } + + if (!error) { + *os << "ok" << endl; + } } - } - *os << endl; + *os << endl; - secs = time.elapsed() / 1000; - mins = (secs / 60) % 60; - hrs = (secs / 3600); - secs = secs % 60; + secs = time.elapsed() / 1000; + mins = (secs / 60) % 60; + hrs = (secs / 3600); + secs = secs % 60; - *os << "The data conversion took: " << to_string(hrs) << " hrs, " << to_string(mins) << " min, " << to_string(secs) << " sec." << endl << endl; - #endif - break; - case raw: - #if OS_TYPE == WIN - *os << "Converting the file " + peaklistfilename + " ... "; - - s = "External\\windows\\raw2mzmlpeaks.bat \"" + peaklistfilename + "\""; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The file cannot be converted.\n"; - errormessage += "Is the file '" + peaklistfilename + "' opened elsewhere ?\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have msconvert.exe installed (OpenMS 2.x including ProteoWizard must be installed) ?\n"; - errormessage += "Do you have a path to msconvert.exe in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/share/OpenMS/THIRDPARTY/pwiz-bin') ?\n"; - errormessage += "Do you have 'raw2mzmlpeaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; - } + *os << "The data conversion took: " << to_string(hrs) << " hrs, " << to_string(mins) << " min, " << to_string(secs) << " sec." << endl << endl; + #endif + break; + case raw: + #if OS_TYPE == WIN + *os << "Converting the file " + peaklistfilenames[h] + " ... "; - if (!error && useprofiledata) { - s = "External\\windows\\raw2mzml.bat \"" + peaklistfilename + "\""; + s = "External\\windows\\raw2mzmlpeaks.bat \"" + peaklistfilenames[h] + "\""; if (system(s.c_str()) != 0) { error = true; errormessage = "The file cannot be converted.\n"; - errormessage += "Is the file '" + peaklistfilename + "' opened elsewhere ?\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; + errormessage += "Is the file '" + peaklistfilenames[h] + "' opened elsewhere ?\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; errormessage += "Do you have msconvert.exe installed (OpenMS 2.x including ProteoWizard must be installed) ?\n"; errormessage += "Do you have a path to msconvert.exe in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/share/OpenMS/THIRDPARTY/pwiz-bin') ?\n"; - errormessage += "Do you have 'raw2mzml.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + errormessage += "Do you have 'raw2mzmlpeaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; } - } - if (!error) { - *os << "ok" << endl << endl; - mzmlname = peaklistfilename.substr(0, peaklistfilename.rfind('.')) + "_converted.mzML"; - peakliststream.open(mzmlname); - } - #endif - break; - case dat: - #if OS_TYPE == WIN - foldername = peaklistfilename.substr(0, peaklistfilename.rfind('/')); - peaksfoldername = foldername.substr(0, foldername.size() - 4) + "_PEAKS.raw"; - - *os << "Generating centroid data folder from " + foldername + " ... "; - s = "External\\windows\\waters\\profile2peaks.exe \"" + foldername + "\""; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The raw data folder cannot be converted.\n"; - errormessage += "Does the folder '" + foldername + "' exist ?\n"; - errormessage += "Is the folder with the folder '" + foldername + "' writable ?\n"; - errormessage += "Do you have 'profile2peaks.exe' file located in the 'External/windows/waters' folder ?\n"; - } - else { - *os << "ok" << endl << endl; - *os << "Centroid data folder " + peaksfoldername + " successfully created." << endl << endl; - } + if (!error && useprofiledata) { + s = "External\\windows\\raw2mzml.bat \"" + peaklistfilenames[h] + "\""; + if (system(s.c_str()) != 0) { + error = true; + errormessage = "The file cannot be converted.\n"; + errormessage += "Is the file '" + peaklistfilenames[h] + "' opened elsewhere ?\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have msconvert.exe installed (OpenMS 2.x including ProteoWizard must be installed) ?\n"; + errormessage += "Do you have a path to msconvert.exe in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/share/OpenMS/THIRDPARTY/pwiz-bin') ?\n"; + errormessage += "Do you have 'raw2mzml.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + } + } - if (!error) { - *os << "Converting profile data " + foldername + " ... "; - s = "External\\windows\\waters\\raw2mgf.exe \"" + foldername + "\""; + if (!error) { + *os << "ok" << endl << endl; + mzmlname = peaklistfilenames[h].substr(0, peaklistfilenames[h].rfind('.')) + "_converted.mzML"; + peakliststream.open(mzmlname); + } + #endif + break; + case dat: + #if OS_TYPE == WIN + foldername = peaklistfilenames[h].substr(0, peaklistfilenames[h].rfind('/')); + peaksfoldername = foldername.substr(0, foldername.size() - 4) + "_PEAKS.raw"; + + peaksdir.setPath(peaksfoldername.c_str()); + if (!peaksdir.exists()) { + *os << "Generating centroid data folder from " + foldername + " ... "; + s = "External\\windows\\waters\\profile2peaks.exe \"" + foldername + "\""; + if (system(s.c_str()) != 0) { + error = true; + errormessage = "The raw data folder cannot be converted.\n"; + errormessage += "Does the folder '" + foldername + "' exist ?\n"; + errormessage += "Is the folder with the folder '" + foldername + "' writable ?\n"; + errormessage += "Do you have 'profile2peaks.exe' file located in the 'External/windows/waters' folder ?\n"; + } + else { + *os << "ok" << endl << endl; + *os << "Centroid data folder " + peaksfoldername + " successfully created." << endl << endl; + } + } + else { + *os << "Previously generated centroid data folder " + peaksfoldername + " has been found." << endl << endl; + } + + if (!error) { + string tmpfilename = foldername.substr(0, foldername.rfind('.')) + ".mgf"; + if (!QFile(tmpfilename.c_str()).exists()) { + *os << "Converting profile data " + foldername + " ... "; + s = "External\\windows\\waters\\raw2mgf.exe \"" + foldername + "\""; + if (system(s.c_str()) != 0) { + error = true; + errormessage = "The raw data folder cannot be converted.\n"; + errormessage += "Does the folder '" + foldername + "' exist ?\n"; + errormessage += "Is the folder with the folder '" + foldername + "' writable ?\n"; + errormessage += "Do you have 'raw2mgf.exe' file located in the 'External/windows/waters' folder ?\n"; + } + else { + *os << "ok" << endl << endl; + } + } + else { + *os << "Previously converted profile data file " + tmpfilename + " has been found." << endl << endl; + } + } + + if (!error) { + string mgfname = peaksfoldername.substr(0, peaksfoldername.rfind('.')) + ".mgf"; + if (!QFile(mgfname.c_str()).exists()) { + *os << "Converting centroid data " + peaksfoldername + " ... "; + s = "External\\windows\\waters\\raw2mgf.exe \"" + peaksfoldername + "\""; + if (system(s.c_str()) != 0) { + error = true; + errormessage = "The raw data folder cannot be converted.\n"; + errormessage += "Does the folder '" + peaksfoldername + "' exist ?\n"; + errormessage += "Is the folder with the folder '" + peaksfoldername + "' writable ?\n"; + errormessage += "Do you have 'raw2mgf.exe' file located in the 'External/windows/waters' folder ?\n"; + } + else { + *os << "ok" << endl << endl; + } + } + else { + *os << "Previously converted centroid data file " + mgfname + " has been found." << endl << endl; + } + } + + if (!error) { + string mgfname = peaksfoldername.substr(0, peaksfoldername.rfind('.')) + ".mgf"; + peakliststream.open(mgfname); + } + #endif + break; + case mis: + #if OS_TYPE == WIN + foldername = peaklistfilenames[h].substr(0, peaklistfilenames[h].rfind('.')); + *os << "Converting flexImaging data folder " + foldername + " ... "; + s = "External\\windows\\mis2csv.bat \"" + foldername + "\""; if (system(s.c_str()) != 0) { error = true; - errormessage = "The raw data folder cannot be converted.\n"; + errormessage = "The folder cannot be converted.\n"; errormessage += "Does the folder '" + foldername + "' exist ?\n"; - errormessage += "Is the folder with the folder '" + foldername + "' writable ?\n"; - errormessage += "Do you have 'raw2mgf.exe' file located in the 'External/windows/waters' folder ?\n"; + errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; + errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have 'mis2csv.bat' file located in the 'External/windows' folder ?\n"; } - else { + + if (!error) { *os << "ok" << endl << endl; + peakliststream.open(foldername + ".baf.csv"); + spotliststream.open(foldername + ".baf.txt"); } - } - - if (!error) { - *os << "Converting centroid data " + peaksfoldername + " ... "; - s = "External\\windows\\waters\\raw2mgf.exe \"" + peaksfoldername + "\""; + #endif + break; + case ser: + #if OS_TYPE == WIN + foldername = peaklistfilenames[h].substr(0, peaklistfilenames[h].length() - 4); + *os << "Converting apex data folder " + foldername + " ... "; + s = "External\\windows\\ser2csv.bat \"" + foldername + "\""; if (system(s.c_str()) != 0) { error = true; - errormessage = "The raw data folder cannot be converted.\n"; - errormessage += "Does the folder '" + peaksfoldername + "' exist ?\n"; - errormessage += "Is the folder with the folder '" + peaksfoldername + "' writable ?\n"; - errormessage += "Do you have 'raw2mgf.exe' file located in the 'External/windows/waters' folder ?\n"; + errormessage = "The folder cannot be converted.\n"; + errormessage += "Does the folder '" + foldername + "' exist ?\n"; + errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; + errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have 'ser2csv.bat' file located in the 'External/windows' folder ?\n"; } - else { + + if (!error) { *os << "ok" << endl << endl; + peakliststream.open(foldername + ".csv"); + titleliststream.open(foldername + ".txt"); } - } - - if (!error) { - string mgfname = peaksfoldername.substr(0, peaksfoldername.rfind('.')) + ".mgf"; - peakliststream.open(mgfname); - } - #endif - break; - case mis: - #if OS_TYPE == WIN - foldername = peaklistfilename.substr(0, peaklistfilename.rfind('.')); - *os << "Converting flexImaging data folder " + foldername + " ... "; - s = "External\\windows\\mis2csv.bat \"" + foldername + "\""; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The folder cannot be converted.\n"; - errormessage += "Does the folder '" + foldername + "' exist ?\n"; - errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; - errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have 'mis2csv.bat' file located in the 'External/windows' folder ?\n"; - } - - if (!error) { - *os << "ok" << endl << endl; - peakliststream.open(foldername + ".baf.csv"); - spotliststream.open(foldername + ".baf.txt"); - } - #endif - break; - case ser: - #if OS_TYPE == WIN - foldername = peaklistfilename.substr(0, peaklistfilename.length() - 4); - *os << "Converting apex data folder " + foldername + " ... "; - s = "External\\windows\\ser2csv.bat \"" + foldername + "\""; - if (system(s.c_str()) != 0) { - error = true; - errormessage = "The folder cannot be converted.\n"; - errormessage += "Does the folder '" + foldername + "' exist ?\n"; - errormessage += "Do you have Bruker Daltonik's CompassXport installed ?\n"; - errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have 'ser2csv.bat' file located in the 'External/windows' folder ?\n"; - } + #endif + break; + case mzML: + peakliststream.open(peaklistfilenames[h]); + break; + case imzML: + ibdfilename = peaklistfilenames[h].substr(0, (int)peaklistfilenames[h].size() - 5); + ibdfilename += "ibd"; + peakliststream.open(ibdfilename, std::ifstream::binary); + break; + default: + break; + } - if (!error) { - *os << "ok" << endl << endl; - peakliststream.open(foldername + ".csv"); - titleliststream.open(foldername + ".txt"); - } - #endif - break; - case mzML: - peakliststream.open(peaklistfilename); - break; - case imzML: - ibdfilename = peaklistfilename.substr(0, (int)peaklistfilename.size() - 5); - ibdfilename += "ibd"; - peakliststream.open(ibdfilename, std::ifstream::binary); - break; - default: - break; } - - } - if (!error) { - if (!peakliststream.good()) { - error = true; - if ((peaklistfileformat == mis) || (peaklistfileformat == ser) || (peaklistfileformat == dat)) { - errormessage = "Cannot open the folder '" + foldername + "'."; - } - else { - errormessage = "Cannot open the file '" + peaklistfilename + "'."; - if (peaklistfileformat == baf) { - errormessage += "\n\nDo you have Bruker Daltonik's CompassXport installed ?\n"; - errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; + if (!error) { + if (!peakliststream.good()) { + error = true; + if ((peaklistfileformats[h] == mis) || (peaklistfileformats[h] == ser) || (peaklistfileformats[h] == dat)) { + errormessage = "Cannot open the folder '" + foldername + "'."; + } + else { + errormessage = "Cannot open the file '" + peaklistfilenames[h] + "'."; + if (peaklistfileformats[h] == baf) { + if (linebafprocessing == 0) { + errormessage += "\n\nDo you have Bruker Daltonik's CompassXport installed ?\n"; + errormessage += "Do you have path to the CompassXport.exe in your PATH variable ?\n"; + } + else { + errormessage += "\n\nDoes the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Do you have Bruker Daltonik's CompassXtract installed ?\n"; + //errormessage += "Do you have path to the CompassXtract.exe in your PATH variable ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have 'linespectrumreader.exe' file located in the 'External/windows' folder ?\n"; + } + } } } - } - else { - if (os && (peaklistfileformat != mzML) && (peaklistfileformat != mzXML) && (peaklistfileformat != imzML) && (peaklistfileformat != baf) && (peaklistfileformat != raw) && (peaklistfileformat != ser)) { - *os << "Loading the peaklist(s)... "; - } - switch (peaklistfileformat) { - case txt: - peaklistseries.loadFromPlainTextStream(peakliststream); - break; - case mzXML: - errtype = peaklistseries.loadFromMZMLStream(mzmlname, peakliststream, fwhm, mode, os, terminatecomputation); - if (errtype == -1) { - error = true; - errormessage = "Aborted by user.\n"; + else { + if (os && (peaklistfileformats[h] != mzML) && (peaklistfileformats[h] != mzXML) && (peaklistfileformats[h] != imzML) && (peaklistfileformats[h] != baf) && (peaklistfileformats[h] != raw) && (peaklistfileformats[h] != ser)) { + *os << "Loading the peaklist(s)... "; } - if (errtype == -2) { - error = true; - #if OS_TYPE == UNX - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + mzmlname + "' exist ?\n"; - errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; - errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/raw2peaks.sh) ? \n"; - #else - #if OS_TYPE == OSX - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + mzmlname + "' exist ?\n"; - errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; - errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/macosx/raw2peaks.sh) ? \n"; - #else - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + mzmlname + "' exist ?\n"; - errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; - errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + switch (peaklistfileformats[h]) { + case txt: + peaklistseriesvector[h].loadFromPlainTextStream(peakliststream); + break; + case mzXML: + errtype = peaklistseriesvector[h].loadFromMZMLStream(mzmlname, peakliststream, fwhm, mode, os, terminatecomputation); + if (errtype == -1) { + error = true; + errormessage = "Aborted by user.\n"; + } + if (errtype == -2) { + error = true; + #if OS_TYPE == UNX + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + mzmlname + "' exist ?\n"; + errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; + errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/raw2peaks.sh) ? \n"; + #else + #if OS_TYPE == OSX + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + mzmlname + "' exist ?\n"; + errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; + errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/macosx/raw2peaks.sh) ? \n"; + #else + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + mzmlname + "' exist ?\n"; + errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; + errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + #endif + #endif + } + break; + case mgf: + peaklistseriesvector[h].loadFromMGFStream(peakliststream, 0); + break; + case baf: + /* + #if OS_TYPE == WIN + peaklistseries.loadFromBAFStream(peakliststream); #endif - #endif - } - break; - case mgf: - peaklistseries.loadFromMGFStream(peakliststream); - break; - case baf: - /* - #if OS_TYPE == WIN - peaklistseries.loadFromBAFStream(peakliststream); - #endif - */ - #if OS_TYPE == WIN - errtype = peaklistseries.loadFromMZMLStream(mzmlname, peakliststream, fwhm, mode, os, terminatecomputation); - if (errtype == -1) { - error = true; - errormessage = "Aborted by user.\n"; - } - #endif - break; - case raw: - #if OS_TYPE == WIN - errtype = peaklistseries.loadFromMZMLStream(mzmlname, peakliststream, fwhm, mode, os, terminatecomputation); - if (errtype == -1) { - error = true; - errormessage = "Aborted by user.\n"; - } - if (errtype == -2) { - error = true; - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + mzmlname + "' exist ?\n"; - errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; - errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; - } - #endif - break; - case dat: - #if OS_TYPE == WIN - peaklistseries.loadFromMGFStream(peakliststream); + */ + #if OS_TYPE == WIN + if (linebafprocessing == 0) { + errtype = peaklistseriesvector[h].loadFromMZMLStream(mzmlname, peakliststream, fwhm, mode, os, terminatecomputation); + if (errtype == -1) { + error = true; + errormessage = "Aborted by user.\n"; + } + } + else { + peaklistseriesvector[h].loadFromMGFStream(peakliststream, 1); + } + #endif + break; + case raw: + #if OS_TYPE == WIN + errtype = peaklistseriesvector[h].loadFromMZMLStream(mzmlname, peakliststream, fwhm, mode, os, terminatecomputation); + if (errtype == -1) { + error = true; + errormessage = "Aborted by user.\n"; + } + if (errtype == -2) { + error = true; + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + mzmlname + "' exist ?\n"; + errormessage += "Is the directory with the file '" + mzmlname + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; + errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + } + #endif + break; + case dat: + #if OS_TYPE == WIN + peaklistseriesvector[h].loadFromMGFStream(peakliststream, 1); - profilemgfname = foldername.substr(0, foldername.rfind('.')) + ".mgf"; - profilestream.open(profilemgfname); + profilemgfname = foldername.substr(0, foldername.rfind('.')) + ".mgf"; + profilestream.open(profilemgfname); - for (int i = 0; i < peaklistseries.size(); i++) { - profilelist.clear(); - profilelist.loadFromMGFStream(profilestream); + for (int i = 0; i < peaklistseriesvector[h].size(); i++) { + profilelist.clear(); + profilelist.loadFromMGFStream(profilestream, 1); - if (peaklistseries[i].getTitle().compare(profilelist.getTitle()) != 0) { - error = true; - errormessage = "The number of spectra in " + foldername + " and " + peaksfoldername + " is different.\n"; - break; - } + if (peaklistseriesvector[h][i].getTitle().compare(profilelist.getTitle()) != 0) { + error = true; + errormessage = "The number of spectra in " + foldername + " and " + peaksfoldername + " is different.\n"; + break; + } - fixIntensities(peaklistseries[i], profilelist); - } + fixIntensities(peaklistseriesvector[h][i], profilelist); + } - profilestream.close(); - #endif - break; - case mis: - #if OS_TYPE == WIN - peaklistseries.loadFromBAFStream(peakliststream); - peaklistseries.loadSpotList(spotliststream); - spotliststream.close(); - #endif - break; - case ser: - #if OS_TYPE == WIN - errtype = peaklistseries.loadFromProfileApexStream(peaklistfilename, peakliststream, titleliststream, fwhm, os, terminatecomputation); - titleliststream.close(); - if (errtype == -1) { - error = true; - errormessage = "Aborted by user.\n"; - } - if (errtype == -2) { - error = true; - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the folder '" + peaklistfilename.substr(0, peaklistfilename.length() - 4) + "' exist ?\n"; - errormessage += "Is the directory '" + peaklistfilename.substr(0, peaklistfilename.length() - 4) + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; - errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; - } - #endif - break; - case mzML: - errtype = peaklistseries.loadFromMZMLStream(peaklistfilename, peakliststream, fwhm, mode, os, terminatecomputation); - if (errtype == -1) { - error = true; - errormessage = "Aborted by user.\n"; - } - if (errtype == -2) { - error = true; - #if OS_TYPE == UNX - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; - errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/raw2peaks.sh) ? \n"; - #else - #if OS_TYPE == OSX - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; - errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/macosx/raw2peaks.sh) ? \n"; - #else - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; - errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + profilestream.close(); #endif - #endif - } - break; - case imzML: - errtype = peaklistseries.loadFromIMZMLStream(peaklistfilename, peakliststream, fwhm, defaultmaxx, defaultmaxy, defaultpixelsizex, defaultpixelsizey, vendor, os, terminatecomputation); - if (errtype == -1) { - error = true; - errormessage = "Aborted by user.\n"; - } - if (errtype == -2) { - error = true; - #if OS_TYPE == UNX - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; - errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/raw2peaks.sh) ? \n"; - #else - #if OS_TYPE == OSX - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; - errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/macosx/raw2peaks.sh) ? \n"; - #else - errormessage = "Raw data cannot be converted.\n"; - errormessage += "Does the file '" + peaklistfilename + "' exist ?\n"; - errormessage += "Is the directory with the file '" + peaklistfilename + "' writable ?\n"; - errormessage += "Do you have enough space on your hard drive ?\n"; - errormessage += "Do you have OpenMS 2.x installed ?\n"; - errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; - errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + break; + case mis: + #if OS_TYPE == WIN + peaklistseriesvector[h].loadFromBAFStream(peakliststream); + peaklistseriesvector[h].loadSpotList(spotliststream); + spotliststream.close(); #endif - #endif + break; + case ser: + #if OS_TYPE == WIN + errtype = peaklistseriesvector[h].loadFromProfileApexStream(peaklistfilenames[h], peakliststream, titleliststream, fwhm, os, terminatecomputation); + titleliststream.close(); + if (errtype == -1) { + error = true; + errormessage = "Aborted by user.\n"; + } + if (errtype == -2) { + error = true; + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the folder '" + peaklistfilenames[h].substr(0, peaklistfilenames[h].length() - 4) + "' exist ?\n"; + errormessage += "Is the directory '" + peaklistfilenames[h].substr(0, peaklistfilenames[h].length() - 4) + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; + errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + } + #endif + break; + case mzML: + errtype = peaklistseriesvector[h].loadFromMZMLStream(peaklistfilenames[h], peakliststream, fwhm, mode, os, terminatecomputation); + if (errtype == -1) { + error = true; + errormessage = "Aborted by user.\n"; + } + if (errtype == -2) { + error = true; + #if OS_TYPE == UNX + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; + errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/raw2peaks.sh) ? \n"; + #else + #if OS_TYPE == OSX + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; + errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/macosx/raw2peaks.sh) ? \n"; + #else + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; + errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + #endif + #endif + } + break; + case imzML: + errtype = peaklistseriesvector[h].loadFromIMZMLStream(peaklistfilenames[h], peakliststream, fwhm, defaultmaxx, defaultmaxy, defaultpixelsizex, defaultpixelsizey, vendor, os, terminatecomputation); + if (errtype == -1) { + error = true; + errormessage = "Aborted by user.\n"; + } + if (errtype == -2) { + error = true; + #if OS_TYPE == UNX + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/linux' folder ?\n"; + errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/linux/raw2peaks.sh) ? \n"; + #else + #if OS_TYPE == OSX + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have 'raw2peaks.sh' file located in '" + installdir.toStdString() + "External/macosx' folder ?\n"; + errormessage += "Is the file 'raw2peaks.sh' executable (sudo chmod +x " + installdir.toStdString() + "External/macosx/raw2peaks.sh) ? \n"; + #else + errormessage = "Raw data cannot be converted.\n"; + errormessage += "Does the file '" + peaklistfilenames[h] + "' exist ?\n"; + errormessage += "Is the directory with the file '" + peaklistfilenames[h] + "' writable ?\n"; + errormessage += "Do you have enough space on your hard drive ?\n"; + errormessage += "Do you have OpenMS 2.x installed ?\n"; + errormessage += "Do you have a path to OpenMS binaries folder in your PATH variable (e.g., 'C:/Program Files/OpenMS-2.3.0/bin') ?\n"; + errormessage += "Do you have 'raw2peaks.bat' file located in the '" + appname.toStdString() + "/External/windows' folder ?\n"; + #endif + #endif + } + if (errtype == -3) { + error = true; + errormessage = "Failed to load the imzML file, zlib compression is not supported. The spectra must be stored in the imzML file with the attribute \"no compression\".\n"; + } + break; + default: + break; } - if (errtype == -3) { - error = true; - errormessage = "Failed to load the imzML file, zlib compression is not supported. The spectra must be stored in the imzML file with the attribute \"no compression\".\n"; + if (os && (peaklistfileformats[h] != mzML) && (peaklistfileformats[h] != mzXML) && (peaklistfileformats[h] != imzML) && (peaklistfileformats[h] != baf) && (peaklistfileformats[h] != raw) && (peaklistfileformats[h] != ser)) { + *os << "ok" << endl << endl; } - break; - default: - break; - } - if (os && (peaklistfileformat != mzML) && (peaklistfileformat != mzXML) && (peaklistfileformat != imzML) && (peaklistfileformat != baf) && (peaklistfileformat != raw) && (peaklistfileformat != ser)) { - *os << "ok" << endl << endl; } + peakliststream.close(); + } - peakliststream.close(); + } } @@ -924,7 +1471,7 @@ int cParameters::checkAndPrepare(bool& terminatecomputation) { if (os) { *os << "Loading the database of sequences... "; } - sequencedatabase.loadFromPlainTextStream(sequencedatabasestream); + sequencedatabase.loadFromPlainTextStream(sequencedatabasestream, false); if (os) { *os << "ok" << endl << endl; } @@ -1153,7 +1700,10 @@ string cParameters::printToString() { } s += "\n"; - s += "File: " + peaklistfilename + "\n"; + s += "File(s): \n"; + for (int i = 0; i < (int)peaklistfilenames.size(); i++) { + s += peaklistfilenames[i] + "\n"; + } s += "Use Profile Data: "; s += useprofiledata ? "on" : "off"; @@ -1169,7 +1719,11 @@ string cParameters::printToString() { s += "Minimum Threshold of Absolute Intensity: " + to_string(minimumabsoluteintensitythreshold) + "\n"; s += "Minimum m/z Ratio: " + to_string(minimummz) + "\n"; s += "Maximum m/z Ratio: " + to_string(maximummz) + "\n"; + s += "Minimum Retention Time: " + to_string(minimumrt) + "\n"; + s += "Maximum Retention Time: " + to_string(maximumrt) + "\n"; s += "FWHM: " + to_string(fwhm) + "\n"; + s += "Minimum Ratio 54Fe/56Fe: " + to_string(minratio54Fe56Fe) + "\n"; + s += "Maximum Ratio 54Fe/56Fe: " + to_string(maxratio54Fe56Fe) + "\n"; s += "Building Blocks Database File: " + bricksdatabasefilename + "\n"; s += "Maximum Number of Combined Blocks (start, middle, end): " + to_string(maximumbricksincombinationbegin) + ", " + to_string(maximumbricksincombinationmiddle) + ", " + to_string(maximumbricksincombinationend) + "\n"; @@ -1266,7 +1820,7 @@ string cParameters::printToString() { } s += "\n"; - s += "Neutral Losses / Chemical Elements: "; + s += "Neutral Losses: "; for (int i = 0; i < (int)originalneutrallossesfortheoreticalspectra.size(); i++) { s += originalneutrallossesdefinitions[originalneutrallossesfortheoreticalspectra[i]].summary; if (i < (int)originalneutrallossesfortheoreticalspectra.size() - 1) { @@ -1275,7 +1829,18 @@ string cParameters::printToString() { } s += "\n"; - s += "Maximum Number of Combined Neutral Losses/Elements: " + to_string(maximumcombinedlosses) + "\n"; + s += "Maximum Number of Combined Losses: " + to_string(maximumcombinedlosses) + "\n"; + + s += "Chemical Elements: "; + for (int i = 0; i < (int)originalelementsfortheoreticalspectra.size(); i++) { + s += originalelementsdefinitions[originalelementsfortheoreticalspectra[i]].summary; + if (i < (int)originalelementsfortheoreticalspectra.size() - 1) { + s += ", "; + } + } + s += "\n"; + + s += "Maximum Number of Combined Elements: " + to_string(maximumcombinedelements) + "\n"; //s += "Remove Hits of Fragments without Hits of Parent Fragments: "; //s += clearhitswithoutparent ? "on" : "off"; @@ -1307,6 +1872,13 @@ string cParameters::printToString() { s += noratiocheck ? "on" : "off"; s += "\n"; + s += "Calculate FDRs: "; + s += calculatefdrs ? "on" : "off"; + s += "\n"; + + s += "Minimum Relative Intensity of Highest Peak in Isotopic Cluster: " + to_string(minimumannotationintensityrelative) + "\n"; + s += "Minimum Absolute Intensity of Highest Peak in Isotopic Cluster: " + to_string(minimumannotationintensityabsolute) + "\n"; + s += "Isotope m/z Tolerance: " + to_string(mzdifftolerance) + "\n"; s += "Isotope Intensity Tolerance: " + to_string(intensitytolerance) + "\n"; @@ -1758,7 +2330,7 @@ int cParameters::generateCompounds(bool& terminatecomputation, string& errormess errormessage = ""; - if (maximumcombinedlosses == 0) { + if (maximumcombinedelements == 0) { return 0; } @@ -1776,7 +2348,6 @@ int cParameters::generateCompounds(bool& terminatecomputation, string& errormess vector countsofelements; vector massesofelements; vector namesofelements; - double elementsratio; int numberofbasicbricks = 0; @@ -1790,25 +2361,18 @@ int cParameters::generateCompounds(bool& terminatecomputation, string& errormess double minadd = 0; //double maxadd = 0; - int countH; - int countC; - int countO; - int countN; - int countS; - int countP; - int countF; - int countCl; - int countBr; - int countSi; + bool lcms; + bool rtavailable; - bool lcms = (peaklistseries.size() > 1) && !((peaklistfileformat == mis) || (peaklistfileformat == imzML)); + int kstart; + int kend; if (os) { *os << "Generating compounds... " << endl; } - for (int i = 0; i < (int)originalneutrallossesfortheoreticalspectra.size(); i++) { - tmpstr = originalneutrallossesdefinitions[originalneutrallossesfortheoreticalspectra[i]].summary; + for (int i = 0; i < (int)originalelementsfortheoreticalspectra.size(); i++) { + tmpstr = originalelementsdefinitions[originalelementsfortheoreticalspectra[i]].summary; if (tmpstr.rfind(':') != string::npos) { tmpstr = tmpstr.substr(0, tmpstr.rfind(':')); @@ -1817,7 +2381,7 @@ int cParameters::generateCompounds(bool& terminatecomputation, string& errormess tmpformula.setFormula(tmpstr, false); tmpbrick.clear(); - tmpbrick.setName(originalneutrallossesdefinitions[originalneutrallossesfortheoreticalspectra[i]].summary); + tmpbrick.setName(originalelementsdefinitions[originalelementsfortheoreticalspectra[i]].summary); tmpbrick.setComposition(to_string(numberofbasicbricks + 1), false); tmpbrick.setMass(tmpformula.getMass()); tmpbrick.setSummary(tmpstr); @@ -1927,7 +2491,7 @@ int cParameters::generateCompounds(bool& terminatecomputation, string& errormess } vector combarray; - for (int i = 0; i < maximumcombinedlosses; i++) { + for (int i = 0; i < maximumcombinedelements; i++) { combarray.push_back(0); } @@ -1944,9 +2508,12 @@ int cParameters::generateCompounds(bool& terminatecomputation, string& errormess } } + double unchargedmaximummz = charge(uncharge(maximummz, precursorcharge), (precursorcharge > 0) ? 1 : -1) - minadd; + //double unchargedmaximummz = maximummz - minadd; + //bool skipcombination; - //while (elementsbrickdatabase.nextCombinationFast(combarray, countsofelements, massesofelements, sumofmasses, numberofbasicbricks, maximumcombinedlosses, 0, maximummz)) { - while (elementsbrickdatabase.nextCombinationFastLimited(combarray, countsofelements, limitsofelements, massesofelements, sumofmasses, numberofbasicbricks, maximumcombinedlosses, 0, maximummz - minadd)) { + //while (elementsbrickdatabase.nextCombinationFast(combarray, countsofelements, massesofelements, sumofmasses, numberofbasicbricks, maximumcombinedelements, 0, maximummz)) { + while (elementsbrickdatabase.nextCombinationFastLimited(combarray, countsofelements, limitsofelements, massesofelements, sumofmasses, numberofbasicbricks, maximumcombinedelements, 0, unchargedmaximummz)) { if (terminatecomputation) { sequencedatabase.clear(); errormessage = "Aborted by user."; @@ -2000,383 +2567,106 @@ int cParameters::generateCompounds(bool& terminatecomputation, string& errormess } if (advancedformulacheck) { - - countH = 0; - countC = 0; - countO = 0; - countN = 0; - countS = 0; - countP = 0; - countF = 0; - countCl = 0; - countBr = 0; - countSi = 0; - - size = (int)countsofelements.size(); - for (int j = 0; j < size; j++) { - if (countsofelements[j] > 0) { - if (namesofelements[j].compare("H") == 0) { - countH = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("C") == 0) { - countC = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("O") == 0) { - countO = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("N") == 0) { - countN = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("S") == 0) { - countS = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("P") == 0) { - countP = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("F") == 0) { - countF = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("Cl") == 0) { - countCl = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("Br") == 0) { - countBr = countsofelements[j]; - continue; - } - if (namesofelements[j].compare("Si") == 0) { - countSi = countsofelements[j]; - continue; - } - } - } - - if ((countH == 0) || (countC == 0)) { + if (checkAdvancedFilteringRules(noratiocheck, sumofmasses, countsofelements, namesofelements)) { continue; } + } - if (noratiocheck) { - if (countN > countO) { - continue; - } - } - - if (sumofmasses < 500.0) { - - if (countC > 39) { - continue; - } - if (countH > 72) { - continue; - } - if (countN > 20) { - continue; - } - if (countO > 20) { - continue; - } - if (countP > 9) { - continue; - } - if (countS > 10) { - continue; - } - if (countF > 16) { - continue; - } - if (countCl > 10) { - continue; - } - if (countBr > 5) { - continue; - } - if (countSi > 8) { - continue; - } - - } - else if (sumofmasses < 1000.0) { - - if (countC > 78) { - continue; - } - if (countH > 126) { - continue; - } - if (countN > 25) { - continue; - } - if (countO > 27) { - continue; - } - if (countP > 9) { - continue; - } - if (countS > 14) { - continue; - } - if (countF > 34) { - continue; - } - if (countCl > 12) { - continue; - } - if (countBr > 8) { - continue; - } - if (countSi > 14) { - continue; - } - - } - else if (sumofmasses < 2000.0) { - - if (countC > 156) { - continue; - } - if (countH > 236) { - continue; - } - if (countN > 32) { - continue; - } - if (countO > 63) { - continue; - } - if (countP > 9) { - continue; - } - if (countS > 14) { - continue; - } - if (countF > 48) { - continue; - } - if (countCl > 12) { - continue; - } - if (countBr > 10) { - continue; - } - if (countSi > 15) { - continue; - } - - } - else if (sumofmasses < 3000.0) { - - if (countC > 162) { - continue; - } - if (countH > 208) { - continue; - } - if (countN > 48) { - continue; - } - if (countO > 78) { - continue; - } - if (countP > 9) { - continue; - } - if (countS > 14) { - continue; - } - if (countF > 48) { - continue; - } - if (countCl > 12) { - continue; - } - if (countBr > 10) { - continue; - } - if (countSi > 15) { - continue; - } - - } - - if ((countH > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countH)) / ((double)(countC)); - if ((elementsratio < 0.2) || (elementsratio > 3.1)) { - continue; - } - } - - if ((countN > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countN)) / ((double)(countC)); - if (elementsratio > 1.3) { - continue; - } - } + compoundsgenerated++; - if ((countO > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countO)) / ((double)(countC)); - if (elementsratio > 1.2) { - continue; - } - } + if (!reportunmatchedtheoreticalpeaks) { - if ((countP > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countP)) / ((double)(countC)); - if (elementsratio > 0.3) { - continue; - } - } + for (int h = 0; h < (int)peaklistseriesvector.size(); h++) { - if ((countS > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countS)) / ((double)(countC)); - if (elementsratio > 0.8) { - continue; - } - } + lcms = (peaklistseriesvector[h].size() > 1) && !((peaklistfileformats[h] == mis) || (peaklistfileformats[h] == imzML)); + rtavailable = (peaklistseriesvector[h].size() > 1) && (peaklistseriesvector[h][peaklistseriesvector[h].size() - 1].getRetentionTime() > 0); - if ((countF > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countF)) / ((double)(countC)); - if (elementsratio > 1.5) { - continue; - } - } + compoundshint = 0; - if ((countCl > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countCl)) / ((double)(countC)); - if (elementsratio > 0.8) { - continue; - } - } + size = peaklistseriesvector[h].size(); - if ((countBr > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countBr)) / ((double)(countC)); - if (elementsratio > 0.8) { - continue; - } - } + kstart = 0; + kend = size; - if ((countSi > 0) && (countC >= 0)) { - if (countC == 0) { - continue; - } - elementsratio = ((double)(countSi)) / ((double)(countC)); - if (elementsratio > 0.5) { - continue; - } - } + if (lcms && rtavailable) { - if ((countN > 1) && (countO > 1) && (countP > 1) && (countS > 1)) { - if ((countN >= 10) || (countO >= 20) || (countP >= 4) || (countS >= 3)) { - continue; - } - } + if (minimumrt != 0) { + while (kstart < size) { + if (peaklistseriesvector[h][kstart].getRetentionTime() >= minimumrt) { + break; + } + kstart++; + } - if ((countN > 3) && (countO > 3) && (countP > 3)) { - if ((countN >= 11) || (countO >= 22) || (countP >= 6)) { - continue; - } - } + if (kstart == size) { + kstart--; + } + } - if ((countO > 1) && (countP > 1) && (countS > 1)) { - if ((countO >= 14) || (countP >= 3) || (countS >= 3)) { - continue; - } - } + if (maximumrt != 0) { + while (kend >= 0) { + if (peaklistseriesvector[h][kend].getRetentionTime() <= maximumrt) { + break; + } + kend--; + } - if ((countP > 1) && (countS > 1) && (countN > 1)) { - if ((countP >= 3) || (countS >= 3) || (countN >= 4)) { - continue; - } - } + if (kend == -1) { + kend++; + } + } - if ((countN > 6) && (countO > 6) && (countS > 6)) { - if ((countN >= 19) || (countO >= 14) || (countS >= 8)) { - continue; } - } - - } - compoundsgenerated++; - - if (!reportunmatchedtheoreticalpeaks) { - - compoundshint = 0; + for (auto& it : ionsfortheoreticalspectraMS1) { - for (auto& it : ionsfortheoreticalspectraMS1) { + for (int j = 0; j < abs(precursorcharge); j++) { - for (int j = 0; j < abs(precursorcharge); j++) { - - tmpmzdifference = sumofmasses + it.massdifference; - if (precursorcharge > 0) { - tmpmzdifference += j * (H - e); - } - else { - tmpmzdifference -= j * (H - e); - } - if (j > 0) { - tmpmzdifference /= (double)(j + 1); - } + tmpmzdifference = sumofmasses + it.massdifference; + if (precursorcharge > 0) { + tmpmzdifference += j * (H - e); + } + else { + tmpmzdifference -= j * (H - e); + } + if (j > 0) { + tmpmzdifference /= (double)(j + 1); + } - featureshint = 0; + featureshint = 0; - size = peaklistseries.size(); - for (int k = 0; k < size; k++) { + for (int k = kstart; k < kend; k++) { - if (searchHint(tmpmzdifference, peaklistseries[k], fragmentmasserrortolerance)) { - featureshint++; - } - else { - if (lcms) { - featureshint = 0; + if (searchHint(tmpmzdifference, peaklistseriesvector[h][k], fragmentmasserrortolerance)) { + featureshint++; + } + else { + if (lcms) { + featureshint = 0; + } } - } - hintend = false; - if (lcms || (peaklistfileformat == imzML) || (peaklistfileformat == mis)) { - if (featureshint >= minimumfeaturesize) { - compoundshint++; - hintend = true; + hintend = false; + if (lcms || (peaklistfileformats[h] == imzML) || (peaklistfileformats[h] == mis)) { + if (featureshint >= minimumfeaturesize) { + compoundshint++; + hintend = true; + } } - } - else { - if (featureshint > 0) { - compoundshint++; - hintend = true; + else { + if (featureshint > 0) { + compoundshint++; + hintend = true; + } + } + + if (hintend) { + break; } + } - if (hintend) { + if (compoundshint >= minimumiontypes) { break; } @@ -2453,15 +2743,33 @@ void cParameters::store(ofstream& os) { os.write((char *)&peptidetype, sizeof(ePeptideType)); - storeString(peaklistfilename, os); - os.write((char *)&peaklistfileformat, sizeof(ePeakListFileFormat)); - peaklistseries.store(os); + size = (int)peaklistfilenames.size(); + os.write((char *)&size, sizeof(int)); + for (int i = 0; i < size; i++) { + storeString(peaklistfilenames[i], os); + } + + storeString(originalpeaklistfilenames, os); + + size = (int)peaklistfileformats.size(); + os.write((char *)&size, sizeof(int)); + for (int i = 0; i < size; i++) { + os.write((char *)&peaklistfileformats[i], sizeof(ePeakListFileFormat)); + } + + size = (int)peaklistseriesvector.size(); + os.write((char *)&size, sizeof(int)); + for (int i = 0; i < size; i++) { + peaklistseriesvector[i].store(os); + } os.write((char *)&useprofiledata, sizeof(bool)); os.write((char *)&convertprofiledata, sizeof(bool)); storeString(profiledatafilename, os); + os.write((char *)&linebafprocessing, sizeof(int)); + os.write((char *)&scannumber, sizeof(int)); os.write((char *)&precursormass, sizeof(double)); @@ -2475,8 +2783,13 @@ void cParameters::store(ofstream& os) { os.write((char *)&minimumabsoluteintensitythreshold, sizeof(unsigned)); os.write((char *)&minimummz, sizeof(double)); os.write((char *)&maximummz, sizeof(double)); + os.write((char *)&minimumrt, sizeof(double)); + os.write((char *)&maximumrt, sizeof(double)); os.write((char *)&fwhm, sizeof(double)); + os.write((char *)&minratio54Fe56Fe, sizeof(double)); + os.write((char *)&maxratio54Fe56Fe, sizeof(double)); + storeString(bricksdatabasefilename, os); bricksdatabase.store(os); @@ -2497,6 +2810,7 @@ void cParameters::store(ofstream& os) { os.write((char *)&mode, sizeof(eModeType)); os.write((char *)&scoretype, sizeof(eScoreType)); os.write((char *)&maximumcombinedlosses, sizeof(int)); + os.write((char *)&maximumcombinedelements, sizeof(int)); //os.write((char *)&clearhitswithoutparent, sizeof(bool)); os.write((char *)&reportunmatchedtheoreticalpeaks, sizeof(bool)); os.write((char *)&generateisotopepattern, sizeof(bool)); @@ -2506,6 +2820,9 @@ void cParameters::store(ofstream& os) { os.write((char *)&basicformulacheck, sizeof(bool)); os.write((char *)&advancedformulacheck, sizeof(bool)); os.write((char *)&noratiocheck, sizeof(bool)); + os.write((char *)&calculatefdrs, sizeof(bool)); + os.write((char *)&minimumannotationintensityrelative, sizeof(double)); + os.write((char *)&minimumannotationintensityabsolute, sizeof(unsigned)); os.write((char *)&mzdifftolerance, sizeof(double)); os.write((char *)&intensitytolerance, sizeof(double)); os.write((char *)&cyclicnterminus, sizeof(bool)); @@ -2540,7 +2857,7 @@ void cParameters::store(ofstream& os) { size = (int)ionsfortheoreticalspectraMS1.size(); os.write((char *)&size, sizeof(int)); for (int i = 0; i < (int)ionsfortheoreticalspectraMS1.size(); i++) { - os.write((char *)&ionsfortheoreticalspectraMS1[i], sizeof(cIonType)); + ionsfortheoreticalspectraMS1[i].store(os); } size = (int)ionsfortheoreticalspectraMS2.size(); @@ -2575,8 +2892,21 @@ void cParameters::store(ofstream& os) { os.write((char *)&numberofgeneratedneutrallosses, sizeof(int)); + size = (int)originalelementsdefinitions.size(); + os.write((char *)&size, sizeof(int)); + for (int i = 0; i < (int)originalelementsdefinitions.size(); i++) { + originalelementsdefinitions[i].store(os); + } + + size = (int)originalelementsfortheoreticalspectra.size(); + os.write((char *)&size, sizeof(int)); + for (int i = 0; i < (int)originalelementsfortheoreticalspectra.size(); i++) { + os.write((char *)&originalelementsfortheoreticalspectra[i], sizeof(int)); + } + storeStringVector(peakidtodesc, os); storeStringVector(isotopeformulaidtodesc, os); + storeStringIntMap(pchemresults, os); os.write((char *)&defaultmaxx, sizeof(int)); os.write((char *)&defaultmaxy, sizeof(int)); @@ -2586,7 +2916,7 @@ void cParameters::store(ofstream& os) { } -void cParameters::load(ifstream& is) { +void cParameters::load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3) { int size; string s; @@ -2596,15 +2926,52 @@ void cParameters::load(ifstream& is) { is.read((char *)&peptidetype, sizeof(ePeptideType)); - loadString(peaklistfilename, is); - is.read((char *)&peaklistfileformat, sizeof(ePeakListFileFormat)); - peaklistseries.load(is); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 0)) { + is.read((char *)&size, sizeof(int)); + peaklistfilenames.resize(size); + for (int i = 0; i < size; i++) { + loadString(peaklistfilenames[i], is); + } + + loadString(originalpeaklistfilenames, is); + + is.read((char *)&size, sizeof(int)); + peaklistfileformats.resize(size); + for (int i = 0; i < size; i++) { + is.read((char *)&peaklistfileformats[i], sizeof(ePeakListFileFormat)); + } + + is.read((char *)&size, sizeof(int)); + peaklistseriesvector.resize(size); + for (int i = 0; i < size; i++) { + peaklistseriesvector[i].load(is, fileversionpart1, fileversionpart2, fileversionpart3); + } + } + else { + peaklistfilenames.resize(1); + loadString(peaklistfilenames[0], is); + + originalpeaklistfilenames = peaklistfilenames[0]; + + peaklistfileformats.resize(1); + is.read((char *)&peaklistfileformats[0], sizeof(ePeakListFileFormat)); + + peaklistseriesvector.resize(1); + peaklistseriesvector[0].load(is, fileversionpart1, fileversionpart2, fileversionpart3); + } is.read((char *)&useprofiledata, sizeof(bool)); is.read((char *)&convertprofiledata, sizeof(bool)); loadString(profiledatafilename, is); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 18)) { + is.read((char *)&linebafprocessing, sizeof(int)); + } + else { + linebafprocessing = 0; + } + is.read((char *)&scannumber, sizeof(int)); is.read((char *)&precursormass, sizeof(double)); @@ -2618,8 +2985,27 @@ void cParameters::load(ifstream& is) { is.read((char *)&minimumabsoluteintensitythreshold, sizeof(unsigned)); is.read((char *)&minimummz, sizeof(double)); is.read((char *)&maximummz, sizeof(double)); + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 29)) { + is.read((char *)&minimumrt, sizeof(double)); + is.read((char *)&maximumrt, sizeof(double)); + } + else { + minimumrt = 0; + maximumrt = 0; + } + is.read((char *)&fwhm, sizeof(double)); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 37)) { + is.read((char *)&minratio54Fe56Fe, sizeof(double)); + is.read((char *)&maxratio54Fe56Fe, sizeof(double)); + } + else { + minratio54Fe56Fe = 0; + maxratio54Fe56Fe = 0.1; + } + loadString(bricksdatabasefilename, is); bricksdatabase.load(is); @@ -2640,6 +3026,19 @@ void cParameters::load(ifstream& is) { is.read((char *)&mode, sizeof(eModeType)); is.read((char *)&scoretype, sizeof(eScoreType)); is.read((char *)&maximumcombinedlosses, sizeof(int)); + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 33)) { + is.read((char *)&maximumcombinedelements, sizeof(int)); + } + else { + if (mode == compoundsearch) { + maximumcombinedelements = maximumcombinedlosses; + } + else { + maximumcombinedelements = 200; + } + } + //is.read((char *)&clearhitswithoutparent, sizeof(bool)); is.read((char *)&reportunmatchedtheoreticalpeaks, sizeof(bool)); is.read((char *)&generateisotopepattern, sizeof(bool)); @@ -2649,6 +3048,23 @@ void cParameters::load(ifstream& is) { is.read((char *)&basicformulacheck, sizeof(bool)); is.read((char *)&advancedformulacheck, sizeof(bool)); is.read((char *)&noratiocheck, sizeof(bool)); + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 11)) { + is.read((char *)&calculatefdrs, sizeof(bool)); + } + else { + calculatefdrs = true; + } + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 1)) { + is.read((char *)&minimumannotationintensityrelative, sizeof(double)); + is.read((char *)&minimumannotationintensityabsolute, sizeof(unsigned)); + } + else { + minimumannotationintensityrelative = 0; + minimumannotationintensityabsolute = 0; + } + is.read((char *)&mzdifftolerance, sizeof(double)); is.read((char *)&intensitytolerance, sizeof(double)); is.read((char *)&cyclicnterminus, sizeof(bool)); @@ -2672,7 +3088,7 @@ void cParameters::load(ifstream& is) { is.read((char *)&blindedges, sizeof(int)); loadString(sequencedatabasefilename, is); - sequencedatabase.load(is); + sequencedatabase.load(is, fileversionpart1, fileversionpart2, fileversionpart3); is.read((char *)&size, sizeof(int)); fragmentionsfordenovograph.resize(size); @@ -2683,7 +3099,13 @@ void cParameters::load(ifstream& is) { is.read((char *)&size, sizeof(int)); ionsfortheoreticalspectraMS1.resize(size); for (int i = 0; i < (int)ionsfortheoreticalspectraMS1.size(); i++) { - is.read((char *)&ionsfortheoreticalspectraMS1[i], sizeof(cIonType)); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 23)) { + ionsfortheoreticalspectraMS1[i].load(is); + } + else { + // bug before version 2.0.23 + is.read((char *)&ionsfortheoreticalspectraMS1[i], sizeof(cIonType)); + } } is.read((char *)&size, sizeof(int)); @@ -2718,9 +3140,56 @@ void cParameters::load(ifstream& is) { is.read((char *)&numberofgeneratedneutrallosses, sizeof(int)); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 34)) { + is.read((char *)&size, sizeof(int)); + originalelementsdefinitions.resize(size); + for (int i = 0; i < (int)originalelementsdefinitions.size(); i++) { + originalelementsdefinitions[i].load(is); + } + + is.read((char *)&size, sizeof(int)); + originalelementsfortheoreticalspectra.resize(size); + for (int i = 0; i < (int)originalelementsfortheoreticalspectra.size(); i++) { + is.read((char *)&originalelementsfortheoreticalspectra[i], sizeof(int)); + } + } + else { + if (mode == compoundsearch) { + originalelementsdefinitions = originalneutrallossesdefinitions; + originalelementsfortheoreticalspectra = originalneutrallossesfortheoreticalspectra; + + originalneutrallossesdefinitions.clear(); + originalneutrallossesfortheoreticalspectra.clear(); + maximumcombinedlosses = 0; + } + else { + originalelementsdefinitions.clear(); + originalelementsfortheoreticalspectra.clear(); + + pushLossItem(originalelementsdefinitions, "H"); + pushLossItem(originalelementsdefinitions, "C"); + pushLossItem(originalelementsdefinitions, "O"); + pushLossItem(originalelementsdefinitions, "N"); + pushLossItem(originalelementsdefinitions, "S:1"); + pushLossItem(originalelementsdefinitions, "P:1"); + + originalelementsfortheoreticalspectra.push_back(0); + originalelementsfortheoreticalspectra.push_back(1); + originalelementsfortheoreticalspectra.push_back(2); + originalelementsfortheoreticalspectra.push_back(3); + } + } + loadStringVector(peakidtodesc, is); loadStringVector(isotopeformulaidtodesc, is); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 21)) { + loadStringIntMap(pchemresults, is); + } + else { + pchemresults.clear(); + } + is.read((char *)&defaultmaxx, sizeof(int)); is.read((char *)&defaultmaxy, sizeof(int)); is.read((char *)&defaultpixelsizex, sizeof(int)); diff --git a/CycloBranch/core/cParameters.h b/CycloBranch/core/cParameters.h index aaa03ad..c3cbdf2 100644 --- a/CycloBranch/core/cParameters.h +++ b/CycloBranch/core/cParameters.h @@ -53,6 +53,27 @@ enum eScoreType { }; +/** + \brief Check Senior's filtering rules. + \param combarray current combination of elements + \param valences vector of valences + \param maxcomponents maximum number of components in a graph + \retval bool true, if Senior's rules are ok +*/ +bool checkSeniorRules(vector& combarray, vector& valences, int maxcomponents); + + +/** + \brief Check advanced filtering rules. + \brief noratiocheck if true, N/O ratio check is enabled + \brief sumofmasses sum of masses + \brief countsofelements counts of elements + \brief namesofelelements names of elements + \retval bool true, if advanced filtering rules are NOT ok +*/ +bool checkAdvancedFilteringRules(bool noratiocheck, double sumofmasses, vector& countsofelements, vector& namesofelements); + + /** \brief The class storing parameters of the application. */ @@ -62,7 +83,7 @@ class cParameters { void fixIntensities(cPeaksList& centroidspectrum, cPeaksList& profilespectrum); - bool checkSeniorRules(vector& combarray, vector& valences, int maxcomponents); + void pushLossItem(vector& lossitems, string lossstr); //double getMassAndCounts(vector& combarray, vector& countsofelements, vector& massesofelements); @@ -80,12 +101,18 @@ class cParameters { \brief The type of analyzed peptide. */ ePeptideType peptidetype; - + /** - \brief A filename with a peak list. + \brief The filenames of peaklists. */ - string peaklistfilename; + vector peaklistfilenames; + + + /** + \brief Original input line with peaklist(s). + */ + string originalpeaklistfilenames; /** @@ -107,15 +134,21 @@ class cParameters { /** - \brief A file format of peak list. + \brief Line spectra processing method (baf). + */ + int linebafprocessing; + + + /** + \brief The file formats of peaklists. */ - ePeakListFileFormat peaklistfileformat; + vector peaklistfileformats; /** - \brief A structure representing a series of peaklists. + \brief A structure representing a vector of series of peaklists. */ - cPeakListSeries peaklistseries; + vector peaklistseriesvector; /** @@ -184,12 +217,36 @@ class cParameters { double maximummz; + /** + \brief Minimum retention time. + */ + double minimumrt; + + + /** + \brief Maximum retention time. + */ + double maximumrt; + + /** \brief FWHM. */ double fwhm; + /** + \brief Minimum ratio 54Fe/56Fe. + */ + double minratio54Fe56Fe; + + + /** + \brief Maximum ratio 54Fe/56Fe. + */ + double maxratio54Fe56Fe; + + /** \brief A file name of a bricks database. */ @@ -262,6 +319,12 @@ class cParameters { int maximumcombinedlosses; + /** + \brief Maximum number of combined chemical elements. + */ + int maximumcombinedelements; + + /** \brief True when matches of peaks which do not have parent peaks are removed. */ @@ -316,6 +379,24 @@ class cParameters { bool noratiocheck; + /** + \brief Calculate FDRs. + */ + bool calculatefdrs; + + + /** + \brief Minimum relative intensity of the most intense peak in an isotopic pattern. + */ + double minimumannotationintensityrelative; + + + /** + \brief Minimum absolute intensity of the most intense peak in an isotopic pattern. + */ + unsigned minimumannotationintensityabsolute; + + /** \brief Maximum m/z tolerance of matched isotopes. */ @@ -496,6 +577,18 @@ class cParameters { vector originalneutrallossesfortheoreticalspectra; + /** + \brief A vector of all elements (without combinations). + */ + vector originalelementsdefinitions; + + + /** + \brief A vector of elements used when generating compounds (without combinations). + */ + vector originalelementsfortheoreticalspectra; + + /** \brief A vector of peak descriptions. */ @@ -508,6 +601,12 @@ class cParameters { vector isotopeformulaidtodesc; + /** + \brief An auxiliary map to store search results from PubChem in Compound Search mode. + */ + map pchemresults; + + /** \brief Max count of pixel x - parsed from imzML file. */ @@ -626,8 +725,11 @@ class cParameters { /** \brief Load the structure from an input stream. \param is an input stream - */ - void load(ifstream& is); + \param fileversionpart1 first number of .res the file version + \param fileversionpart2 second number of .res the file version + \param fileversionpart3 third number of .res the file version + */ + void load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3); }; diff --git a/CycloBranch/core/cPeak.cpp b/CycloBranch/core/cPeak.cpp index cc6b3a8..421f055 100644 --- a/CycloBranch/core/cPeak.cpp +++ b/CycloBranch/core/cPeak.cpp @@ -140,3 +140,139 @@ void cPeak::load(ifstream& is) { is.read((char *)&orderid, sizeof(int)); } + +bool cPeak::equals(cPeak& secondpeak) { + if (!formula.equals(secondpeak.formula)) { + cout << "formula does not match" << endl; + return false; + } + + if (isotopeformula.compare(secondpeak.isotopeformula) != 0) { + cout << "isotopeformula does not match" << endl; + return false; + } + + if (isotopeformulaid != secondpeak.isotopeformulaid) { + cout << "isotopeformulaid does not match" << endl; + return false; + } + + if (!compareDoubles(mzratio, secondpeak.mzratio)) { + cout << mzratio << " " << secondpeak.mzratio << endl; + cout << "mzratio does not match" << endl; + return false; + } + + if (!compareDoubles(relativeintensity, secondpeak.relativeintensity)) { + cout << "relativeintensity does not match" << endl; + return false; + } + + if (!compareDoubles(absoluteintensity, secondpeak.absoluteintensity)) { + cout << "absoluteintensity does not match" << endl; + return false; + } + + if (description.compare(secondpeak.description) != 0) { + cout << "description does not match" << endl; + return false; + } + + if (descriptionid != secondpeak.descriptionid) { + cout << "descriptionid does not match" << endl; + return false; + } + + if (!compareDoubles(matchedmz, secondpeak.matchedmz)) { + cout << "matchedmz does not match" << endl; + return false; + } + + if (!compareDoubles(matchedrelativeintensity, secondpeak.matchedrelativeintensity)) { + cout << "matchedrelativeintensity does not match" << endl; + return false; + } + + if (!compareDoubles(matchedabsoluteintensity, secondpeak.matchedabsoluteintensity)) { + cout << "matchedabsoluteintensity does not match" << endl; + return false; + } + + if (!compareDoubles(matchedppm, secondpeak.matchedppm)) { + cout << "matchedppm does not match" << endl; + return false; + } + + if (iontype != secondpeak.iontype) { + cout << "iontype does not match" << endl; + return false; + } + + if (neutrallosstype != secondpeak.neutrallosstype) { + cout << "neutrallosstype does not match" << endl; + return false; + } + + if (matched != secondpeak.matched) { + cout << "matched does not match" << endl; + return false; + } + + if (matchedid != secondpeak.matchedid) { + cout << "matchedid does not match" << endl; + return false; + } + + if (charge != secondpeak.charge) { + cout << "charge does not match" << endl; + return false; + } + + if (rotationid != secondpeak.rotationid) { + cout << "rotationid does not match" << endl; + return false; + } + + if (seriesid != secondpeak.seriesid) { + cout << "seriesid does not match" << endl; + return false; + } + + if (groupid != secondpeak.groupid) { + cout << "groupid does not match" << endl; + return false; + } + + if (compoundid != secondpeak.compoundid) { + cout << "compoundid does not match" << endl; + return false; + } + + if (isotope != secondpeak.isotope) { + cout << "isotope does not match" << endl; + return false; + } + + if (removeme != secondpeak.removeme) { + cout << "removeme does not match" << endl; + return false; + } + + if (scrambled != secondpeak.scrambled) { + cout << "scrambled does not match" << endl; + return false; + } + + if (decoy != secondpeak.decoy) { + cout << "decoy does not match" << endl; + return false; + } + + if (orderid != secondpeak.orderid) { + cout << "orderid does not match" << endl; + return false; + } + + return true; +} + diff --git a/CycloBranch/core/cPeak.h b/CycloBranch/core/cPeak.h index 558fc43..9dab1d6 100644 --- a/CycloBranch/core/cPeak.h +++ b/CycloBranch/core/cPeak.h @@ -220,6 +220,14 @@ struct cPeak { */ void load(ifstream& is); + + /** + \brief Check if the object equals to another object. + \param secondpeak object for comparison + \retval bool true if the objects are equals + */ + bool equals(cPeak& secondpeak); + }; diff --git a/CycloBranch/core/cPeakListSeries.cpp b/CycloBranch/core/cPeakListSeries.cpp index 5c4b937..2d1ae92 100644 --- a/CycloBranch/core/cPeakListSeries.cpp +++ b/CycloBranch/core/cPeakListSeries.cpp @@ -160,7 +160,7 @@ int cPeakListSeries::loadFromProfileApexStream(string& filename, ifstream &strea mgfifstream.open(mgfname); while (mgfifstream.good() && ((int)temppeaklists.size() < oldpeaklistscount)) { cPeaksList peaklist; - peaklist.loadFromMGFStream(mgfifstream); + peaklist.loadFromMGFStream(mgfifstream, 1); temppeaklists.push_back(peaklist); } mgfifstream.close(); @@ -231,7 +231,7 @@ int cPeakListSeries::loadFromMZMLStream(string& mzmlfilename, ifstream &mzmlstre mgfifstream.open(mgfname); while (mgfifstream.good() && ((int)temppeaklists.size() < oldpeaklistscount)) { cPeaksList peaklist; - peaklist.loadFromMGFStream(mgfifstream); + peaklist.loadFromMGFStream(mgfifstream, 1); temppeaklists.push_back(peaklist); } mgfifstream.close(); @@ -243,6 +243,8 @@ int cPeakListSeries::loadFromMZMLStream(string& mzmlfilename, ifstream &mzmlstre for (int i = 0; i < (int)temppeaklists.size(); i++) { temppeaklists[i].setTitle(peaklists[i].getTitle()); + temppeaklists[i].setRetentionTime(peaklists[i].getRetentionTime()); + temppeaklists[i].setRetentionTimeUnit(peaklists[i].getRetentionTimeUnit()); } peaklists = temppeaklists; @@ -378,7 +380,7 @@ int cPeakListSeries::loadFromIMZMLStream(string& imzmlfilename, ifstream &ibdstr mgfifstream.open(mgfname); while (mgfifstream.good() && (peaklists.size() < imzml.getItems().size())) { cPeaksList peaklist; - peaklist.loadFromMGFStream(mgfifstream); + peaklist.loadFromMGFStream(mgfifstream, 1); peaklists.push_back(peaklist); } mgfifstream.close(); @@ -460,10 +462,10 @@ void cPeakListSeries::loadSpotList(ifstream &stream) { } -void cPeakListSeries::loadFromMGFStream(ifstream &stream) { +void cPeakListSeries::loadFromMGFStream(ifstream &stream, int timeunit) { while (stream.good()) { cPeaksList peaklist; - peaklist.loadFromMGFStream(stream); + peaklist.loadFromMGFStream(stream, timeunit); if ((peaklist.size() > 0) || stream.good()) { peaklists.push_back(peaklist); } @@ -488,14 +490,14 @@ void cPeakListSeries::store(ofstream& os) { } -void cPeakListSeries::load(ifstream& is) { +void cPeakListSeries::load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3) { int size; is.read((char *)&size, sizeof(int)); peaklists.resize(size); for (int i = 0; i < size; i++) { - peaklists[i].load(is); + peaklists[i].load(is, fileversionpart1, fileversionpart2, fileversionpart3); } } diff --git a/CycloBranch/core/cPeakListSeries.h b/CycloBranch/core/cPeakListSeries.h index f274138..53e2424 100644 --- a/CycloBranch/core/cPeakListSeries.h +++ b/CycloBranch/core/cPeakListSeries.h @@ -140,8 +140,9 @@ class cPeakListSeries { /** \brief Load the series of peaklists from a .mgf file. \param stream source stream + \param timeunit rt unit */ - void loadFromMGFStream(ifstream &stream); + void loadFromMGFStream(ifstream &stream, int timeunit); /** @@ -161,8 +162,11 @@ class cPeakListSeries { /** \brief Load the structure from an input stream. \param is an input stream - */ - void load(ifstream& is); + \param fileversionpart1 first number of .res the file version + \param fileversionpart2 second number of .res the file version + \param fileversionpart3 third number of .res the file version + */ + void load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3); }; diff --git a/CycloBranch/core/cPeaksList.cpp b/CycloBranch/core/cPeaksList.cpp index 548d059..0e75eb7 100644 --- a/CycloBranch/core/cPeaksList.cpp +++ b/CycloBranch/core/cPeaksList.cpp @@ -53,6 +53,7 @@ cPeaksList::cPeaksList(const cPeaksList& peakslist) { cPeaksList& cPeaksList::operator=(const cPeaksList& peakslist) { peaks = peakslist.peaks; rt = peakslist.rt; + rtunit = peakslist.rtunit; x = peakslist.x; y = peakslist.y; title = peakslist.title; @@ -63,6 +64,7 @@ cPeaksList& cPeaksList::operator=(const cPeaksList& peakslist) { void cPeaksList::clear() { peaks.clear(); rt = 0; + rtunit = 1; x = 0; y = 0; title = ""; @@ -226,7 +228,7 @@ void cPeaksList::storeToIBDStream(ofstream &ibdstream, bool use_64bit_float_mz_p } -void cPeaksList::loadFromMGFStream(ifstream &stream) { +void cPeaksList::loadFromMGFStream(ifstream &stream, int timeunit) { string s, tmps; cPeak p; size_t pos; @@ -255,6 +257,7 @@ void cPeaksList::loadFromMGFStream(ifstream &stream) { tmps = tmps.substr(0, pos); } rt = atof(tmps.c_str()); + rtunit = timeunit; } } } @@ -291,7 +294,7 @@ int cPeaksList::size() { } -string cPeaksList::print(bool htmlterminatelines) { +string cPeaksList::print(bool htmlterminatelines, bool printgroupid) { string s = ""; for (int i = 0; i < size(); i++) { @@ -312,6 +315,11 @@ string cPeaksList::print(bool htmlterminatelines) { s += to_string((unsigned long long)peaks[i].absoluteintensity); } + if (printgroupid) { + s += " "; + s += to_string(peaks[i].groupid); + } + if (htmlterminatelines) { s += "
"; } @@ -775,6 +783,16 @@ double cPeaksList::getRetentionTime() { } +void cPeaksList::setRetentionTimeUnit(int unit) { + rtunit = unit; +} + + +int cPeaksList::getRetentionTimeUnit() { + return rtunit; +} + + void cPeaksList::setCoordinates(int x, int y) { this->x = x; this->y = y; @@ -803,6 +821,8 @@ void cPeaksList::store(ofstream& os) { os.write((char *)&rt, sizeof(double)); + os.write((char *)&rtunit, sizeof(int)); + os.write((char *)&x, sizeof(int)); os.write((char *)&y, sizeof(int)); @@ -810,7 +830,7 @@ void cPeaksList::store(ofstream& os) { } -void cPeaksList::load(ifstream& is) { +void cPeaksList::load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3) { int size; is.read((char *)&size, sizeof(int)); @@ -822,6 +842,13 @@ void cPeaksList::load(ifstream& is) { is.read((char *)&rt, sizeof(double)); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 12)) { + is.read((char *)&rtunit, sizeof(int)); + } + else { + rtunit = 1; + } + is.read((char *)&x, sizeof(int)); is.read((char *)&y, sizeof(int)); @@ -939,3 +966,57 @@ void cPeaksList::markIsotopes() { } } + +bool cPeaksList::equals(cPeaksList& secondpeaklist) { + if (rt != secondpeaklist.rt) { + cout << "rt does not match" << endl; + return false; + } + + if (rtunit != secondpeaklist.rtunit) { + cout << "rt unit does not match" << endl; + return false; + } + + if (x != secondpeaklist.x) { + cout << "x does not match" << endl; + return false; + } + + if (y != secondpeaklist.y) { + cout << "y does not match" << endl; + return false; + } + + if (title.compare(secondpeaklist.title) != 0) { + cout << "title does not match" << endl; + return false; + } + + if (peaks.size() != secondpeaklist.peaks.size()) { + cout << "peaks.size() does not match" << endl; + cout << "peaks.size(): " << peaks.size() << endl; + cout << "secondpeaklist.peaks.size(): " << secondpeaklist.peaks.size() << endl; + cout << "first peaklist:" << endl; + for (size_t i = 0; i < peaks.size(); i++) { + cout << peaks[i].mzratio << " " << peaks[i].absoluteintensity << " " << peaks[i].relativeintensity << endl; + } + cout << endl; + cout << "second peaklist:" << endl; + for (size_t i = 0; i < secondpeaklist.peaks.size(); i++) { + cout << secondpeaklist.peaks[i].mzratio << " " << secondpeaklist.peaks[i].absoluteintensity << " " << secondpeaklist.peaks[i].relativeintensity << endl; + } + cout << endl; + return false; + } + + for (size_t i = 0; i < peaks.size(); i++) { + if (!peaks[i].equals(secondpeaklist.peaks[i])) { + cout << "peak " << i << " does not equal" << endl; + return false; + } + } + + return true; +} + diff --git a/CycloBranch/core/cPeaksList.h b/CycloBranch/core/cPeaksList.h index a8bb2c8..190d86b 100644 --- a/CycloBranch/core/cPeaksList.h +++ b/CycloBranch/core/cPeaksList.h @@ -71,6 +71,8 @@ class cPeaksList { double rt; + int rtunit; + int x, y; string title; @@ -154,8 +156,9 @@ class cPeaksList { /** \brief Load the spectrum from a .mgf file. \param stream source stream - */ - void loadFromMGFStream(ifstream &stream); + \param timeunit rt unit + */ + void loadFromMGFStream(ifstream &stream, int timeunit); /** @@ -167,10 +170,11 @@ class cPeaksList { /** \brief Print the spectrum. - \param htmlterminatelines true when html line endings must used + \param htmlterminatelines true if the html line endings should be used + \param printgroupid true if the groupid should be printed \retval string string with a printed spectrum */ - string print(bool htmlterminatelines = false); + string print(bool htmlterminatelines = false, bool printgroupid = false); /** @@ -387,6 +391,20 @@ class cPeaksList { double getRetentionTime(); + /** + \brief Set the retention time unit. + \param unit 0 == second, 1 == minute + */ + void setRetentionTimeUnit(int unit); + + + /** + \brief Get the retention time unit. + \retval int 0 == second, 1 == minute + */ + int getRetentionTimeUnit(); + + /** \brief Set the coordinates. \param x X coordinate @@ -419,8 +437,11 @@ class cPeaksList { /** \brief Load the structure from an input stream. \param is an input stream + \param fileversionpart1 first number of .res the file version + \param fileversionpart2 second number of .res the file version + \param fileversionpart3 third number of .res the file version */ - void load(ifstream& is); + void load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3); /** @@ -469,6 +490,14 @@ class cPeaksList { */ void markIsotopes(); + + /** + \brief Check if the object equals to another object. + \param secondpeaklist object for comparison + \retval bool true if the objects are equals + */ + bool equals(cPeaksList& secondpeaklist); + }; diff --git a/CycloBranch/core/cSequence.cpp b/CycloBranch/core/cSequence.cpp index ab7b115..13a6887 100644 --- a/CycloBranch/core/cSequence.cpp +++ b/CycloBranch/core/cSequence.cpp @@ -15,6 +15,8 @@ void cSequence::clear() { name = ""; summary.clear(); reference = ""; + rtmin = 0; + rtmax = 0; decoy = false; } @@ -28,11 +30,13 @@ void cSequence::store(ofstream& os) { storeString(name, os); summary.store(os); storeString(reference, os); + os.write((char *)&rtmin, sizeof(double)); + os.write((char *)&rtmax, sizeof(double)); os.write((char *)&decoy, sizeof(bool)); } -void cSequence::load(ifstream& is) { +void cSequence::load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3) { is.read((char *)&peptidetype, sizeof(ePeptideType)); loadString(sequence, is); loadString(nterminalmodification, is); @@ -41,6 +45,14 @@ void cSequence::load(ifstream& is) { loadString(name, is); summary.load(is); loadString(reference, is); + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 2)) { + is.read((char *)&rtmin, sizeof(double)); + is.read((char *)&rtmax, sizeof(double)); + } + else { + rtmin = 0; + rtmax = 0; + } is.read((char *)&decoy, sizeof(bool)); } @@ -60,6 +72,16 @@ string& cSequence::getName() { } +double cSequence::getMinimumRetentionTime() { + return rtmin; +} + + +double cSequence::getMaximumRetentionTime() { + return rtmax; +} + + string& cSequence::getReference() { return reference; } @@ -80,6 +102,12 @@ void cSequence::setName(const string& name) { } +void cSequence::setRetentionTime(double rtmin, double rtmax) { + this->rtmin = rtmin; + this->rtmax = rtmax; +} + + void cSequence::setReference(const string& reference) { this->reference = reference; } @@ -164,6 +192,28 @@ string cSequence::getNameWithReferenceAsHTMLString() { } } + // NP Atlas + if (!correctreference) { + rx = "^NPA[0-9]+$"; + if (regex_search(reference, rx)) { + s += ""; + s += name; + s += ""; + correctreference = true; + } + } + + // COCONUT + if (!correctreference) { + rx = "^CNP[0-9]+$"; + if (regex_search(reference, rx)) { + s += ""; + s += name; + s += ""; + correctreference = true; + } + } + // Norine if (!correctreference) { rx = "^NOR[0-9]+$"; diff --git a/CycloBranch/core/cSequence.h b/CycloBranch/core/cSequence.h index 0bd57f0..1675f99 100644 --- a/CycloBranch/core/cSequence.h +++ b/CycloBranch/core/cSequence.h @@ -33,6 +33,8 @@ class cSequence { string name; cSummaryFormula summary; string reference; + double rtmin; + double rtmax; bool decoy; public: @@ -60,8 +62,11 @@ class cSequence { /** \brief Load the structure from an input stream. \param is an input stream + \param fileversionpart1 first number of .res the file version + \param fileversionpart2 second number of .res the file version + \param fileversionpart3 third number of .res the file version */ - void load(ifstream& is); + void load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3); /** @@ -85,6 +90,20 @@ class cSequence { string& getName(); + /** + \brief Get minimum retention time. + \retval double minimum retention time + */ + double getMinimumRetentionTime(); + + + /** + \brief Get maximum retention time. + \retval double maximum retention time + */ + double getMaximumRetentionTime(); + + /** \brief Get reference. \retval string reference @@ -113,6 +132,14 @@ class cSequence { void setName(const string& name); + /** + \brief Set retention time. + \param rtmin minimum retention time + \param rtmax maximum retention time + */ + void setRetentionTime(double rtmin, double rtmax); + + /** \brief Set reference. \param reference reference diff --git a/CycloBranch/core/cSequenceDatabase.cpp b/CycloBranch/core/cSequenceDatabase.cpp index e0472df..c0afd87 100644 --- a/CycloBranch/core/cSequenceDatabase.cpp +++ b/CycloBranch/core/cSequenceDatabase.cpp @@ -4,12 +4,63 @@ #include "gui/cMainThread.h" +void cSequenceDatabase::parseRT(bool keeprt) { + double rtmin, rtmax, rttmp; + string s; + string tmp; + size_t pos; + + for (auto& it : sequences) { + s = it.getName(); + pos = s.find("@RT"); + if (pos != string::npos) { + s = s.substr(pos + 3); + + tmp = s; + s.clear(); + for (auto& it2 : tmp) { + if (!isspace(it2)) { + s.push_back(it2); + } + } + + sscanf_s(s.c_str(), "%lf-%lf", &rtmin, &rtmax); + + if (rtmin > rtmax) { + rttmp = rtmin; + rtmin = rtmax; + rtmax = rttmp; + } + + s = it.getName(); + s = s.substr(0, pos); + + if (keeprt) { + std::ostringstream out; + out.precision(2); + out << std::fixed << s; + out << "@RT"; + out << rtmin; + out << "-"; + out << rtmax; + + s = out.str(); + } + + it.setName(s); + + it.setRetentionTime(rtmin, rtmax); + } + } +} + + cSequenceDatabase::cSequenceDatabase() { clear(); } -void cSequenceDatabase::loadFromPlainTextStream(ifstream &stream) { +void cSequenceDatabase::loadFromPlainTextStream(ifstream &stream, bool keeprt) { string s, type; cSequence sequence; size_t pos; @@ -117,10 +168,13 @@ void cSequenceDatabase::loadFromPlainTextStream(ifstream &stream) { sequences.push_back(sequence); } + parseRT(keeprt); } -void cSequenceDatabase::storeToPlainTextStream(ofstream &stream) { +void cSequenceDatabase::storeToPlainTextStream(ofstream &stream, bool keeprt) { + parseRT(keeprt); + cSummaryFormula formula; for (int i = 0; i < (int)sequences.size(); i++) { stream << getStringFromPeptideType(sequences[i].getPeptideType()) << "\t"; @@ -176,14 +230,35 @@ void cSequenceDatabase::store(ofstream& os) { } -void cSequenceDatabase::load(ifstream& is) { +void cSequenceDatabase::load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3) { int size; is.read((char *)&size, sizeof(int)); sequences.resize(size); for (int i = 0; i < (int)sequences.size(); i++) { - sequences[i].load(is); + sequences[i].load(is, fileversionpart1, fileversionpart2, fileversionpart3); + } +} + + +void cSequenceDatabase::attachDecoys(bool& terminatecomputation) { + cSequence sequence; + string summary; + + int seqdbsize = (int)sequences.size(); + sequence.setPeptideType(other); + sequence.setDecoy(true); + + for (int i = 0; i < seqdbsize; i++) { + if (terminatecomputation) { + sequences.clear(); + return; + } + + summary = sequences[i].getSummaryFormula() + "H"; + sequence.setSummaryFormula(summary); + sequences.push_back(sequence); } } diff --git a/CycloBranch/core/cSequenceDatabase.h b/CycloBranch/core/cSequenceDatabase.h index 5d7e7bd..0febf66 100644 --- a/CycloBranch/core/cSequenceDatabase.h +++ b/CycloBranch/core/cSequenceDatabase.h @@ -28,6 +28,9 @@ class cSequenceDatabase { vector sequences; + void parseRT(bool keeprt); + + public: @@ -40,15 +43,17 @@ class cSequenceDatabase { /** \brief Load the database of sequences from a plain text stream. \param stream reference to an input file stream + \param keeprt keep retention time as a part of the compound name */ - void loadFromPlainTextStream(ifstream &stream); + void loadFromPlainTextStream(ifstream &stream, bool keeprt); /** \brief Store the database of sequences into a plain text stream. \param stream reference to an output file stream - */ - void storeToPlainTextStream(ofstream &stream); + \param keeprt keep retention time as a part of the compound name + */ + void storeToPlainTextStream(ofstream &stream, bool keeprt); /** @@ -96,8 +101,18 @@ class cSequenceDatabase { /** \brief Load the structure from an input stream. \param is an input stream + \param fileversionpart1 first number of .res the file version + \param fileversionpart2 second number of .res the file version + \param fileversionpart3 third number of .res the file version */ - void load(ifstream& is); + void load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3); + + + /** + \brief Attach decoys. + \param terminatecomputation reference to a variable determining that the computation must be stopped + */ + void attachDecoys(bool& terminatecomputation); }; diff --git a/CycloBranch/core/cSummaryFormula.cpp b/CycloBranch/core/cSummaryFormula.cpp index c558dd7..f59163b 100644 --- a/CycloBranch/core/cSummaryFormula.cpp +++ b/CycloBranch/core/cSummaryFormula.cpp @@ -139,22 +139,28 @@ void rechargeMap(int charge, map& atoms) { } -void cSummaryFormula::combineAtoms(cPeakListSeries& peaklistseries, int peaklistseriessize, vector& peaklistseriessizes, cPeaksList& isotopeprofile, vector& depthvector, int depth, double mass, double intensity, int charge, double minimumabsoluteintensity) { +void cSummaryFormula::combineAtoms(cPeakListSeries& peaklistseries, int peaklistseriessize, vector& peaklistseriessizes, cPeaksList& isotopeprofile, vector& depthvector, int depth, double mass, double intensity, double charge, double minimumabsoluteintensity, double& localmaximumintensity, double minimumrelativeintensity) { if (depth < peaklistseriessize) { for (int i = 0; i < peaklistseriessizes[depth]; i++) { depthvector[depth] = i; - combineAtoms(peaklistseries, peaklistseriessize, peaklistseriessizes, isotopeprofile, depthvector, depth + 1, mass + peaklistseries[depth][i].mzratio, intensity * peaklistseries[depth][i].absoluteintensity, charge, minimumabsoluteintensity); + combineAtoms(peaklistseries, peaklistseriessize, peaklistseriessizes, isotopeprofile, depthvector, depth + 1, mass + peaklistseries[depth][i].mzratio, intensity * peaklistseries[depth][i].absoluteintensity, charge, minimumabsoluteintensity, localmaximumintensity, minimumrelativeintensity); } } else { + if (intensity > localmaximumintensity) { + localmaximumintensity = intensity; + } + if (intensity >= minimumabsoluteintensity) { - cPeak p; - p.mzratio = mass/(double)charge; - p.absoluteintensity = intensity; - for (int i = 0; i < peaklistseriessize; i++) { - p.description += peaklistseries[i][depthvector[i]].description; + if (intensity >= localmaximumintensity * minimumrelativeintensity) { + cPeak p; + p.mzratio = mass / charge; + p.absoluteintensity = intensity; + for (int i = 0; i < peaklistseriessize; i++) { + p.description += peaklistseries[i][depthvector[i]].description; + } + isotopeprofile.add(p); } - isotopeprofile.add(p); } } } @@ -514,7 +520,7 @@ double cSummaryFormula::getMass() { } -cPeaksList cSummaryFormula::getIsotopePattern(double fwhm, int charge, bool positive, bool writedescription) { +cPeaksList cSummaryFormula::getIsotopePattern(double fwhm, int charge, bool positive, int maxchangedatoms, bool writedescription) { map atoms; addStringFormulaToMap(formula, atoms); @@ -528,6 +534,8 @@ cPeaksList cSummaryFormula::getIsotopePattern(double fwhm, int charge, bool posi double mostintense; int mostintenseid; + double basemass; + cPeakListSeries peaklistseries; for (auto it = atoms.begin(); it != atoms.end(); ++it) { cPeaksList peaklist; @@ -541,7 +549,7 @@ cPeaksList cSummaryFormula::getIsotopePattern(double fwhm, int charge, bool posi mostintenseid = 0; bricksdatabase.clear(); bricksprobabilities.clear(); - for (auto it2 = atomisotopes.begin(); it2 != atomisotopes.end(); ++it2) { + for (auto it2 = atomisotopes.rbegin(); it2 != atomisotopes.rend(); ++it2) { brick.clear(); brick.setComposition(to_string(numberofbasicbricks + 1), false); brick.setMass(it2->second.mass); @@ -561,16 +569,17 @@ cPeaksList cSummaryFormula::getIsotopePattern(double fwhm, int charge, bool posi numberofbasicbricks++; } - maximumbricksincombination = min(5, atomcount); + maximumbricksincombination = min(maxchangedatoms, atomcount); combarray.clear(); for (int i = 0; i < maximumbricksincombination; i++) { combarray.push_back(1); } + basemass = periodictablemap[atom] * (atomcount - maximumbricksincombination); do { cPeak peak; - peak.mzratio = bricksdatabase.getMassOfComposition(combarray, numberofbasicbricks) + periodictablemap[atom] * (atomcount - maximumbricksincombination); + peak.mzratio = bricksdatabase.getMassOfComposition(combarray, numberofbasicbricks) + basemass; if (it->second < 0) { peak.mzratio = -peak.mzratio; } @@ -596,14 +605,18 @@ cPeaksList cSummaryFormula::getIsotopePattern(double fwhm, int charge, bool posi depthvector.resize(peaklistseriessize); cPeaksList isotopeprofile; - combineAtoms(peaklistseries, peaklistseriessize, peaklistseriessizes, isotopeprofile, depthvector, 0, 0, 1, charge, 0.00001); + double localmaximumintensity = 0; + double relativeintensitythreshold = 0.1; + + combineAtoms(peaklistseries, peaklistseriessize, peaklistseriessizes, isotopeprofile, depthvector, 0, 0, 1, (double)charge, 0.00001, localmaximumintensity, relativeintensitythreshold / 100.0); + isotopeprofile.normalizeIntenzity(); - isotopeprofile.cropRelativeIntenzity(0.1); + isotopeprofile.cropRelativeIntenzity(relativeintensitythreshold); cPeaksList reducedprofile; reduceIsotopeProfile(isotopeprofile, reducedprofile, fwhm); reducedprofile.normalizeIntenzity(); - reducedprofile.cropRelativeIntenzity(0.1); + reducedprofile.cropRelativeIntenzity(relativeintensitythreshold); return reducedprofile; } @@ -620,3 +633,11 @@ void cSummaryFormula::load(ifstream& is) { is.read((char *)&partial, sizeof(bool)); } + +bool cSummaryFormula::equals(cSummaryFormula& secondformula) { + if ((partial == secondformula.partial) && (formula.compare(secondformula.formula) == 0)) { + return true; + } + return false; +} + diff --git a/CycloBranch/core/cSummaryFormula.h b/CycloBranch/core/cSummaryFormula.h index 420d717..b0f8b93 100644 --- a/CycloBranch/core/cSummaryFormula.h +++ b/CycloBranch/core/cSummaryFormula.h @@ -62,7 +62,7 @@ class cSummaryFormula { string formula; - void combineAtoms(cPeakListSeries& peaklistseries, int peaklistseriessize, vector& peaklistseriessizes, cPeaksList& isotopeprofile, vector& depthvector, int depth, double mass, double intensity, int charge, double minimumabsoluteintensity); + void combineAtoms(cPeakListSeries& peaklistseries, int peaklistseriessize, vector& peaklistseriessizes, cPeaksList& isotopeprofile, vector& depthvector, int depth, double mass, double intensity, double charge, double minimumabsoluteintensity, double& localmaximumintensity, double minimumrelativeintensity); double getIntensity(cBricksDatabase& bricksprobabilities, vector& combarray, int mostintenseid, int mostintenseatomscount, int isotopecount); @@ -180,10 +180,11 @@ class cSummaryFormula { \param fwhm FWHM \param charge charge \param positive true if the charge is positive charge, false if the charge is negative + \param maxchangedatoms maximum number of atoms of an element which are replaced with isotopic variants \param writedescription if true then string descriptions of peaks are filled \retval cPeaksList isotopic pattern of the formula */ - cPeaksList getIsotopePattern(double fwhm, int charge, bool positive, bool writedescription); + cPeaksList getIsotopePattern(double fwhm, int charge, bool positive, int maxchangedatoms, bool writedescription); /** @@ -199,6 +200,14 @@ class cSummaryFormula { */ void load(ifstream& is); + + /** + \brief Check if the object equals to another object. + \param secondformula object for comparison + \retval bool true if the objects are equals + */ + bool equals(cSummaryFormula& secondformula); + }; diff --git a/CycloBranch/core/cTheoreticalSpectrum.cpp b/CycloBranch/core/cTheoreticalSpectrum.cpp index 5a78d59..e6e41a3 100644 --- a/CycloBranch/core/cTheoreticalSpectrum.cpp +++ b/CycloBranch/core/cTheoreticalSpectrum.cpp @@ -81,7 +81,7 @@ void cTheoreticalSpectrum::clearFalseHits(map 0) && isInPpmMassErrorTolerance(experimentalpeaks[middle - 1].mzratio, theoreticalpeaks[i].mzratio, fragmentmasserrortolerance)) { - currentppm = abs(ppmError(experimentalpeaks[middle - 1].mzratio, theoreticalpeaks[i].mzratio)); + tmp = middle; + while (middle > 0) { + currentppm = fabs(ppmError(experimentalpeaks[middle - 1].mzratio, theoreticalpeaks[i].mzratio)); if (currentppm < bestppm) { best = middle - 1; bestppm = currentppm; } + else { + break; + } middle--; } - while ((middle < experimentalpeakssize - 1) && isInPpmMassErrorTolerance(experimentalpeaks[middle + 1].mzratio, theoreticalpeaks[i].mzratio, fragmentmasserrortolerance)) { - currentppm = abs(ppmError(experimentalpeaks[middle + 1].mzratio, theoreticalpeaks[i].mzratio)); + middle = tmp; + while (middle < experimentalpeakssize - 1) { + currentppm = fabs(ppmError(experimentalpeaks[middle + 1].mzratio, theoreticalpeaks[i].mzratio)); if (currentppm < bestppm) { best = middle + 1; bestppm = currentppm; } + else { + break; + } middle++; } @@ -1256,7 +1264,13 @@ void cTheoreticalSpectrum::addMetalPeaks(cPeak& peak, vector& metals, in void cTheoreticalSpectrum::removeUnmatchedMetalIsotopes(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks) { int lastparent = 0; + + size_t pos; + double ratio; + for (int i = 0; i < theoreticalpeaksrealsize; i++) { + //cout << parameters->peakidtodesc[theoreticalpeaks[i].descriptionid] << endl; + if (!theoreticalpeaks[i].isotope) { lastparent = i; continue; @@ -1269,6 +1283,44 @@ void cTheoreticalSpectrum::removeUnmatchedMetalIsotopes(cPeaksList& theoreticalp theoreticalpeaks[i].matched--; theoreticalpeaks[i].matchedid = -1; } + + if ((theoreticalpeaks[lastparent].matched > 0) && (theoreticalpeaks[i].matched == 0)) { + pos = parameters->peakidtodesc[theoreticalpeaks[i].descriptionid].find("54Fe"); + if ((pos != string::npos) && (parameters->minratio54Fe56Fe > 0)) { + // remove 56Fe + experimentalmatches[theoreticalpeaks[lastparent].matchedid].erase(experimentalmatches[theoreticalpeaks[lastparent].matchedid].find(lastparent)); + experimentalpeaks[theoreticalpeaks[lastparent].matchedid].matched--; + + theoreticalpeaks[lastparent].matched--; + theoreticalpeaks[lastparent].matchedid = -1; + } + } + + // to do + // other elements + // multiple Fe atoms in a molecule + // 54Fe vs. 56Fe m/z difference + charged variants + if ((theoreticalpeaks[lastparent].matched > 0) && (theoreticalpeaks[i].matched > 0)) { + pos = parameters->peakidtodesc[theoreticalpeaks[i].descriptionid].find("54Fe"); + if ((pos != string::npos) && (experimentalpeaks[theoreticalpeaks[lastparent].matchedid].relativeintensity > 0)) { + ratio = experimentalpeaks[theoreticalpeaks[i].matchedid].relativeintensity / experimentalpeaks[theoreticalpeaks[lastparent].matchedid].relativeintensity; + if ((ratio < parameters->minratio54Fe56Fe) || (ratio > parameters->maxratio54Fe56Fe)) { + // remove 56Fe + experimentalmatches[theoreticalpeaks[lastparent].matchedid].erase(experimentalmatches[theoreticalpeaks[lastparent].matchedid].find(lastparent)); + experimentalpeaks[theoreticalpeaks[lastparent].matchedid].matched--; + + theoreticalpeaks[lastparent].matched--; + theoreticalpeaks[lastparent].matchedid = -1; + + // remove 54Fe + experimentalmatches[theoreticalpeaks[i].matchedid].erase(experimentalmatches[theoreticalpeaks[i].matchedid].find(i)); + experimentalpeaks[theoreticalpeaks[i].matchedid].matched--; + + theoreticalpeaks[i].matched--; + theoreticalpeaks[i].matchedid = -1; + } + } + } } } @@ -1409,12 +1461,12 @@ void cTheoreticalSpectrum::removeUnmatchedIsotopePatterns(cPeaksList& theoretica } -int cTheoreticalSpectrum::removeUnmatchedFeatures(bool lcms, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, vector< vector >& hintsindex/*, int id*/) { +int cTheoreticalSpectrum::removeUnmatchedFeatures(bool lcms, int peaklistseriesvectorid, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, vector< vector >& hintsindex/*, int id*/) { if (theoreticalpeaksrealsize == 0) { return 0; } - int size = parameters->peaklistseries.size(); + int size = parameters->peaklistseriesvector[peaklistseriesvectorid].size(); int k; int peaksremoved = 0; @@ -1428,7 +1480,9 @@ int cTheoreticalSpectrum::removeUnmatchedFeatures(bool lcms, cPeaksList& theoret int stop = 0; int currid = theoreticalpeaks[0].compoundid; int compoundsize = 0; - int msize; + //int msize; + + int left, right, middle; for (int i = 0; i < theoreticalpeaksrealsize; i++) { @@ -1484,13 +1538,29 @@ int cTheoreticalSpectrum::removeUnmatchedFeatures(bool lcms, cPeaksList& theoret patternsize = 0; while ((k < theoreticalpeaksrealsize) && (theoreticalpeaks[k].groupid == theoreticalpeaks[i].groupid)) { - msize = (int)hintsindex[k].size(); - for (int m = 0; m < msize; m++) { - if (hintsindex[k][m] == hintsindex[i][j]) { + left = 0; + right = (int)hintsindex[k].size() - 1; + while (left <= right) { + middle = (left + right) / 2; + if (hintsindex[k][middle] == hintsindex[i][j]) { patternsize++; break; } - } + if (hintsindex[i][j] < hintsindex[k][middle]) { + right = middle - 1; + } + else { + left = middle + 1; + } + } + + //msize = (int)hintsindex[k].size(); + //for (int m = 0; m < msize; m++) { + // if (hintsindex[k][m] == hintsindex[i][j]) { + // patternsize++; + // break; + // } + //} if (patternsize >= parameters->minimumpatternsize) { break; @@ -1595,6 +1665,117 @@ int cTheoreticalSpectrum::removeUnmatchedCompounds(cPeaksList& theoreticalpeaks, } +void cTheoreticalSpectrum::removeCompoundsOutsideRTRange(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks) { + double currentrt = experimentalpeaks.getRetentionTime(); + cSequence* compound; + + for (int i = 0; i < theoreticalpeaksrealsize; i++) { + if (theoreticalpeaks[i].matched > 0) { + compound = &(parameters->sequencedatabase[theoreticalpeaks[i].compoundid]); + if (compound->getMaximumRetentionTime() > 0) { + if ((currentrt < compound->getMinimumRetentionTime()) || (currentrt > compound->getMaximumRetentionTime())) { + experimentalmatches[theoreticalpeaks[i].matchedid].erase(experimentalmatches[theoreticalpeaks[i].matchedid].find(i)); + experimentalpeaks[theoreticalpeaks[i].matchedid].matched--; + + theoreticalpeaks[i].matched--; + theoreticalpeaks[i].matchedid = -1; + } + } + } + } +} + + +void cTheoreticalSpectrum::removePeaksUnderAnnotationThreshold(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks) { + for (int i = 0; i < theoreticalpeaksrealsize; i++) { + if (theoreticalpeaks[i].isotope) { + continue; + } + + if (theoreticalpeaks[i].matched > 0) { + if ((experimentalpeaks[theoreticalpeaks[i].matchedid].relativeintensity < parameters->minimumannotationintensityrelative) || (experimentalpeaks[theoreticalpeaks[i].matchedid].absoluteintensity < parameters->minimumannotationintensityabsolute)) { + experimentalmatches[theoreticalpeaks[i].matchedid].erase(experimentalmatches[theoreticalpeaks[i].matchedid].find(i)); + experimentalpeaks[theoreticalpeaks[i].matchedid].matched--; + + theoreticalpeaks[i].matched--; + theoreticalpeaks[i].matchedid = -1; + } + } + } +} + + +void cTheoreticalSpectrum::removePatternsUnderAnnotationThreshold(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks) { + if (theoreticalpeaksrealsize == 0) { + return; + } + + int groupid = theoreticalpeaks[0].groupid; + int start = 0; + int stop = 0; + int maximumintensityid = 0; + double maximumintensity = theoreticalpeaks[0].relativeintensity; + bool cleargroup = false; + + double maximumexperimentalintensityrelative; + double maximumexperimentalintensityabsolute; + if (theoreticalpeaks[maximumintensityid].matched) { + maximumexperimentalintensityrelative = experimentalpeaks[theoreticalpeaks[maximumintensityid].matchedid].relativeintensity; + maximumexperimentalintensityabsolute = experimentalpeaks[theoreticalpeaks[maximumintensityid].matchedid].absoluteintensity; + } + + for (int i = 0; i < theoreticalpeaksrealsize; i++) { + if (groupid == theoreticalpeaks[i].groupid) { + if (theoreticalpeaks[i].relativeintensity > maximumintensity) { + maximumintensityid = i; + maximumintensity = theoreticalpeaks[i].relativeintensity; + if (theoreticalpeaks[i].matched) { + maximumexperimentalintensityrelative = experimentalpeaks[theoreticalpeaks[i].matchedid].relativeintensity; + maximumexperimentalintensityabsolute = experimentalpeaks[theoreticalpeaks[i].matchedid].absoluteintensity; + } + } + + stop = i; + } + + if ((groupid != theoreticalpeaks[i].groupid) || (i == theoreticalpeaksrealsize - 1)) { + + if (theoreticalpeaks[maximumintensityid].matched > 0) { + if ((maximumexperimentalintensityrelative < parameters->minimumannotationintensityrelative) || (maximumexperimentalintensityabsolute < parameters->minimumannotationintensityabsolute)) { + cleargroup = true; + } + } + else { + cleargroup = true; + } + + if (cleargroup) { + for (int j = start; j <= stop; j++) { + if (theoreticalpeaks[j].matched > 0) { + experimentalmatches[theoreticalpeaks[j].matchedid].erase(experimentalmatches[theoreticalpeaks[j].matchedid].find(j)); + experimentalpeaks[theoreticalpeaks[j].matchedid].matched--; + + theoreticalpeaks[j].matched--; + theoreticalpeaks[j].matchedid = -1; + } + } + } + + groupid = theoreticalpeaks[i].groupid; + start = i; + stop = i; + maximumintensityid = i; + maximumintensity = theoreticalpeaks[i].relativeintensity; + cleargroup = false; + if (theoreticalpeaks[i].matched) { + maximumexperimentalintensityrelative = experimentalpeaks[theoreticalpeaks[i].matchedid].relativeintensity; + maximumexperimentalintensityabsolute = experimentalpeaks[theoreticalpeaks[i].matchedid].absoluteintensity; + } + } + } +} + + void cTheoreticalSpectrum::removeUnmatchedPatternsFineSpectra(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks) { if (theoreticalpeaksrealsize == 0) { return; @@ -1795,38 +1976,38 @@ void cTheoreticalSpectrum::removeUnmatchedPatternsFineSpectra(cPeaksList& theore // lithium if (hasLi) { - if (checkIsotope(elementLi, isotopeLi6, Li6, Li7, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementLi, isotopeLi6, Li6, Li7, 0.000001, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // boron if (hasB) { - if (checkIsotope(elementB, isotopeB10, B10, B11, 0.3, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementB, isotopeB10, B10, B11, 0.000001, 0.3, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // titanium (part 1) if (hasTi) { - if (checkIsotope(elementTi, isotopeTi46, Ti46, Ti48, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementTi, isotopeTi46, Ti46, Ti48, 0.000001, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } - if (checkIsotope(elementTi, isotopeTi47, Ti47, Ti48, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementTi, isotopeTi47, Ti47, Ti48, 0.000001, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // chromium (part 1) if (hasCr) { - if (checkIsotope(elementCr, isotopeCr50, Cr50, Cr52, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementCr, isotopeCr50, Cr50, Cr52, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // iron if (hasFe) { - if (checkIsotope(elementFe, isotopeFe54, Fe54, Fe56, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementFe, isotopeFe54, Fe54, Fe56, parameters->minratio54Fe56Fe, parameters->maxratio54Fe56Fe, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } @@ -1835,95 +2016,95 @@ void cTheoreticalSpectrum::removeUnmatchedPatternsFineSpectra(cPeaksList& theore // magnesium if (hasMg) { - if (checkIsotope(elementMg, isotopeMg25, Mg25, Mg24, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementMg, isotopeMg25, Mg25, Mg24, 0.000001, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } - if (checkIsotope(elementMg, isotopeMg26, Mg26, Mg24, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementMg, isotopeMg26, Mg26, Mg24, 0.000001, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // silicon if (hasSi) { - if (checkIsotope(elementSi, isotopeSi29, Si29, Si28, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementSi, isotopeSi29, Si29, Si28, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } - if (checkIsotope(elementSi, isotopeSi30, Si30, Si28, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementSi, isotopeSi30, Si30, Si28, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // sulfur if (hasS) { - if (checkIsotope(elementS, isotopeS34, S34, S32, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementS, isotopeS34, S34, S32, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // chlorine if (hasCl) { - if (checkIsotope(elementCl, isotopeCl37, Cl37, Cl35, 0.4, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementCl, isotopeCl37, Cl37, Cl35, 0.000001, 0.4, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // potassium if (hasK) { - if (checkIsotope(elementK, isotopeK41, K41, K39, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementK, isotopeK41, K41, K39, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // titanium (part 2) if (hasTi) { - if (checkIsotope(elementTi, isotopeTi49, Ti49, Ti48, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementTi, isotopeTi49, Ti49, Ti48, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } - if (checkIsotope(elementTi, isotopeTi50, Ti50, Ti48, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementTi, isotopeTi50, Ti50, Ti48, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // chromium (part 2) if (hasCr) { - if (checkIsotope(elementCr, isotopeCr53, Cr53, Cr52, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementCr, isotopeCr53, Cr53, Cr52, 0.000001, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // nickel if (hasNi) { - if (checkIsotope(elementNi, isotopeNi60, Ni60, Ni58, 0.5, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementNi, isotopeNi60, Ni60, Ni58, 0.000001, 0.5, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } - if (checkIsotope(elementNi, isotopeNi62, Ni62, Ni58, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementNi, isotopeNi62, Ni62, Ni58, 0.000001, 0.1, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // copper if (hasCu) { - if (checkIsotope(elementCu, isotopeCu65, Cu65, Cu63, 0.6, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementCu, isotopeCu65, Cu65, Cu63, 0.000001, 0.6, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // zinc if (hasZn) { - if (checkIsotope(elementZn, isotopeZn66, Zn66, Zn64, 0.7, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementZn, isotopeZn66, Zn66, Zn64, 0.000001, 0.7, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } - if (checkIsotope(elementZn, isotopeZn67, Zn67, Zn64, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementZn, isotopeZn67, Zn67, Zn64, 0.000001, 0.2, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } - if (checkIsotope(elementZn, isotopeZn68, Zn68, Zn64, 0.5, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementZn, isotopeZn68, Zn68, Zn64, 0.000001, 0.5, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } // gallium if (hasGa) { - if (checkIsotope(elementGa, isotopeGa71, Ga71, Ga69, 0.8, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { + if (checkIsotope(elementGa, isotopeGa71, Ga71, Ga69, 0.000001, 0.8, theoreticalpeaks, theoreticalpeaksrealsize, experimentalpeaks, start, stop, maximumintensityid, maximumexperimentalintensity)) { cleargroup = true; } } @@ -2667,7 +2848,7 @@ void cTheoreticalSpectrum::generateFragmentIsotopePatterns(int& theoreticalpeaks isotopepatterncache.unlock(); if (!hit) { - isotopepattern = tmppeaklist[i].formula.getIsotopePattern(parameters->fwhm, abs(tmppeaklist[i].charge), (tmppeaklist[i].charge < 0) ? false : true, writedescription); + isotopepattern = tmppeaklist[i].formula.getIsotopePattern(parameters->fwhm, abs(tmppeaklist[i].charge), (tmppeaklist[i].charge < 0) ? false : true, 5, writedescription); isotopepatterncache.lock(); isotopepatterncache.put(hashedformula, isotopepattern); @@ -2807,7 +2988,7 @@ void cTheoreticalSpectrum::fillExperimentalAnnotationsAndRemoveUnmatchedTheoreti } -bool cTheoreticalSpectrum::checkIsotope(string& elementstring, string& isotopestring, double isotopemass1, double isotopemass2, double intensityratio, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, int start, int stop, int maximumintensityid, double maximumexperimentalintensity) { +bool cTheoreticalSpectrum::checkIsotope(string& elementstring, string& isotopestring, double isotopemass1, double isotopemass2, double minintensityratio, double maxintensityratio, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, int start, int stop, int maximumintensityid, double maximumexperimentalintensity) { bool notdetected = false; int isotopeposition = -1; double intensitymultiplier = 1.0; @@ -2835,13 +3016,18 @@ bool cTheoreticalSpectrum::checkIsotope(string& elementstring, string& isotopest } if (isotopeposition == -1) { - notdetected = true; + if (minintensityratio > 0) { + notdetected = true; + } } else { if ((theoreticalpeaks[isotopeposition].matched > 0) && (theoreticalpeaks[maximumintensityid].matched > 0)) { if (maximumexperimentalintensity >= parameters->minimumrelativeintensitythreshold) { if (theoreticalpeaks[isotopeposition].relativeintensity*maximumexperimentalintensity / 100.0 >= parameters->minimumrelativeintensitythreshold) { - if (experimentalpeaks[theoreticalpeaks[isotopeposition].matchedid].relativeintensity > intensityratio * intensitymultiplier * maximumexperimentalintensity) { + if (experimentalpeaks[theoreticalpeaks[isotopeposition].matchedid].relativeintensity > maxintensityratio * intensitymultiplier * maximumexperimentalintensity) { + notdetected = true; + } + if (experimentalpeaks[theoreticalpeaks[isotopeposition].matchedid].relativeintensity < minintensityratio * intensitymultiplier * maximumexperimentalintensity) { notdetected = true; } } @@ -4212,7 +4398,7 @@ int cTheoreticalSpectrum::compareOther(cPeaksList& sortedpeaklist, bool writedes } -void cTheoreticalSpectrum::generateMSSpectrum(bool& terminatecomputation, bool writedescription) { +void cTheoreticalSpectrum::generateMSSpectrum(int sequencestart, int sequencestop, bool& terminatecomputation, bool writedescription) { cPeak peak; cSummaryFormula formula; regex rx; @@ -4232,7 +4418,7 @@ void cTheoreticalSpectrum::generateMSSpectrum(bool& terminatecomputation, bool w } int theoreticalpeaksrealsize = 0; - for (int i = 0; i < parameters->sequencedatabase.size(); i++) { + for (int i = sequencestart; i < sequencestop; i++) { if (terminatecomputation) { theoreticalpeaks.clear(); @@ -4270,7 +4456,7 @@ void cTheoreticalSpectrum::generateMSSpectrum(bool& terminatecomputation, bool w peak.mzratio = peak.mzratio / (double)(m + 1); if (writedescription) { - peak.description = parameters->ionsfortheoreticalspectraMS1[j].name.substr(0, parameters->ionsfortheoreticalspectraMS1[j].name.size() - 1) + " "; + peak.description = fixLabelCharge(parameters->ionsfortheoreticalspectraMS1[j].name, (parameters->precursorcharge > 0) ? 1 : -1, m + 1) + " "; peak.description += to_string(m + 1); if (parameters->ionsfortheoreticalspectraMS1[j].positive) { peak.description += "+"; @@ -4299,7 +4485,7 @@ void cTheoreticalSpectrum::generateMSSpectrum(bool& terminatecomputation, bool w } -void cTheoreticalSpectrum::generateFineMSSpectrum(bool& terminatecomputation) { +void cTheoreticalSpectrum::generateFineMSSpectrum(int sequencestart, int sequencestop, bool& terminatecomputation) { cSummaryFormula formula; string proton = "H+"; string description; @@ -4308,26 +4494,7 @@ void cTheoreticalSpectrum::generateFineMSSpectrum(bool& terminatecomputation) { int theoreticalpeaksrealsize = 0; int groupid = 0; - cSequence sequence; - string summary; - string name; - - int seqdbsize = parameters->sequencedatabase.size(); - sequence.setPeptideType(other); - sequence.setDecoy(true); - - for (int i = 0; i < seqdbsize; i++) { - if (terminatecomputation) { - parameters->sequencedatabase.clear(); - return; - } - - summary = parameters->sequencedatabase[i].getSummaryFormula() + "H"; - sequence.setSummaryFormula(summary); - parameters->sequencedatabase.push_back(sequence); - } - - for (int i = 0; i < parameters->sequencedatabase.size(); i++) { + for (int i = sequencestart; i < sequencestop; i++) { if (terminatecomputation) { theoreticalpeaks.clear(); @@ -4344,7 +4511,7 @@ void cTheoreticalSpectrum::generateFineMSSpectrum(bool& terminatecomputation) { cSummaryFormula ionformula; - for (int m = 0; m < (double)parameters->ionsfortheoreticalspectraMS1[j].multiplier; m++) { + for (int m = 0; m < parameters->ionsfortheoreticalspectraMS1[j].multiplier; m++) { tmp = formula.getSummary(); ionformula.addFormula(tmp); } @@ -4370,7 +4537,7 @@ void cTheoreticalSpectrum::generateFineMSSpectrum(bool& terminatecomputation) { } } - description = parameters->ionsfortheoreticalspectraMS1[j].name.substr(0, parameters->ionsfortheoreticalspectraMS1[j].name.size() - 1) + " "; + description = fixLabelCharge(parameters->ionsfortheoreticalspectraMS1[j].name, (parameters->precursorcharge > 0) ? 1 : -1, n + 1) + " "; description += to_string(n + 1); if (parameters->ionsfortheoreticalspectraMS1[j].positive) { description += "+"; @@ -4383,7 +4550,7 @@ void cTheoreticalSpectrum::generateFineMSSpectrum(bool& terminatecomputation) { } description += " " + parameters->sequencedatabase[i].getNameWithReferenceAsHTMLString() + " ("; - cPeaksList isotopepattern = chargedformula.getIsotopePattern(parameters->fwhm, n + 1, parameters->ionsfortheoreticalspectraMS1[j].positive, true); + cPeaksList isotopepattern = chargedformula.getIsotopePattern(parameters->fwhm, n + 1, parameters->ionsfortheoreticalspectraMS1[j].positive, 5, true); for (int p = 0; p < isotopepattern.size(); p++) { isotopepattern[p].description = description + isotopepattern[p].description + "): "; //isotopepattern[p].iontype = parameters->ionsfortheoreticalspectra[j]; // unused @@ -4408,15 +4575,28 @@ void cTheoreticalSpectrum::generateFineMSSpectrum(bool& terminatecomputation) { } -void cTheoreticalSpectrum::getHintsIndex(int id, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex) { - experimentalpeaks = parameters->peaklistseries[id]; +void cTheoreticalSpectrum::getHintsIndex(int id, int peaklistseriesvectorid, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex, bool lcmsrt, bool skipcomparison) { + experimentalpeaks = parameters->peaklistseriesvector[peaklistseriesvectorid][id]; cPeaksList* tsfullpeaklist = tsfull.getTheoreticalPeaks(); experimentalmatches.clear(); - searchForPeakPairs(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks, parameters->fragmentmasserrortolerance); + + if (!skipcomparison) { + searchForPeakPairs(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks, parameters->fragmentmasserrortolerance); + } + else { + experimentalmatches.resize(experimentalpeaks.size()); + } + + if (lcmsrt) { + removeCompoundsOutsideRTRange(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); + } if (parameters->generateisotopepattern) { + if ((parameters->minimumannotationintensityrelative > parameters->minimumrelativeintensitythreshold) || (parameters->minimumannotationintensityabsolute > parameters->minimumabsoluteintensitythreshold)) { + removePatternsUnderAnnotationThreshold(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); + } if (parameters->minimumpatternsize > 1) { removeUnmatchedPatternsFineSpectra(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); } @@ -4427,6 +4607,11 @@ void cTheoreticalSpectrum::getHintsIndex(int id, cTheoreticalSpectrum& tsfull, c removeUnmatchedPatternsByMZDifference(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); } } + else { + if ((parameters->minimumannotationintensityrelative > parameters->minimumrelativeintensitythreshold) || (parameters->minimumannotationintensityabsolute > parameters->minimumabsoluteintensitythreshold)) { + removePeaksUnderAnnotationThreshold(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); + } + } // clear matched isotopes of unmatched monoisotopic peaks unmatchedpeaksinmatchedpatterns.clear(); @@ -4452,15 +4637,28 @@ void cTheoreticalSpectrum::getHintsIndex(int id, cTheoreticalSpectrum& tsfull, c } -void cTheoreticalSpectrum::compareMSSpectrum(int id, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex) { - experimentalpeaks = parameters->peaklistseries[id]; +void cTheoreticalSpectrum::compareMSSpectrum(int id, int peaklistseriesvectorid, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex, bool lcmsrt, bool skipcomparison) { + experimentalpeaks = parameters->peaklistseriesvector[peaklistseriesvectorid][id]; cPeaksList* tsfullpeaklist = tsfull.getTheoreticalPeaks(); experimentalmatches.clear(); - searchForPeakPairs(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks, parameters->fragmentmasserrortolerance); + + if (!skipcomparison) { + searchForPeakPairs(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks, parameters->fragmentmasserrortolerance); + } + else { + experimentalmatches.resize(experimentalpeaks.size()); + } + + if (lcmsrt) { + removeCompoundsOutsideRTRange(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); + } if (parameters->generateisotopepattern) { + if ((parameters->minimumannotationintensityrelative > parameters->minimumrelativeintensitythreshold) || (parameters->minimumannotationintensityabsolute > parameters->minimumabsoluteintensitythreshold)) { + removePatternsUnderAnnotationThreshold(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); + } if (parameters->minimumpatternsize > 1) { removeUnmatchedPatternsFineSpectra(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); } @@ -4471,8 +4669,13 @@ void cTheoreticalSpectrum::compareMSSpectrum(int id, cTheoreticalSpectrum& tsful removeUnmatchedPatternsByMZDifference(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); } } + else { + if ((parameters->minimumannotationintensityrelative > parameters->minimumrelativeintensitythreshold) || (parameters->minimumannotationintensityabsolute > parameters->minimumabsoluteintensitythreshold)) { + removePeaksUnderAnnotationThreshold(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); + } + } - bool lcms = (parameters->peaklistseries.size() > 1) && !((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)); + bool lcms = (parameters->peaklistseriesvector[peaklistseriesvectorid].size() > 1) && !((parameters->peaklistfileformats[peaklistseriesvectorid] == mis) || (parameters->peaklistfileformats[peaklistseriesvectorid] == imzML)); // pre-cleaning (relative intensity threshold, minimumpatternsize) if (parameters->generateisotopepattern) { @@ -4489,8 +4692,8 @@ void cTheoreticalSpectrum::compareMSSpectrum(int id, cTheoreticalSpectrum& tsful } // LC-MS data or MSI data - if (lcms || (parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { - removeUnmatchedFeatures(lcms, *tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks, hintsindex/*, id*/); + if (lcms || (parameters->peaklistfileformats[peaklistseriesvectorid] == mis) || (parameters->peaklistfileformats[peaklistseriesvectorid] == imzML)) { + removeUnmatchedFeatures(lcms, peaklistseriesvectorid, *tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks, hintsindex/*, id*/); } // direct MS else { @@ -4516,7 +4719,7 @@ void cTheoreticalSpectrum::compareMSSpectrum(int id, cTheoreticalSpectrum& tsful } // calculate scores - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { targetscores.clear(); decoyscores.clear(); calculateEnvelopeScores(*tsfullpeaklist, tsfull.getNumberOfPeaks(), experimentalpeaks); @@ -5595,7 +5798,7 @@ void cTheoreticalSpectrum::store(ofstream& os) { } -void cTheoreticalSpectrum::load(ifstream& is) { +void cTheoreticalSpectrum::load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3) { int size, size2; eFragmentIonType iontype; int losstype; @@ -5605,8 +5808,8 @@ void cTheoreticalSpectrum::load(ifstream& is) { parameters = 0; - theoreticalpeaks.load(is); - experimentalpeaks.load(is); + theoreticalpeaks.load(is, fileversionpart1, fileversionpart2, fileversionpart3); + experimentalpeaks.load(is, fileversionpart1, fileversionpart2, fileversionpart3); candidate.load(is); is.read((char *)&experimentalpeaksmatched, sizeof(int)); @@ -5680,3 +5883,136 @@ void cTheoreticalSpectrum::load(ifstream& is) { } } + +bool cTheoreticalSpectrum::equals(cTheoreticalSpectrum& secondtheoreticalspectrum) { + if (!theoreticalpeaks.equals(secondtheoreticalspectrum.theoreticalpeaks)) { + cout << "theoreticalpeaks does not match" << endl; + return false; + } + + if (!experimentalpeaks.equals(secondtheoreticalspectrum.experimentalpeaks)) { + cout << "experimentalpeaks does not match" << endl; + return false; + } + + // to do - check candidate + + if (experimentalpeaksmatched != secondtheoreticalspectrum.experimentalpeaksmatched) { + cout << "experimentalpeaksmatched does not match" << endl; + return false; + } + + if (experimentalmatches != secondtheoreticalspectrum.experimentalmatches) { + cout << "experimentalmatches does not match" << endl; + return false; + } + + if (scrambledpeaksmatched != secondtheoreticalspectrum.scrambledpeaksmatched) { + cout << "scrambledpeaksmatched does not match" << endl; + return false; + } + + if (matchedions != secondtheoreticalspectrum.matchedions) { + cout << "matchedions does not match" << endl; + return false; + } + + if (peakstested != secondtheoreticalspectrum.peakstested) { + cout << "peakstested does not match" << endl; + return false; + } + + if (!compareDoubles(experimentalpeaksmatchedratio, secondtheoreticalspectrum.experimentalpeaksmatchedratio)) { + cout << "experimentalpeaksmatchedratio does not match" << endl; + return false; + } + + if (!compareDoubles(weightedpeaksratio, secondtheoreticalspectrum.weightedpeaksratio)) { + cout << "weightedpeaksratio does not match" << endl; + return false; + } + + if (unmatchedexperimentalpeakscount != secondtheoreticalspectrum.unmatchedexperimentalpeakscount) { + cout << "unmatchedexperimentalpeakscount does not match" << endl; + return false; + } + + if (coveragebyseries.compare(secondtheoreticalspectrum.coveragebyseries) != 0) { + cout << "coveragebyseries does not match" << endl; + return false; + } + + if (valid != secondtheoreticalspectrum.valid) { + cout << "valid does not match" << endl; + return false; + } + + if (!compareDoubles(sumofrelativeintensities, secondtheoreticalspectrum.sumofrelativeintensities)) { + cout << "sumofrelativeintensities does not match" << endl; + return false; + } + + // to do - check rotationslabels + + if (validposition != secondtheoreticalspectrum.validposition) { + cout << "validposition does not match" << endl; + return false; + } + + if (reversevalidposition != secondtheoreticalspectrum.reversevalidposition) { + cout << "reversevalidposition does not match" << endl; + return false; + } + + if (seriescompleted != secondtheoreticalspectrum.seriescompleted) { + cout << "seriescompleted does not match" << endl; + return false; + } + + if (pathid != secondtheoreticalspectrum.pathid) { + cout << "pathid does not match" << endl; + return false; + } + + if (!compareMapsIntDouble(targetscores, secondtheoreticalspectrum.targetscores)) { + cout << "targetscores does not match" << endl; + return false; + } + + if (!compareMapsIntDouble(decoyscores, secondtheoreticalspectrum.decoyscores)) { + cout << "decoyscores does not match" << endl; + return false; + } + + if (!compareMapsIntDouble(fdrscores, secondtheoreticalspectrum.fdrscores)) { + cout << "fdrscores does not match" << endl; + return false; + } + + return true; +} + + +void cTheoreticalSpectrum::attach(cTheoreticalSpectrum& secondtheoreticalspectrum) { + int numberoftheoreticalpeaks = theoreticalpeaks.size(); + + theoreticalpeaks.attach(secondtheoreticalspectrum.theoreticalpeaks); + + if (experimentalpeaks.size() == secondtheoreticalspectrum.experimentalpeaks.size()) { + for (int i = 0; i < experimentalpeaks.size(); i++) { + experimentalpeaks[i].matched += secondtheoreticalspectrum.experimentalpeaks[i].matched; + } + } + + if (experimentalmatches.size() == secondtheoreticalspectrum.experimentalmatches.size()) { + for (int i = 0; i < experimentalmatches.size(); i++) { + for (auto& it : secondtheoreticalspectrum.experimentalmatches[i]) { + experimentalmatches[i].insert(it + numberoftheoreticalpeaks); + } + } + } + + targetscores.insert(secondtheoreticalspectrum.targetscores.begin(), secondtheoreticalspectrum.targetscores.end()); + decoyscores.insert(secondtheoreticalspectrum.decoyscores.begin(), secondtheoreticalspectrum.decoyscores.end()); +} + diff --git a/CycloBranch/core/cTheoreticalSpectrum.h b/CycloBranch/core/cTheoreticalSpectrum.h index 4bd2656..80cb173 100644 --- a/CycloBranch/core/cTheoreticalSpectrum.h +++ b/CycloBranch/core/cTheoreticalSpectrum.h @@ -178,11 +178,20 @@ class cTheoreticalSpectrum { void removeUnmatchedIsotopePatterns(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, cPeaksList& outputtheoreticalpeaks, bool storeunmatchedpeaks); // remove unmatched features - int removeUnmatchedFeatures(bool lcms, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, vector< vector >& hintsindex/*, int id*/); + int removeUnmatchedFeatures(bool lcms, int peaklistseriesvectorid, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, vector< vector >& hintsindex/*, int id*/); // remove unmatched compounds int removeUnmatchedCompounds(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, int minimumiontypes); + // remove compounds outside RT range + void removeCompoundsOutsideRTRange(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks); + + // remove peaks under annotation threshold + void removePeaksUnderAnnotationThreshold(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks); + + // remove isotopic patterns under annotation threshold + void removePatternsUnderAnnotationThreshold(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks); + // remove unmatched patterns in fine isotopic patterns void removeUnmatchedPatternsFineSpectra(cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks); @@ -223,7 +232,7 @@ class cTheoreticalSpectrum { void fillExperimentalAnnotationsAndRemoveUnmatchedTheoreticalPeaks(int& theoreticalpeaksrealsize, ePeptideType peptidetype, cPeaksList& unmatchedpeaksinmatchedpatterns, bool reportunmatchedtheoreticalpeaks, bool writedescription); // check the existence of an isotope - bool checkIsotope(string& elementstring, string& isotopestring, double isotopemass1, double isotopemass2, double intensityratio, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, int start, int stop, int maximumintensityid, double maximumexperimentalintensity); + bool checkIsotope(string& elementstring, string& isotopestring, double isotopemass1, double isotopemass2, double minintensityratio, double maxintensityratio, cPeaksList& theoreticalpeaks, int theoreticalpeaksrealsize, cPeaksList& experimentalpeaks, int start, int stop, int maximumintensityid, double maximumexperimentalintensity); // get intensity multiplier double getIntensityMultiplier(cPeaksList& theoreticalpeaks, int peakid, string& elementstring, size_t startpos); @@ -371,37 +380,47 @@ class cTheoreticalSpectrum { /** \brief Generate a simple mass spectrum. + \param sequencestart index of the first item to be processed + \param sequencestop index of the last item to be processed (excluding the last item) \param terminatecomputation reference to a variable determining that the computation must be stopped \param writedescription if true then string descriptions of peaks are filled */ - void generateMSSpectrum(bool& terminatecomputation, bool writedescription); + void generateMSSpectrum(int sequencestart, int sequencestop, bool& terminatecomputation, bool writedescription); /** \brief Generate a simple mass spectrum with fine isotopic patterns. + \param sequencestart index of the first item to be processed + \param sequencestop index of the last item to be processed (excluding the last item) \param terminatecomputation reference to a variable determining that the computation must be stopped */ - void generateFineMSSpectrum(bool& terminatecomputation); + void generateFineMSSpectrum(int sequencestart, int sequencestop, bool& terminatecomputation); /** \brief Get a map of search hints to identify features in LC-MS data. \param id identifier of an experimental spectrum + \param peaklistseriesvectorid id of a peaklistseriesvector \param tsfull theoretical spectrum \param unmatchedpeaksinmatchedpatterns unmatched peaks in matched isotope patterns \param hintsindex index of experimental spectra for every matched theoretical peak + \param lcmsrt true if LC-MS data are processed and retention time is available + \param skipcomparison if true, the peak comparison is skipped */ - void getHintsIndex(int id, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex); + void getHintsIndex(int id, int peaklistseriesvectorid, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex, bool lcmsrt, bool skipcomparison); /** \brief Compare theoretical peaks with an experimental spectrum. \param id identifier of an experimental spectrum + \param peaklistseriesvectorid id of a peaklistseriesvector \param tsfull theoretical spectrum with descriptions of peaks \param unmatchedpeaksinmatchedpatterns unmatched peaks in matched isotope patterns \param hintsindex index of experimental spectra for every matched theoretical peak + \param lcmsrt true if LC-MS data are processed and retention time is available + \param skipcomparison if true, the peak comparison is skipped */ - void compareMSSpectrum(int id, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex); + void compareMSSpectrum(int id, int peaklistseriesvectorid, cTheoreticalSpectrum& tsfull, cPeaksList& unmatchedpeaksinmatchedpatterns, vector< vector >& hintsindex, bool lcmsrt, bool skipcomparison); /** @@ -695,8 +714,26 @@ class cTheoreticalSpectrum { /** \brief Load the structure from an input stream. \param is an input stream - */ - void load(ifstream& is); + \param fileversionpart1 first number of .res the file version + \param fileversionpart2 second number of .res the file version + \param fileversionpart3 third number of .res the file version + */ + void load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3); + + + /** + \brief Check if the object equals to another object. + \param secondtheoreticalspectrum object for comparison + \retval bool true if the objects are equals + */ + bool equals(cTheoreticalSpectrum& secondtheoreticalspectrum); + + + /** + \brief Attach another spectrum. + \param secondtheoreticalspectrum spectrum to be attached + */ + void attach(cTheoreticalSpectrum& secondtheoreticalspectrum); }; diff --git a/CycloBranch/core/cTheoreticalSpectrumList.cpp b/CycloBranch/core/cTheoreticalSpectrumList.cpp index 72ea477..06daac4 100644 --- a/CycloBranch/core/cTheoreticalSpectrumList.cpp +++ b/CycloBranch/core/cTheoreticalSpectrumList.cpp @@ -9,12 +9,12 @@ double cTheoreticalSpectrumList::getCurrentWorstScore() { } -void cTheoreticalSpectrumList::computeNumbersOfCompletedSeries() { - for (int i = 0; i < (int)theoreticalspectra.size(); i++) { - for (int j = i + 1; j < (int)theoreticalspectra.size(); j++) {\ - if (theoreticalspectra[i].getCandidate().hasEqualTPermutations(theoreticalspectra[j].getCandidate())) { - theoreticalspectra[i].setNumberOfCompletedSeries(theoreticalspectra[i].getNumberOfCompletedSeries() + 1); - theoreticalspectra[j].setNumberOfCompletedSeries(theoreticalspectra[j].getNumberOfCompletedSeries() + 1); +void cTheoreticalSpectrumList::computeNumbersOfCompletedSeries(int fileid) { + for (int i = 0; i < (int)theoreticalspectra[fileid].size(); i++) { + for (int j = i + 1; j < (int)theoreticalspectra[fileid].size(); j++) {\ + if (theoreticalspectra[fileid][i].getCandidate().hasEqualTPermutations(theoreticalspectra[fileid][j].getCandidate())) { + theoreticalspectra[fileid][i].setNumberOfCompletedSeries(theoreticalspectra[fileid][i].getNumberOfCompletedSeries() + 1); + theoreticalspectra[fileid][j].setNumberOfCompletedSeries(theoreticalspectra[fileid][j].getNumberOfCompletedSeries() + 1); } } } @@ -63,6 +63,11 @@ void cTheoreticalSpectrumList::clear() { } +void cTheoreticalSpectrumList::clear(int fileid) { + theoreticalspectra[fileid].clear(); +} + + void cTheoreticalSpectrumList::initialize(cMainThread& os, cParameters& parameters, cDeNovoGraph* graph) { this->os = &os; this->parameters = ¶meters; @@ -70,8 +75,13 @@ void cTheoreticalSpectrumList::initialize(cMainThread& os, cParameters& paramete } -void cTheoreticalSpectrumList::add(cTheoreticalSpectrum& theoreticalspectrum) { - theoreticalspectra.push_back(theoreticalspectrum); +void cTheoreticalSpectrumList::add(int fileid, cTheoreticalSpectrum& theoreticalspectrum) { + theoreticalspectra[fileid].push_back(theoreticalspectrum); +} + + +cTheoreticalSpectrum& cTheoreticalSpectrumList::get(int fileid, int order) { + return theoreticalspectra[fileid][order]; } @@ -80,18 +90,28 @@ int cTheoreticalSpectrumList::size() { } -cTheoreticalSpectrum& cTheoreticalSpectrumList::operator[](int position) { - return theoreticalspectra[position]; +int cTheoreticalSpectrumList::size(int fileid) { + return (int)theoreticalspectra[fileid].size(); +} + + +void cTheoreticalSpectrumList::resize(int size) { + theoreticalspectra.resize(size); } -int cTheoreticalSpectrumList::parallelCompareAndStore(cCandidateSet& candidates, bool& terminatecomputation) { - cPeaksList peaklist = parameters->peaklistseries[parameters->scannumber - 1]; +void cTheoreticalSpectrumList::resize(int fileid, int size) { + theoreticalspectra[fileid].resize(size); +} + + +int cTheoreticalSpectrumList::parallelCompareAndStore(int fileid, cCandidateSet& candidates, bool& terminatecomputation) { + cPeaksList peaklist = parameters->peaklistseriesvector[0][parameters->scannumber - 1]; peaklist.sortbyMass(); cCandidateSet permutations; - theoreticalspectra.clear(); + theoreticalspectra[fileid].clear(); regex rxsequencetag, rxsearchedsequence; - cSpectrumComparatorThread* comparatorthread; + cSpectrumComparatorThreadMS2* comparatorthread; string stmp; cBricksDatabase* bricksdb = 0; @@ -181,7 +201,7 @@ int cTheoreticalSpectrumList::parallelCompareAndStore(cCandidateSet& candidates, } if ((QThreadPool::globalInstance()->activeThreadCount() < QThreadPool::globalInstance()->maxThreadCount()) && (size > 0)) { - comparatorthread = new cSpectrumComparatorThread(); + comparatorthread = new cSpectrumComparatorThreadMS2(); candidates.lock(); auto x = candidates.getSet().begin(); comparatorthread->initialize((cCandidate&)(*x), peaklist, bricksdb, this, parameters, &rxsequencetag, &rxsearchedsequence, getCurrentWorstScore(), &terminatecomputation); @@ -221,17 +241,17 @@ int cTheoreticalSpectrumList::parallelCompareAndStore(cCandidateSet& candidates, } // move the list to vector - theoreticalspectra.clear(); - theoreticalspectra.insert(theoreticalspectra.end(), make_move_iterator(spectrumbuffer.begin()), make_move_iterator(spectrumbuffer.end())); + theoreticalspectra[fileid].clear(); + theoreticalspectra[fileid].insert(theoreticalspectra[fileid].end(), make_move_iterator(spectrumbuffer.begin()), make_move_iterator(spectrumbuffer.end())); spectrumbuffer.clear(); } else { cTheoreticalSpectrum t(parameters, (cCandidate &)(*candidates.getSet().begin())); - int cnt = parameters->peaklistseries.size(); + int cnt = parameters->peaklistseriesvector[0].size(); for (int i = 0; i < cnt; i++) { - theoreticalspectra.push_back(t); + theoreticalspectra[fileid].push_back(t); } } @@ -254,19 +274,19 @@ int cTheoreticalSpectrumList::parallelCompareAndStore(cCandidateSet& candidates, // fill descriptions of peaks cPeaksList unmatchedpeaksinmatchedpatterns; cPeaksList tmppeaklist; - resultspectra.resize(theoreticalspectra.size()); - for (int i = 0; i < (int)theoreticalspectra.size(); i++) { + resultspectra.resize(theoreticalspectra[fileid].size()); + for (int i = 0; i < (int)theoreticalspectra[fileid].size(); i++) { tsp.clear(false); tsp.setParameters(parameters); - tsp.setCandidate(theoreticalspectra[i].getCandidate()); + tsp.setCandidate(theoreticalspectra[fileid][i].getCandidate()); - theoreticalspectra[i].clear(true); + theoreticalspectra[fileid][i].clear(true); unmatchedpeaksinmatchedpatterns.clear(); if (parameters->mode == singlecomparison) { - tmppeaklist = parameters->peaklistseries[i]; + tmppeaklist = parameters->peaklistseriesvector[0][i]; tmppeaklist.sortbyMass(); } else { @@ -330,8 +350,8 @@ int cTheoreticalSpectrumList::parallelCompareAndStore(cCandidateSet& candidates, isotopepatterncache.clear(); isotopepatterncache.unlock(); - theoreticalspectra.clear(); - theoreticalspectra.insert(theoreticalspectra.end(), make_move_iterator(resultspectra.begin()), make_move_iterator(resultspectra.end())); + theoreticalspectra[fileid].clear(); + theoreticalspectra[fileid].insert(theoreticalspectra[fileid].end(), make_move_iterator(resultspectra.begin()), make_move_iterator(resultspectra.end())); resultspectra.clear(); //computeNumbersOfCompletedSeries(); @@ -339,35 +359,35 @@ int cTheoreticalSpectrumList::parallelCompareAndStore(cCandidateSet& candidates, // sort peaks in theoretical spectra by mass and set real names of peptides vector paths; string tmps; - for (int i = 0; i < (int)theoreticalspectra.size(); i++) { - theoreticalspectra[i].sortByMass(); + for (int i = 0; i < (int)theoreticalspectra[fileid].size(); i++) { + theoreticalspectra[fileid][i].sortByMass(); if (parameters->peptidetype != other) { - theoreticalspectra[i].getCandidate().setRealPeptideName(*bricksdb, parameters->peptidetype); - theoreticalspectra[i].getCandidate().setAcronymPeptideNameWithHTMLReferences(*bricksdb, parameters->peptidetype); - theoreticalspectra[i].getCandidate().setAcronyms(*bricksdb); + theoreticalspectra[fileid][i].getCandidate().setRealPeptideName(*bricksdb, parameters->peptidetype); + theoreticalspectra[fileid][i].getCandidate().setAcronymPeptideNameWithHTMLReferences(*bricksdb, parameters->peptidetype); + theoreticalspectra[fileid][i].getCandidate().setAcronyms(*bricksdb); } if ((parameters->peptidetype == branched) || (parameters->peptidetype == branchcyclic)) { - theoreticalspectra[i].getCandidate().setBackboneAcronyms(*bricksdb); - theoreticalspectra[i].getCandidate().setBranchAcronyms(*bricksdb); + theoreticalspectra[fileid][i].getCandidate().setBackboneAcronyms(*bricksdb); + theoreticalspectra[fileid][i].getCandidate().setBranchAcronyms(*bricksdb); } if (parameters->mode == denovoengine) { - theoreticalspectra[i].getCandidate().setPath(*graph, parameters); - tmps = theoreticalspectra[i].getCandidate().getPathAsString(); + theoreticalspectra[fileid][i].getCandidate().setPath(*graph, parameters); + tmps = theoreticalspectra[fileid][i].getCandidate().getPathAsString(); auto it = std::find(paths.begin(), paths.end(), tmps); if (it == paths.end()) { - theoreticalspectra[i].setPathId((int)paths.size()); + theoreticalspectra[fileid][i].setPathId((int)paths.size()); paths.push_back(tmps); } else { - theoreticalspectra[i].setPathId(it - paths.begin()); + theoreticalspectra[fileid][i].setPathId(it - paths.begin()); } } // parameters must not be used by viewer, they are not stored/loaded - theoreticalspectra[i].setParameters(0); + theoreticalspectra[fileid][i].setParameters(0); } if ((parameters->mode == denovoengine) || (parameters->mode == databasesearch)) { - sortAndFitSize(); + sortAndFitSize(fileid); } // -1 = partial results, aborted by user @@ -480,34 +500,34 @@ double cTheoreticalSpectrumList::updatekNNList(cTheoreticalSpectrum& theoretical } -void cTheoreticalSpectrumList::sortAndFitSize() { +void cTheoreticalSpectrumList::sortAndFitSize(int fileid) { switch (parameters->scoretype) { case number_of_matched_peaks: - sort(theoreticalspectra.begin(), theoreticalspectra.end(), compareNumberOfMatchedPeaksDesc); + sort(theoreticalspectra[fileid].begin(), theoreticalspectra[fileid].end(), compareNumberOfMatchedPeaksDesc); break; case sum_of_relative_intensities: - sort(theoreticalspectra.begin(), theoreticalspectra.end(), compareSumOfRelIntDesc); + sort(theoreticalspectra[fileid].begin(), theoreticalspectra[fileid].end(), compareSumOfRelIntDesc); break; case number_of_b_ions: - sort(theoreticalspectra.begin(), theoreticalspectra.end(), compareBandAllIonsDesc); + sort(theoreticalspectra[fileid].begin(), theoreticalspectra[fileid].end(), compareBandAllIonsDesc); break; case number_of_y_ions: - sort(theoreticalspectra.begin(), theoreticalspectra.end(), compareYandAllIonsDesc); + sort(theoreticalspectra[fileid].begin(), theoreticalspectra[fileid].end(), compareYandAllIonsDesc); break; case number_of_b_and_y_ions: - sort(theoreticalspectra.begin(), theoreticalspectra.end(), compareYBandAllIonsDesc); + sort(theoreticalspectra[fileid].begin(), theoreticalspectra[fileid].end(), compareYBandAllIonsDesc); break; case weighted_ratio_of_matched_peaks: - sort(theoreticalspectra.begin(), theoreticalspectra.end(), compareWeightedRatioDesc); + sort(theoreticalspectra[fileid].begin(), theoreticalspectra[fileid].end(), compareWeightedRatioDesc); break; default: break; } // might be useful for databasesearch mode - if ((int)theoreticalspectra.size() > parameters->hitsreported) { - theoreticalspectra.resize(parameters->hitsreported); + if ((int)theoreticalspectra[fileid].size() > parameters->hitsreported) { + theoreticalspectra[fileid].resize(parameters->hitsreported); } } diff --git a/CycloBranch/core/cTheoreticalSpectrumList.h b/CycloBranch/core/cTheoreticalSpectrumList.h index 27a6829..42c9781 100644 --- a/CycloBranch/core/cTheoreticalSpectrumList.h +++ b/CycloBranch/core/cTheoreticalSpectrumList.h @@ -1,6 +1,6 @@ /** \file cTheoreticalSpectrumList.h - \brief The representation of a list of theoretical mass spectra. + \brief The representation of lists of theoretical spectra. */ @@ -11,17 +11,20 @@ #include #include -#include "parallel/cSpectrumComparatorThread.h" +#include "parallel/cSpectrumAnalyzerThreadMS1.h" +#include "parallel/cSpectrumComparatorThreadMS1.h" +#include "parallel/cSpectrumComparatorThreadMS2.h" +#include "parallel/cSpectrumGeneratorThreadMS1.h" class cMainThread; /** - \brief The class representing a list of theoretical spectra. + \brief The class representing lists of theoretical spectra. */ class cTheoreticalSpectrumList { - vector theoreticalspectra; + vector > theoreticalspectra; list spectrumbuffer; cMainThread* os; cParameters* parameters; @@ -33,7 +36,7 @@ class cTheoreticalSpectrumList { double getCurrentWorstScore(); - void computeNumbersOfCompletedSeries(); + void computeNumbersOfCompletedSeries(int fileid); void fixRegularExpression(string& s); @@ -52,6 +55,13 @@ class cTheoreticalSpectrumList { void clear(); + /** + \brief Clear a specified file id. + \param fileid file id + */ + void clear(int fileid); + + /** \brief Initialize the list. \param os reference to the main thread of the application @@ -63,33 +73,59 @@ class cTheoreticalSpectrumList { /** \brief Add a spectrum to the list. + \param fileid file id \param theoreticalspectrum reference to a spectrum */ - void add(cTheoreticalSpectrum& theoreticalspectrum); + void add(int fileid, cTheoreticalSpectrum& theoreticalspectrum); /** - \brief Get the number of spectra. - \retval int number of spectra - */ + \brief Get a reference to a spectrum. + \param fileid file id + \param order id of a spectrum + \retval cTheoreticalSpectrum reference to a spectrum + */ + cTheoreticalSpectrum& get(int fileid, int order); + + + /** + \brief Get the number of files. + \retval int number of files + */ int size(); /** - \brief Overloaded operator []. - \param position position of a spectrum in the vector - \retval reference to the spectrum + \brief Get the number of spectra in a file. + \param fileid file id + \retval int number of spectra */ - cTheoreticalSpectrum& operator[](int position); + int size(int fileid); + + + /** + \brief Resize the vector of files. + \param size size + */ + void resize(int size); + + + /** + \brief Resize a file id vector. + \param fileid file id + \param size size + */ + void resize(int fileid, int size); /** \brief Parallel comparison of theoretical spectra with an experimental spectrum. + \param fileid file id \param candidates reference to a set of peptide sequence candidates \param terminatecomputation reference to a variable determining that the computation must be stopped \retval int 0 when successfully finished; -1 when an error occurred */ - int parallelCompareAndStore(cCandidateSet& candidates, bool& terminatecomputation); + int parallelCompareAndStore(int fileid, cCandidateSet& candidates, bool& terminatecomputation); /** @@ -105,8 +141,9 @@ class cTheoreticalSpectrumList { /** \brief Sort the list according to a score defined by cParameters::scoretype and crop the list according cParameters::hitsreported. - */ - void sortAndFitSize(); + \param fileid file id + */ + void sortAndFitSize(int fileid); }; diff --git a/CycloBranch/core/utilities.cpp b/CycloBranch/core/utilities.cpp index 26a0f73..2ae12b7 100644 --- a/CycloBranch/core/utilities.cpp +++ b/CycloBranch/core/utilities.cpp @@ -4,7 +4,9 @@ QString appname = "CycloBranch"; -QString appversion = "v. 2.0.8 (64-bit)"; +QString appversion = "v. 2.1.21 (64-bit)"; + +QString lastcompatibleappversion = "v. 2.0.8 (64-bit)"; #if OS_TYPE == UNX @@ -238,6 +240,58 @@ bool checkFile(string filename) { } +bool compareDoubles(double& first, double& second, double epsilon) { + if (fabs(first - second) < epsilon) { + return true; + } + return false; + + //if (first == second) { + // return true; + //} + //return false; +} + + +bool compareStringVectors(vector& first, vector& second) { + if (first.size() != second.size()) { + return false; + } + + size_t size = first.size(); + for (size_t i = 0; i < size; i++) { + if (first[i].compare(second[i]) != 0) { + return false; + } + } + + return true; +} + + +bool compareMapsIntDouble(map& first, map& second, double epsilon) { + if (first.size() != second.size()) { + return false; + } + for (auto& it : first) { + if (second.count(it.first) == 1) { + if (!compareDoubles(it.second, second[it.first], epsilon)) { + return false; + } + } + else { + return false; + } + } + return true; + + //if (first == second) { + // return true; + //} + //return false; +} + + void parseBranch(ePeptideType peptidetype, string& composition, vector& vectorcomposition, int& branchstart, int& branchend) { string s = composition; cBrick b; @@ -374,10 +428,19 @@ QByteArray cropPrecisionToSixDecimalsByteArray(double value) { } +string getShortFileName(string filename) { + size_t pos = filename.rfind('/'); + if (pos != string::npos) { + filename = filename.substr(pos + 1); + } + return filename; +} + + double fact(int value) { - double result = 1; + double result = 1.0; while (value > 1) { - result *= value; + result *= (double)value; value--; } return result; @@ -574,3 +637,118 @@ bool proxyModelCheckString(QAbstractItemModel* model, int index, int row, int co return false; } + +bool isCompatibleVersion(int fileversionpart1, int fileversionpart2, int fileversionpart3, int lastcompatiblepart1, int lastcompatiblepart2, int lastcompatiblepart3) { + bool compatible = true; + if (lastcompatiblepart3 < fileversionpart3) { + compatible = true; + } + if (lastcompatiblepart3 > fileversionpart3) { + compatible = false; + } + if (lastcompatiblepart2 < fileversionpart2) { + compatible = true; + } + if (lastcompatiblepart2 > fileversionpart2) { + compatible = false; + } + if (lastcompatiblepart1 < fileversionpart1) { + compatible = true; + } + if (lastcompatiblepart1 > fileversionpart1) { + compatible = false; + } + return compatible; +} + + +string fixLabelCharge(string& str, int sourcecharge, int targetcharge) { + string newlabel = str.substr(0, str.size() - 1); + + if (abs(sourcecharge) == targetcharge) { + return newlabel; + } + + size_t size = str.size(); + bool positive = true; + int number = 0; + string origstr = ""; + + for (int i = 0; i < size; i++) { + if (newlabel[i] == '+') { + positive = true; + number = 0; + origstr = "+"; + continue; + } + if (newlabel[i] == '-') { + positive = false; + number = 0; + origstr = "-"; + continue; + } + if (newlabel[i] == 'H') { + if (i + 1 < size) { + if ((newlabel[i + 1] == ']') || (newlabel[i + 1] == '+') || (newlabel[i + 1] == '-')) { + if (number == 0) { + number = 1; + } + origstr += 'H'; + break; + } + } + } + if ((newlabel[i] >= '0') && (newlabel[i] <= '9')) { + number *= 10; + number += newlabel[i] - '0'; + origstr += newlabel[i]; + } + } + + if (!positive) { + number = -number; + } + + if (sourcecharge < 0) { + targetcharge = -targetcharge; + } + + int newnumber = number + targetcharge - sourcecharge; + + string newstr; + if (newnumber == 0) { + newstr = ""; + } + else if (newnumber == 1) { + newstr = "+H"; + } + else if (newnumber == -1) { + newstr = "-H"; + } + else { + if (newnumber > 0) { + newstr += "+"; + } + newstr += to_string(newnumber); + newstr += "H"; + } + + size_t pos; + + if (number == 0) { + pos = newlabel.find(']'); + if (pos != string::npos) { + newstr += "]"; + newlabel.replace(pos, 1, newstr); + } + } + else { + pos = newlabel.find(origstr); + if (pos != string::npos) { + newlabel.replace(pos, origstr.size(), newstr); + } + } + + return newlabel; +} + diff --git a/CycloBranch/core/utilities.h b/CycloBranch/core/utilities.h index 35c97d2..7355021 100644 --- a/CycloBranch/core/utilities.h +++ b/CycloBranch/core/utilities.h @@ -48,9 +48,6 @@ class cBrick; #endif -#define MICROSCOPY_IMAGES - - using namespace std; using namespace boost; @@ -61,6 +58,12 @@ using namespace boost; const double pi = 3.141592653589793; +/** + \brief The e constant. +*/ +const double econst = 2.718281828459045; + + /** \brief Default window size x. */ @@ -121,6 +124,12 @@ extern QString appname; extern QString appversion; +/** + \brief Last compatible version of the application. +*/ +extern QString lastcompatibleappversion; + + /** \brief A directory where the application is installed under Linux or OSX. */ @@ -289,6 +298,35 @@ bool checkRegex(ePeptideType peptidetype, string& sequence, string& errormessage bool checkFile(string filename); +/** + \brief Check if two doubles are equal. + \param first first value + \param second second value + \param epsilon epsilon value for comparison + \retval bool true if the values are equal +*/ +bool compareDoubles(double& first, double& second, double epsilon = 0.0000001f); + + +/** + \brief Check if two vectors of strings are equal. + \param first first vector + \param second second vector + \retval bool true if the vectors are equal +*/ +bool compareStringVectors(vector& first, vector& second); + + +/** + \brief Check if two maps of doubles are equal. + \param first first map + \param second second map + \param epsilon epsilon value for double comparison + \retval bool true if the maps are equal +*/ +bool compareMapsIntDouble(map& first, map& second, double epsilon = 0.0000001f); + + /** \brief Parse a position of a branch from a peptide sequence. \param peptidetype peptide type @@ -340,6 +378,14 @@ QByteArray cropDecimalsByteArray(double value); QByteArray cropPrecisionToSixDecimalsByteArray(double value); +/** + \brief Get a short filename from a string. + \param filename long filename + \retval string short filename +*/ +string getShortFileName(string filename); + + /** \brief Store aggregated information about a coordinate. */ @@ -508,5 +554,28 @@ bool proxyModelCheckDouble(QAbstractItemModel* model, int index, int row, int co bool proxyModelCheckString(QAbstractItemModel* model, int index, int row, int column, QString& itemstr, QString str, const QModelIndex& parent, bool wholeword, Qt::CaseSensitivity casesensitive); +/** + \brief Check the compatibility of CycloBranch version. + \param fileversionpart1 tested version (part 1) + \param fileversionpart2 tested version (part 2) + \param fileversionpart3 tested version (part 3) + \param lastcompatiblepart1 last compatible version (part 1) + \param lastcompatiblepart2 last compatible version (part 2) + \param lastcompatiblepart3 last compatible version (part 3) + \retval bool true if the versions are compatible +*/ +bool isCompatibleVersion(int fileversionpart1, int fileversionpart2, int fileversionpart3, int lastcompatiblepart1, int lastcompatiblepart2, int lastcompatiblepart3); + + +/** + \brief Fix the name of a multiply charged ion in MS mode. + \param str original ion name + \param sourcecharge source charge + \param targetcharge target charge + \retval string fixed name +*/ +string fixLabelCharge(string& str, int sourcecharge, int targetcharge); + + #endif diff --git a/CycloBranch/docs/cyclobranch_2_bib.txt b/CycloBranch/docs/cyclobranch_2_bib.txt new file mode 100644 index 0000000..34e9dfa --- /dev/null +++ b/CycloBranch/docs/cyclobranch_2_bib.txt @@ -0,0 +1,10 @@ +@ARTICLE{CycloBranch-2-AC-2020, +author={Novak, Jiri and Skriba, Anton and Havlicek, Vladimir}, +title={CycloBranch 2: Molecular Formula Annotations Applied to imzML Data Sets in Bimodal Fusion and LC-MS Data Files}, +journal={Anal. Chem.}, +volume={92}, +number={10}, +year={2020}, +pages={6844--6849}, +doi={10.1021/acs.analchem.0c00170} +} diff --git a/CycloBranch/docs/cyclobranch_2_ris.txt b/CycloBranch/docs/cyclobranch_2_ris.txt new file mode 100644 index 0000000..0247698 --- /dev/null +++ b/CycloBranch/docs/cyclobranch_2_ris.txt @@ -0,0 +1,14 @@ +TY - JOUR +TI - CycloBranch 2: Molecular Formula Annotations Applied to imzML Data Sets in Bimodal Fusion and LC-MS Data Files +T2 - Anal. Chem. +VL - 92 +IS - 10 +SP - 6844-6849 +PY - 2020 +AU - Novak,Jiri +AU - Skriba,Anton +AU - Havlicek,Vladimir +N1 - +DB - +DO - 10.1021/acs.analchem.0c00170 +ER - diff --git a/CycloBranch/gui/cAboutWidget.cpp b/CycloBranch/gui/cAboutWidget.cpp index 9a16f13..66925af 100644 --- a/CycloBranch/gui/cAboutWidget.cpp +++ b/CycloBranch/gui/cAboutWidget.cpp @@ -16,12 +16,22 @@ cAboutWidget::cAboutWidget(QWidget* parent) { layout = new QVBoxLayout(); + QString splash = "



"; + QString homepage = "https://ms.biomed.cas.cz/cyclobranch/
https://github.com/novak-jiri/cyclobranch/

"; - QString citations = "Any work based on CycloBranch shall cite any of the following references:

"; + QString citations = "If you use CycloBranch in your work, please cite us using:

"; + + citations += "Jiri Novak, Anton Skriba, Vladimir Havlicek:
"; + citations += "CycloBranch 2: Molecular Formula Annotations Applied to imzML Data Sets in Bimodal Fusion and LC-MS Data Files,
"; + citations += "Anal. Chem., vol. 92, no. 10, pp. 6844-6849, 2020. DOI: 10.1021/acs.analchem.0c00170.
"; + citations += "Download citation: [ ris ], [ bib ]

"; + + citations += "Other publications to cite:

"; + citations += "Jiri Novak, Karel Lemr, Kevin A. Schug, Vladimir Havlicek:
"; citations += "CycloBranch: De Novo Sequencing of Nonribosomal Peptides from Accurate Product Ion Mass Spectra,
"; - citations += "J. Am. Soc. Mass Spectrom., vol. 26, no. 10, pp. 1780-1786, 2015. DOI: 10.1007/s13361-015-1211-1.
"; + citations += "J. Am. Soc. Mass Spectrom., vol. 26, no. 10, pp. 1780-1786, 2015. DOI: 10.1007/s13361-015-1211-1.
"; citations += "Download citation: [ ris ], [ bib ]

"; citations += "Jiri Novak, Lucie Sokolova, Karel Lemr, Tomas Pluhacek, Andrea Palyzova, Vladimir Havlicek:
"; @@ -34,13 +44,11 @@ cAboutWidget::cAboutWidget(QWidget* parent) { citations += "J. Mass Spectrom., vol. 53, no. 11, pp. 1097-1103, 2018. DOI: 10.1002/jms.4285.
"; citations += "Download citation: [ ris ], [ bib ]


"; - QString licence = "Licence:

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

"; - licence += "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

"; - licence += "You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.


"; - - QString developers = "Developers:

Jiri Novak
Laboratory of Molecular Structure Characterization
Institute of Microbiology
Czech Academy of Sciences
Videnska 1083
142 20 Prague
Czech Republic
jiri.novak@biomed.cas.cz

(C) 2013 - 2020


"; + QString developers = "Developers:

Jiri Novak
Laboratory of Molecular Structure Characterization
Institute of Microbiology
Czech Academy of Sciences
Videnska 1083
142 20 Prague
Czech Republic
jiri.novak@biomed.cas.cz

(C) 2013 - 2022


"; - QString splash = "



"; + QString license = "License:

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

"; + license += "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

"; + license += "You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.


"; QString acknowledgement = "Acknowledgements:

This application uses Qt library under LGPLv3 license. Thanks to Aha-soft and Icons8 for icons.


"; @@ -48,7 +56,7 @@ cAboutWidget::cAboutWidget(QWidget* parent) { message->setReadOnly(true); message->setAcceptRichText(true); message->setOpenExternalLinks(true); - message->setHtml("
" + splash + "" + appname + " " + appversion + "

" + homepage + citations + developers + licence + acknowledgement); + message->setHtml("
" + splash + "" + appname + " " + appversion + "

" + homepage + citations + developers + license + acknowledgement); buttonbox = new QDialogButtonBox(QDialogButtonBox::Ok); //buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); diff --git a/CycloBranch/gui/cAboutWidget.h b/CycloBranch/gui/cAboutWidget.h index e8ef446..4b9edf6 100644 --- a/CycloBranch/gui/cAboutWidget.h +++ b/CycloBranch/gui/cAboutWidget.h @@ -8,6 +8,7 @@ #define _CABOUTWIDGET_H #include +#include // forward declaration diff --git a/CycloBranch/gui/cBricksDatabaseWidget.cpp b/CycloBranch/gui/cBricksDatabaseWidget.cpp index af3fa41..b428c4b 100644 --- a/CycloBranch/gui/cBricksDatabaseWidget.cpp +++ b/CycloBranch/gui/cBricksDatabaseWidget.cpp @@ -15,6 +15,8 @@ #include #include #include +#include +#include int numberOfOccurrences(const string& s, char c) { @@ -475,6 +477,34 @@ void cBricksDatabaseWidget::keyPressEvent(QKeyEvent *event) { rowsfilterwholeword->setChecked(!rowsfilterwholeword->isChecked()); } + if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) { + QModelIndexList selectedindexes = database->selectionModel()->selectedIndexes(); + QStandardItem* item; + + QString selectedtext; + string itemtext; + + int selectedcount = selectedindexes.count(); + for (int i = 0; i < selectedcount; i++) { + if (i > 0) { + if (proxymodel->mapToSource(selectedindexes[i - 1]).row() != proxymodel->mapToSource(selectedindexes[i]).row()) { + selectedtext += "\n"; + } + else { + selectedtext += "\t"; + } + } + + item = databasemodel->itemFromIndex(proxymodel->mapToSource(selectedindexes[i])); + if (item) { + itemtext = item->text().toStdString(); + selectedtext += stripHTML(itemtext).c_str(); + } + } + selectedtext += "\n"; + QApplication::clipboard()->setText(selectedtext); + } + event->accept(); } @@ -527,6 +557,7 @@ void cBricksDatabaseWidget::openDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); database->setModel(0); proxymodel->setSourceModel(0); @@ -620,6 +651,7 @@ bool cBricksDatabaseWidget::saveDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); cBrick b; bricks.clear(); @@ -855,6 +887,7 @@ void cBricksDatabaseWidget::importDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); database->setModel(0); proxymodel->setSourceModel(0); diff --git a/CycloBranch/gui/cCalibrationChart.cpp b/CycloBranch/gui/cCalibrationChart.cpp new file mode 100644 index 0000000..9ebc477 --- /dev/null +++ b/CycloBranch/gui/cCalibrationChart.cpp @@ -0,0 +1,581 @@ +#include "gui/cCalibrationChart.h" + +#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +cCalibrationChart::cCalibrationChart(cGlobalPreferences* globalpreferences, QWidget *parent) { + this->parent = parent; + this->globalpreferences = globalpreferences; + + setWindowTitle("Calibration Curve"); + setWindowIcon(QIcon(":/images/icons/features.png")); + + vsplitter = new QSplitter(); + vsplitter->setOrientation(Qt::Vertical); + + chartscene = new cCalibrationChartScene(this); + + menuBar = new QMenuBar(this); + menuBar->setNativeMenuBar(false); + menuFile = new QMenu(tr("&File"), this); + menuView = new QMenu(tr("&View"), this); + menuHelp = new QMenu(tr("&Help"), this); + + toolbarFile = addToolBar(tr("File")); + + actionExportCSV = new QAction(QIcon(":/images/icons/csv.png"), tr("&Export to CSV"), this); + actionExportCSV->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_E)); + actionExportCSV->setToolTip("Export to CSV (Ctrl + E)"); + toolbarFile->addAction(actionExportCSV); + connect(actionExportCSV, SIGNAL(triggered()), this, SLOT(exportToCsv())); + + actionExportSpectrum = new QAction(QIcon(":/images/icons/66.png"), tr("Export Ima&ge"), this); + actionExportSpectrum->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_G)); + actionExportSpectrum->setToolTip("Export Image (Ctrl + G)"); + toolbarFile->addAction(actionExportSpectrum); + connect(actionExportSpectrum, SIGNAL(triggered()), this, SLOT(exportScene())); + + actionCloseWindow = new QAction(QIcon(":/images/icons/33.png"), tr("&Close"), this); + actionCloseWindow->setShortcut(QKeySequence(Qt::Key_Escape)); + actionCloseWindow->setToolTip("Close (Esc)"); + toolbarFile->addAction(actionCloseWindow); + connect(actionCloseWindow, SIGNAL(triggered()), this, SLOT(closeWindow())); + + toolbarView = addToolBar(tr("View")); + + actionZoomIn = new QAction(QIcon(":/images/icons/83.png"), tr("Zoom &In"), this); + actionZoomIn->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Plus)); + actionZoomIn->setToolTip("Zoom In (Ctrl +)"); + toolbarView->addAction(actionZoomIn); + connect(actionZoomIn, SIGNAL(triggered()), chartscene, SLOT(zoomIn())); + + actionZoomOut = new QAction(QIcon(":/images/icons/82.png"), tr("Zoom &Out"), this); + actionZoomOut->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Minus)); + actionZoomOut->setToolTip("Zoom Out (Ctrl -)"); + toolbarView->addAction(actionZoomOut); + connect(actionZoomOut, SIGNAL(triggered()), chartscene, SLOT(zoomOut())); + + actionZoomReset = new QAction(QIcon(":/images/icons/84.png"), tr("&Reset Zoom"), this); + actionZoomReset->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_R)); + actionZoomReset->setToolTip("Zoom Reset (Ctrl + R)"); + toolbarView->addAction(actionZoomReset); + connect(actionZoomReset, SIGNAL(triggered()), chartscene, SLOT(normalSize())); + + toolbarView->addSeparator(); + + actionHideLabels = new QAction(QIcon(":/images/icons/79.png"), tr("Hide &Labels"), this); + actionHideLabels->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); + actionHideLabels->setToolTip("Hide Labels (Ctrl + L)"); + actionHideLabels->setCheckable(true); + toolbarView->addAction(actionHideLabels); + connect(actionHideLabels, SIGNAL(toggled(bool)), this, SLOT(hideLabels(bool))); + + toolbarHelp = addToolBar(tr("Help")); + + actionHTMLDocumentation = new QAction(QIcon(":/images/icons/3.png"), tr("&HTML Documentation"), this); + actionHTMLDocumentation->setShortcut(QKeySequence(Qt::Key_F1)); + actionHTMLDocumentation->setToolTip("Show HTML Documentation (F1)"); + toolbarHelp->addAction(actionHTMLDocumentation); + connect(actionHTMLDocumentation, SIGNAL(triggered()), this, SLOT(showHTMLDocumentation())); + + labelconcentration = new QLabel(tr("Concentration: ")); + + minconcentration = new QDoubleSpinBox(); + minconcentration->setDecimals(6); + minconcentration->setRange(0, 1000000); + minconcentration->setSingleStep(1); + + labelseparator = new QLabel(tr("-")); + + maxconcentration = new QDoubleSpinBox(); + maxconcentration->setDecimals(6); + maxconcentration->setRange(0, 1000000); + maxconcentration->setSingleStep(1); + + setconcentrationinterval = new QPushButton("Set"); + setconcentrationinterval->setMinimumWidth(75); + connect(setconcentrationinterval, SIGNAL(released()), this, SLOT(setConcentrationInterval())); + connect(this, SIGNAL(emitConcentrationInterval(double, double)), chartscene, SLOT(setConcentrationInterval(double, double))); + + resetconcentrationinterval = new QPushButton("Reset"); + resetconcentrationinterval->setMinimumWidth(75); + connect(resetconcentrationinterval, SIGNAL(released()), chartscene, SLOT(resetConcentrationInterval())); + connect(chartscene, SIGNAL(updateConcentrationInterval(double, double)), this, SLOT(updateConcentrationInterval(double, double))); + + hboxconcentration = new QHBoxLayout(); + hboxconcentration->addWidget(labelconcentration); + hboxconcentration->addWidget(minconcentration); + hboxconcentration->addWidget(labelseparator); + hboxconcentration->addWidget(maxconcentration); + hboxconcentration->addSpacing(5); + hboxconcentration->addWidget(setconcentrationinterval); + hboxconcentration->addSpacing(5); + hboxconcentration->addWidget(resetconcentrationinterval); + + widgetconcentration = new QWidget(); + widgetconcentration->setLayout(hboxconcentration); + + toolbarConcentration = addToolBar(tr("Concentration")); + + //actionMouseConcentrationSelection = new QAction(QIcon(":/images/icons/64.png"), tr("Mouse Concentration Selection Tool"), this); + //actionMouseConcentrationSelection->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_T)); + //actionMouseConcentrationSelection->setToolTip("Mouse Concentration Selection Tool (Ctrl + T)"); + //actionMouseConcentrationSelection->setCheckable(true); + //actionMouseConcentrationSelection->setChecked(true); + //actionMouseConcentrationSelection->setEnabled(true); + //toolbarConcentration->addAction(actionMouseConcentrationSelection); + //connect(actionMouseConcentrationSelection, SIGNAL(toggled(bool)), chartscene, SLOT(enableMouseConcentrationSelectionTool(bool))); + + toolbarConcentration->addWidget(widgetconcentration); + + database = new QTableView(this); + databasemodel = new QStandardItemModel(0, 0, this); + proxymodel = new cCalibrationChartProxyModel(this); + proxymodel->setSourceModel(databasemodel); + proxymodel->setDynamicSortFilter(false); + database->setModel(proxymodel); + database->setSortingEnabled(true); + database->setSelectionBehavior(QAbstractItemView::SelectItems); + database->setSelectionMode(QAbstractItemView::ContiguousSelection); + database->setEditTriggers(QAbstractItemView::NoEditTriggers); + database->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); + database->horizontalHeader()->setSectionsMovable(true); + //database->verticalHeader()->setDefaultSectionSize(30); + + QList sizes; + sizes.push_back(400); + sizes.push_back(200); + + vsplitter->addWidget(chartscene); + vsplitter->addWidget(database); + + vsplitter->setSizes(sizes); + + setCentralWidget(vsplitter); + //centralWidget()->setContentsMargins(5, 5, 5, 5); + + menuFile->addAction(actionExportCSV); + menuFile->addAction(actionExportSpectrum); + menuFile->addSeparator(); + menuFile->addAction(actionCloseWindow); + + menuView->addAction(actionZoomIn); + menuView->addAction(actionZoomOut); + menuView->addAction(actionZoomReset); + menuView->addSeparator(); + menuView->addAction(actionHideLabels); + + menuHelp->addAction(actionHTMLDocumentation); + + menuBar->addMenu(menuFile); + menuBar->addMenu(menuView); + menuBar->addMenu(menuHelp); + + setMenuBar(menuBar); + + resize(750, defaultwinsizey); + + //applyGlobalPreferences(globalpreferences); +} + + +cCalibrationChart::~cCalibrationChart() { + delete labelconcentration; + delete minconcentration; + delete labelseparator; + delete maxconcentration; + delete setconcentrationinterval; + delete resetconcentrationinterval; + delete hboxconcentration; + delete widgetconcentration; + + delete chartscene; + + delete databasemodel; + delete proxymodel; + delete database; + + delete vsplitter; + + delete actionExportCSV; + delete actionExportSpectrum; + delete actionCloseWindow; + delete actionZoomIn; + delete actionZoomOut; + delete actionZoomReset; + delete actionHideLabels; + //delete actionMouseConcentrationSelection; + delete actionHTMLDocumentation; + + delete menuFile; + delete menuView; + delete menuHelp; + + delete menuBar; +} + + +void cCalibrationChart::closeEvent(QCloseEvent *event) { + hide(); + event->accept(); +} + + +void cCalibrationChart::applyGlobalPreferences(cGlobalPreferences* globalpreferences) { + if (globalpreferences) { + if (lastdirexporttocsv.right(4).compare(".csv", Qt::CaseInsensitive) != 0) { + lastdirexporttocsv = globalpreferences->exportcsvdefaultdir; + } + } +} + + +void cCalibrationChart::setLineParameters(int equationtype, double a, double b, vector xvalues, vector yvalues, vector sd) { + if (chartscene) { + chartscene->setLineParameters(equationtype, a, b, xvalues, yvalues, sd); + } + + deleteTable(); +} + + +void cCalibrationChart::setData(vector xvalues, vector yvalues, vector sd, vector datagroups) { + if (chartscene) { + chartscene->setData(xvalues, yvalues, sd, datagroups); + } +} + + +void cCalibrationChart::createTable(double a, double b, vector& calibrationxvalues, vector& calibrationyvalues, vector& calibrationsd, vector& datagroups, vector& dataxvalues, vector& datayvalues, vector& datasd) { + int currentrow = 0; + int currentcolumn = 0; + size_t size; + string s; + double value; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Data Point"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Total (x-axis)"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Std. Dev. (x-axis)"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Total (y-axis)"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Std. Dev. (y-axis)"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + size = calibrationxvalues.size(); + for (size_t i = 0; i < size; i++) { + currentrow = databasemodel->rowCount(); + databasemodel->insertRow(currentrow); + + currentcolumn = 0; + + s = "Calib. "; + s += to_string(calibrationxvalues[i]); + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setText(s.c_str()); + currentcolumn++; + + if (a != 0) { + value = (calibrationyvalues[i] - b) / a; + } + else { + value = 0; + } + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + if (a != 0) { + value = (calibrationsd[i] - b) / a; + } + else { + value = 0; + } + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + value = calibrationyvalues[i]; + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + value = calibrationsd[i]; + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + } + + size = dataxvalues.size(); + for (size_t i = 0; i < size; i++) { + currentrow = databasemodel->rowCount(); + databasemodel->insertRow(currentrow); + + currentcolumn = 0; + + s = "Group "; + s += to_string(datagroups[i]); + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setText(s.c_str()); + currentcolumn++; + + value = dataxvalues[i]; + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + if (a != 0) { + value = (datasd[i] - b) / a; + } + else { + value = 0; + } + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + value = datayvalues[i]; + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + value = datasd[i]; + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + } + + for (int i = 0; i < databasemodel->columnCount(); i++) { + database->resizeColumnToContents(i); + } +} + + +void cCalibrationChart::deleteTable() { + for (int i = 0; i < databasemodel->columnCount(); i++) { + if (database->itemDelegateForColumn(i)) { + delete database->itemDelegateForColumn(i); + } + } + databasemodel->clear(); +} + + +void cCalibrationChart::keyPressEvent(QKeyEvent *event) { + if ((event->key() == Qt::Key_Enter) || (event->key() == Qt::Key_Return)) { + if (minconcentration->hasFocus() || maxconcentration->hasFocus() || setconcentrationinterval->hasFocus()) { + setConcentrationInterval(); + } + } + + if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) { + QModelIndexList selectedindexes = database->selectionModel()->selectedIndexes(); + QStandardItem* item; + + QString selectedtext; + string itemtext; + + int selectedcount = selectedindexes.count(); + for (int i = 0; i < selectedcount; i++) { + if (i > 0) { + if (proxymodel->mapToSource(selectedindexes[i - 1]).row() != proxymodel->mapToSource(selectedindexes[i]).row()) { + selectedtext += "\n"; + } + else { + selectedtext += "\t"; + } + } + + item = databasemodel->itemFromIndex(proxymodel->mapToSource(selectedindexes[i])); + if (item) { + itemtext = item->text().toStdString(); + selectedtext += stripHTML(itemtext).c_str(); + } + } + selectedtext += "\n"; + QApplication::clipboard()->setText(selectedtext); + } + + event->accept(); +} + + +void cCalibrationChart::exportToCsv() { + QString filename = QFileDialog::getSaveFileName(this, tr("Export to CSV"), lastdirexporttocsv, tr("Files (*.csv)")); + + if (!filename.isEmpty()) { + lastdirexporttocsv = filename; + + QProgressDialog progress("Exporting CSV file...", "Cancel", 0, proxymodel->rowCount(), this); + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + + bool removefile = false; + QFile file(filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + return; + } + + QTextStream out(&file); + + for (int i = 0; i < databasemodel->columnCount(); i++) { + out << "\"" << databasemodel->horizontalHeaderItem(i)->text() << "\""; + if (i < databasemodel->columnCount() - 1) { + out << ","; + } + } + out << endl; + + QStandardItem* item; + string str; + for (int i = 0; i < proxymodel->rowCount(); i++) { + + for (int j = 0; j < databasemodel->columnCount(); j++) { + item = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, j))); + if (item) { + str = item->data(Qt::DisplayRole).toString().toStdString(); + out << "\"" << stripHTML(str).c_str() << "\""; + if (j < databasemodel->columnCount() - 1) { + out << ","; + } + } + else { + if (j < databasemodel->columnCount() - 1) { + out << ","; + } + } + } + out << endl; + + progress.setValue(i); + if (progress.wasCanceled()) { + removefile = true; + break; + } + + } + + file.close(); + + if (removefile) { + file.remove(); + } + + progress.setValue(proxymodel->rowCount()); + } +} + + +void cCalibrationChart::updateConcentrationInterval(double minconcentration, double maxconcentration) { + this->minconcentration->setValue(minconcentration); + this->maxconcentration->setValue(maxconcentration); +} + + +void cCalibrationChart::setConcentrationInterval() { + emit emitConcentrationInterval(minconcentration->value(), maxconcentration->value()); +} + + +void cCalibrationChart::exportScene() { + QString currentdir = "./"; + if (globalpreferences) { + currentdir = globalpreferences->exportimagedefaultdir; + } + + #if OS_TYPE == WIN + QString filename = QFileDialog::getSaveFileName(this, tr("Export Image..."), currentdir, "PDF Files (*.pdf);; PS Files (*.ps);; PNG Files (*.png);; SVG Files (*.svg)"); + #else + QString filename = QFileDialog::getSaveFileName(this, tr("Export Image..."), currentdir, "PDF Files (*.pdf);; PNG Files (*.png);; SVG Files (*.svg)"); + #endif + if (!filename.isEmpty()) { + regex rx; + bool selected = false; + + rx = ".+\\.pdf$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + chartscene->exportToPDF(filename, false); + selected = true; + } + + #if OS_TYPE == WIN + rx = ".+\\.ps$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + chartscene->exportToPDF(filename, true); + selected = true; + } + #endif + + rx = ".+\\.png$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + chartscene->exportToPNG(filename); + selected = true; + } + + rx = ".+\\.svg$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + chartscene->exportToSVG(filename); + selected = true; + } + + if (!selected) { + QMessageBox msgBox; + QString errstr = "Unsupported file format."; + msgBox.setText(errstr); + msgBox.exec(); + } + } +} + + +void cCalibrationChart::hideLabels(bool state) { + chartscene->hideLabels(state); +} + + +void cCalibrationChart::showHTMLDocumentation() { + #if OS_TYPE == WIN + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/annotatedfeatures.html").absoluteFilePath())); + #else + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/annotatedfeatures.html").absoluteFilePath())); + #endif +} + + +void cCalibrationChart::closeWindow() { + hide(); +} + diff --git a/CycloBranch/gui/cCalibrationChart.h b/CycloBranch/gui/cCalibrationChart.h new file mode 100644 index 0000000..fa91abb --- /dev/null +++ b/CycloBranch/gui/cCalibrationChart.h @@ -0,0 +1,212 @@ +/** + \file cCalibrationChart.h + \brief Calibration chart. +*/ + + +#ifndef _CCALIBRATIONCHART_H +#define _CCALIBRATIONCHART_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "core/cGlobalPreferences.h" +#include "gui/cCalibrationChartScene.h" +#include "gui/cEventFilter.h" +#include "gui/cCalibrationChartProxyModel.h" + + +// forward declaration +class QHBoxLayout; +//class QVBoxLayout; +class QPushButton; +class QSplitter; +class QDoubleSpinBox; +class QAction; +class QLabel; +class QTableView; + + +/** + \brief Calibration chart. +*/ +class cCalibrationChart : public QMainWindow +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param globalpreferences global preferences of the application + \param parent pointer to a parent widget + */ + cCalibrationChart(cGlobalPreferences* globalpreferences, QWidget *parent); + + + /** + \brief The destructor. + */ + ~cCalibrationChart(); + + + /** + \brief Handle the window close event. + \param event pointer to QCloseEvent + */ + void closeEvent(QCloseEvent *event); + + + /** + \brief Apply new global preferences. + \param globalpreferences global preferences of the application + */ + void applyGlobalPreferences(cGlobalPreferences* globalpreferences); + + + /** + \brief Set parameters of calibration curve. + \param equationtype 0 (y = a*x), 1 (y = a*x + b), 2 (manual mode) + \param a a + \param b b + \param xvalues x coordinates of points + \param yvalues y coordinates of points + \param sd standard deviation of y-values + */ + void setLineParameters(int equationtype, double a, double b, vector xvalues, vector yvalues, vector sd); + + + /** + \brief Set data points. + \param xvalues x coordinates of points + \param yvalues y coordinates of points + \param sd standard deviation of y-values + \param datagroups vector of group ids + */ + void setData(vector xvalues, vector yvalues, vector sd, vector datagroups); + + + /** + \brief Create the table content. + \param a a + \param b b + \param calibrationxvalues x coordinates of calibration points + \param calibrationyvalues y coordinates of calibration points + \param calibrationsd standard deviation of y-values of calibration points + \param datagroups ids of groups of data points + \param dataxvalues x coordinates of data points + \param datayvalues y coordinates of data points + \param datasd standard deviation of y-values of data points + */ + void createTable(double a, double b, vector& calibrationxvalues, vector& calibrationyvalues, vector& calibrationsd, vector& datagroups, vector& dataxvalues, vector& datayvalues, vector& datasd); + + + /** + \brief Delete the table content. + */ + void deleteTable(); + + +protected: + + + /** + \brief Handle a key press event. + \param event pointer to QKeyEvent + */ + void keyPressEvent(QKeyEvent *event); + + +private: + + cGlobalPreferences* globalpreferences; + QWidget* parent; + + QMenuBar* menuBar; + QMenu* menuFile; + QMenu* menuView; + QMenu* menuHelp; + + QToolBar* toolbarFile; + QToolBar* toolbarView; + QToolBar* toolbarHelp; + QToolBar* toolbarConcentration; + + QAction* actionExportCSV; + QAction* actionExportSpectrum; + QAction* actionCloseWindow; + QAction* actionZoomIn; + QAction* actionZoomOut; + QAction* actionZoomReset; + QAction* actionHideLabels; + //QAction* actionMouseConcentrationSelection; + QAction* actionHTMLDocumentation; + + QWidget* widgetconcentration; + QHBoxLayout* hboxconcentration; + QLabel* labelconcentration; + QDoubleSpinBox* minconcentration; + QLabel* labelseparator; + QDoubleSpinBox* maxconcentration; + QPushButton* setconcentrationinterval; + QPushButton* resetconcentrationinterval; + + cCalibrationChartScene* chartscene; + + QTableView* database; + QStandardItemModel* databasemodel; + cCalibrationChartProxyModel* proxymodel; + + QSplitter* vsplitter; + + QString lastdirexporttocsv; + +signals: + + + /** + \brief The signal is emitted when the range of concentration is changed. + \param minconcentration a minimum threshold of concentration + \param maxconcentration a maximum threshold of concentration + */ + void emitConcentrationInterval(double minconcentration, double maxconcentration); + + +private slots: + + + void exportToCsv(); + + + void updateConcentrationInterval(double minconcentration, double maxconcentration); + + + void setConcentrationInterval(); + + + void exportScene(); + + + void hideLabels(bool state); + + + void showHTMLDocumentation(); + + + void closeWindow(); + +}; + +#endif + diff --git a/CycloBranch/gui/cCalibrationChartProxyModel.cpp b/CycloBranch/gui/cCalibrationChartProxyModel.cpp new file mode 100644 index 0000000..d3c8ab4 --- /dev/null +++ b/CycloBranch/gui/cCalibrationChartProxyModel.cpp @@ -0,0 +1,35 @@ +#include "gui/cCalibrationChartProxyModel.h" + + +cCalibrationChartProxyModel::cCalibrationChartProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { + // nothing to do +} + + +bool cCalibrationChartProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { + QVariant leftData = sourceModel()->data(left); + QVariant rightData = sourceModel()->data(right); + + if (leftData.toString().isEmpty()) { + return (sortOrder() == Qt::AscendingOrder) ? false : true; + } + + if (rightData.toString().isEmpty()) { + return (sortOrder() == Qt::AscendingOrder) ? true : false; + } + + if (leftData.type() == QVariant::ByteArray) { + return leftData.toDouble() < rightData.toDouble(); + } + + if (leftData.type() == QVariant::String) { + return leftData.toString().toLower() < rightData.toString().toLower(); + } + + if (leftData.type() == QVariant::Int) { + return leftData.toInt() < rightData.toInt(); + } + + return QSortFilterProxyModel::lessThan(left, right); +} + diff --git a/CycloBranch/gui/cCalibrationChartProxyModel.h b/CycloBranch/gui/cCalibrationChartProxyModel.h new file mode 100644 index 0000000..43d4122 --- /dev/null +++ b/CycloBranch/gui/cCalibrationChartProxyModel.h @@ -0,0 +1,47 @@ +/** + \file cCalibrationChartProxyModel.h + \brief A table proxy model. +*/ + + +#ifndef _CCALIBRATIONCHARTPROXYMODEL_H +#define _CCALIBRATIONCHARTPROXYMODEL_H + +#include +#include +#include +#include +#include +#include "core/cParameters.h" + + +/** + \brief A table proxy model. +*/ +class cCalibrationChartProxyModel : public QSortFilterProxyModel { + + Q_OBJECT + +public: + + /** + \brief The constructor. + \param parent pointer to a parent widget + */ + cCalibrationChartProxyModel(QObject *parent = 0); + +protected: + + /** + \brief Reimplementation of lessThan. + \param left QModelIndex + \param right QModelIndex + \retval bool bool + */ + bool lessThan(const QModelIndex &left, const QModelIndex &right) const Q_DECL_OVERRIDE; + +}; + + +#endif + diff --git a/CycloBranch/gui/cCalibrationChartScene.cpp b/CycloBranch/gui/cCalibrationChartScene.cpp new file mode 100644 index 0000000..7d4be0c --- /dev/null +++ b/CycloBranch/gui/cCalibrationChartScene.cpp @@ -0,0 +1,958 @@ +#include "gui/cCalibrationChartScene.h" + +//#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + + +double calculateR2Value(double a, double b, vector xvalues, vector yvalues) { + if (xvalues.empty() || yvalues.empty()) { + return 0; + } + + double avg = 0; + for (int i = 0; i < (int)yvalues.size(); i++) { + avg += yvalues[i]; + } + avg /= (double)(yvalues.size()); + + double sqsumres = 0; + double sqsumtot = 0; + double tmpval; + + for (int i = 0; i < (int)yvalues.size(); i++) { + tmpval = a * xvalues[i] + b; + tmpval = tmpval - yvalues[i]; + sqsumres += tmpval * tmpval; + + tmpval = yvalues[i] - avg; + sqsumtot += tmpval * tmpval; + } + + return 1.0 - sqsumres / sqsumtot; +} + + +double calculateLOD(double a, vector xvalues, vector yvalues) { + if ((a == 0) || (xvalues.size() < 3) || (xvalues.size() != yvalues.size())) { + return 0; + } + + double slope = a; + double stddevy = 0; + + int size = (int)xvalues.size(); + + double avgx = 0; + double avgy = 0; + + for (int i = 0; i < size; i++) { + avgx += xvalues[i]; + avgy += yvalues[i]; + } + avgx /= (double)(size); + avgy /= (double)(size); + + double part1 = 0; + double part2 = 0; + double part3 = 0; + double xdiff; + double ydiff; + + for (int i = 0; i < size; i++) { + xdiff = xvalues[i] - avgx; + ydiff = yvalues[i] - avgy; + + part1 += ydiff * ydiff; + part2 += xdiff * ydiff; + part3 += xdiff * xdiff; + } + + stddevy = sqrt(1.0 / ((double)(size - 2)) * (part1 - part2 * part2 / part3)); + + return max(0.0, 3.3 * stddevy / slope); +} + + +double calculateLOQ(double a, vector xvalues, vector yvalues) { + return 10.0 / 3.3 * calculateLOD(a, xvalues, yvalues); +} + + +cCalibrationChartScene::cCalibrationChartScene(QWidget* parent) { + this->parent = parent; + origwidth = 0; + origheight = 0; + calledbyresizeevent = false; + oldwidth.clear(); + oldheight.clear(); + currentscale = 1; + factor = 0.2; + pressedx = -1; + pressedy = -1; + currentx = 0; + currenty = 0; + minconcentration = 0; + maxconcentration = 0; + + topmargin = 0; + bottommargin = 0; + leftmargin = 0; + rightmargin = 0; + + firstshow = true; + enablemouseconcentrationselection = true; + + equationtype = 0; + + a = 1; + b = 0; + + xvalues.clear(); + yvalues.clear(); + + sd.clear(); + + datax.clear(); + datay.clear(); + + datasd.clear(); + datagroups.clear(); + + hidelabels = false; + + scene = new QGraphicsScene(this); + + zoomgroup = new QGraphicsItemGroup(); + zoomrect = new QGraphicsRectItem(); + zoomgroup->addToGroup(zoomrect); + zoomsimpletextitem = new QGraphicsSimpleTextItem(); + zoomgroup->addToGroup(zoomsimpletextitem); + scene->addItem(zoomgroup); + + cursorsimpletextitem = new QGraphicsSimpleTextItem(); + scene->addItem(cursorsimpletextitem); +} + + +cCalibrationChartScene::~cCalibrationChartScene() { + delete scene; +} + + +void cCalibrationChartScene::initialize() { + minconcentration = 0; + maxconcentration = 1000; + emit updateConcentrationInterval(minconcentration, maxconcentration); + + setScene(scene); + + origwidth = viewport()->width() * 4 / 5; + origheight = viewport()->height() * 3 / 5; + + // a visualization fix + origwidth = (origwidth / 10) * 10; + origheight = (origheight / 10) * 10; + + originalmatrix = matrix(); + + datax.clear(); + datay.clear(); + + datasd.clear(); + datagroups.clear(); + + redrawScene(); +} + + +void cCalibrationChartScene::exportToPDF(QString filename, bool postscript) { + QPrinter printer; + if (postscript) { + printer.setPaperSize(QSizeF(scene->width() + 100, scene->height() + 100), QPrinter::DevicePixel); + printer.setPageMargins (50, 50, 50, 50, QPrinter::DevicePixel); + } + else { + printer.setPaperSize(QSizeF(scene->width(), scene->height()), QPrinter::DevicePixel); + printer.setPageMargins (0, 0, 0, 0, QPrinter::DevicePixel); + } + printer.setOutputFormat(QPrinter::NativeFormat); + printer.setOutputFileName(filename); + + QPainter painter; + if (!painter.begin(&printer)) { + QMessageBox msgBox; + QString errstr = "The file cannot be created."; + #if OS_TYPE == UNX + errstr += "\nDo you have a properly configured print server (sudo apt-get install cups-pdf) ?"; + #endif + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing|QPainter::SmoothPixmapTransform); + scene->render(&painter); + painter.end(); +} + + +void cCalibrationChartScene::exportToSVG(QString filename) { + QSvgGenerator generator; + generator.setFileName(filename); + generator.setSize(QSize(scene->width(), scene->height())); + generator.setViewBox(QRect(0, 0, scene->width(), scene->height())); + + QPainter painter; + if (!painter.begin(&generator)) { + QMessageBox msgBox; + QString errstr = "The file cannot be created."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + painter.fillRect(QRect(0, 0, scene->width(), scene->height()), Qt::white); + scene->render(&painter); + painter.end(); +} + + +void cCalibrationChartScene::exportToPNG(QString filename) { + QImage image(scene->width(), scene->height(), QImage::Format_ARGB32); + image.fill(Qt::white); + + QPainter painter; + if (!painter.begin(&image)) { + QMessageBox msgBox; + QString errstr = "The file cannot be created."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + scene->render(&painter); + painter.end(); + image.save(filename); +} + + +void cCalibrationChartScene::hideLabels(bool state) { + hidelabels = state; + redrawScene(); +} + + +void cCalibrationChartScene::setLineParameters(int equationtype, double a, double b, vector xvalues, vector yvalues, vector sd) { + this->equationtype = equationtype; + + this->a = a; + this->b = b; + + this->xvalues = xvalues; + this->yvalues = yvalues; + + this->sd = sd; + + initialize(); +} + + +void cCalibrationChartScene::setData(vector datax, vector datay, vector datasd, vector datagroups) { + this->datax = datax; + this->datay = datay; + + this->datasd = datasd; + this->datagroups = datagroups; + + redrawScene(); +} + + +void cCalibrationChartScene::wheelEvent(QWheelEvent *event) { + double part, newmin, newmax; + + if (event->delta() > 0) { + part = fabs(maxconcentration - minconcentration) / 10.0; + newmin = minconcentration + part; + newmax = maxconcentration - part; + } + else { + part = fabs(maxconcentration - minconcentration) / 8.0; + newmin = max(minconcentration - part, 0.0); + newmax = min(maxconcentration + part, 1000000.0); + } + + if (newmin < newmax) { + minconcentration = newmin; + maxconcentration = newmax; + emit updateConcentrationInterval(minconcentration, maxconcentration); + redrawScene(); + viewport()->update(); + } + + event->accept(); +} + + +void cCalibrationChartScene::mouseMoveEvent(QMouseEvent *event) { + QGraphicsView::mouseMoveEvent(event); + + QPointF p = mapToScene(event->x(), event->y()); + + QPointF curpos; + curpos.setX(p.x() + 15); + curpos.setY(p.y() - 2); + + double concentration = getConcentrationFromXPosition((int)p.x(), origwidth); + double intensity = getIntensityFromYPosition((int)p.y(), origheight); + QString curtext = "x: " + QString::number(concentration) + ", y: " + QString::number(intensity); + + cursorsimpletextitem->setPos(curpos); + cursorsimpletextitem->setText(curtext); + + if ((pressedx != -1) && (pressedy != -1)) { + cursorsimpletextitem->setVisible(false); + + currentx = (int)p.x(); + currenty = (int)p.y(); + + if (enablemouseconcentrationselection) { + updateZoomGroup(); + } + else { + calculateMinMaxConcentration(); + + emit updateConcentrationInterval(minconcentration, maxconcentration); + + pressedx = currentx; + pressedy = currenty; + + redrawScene(); + } + } + else { + if (((int)p.x() >= leftmargin) && ((int)p.x() <= origwidth - rightmargin) && ((int)p.y() >= topmargin) && ((int)p.y() <= origheight - bottommargin)) { + cursorsimpletextitem->setVisible(true); + } + else { + cursorsimpletextitem->setVisible(false); + } + } + + event->accept(); +} + + +void cCalibrationChartScene::mouseReleaseEvent(QMouseEvent *event) { + QGraphicsView::mouseReleaseEvent(event); + + if (pressedx == currentx) { + pressedx = -1; + currentx = -1; + + redrawScene(); + } + + if ((event->button() == Qt::LeftButton) && (pressedx != -1) && (pressedy != -1)) { + calculateMinMaxConcentration(); + + emit updateConcentrationInterval(minconcentration, maxconcentration); + + pressedx = -1; + pressedy = -1; + + redrawScene(); + } + + QPointF p = mapToScene(event->x(), event->y()); + + QPointF curpos; + curpos.setX(p.x() + 15); + curpos.setY(p.y() - 2); + + double concentration = getConcentrationFromXPosition((int)p.x(), origwidth); + double intensity = getIntensityFromYPosition((int)p.y(), origheight); + QString curtext = "x: " + QString::number(concentration) + ", y: " + QString::number(intensity); + + cursorsimpletextitem->setPos(curpos); + cursorsimpletextitem->setText(curtext); + + if (((int)p.x() >= leftmargin) && ((int)p.x() <= origwidth - rightmargin) && ((int)p.y() >= topmargin) && ((int)p.y() <= origheight - bottommargin)) { + cursorsimpletextitem->setVisible(true); + } + else { + cursorsimpletextitem->setVisible(false); + } + + event->accept(); +} + + +void cCalibrationChartScene::mousePressEvent(QMouseEvent *event) { + QGraphicsView::mousePressEvent(event); + + cursorsimpletextitem->setVisible(false); + + if (event->button() == Qt::LeftButton) { + QPointF p = mapToScene(event->x(), event->y()); + pressedx = (int)p.x(); + pressedy = (int)p.y(); + + currentx = pressedx; + currenty = pressedy; + + if (enablemouseconcentrationselection) { + updateZoomGroup(); + } + } + + if (event->button() == Qt::RightButton) { + pressedx = -1; + pressedy = -1; + + redrawScene(); + } + + //if (enablemouseconcentrationselection) { + if (event->button() == Qt::MiddleButton) { + pressedx = -1; + pressedy = -1; + + resetConcentrationInterval(); + + redrawScene(); + } + //} + + event->accept(); +} + + +void cCalibrationChartScene::showEvent(QShowEvent *event) { + QGraphicsView::showEvent(event); + + if (firstshow) { + normalSize(); + firstshow = false; + } +} + + +void cCalibrationChartScene::resizeEvent(QResizeEvent *event) { + QGraphicsView::resizeEvent(event); + + origwidth = viewport()->width() * 4 / 5; + origheight = viewport()->height() * 3 / 5; + + // a visualization fix + origwidth = (origwidth / 10) * 10; + origheight = (origheight / 10) * 10; + + calledbyresizeevent = true; + + redrawScene(); +} + + +double cCalibrationChartScene::getConcentrationFromXPosition(int x, int w) { + double concentration = (double)(x - leftmargin) / (double)(w - leftmargin - rightmargin) * (maxconcentration - minconcentration) + minconcentration; + return max(0.0, concentration); +} + + +int cCalibrationChartScene::getXPositionFromConcentration(double concentration, int w) { + double val = concentration - minconcentration; + val /= maxconcentration - minconcentration; + val *= double(w - leftmargin - rightmargin); + return (int)val + leftmargin; +} + + +double cCalibrationChartScene::getIntensityFromYPosition(int y, int h) { + double maximumintensity = getMaximumIntensity(); + double intensity = (double)(y - topmargin) / (double)(h - topmargin - bottommargin) * maximumintensity; + intensity = maximumintensity - intensity; + return max(0.0, intensity); +} + + +int cCalibrationChartScene::getYPositionFromIntensity(double intensity, int h) { + double maximumintensity = getMaximumIntensity(); + double val = maximumintensity - intensity; + val /= maximumintensity; + val *= double(h - topmargin - bottommargin); + return max(0, (int)val + topmargin); +} + + +void cCalibrationChartScene::redrawScene() { + QGraphicsSimpleTextItem* simpletext; + QGraphicsTextItem* htmltext; + + QGraphicsLineItem* line; + + int xstep, ystep; + int w = origwidth; + int h = origheight; + int rulergranularity = 10; + + QFont myFont("Arial", 8); + QFontMetrics fm(myFont); + + QList usedtextitems; + + double maxintensity = getMaximumIntensity(); + + scene->removeItem(zoomgroup); + scene->removeItem(cursorsimpletextitem); + + scene->clear(); + + zoomgroup->setVisible(false); + scene->addItem(zoomgroup); + + cursorsimpletextitem->setVisible(false); + scene->addItem(cursorsimpletextitem); + + // bug fix - mouseMoveEvent is not fired if any QGraphicsTextItem is not in the scene + scene->addText(""); + + // x axis + line = scene->addLine(leftmargin, h - bottommargin, w - rightmargin, h - bottommargin, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + // x axis ruler + xstep = (w - leftmargin - rightmargin) / rulergranularity; + for (int i = 0; i < rulergranularity; i++) { + line = scene->addLine(leftmargin + xstep * i, h - bottommargin, leftmargin + xstep * i, h - bottommargin + 10, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + } + line = scene->addLine(w - rightmargin, h - bottommargin, w - rightmargin, h - bottommargin + 10, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + simpletext = scene->addSimpleText(QString::number(minconcentration), myFont); + simpletext->setPos(QPointF(leftmargin - simpletext->boundingRect().width() / 2, h - bottommargin + 12)); + simpletext->setZValue(1); + + if (maxconcentration - minconcentration > 0.01) { + xstep = (w - leftmargin - rightmargin) / rulergranularity; + for (int i = 1; i < rulergranularity; i++) { + simpletext = scene->addSimpleText(QString::number(minconcentration + (maxconcentration - minconcentration) / (double)rulergranularity * (double)i), myFont); + simpletext->setPos(QPointF(leftmargin + xstep * i - simpletext->boundingRect().width() / 2, h - bottommargin + 12)); + simpletext->setZValue(1); + } + } + + simpletext = scene->addSimpleText(QString::number(maxconcentration), myFont); + simpletext->setPos(QPointF(w - rightmargin - simpletext->boundingRect().width() / 2, h - bottommargin + 12)); + simpletext->setZValue(1); + + + // y axis + line = scene->addLine(leftmargin, h - bottommargin, leftmargin, h - bottommargin - std::max(h - topmargin - bottommargin, 0), QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + // y axis ruler + ystep = (h - topmargin - bottommargin) / rulergranularity; + for (int i = 0; i < rulergranularity; i++) { + line = scene->addLine(leftmargin - 10, h - bottommargin - ystep * i, leftmargin, h - bottommargin - ystep * i, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + } + line = scene->addLine(leftmargin - 10, h - bottommargin - std::max(h - topmargin - bottommargin, 0), leftmargin, h - bottommargin - std::max(h - topmargin - bottommargin, 0), QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + simpletext = scene->addSimpleText(QString::number(0), myFont); + simpletext->setPos(QPointF(leftmargin - 15 - simpletext->boundingRect().width(), h - bottommargin - simpletext->boundingRect().height() / 2)); + simpletext->setZValue(1); + + ystep = (h - topmargin - bottommargin) / rulergranularity; + if (maxintensity > 0) { + for (int i = 1; i < rulergranularity; i++) { + simpletext = scene->addSimpleText(QString::number(maxintensity / (double)rulergranularity * (double)i), myFont); + simpletext->setPos(QPointF(leftmargin - 15 - simpletext->boundingRect().width(), h - bottommargin - simpletext->boundingRect().height() / 2 - ystep * i)); + simpletext->setZValue(1); + } + } + + if (maxintensity > 0) { + simpletext = scene->addSimpleText(QString::number(maxintensity), myFont); + simpletext->setPos(QPointF(leftmargin - 15 - simpletext->boundingRect().width(), h - bottommargin - std::max(h - topmargin - bottommargin, 0) - simpletext->boundingRect().height() / 2)); + simpletext->setZValue(1); + } + + QPainterPath rpath; + const int step = 1; + + int xmin = getXPositionFromConcentration(minconcentration, w); + int xmax = getXPositionFromConcentration(maxconcentration, w); + int xval, yval, tmpyval1, tmpyval2; + + for (int i = xmin; i < xmax; i += step) { + yval = getYPositionFromIntensity(a * getConcentrationFromXPosition(i, w) + b, h); + + if (rpath.elementCount() == 0) { + if (yval <= h - bottommargin) { + rpath.moveTo(i, yval); + } + } + else { + if (yval >= topmargin) { + rpath.lineTo(i, yval); + } + } + } + + scene->addPath(rpath, QPen(Qt::red, 2, Qt::SolidLine)); + + for (int i = 0; i < (int)xvalues.size(); i++) { + xval = getXPositionFromConcentration(xvalues[i], w); + yval = getYPositionFromIntensity(yvalues[i], h); + + if ((xval >= xmin) && (xval <= xmax) && (yval >= topmargin) && (yval <= h - bottommargin)) { + tmpyval1 = getYPositionFromIntensity(min(getMaximumIntensity(), yvalues[i] + sd[i]), h); + tmpyval2 = max(topmargin, tmpyval1); + scene->addLine(xval, yval, xval, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + + if (tmpyval1 > topmargin) { + scene->addLine(xval - 2, tmpyval2, xval + 2, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + } + + tmpyval1 = getYPositionFromIntensity(min(getMaximumIntensity(), yvalues[i] - sd[i]), h); + tmpyval2 = min(h - bottommargin, tmpyval1); + scene->addLine(xval, yval, xval, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + + if (tmpyval1 < h - bottommargin) { + scene->addLine(xval - 2, tmpyval2, xval + 2, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + } + + scene->addEllipse(QRectF(xval - 4, yval - 4, 8, 8), QPen(Qt::blue, 1, Qt::SolidLine), QBrush(Qt::blue)); + } + } + + for (int i = 0; i < (int)datax.size(); i++) { + xval = getXPositionFromConcentration(datax[i], w); + yval = getYPositionFromIntensity(datay[i], h); + + if ((xval >= xmin) && (xval <= xmax) && (yval >= topmargin) && (yval <= h - bottommargin)) { + tmpyval1 = getYPositionFromIntensity(min(getMaximumIntensity(), datay[i] + datasd[i]), h); + tmpyval2 = max(topmargin, tmpyval1); + scene->addLine(xval, yval, xval, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + + if (tmpyval1 > topmargin) { + scene->addLine(xval - 2, tmpyval2, xval + 2, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + } + + tmpyval1 = getYPositionFromIntensity(min(getMaximumIntensity(), datay[i] - datasd[i]), h); + tmpyval2 = min(h - bottommargin, tmpyval1); + scene->addLine(xval, yval, xval, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + + if (tmpyval1 < h - bottommargin) { + scene->addLine(xval - 2, tmpyval2, xval + 2, tmpyval2, QPen(Qt::gray, 2, Qt::SolidLine)); + } + + scene->addEllipse(QRectF(xval - 4, yval - 4, 8, 8), QPen(Qt::green, 1, Qt::SolidLine), QBrush(Qt::green)); + } + } + + string graphlabel; + if (!hidelabels) { + graphlabel = "y = " + to_string(a) + "x"; + if (b != 0) { + if (b > 0) { + graphlabel += " + " + to_string(b); + } + else { + graphlabel += " - " + to_string(fabs(b)); + } + } + } + + htmltext = scene->addText("", myFont); + htmltext->setHtml(graphlabel.c_str()); + htmltext->setPos(QPointF(leftmargin + 10, topmargin)); + htmltext->setZValue(1); + + int linespace = 16; + + if (!xvalues.empty() && (equationtype < 2)) { + if (!hidelabels) { + graphlabel = "R2 = " + to_string(calculateR2Value(a, b, xvalues, yvalues)); + + htmltext = scene->addText("", myFont); + htmltext->setHtml(graphlabel.c_str()); + htmltext->setPos(QPointF(leftmargin + 10, topmargin + linespace)); + htmltext->setZValue(1); + + graphlabel = "LOD = " + to_string(calculateLOD(a, xvalues, yvalues)); + + htmltext = scene->addText("", myFont); + htmltext->setHtml(graphlabel.c_str()); + htmltext->setPos(QPointF(leftmargin + 10, topmargin + 3 * linespace)); + htmltext->setZValue(1); + + graphlabel = "LOQ = " + to_string(calculateLOQ(a, xvalues, yvalues)); + + htmltext = scene->addText("", myFont); + htmltext->setHtml(graphlabel.c_str()); + htmltext->setPos(QPointF(leftmargin + 10, topmargin + 4 * linespace)); + htmltext->setZValue(1); + } + } + + if (!hidelabels) { + + usedtextitems.clear(); + + for (int i = (int)xvalues.size() - 1; i >= 0; i--) { + xval = getXPositionFromConcentration(xvalues[i], w); + yval = getYPositionFromIntensity(yvalues[i], h); + + if ((xval >= xmin) && (xval <= xmax) && (yval >= topmargin) && (yval <= h - bottommargin)) { + graphlabel = "Calib. " + to_string(xvalues[i]); + simpletext = scene->addSimpleText(graphlabel.c_str(), myFont); + simpletext->setPos(QPointF(xval + 10, yval - 5)); + simpletext->setZValue(1); + + for (auto& it : usedtextitems) { + if (simpletext->collidesWithItem(it, Qt::IntersectsItemBoundingRect)) { + scene->removeItem(simpletext); + simpletext = 0; + break; + } + } + + if (simpletext) { + usedtextitems.append(simpletext); + } + } + } + + for (int i = (int)datax.size() - 1; i >= 0; i--) { + xval = getXPositionFromConcentration(datax[i], w); + yval = getYPositionFromIntensity(datay[i], h); + + if ((xval >= xmin) && (xval <= xmax) && (yval >= topmargin) && (yval <= h - bottommargin)) { + graphlabel = "Group " + to_string(datagroups[i]); + simpletext = scene->addSimpleText(graphlabel.c_str(), myFont); + simpletext->setPos(QPointF(xval + 10, yval - 5)); + simpletext->setZValue(1); + + for (auto& it : usedtextitems) { + if (simpletext->collidesWithItem(it, Qt::IntersectsItemBoundingRect)) { + scene->removeItem(simpletext); + simpletext = 0; + break; + } + } + + if (simpletext) { + usedtextitems.append(simpletext); + } + } + } + + } + + scene->removeItem(zoomgroup); + scene->removeItem(cursorsimpletextitem); + + if (calledbyresizeevent) { + oldwidth.push_back(origwidth); + oldheight.push_back(origheight); + } + else { + oldwidth.clear(); + oldheight.clear(); + } + + bool blocksignal = false; + // detection of cyclic calls redrawScene<->resizeEvent + if ((oldwidth.size() == 4) && (oldheight.size() == 4)) { + if ((oldwidth[3] == oldwidth[1]) && (oldheight[3] == oldheight[1]) && (oldwidth[2] == oldwidth[0]) && (oldheight[2] == oldheight[0])) { + blocksignal = true; + } + } + + if (blocksignal) { + scene->blockSignals(true); + } + + scene->setSceneRect(scene->itemsBoundingRect()); + + if (blocksignal) { + scene->blockSignals(false); + } + + zoomgroup->setVisible(false); + scene->addItem(zoomgroup); + + cursorsimpletextitem->setVisible(false); + scene->addItem(cursorsimpletextitem); + + while (oldwidth.size() > 3) { + oldwidth.pop_front(); + } + + while (oldheight.size() > 3) { + oldheight.pop_front(); + } + + calledbyresizeevent = false; +} + + +void cCalibrationChartScene::updateZoomGroup() { + qreal rx1, rx2, ry1, ry2; + QFont myFont("Arial", 8); + + if (currentx < pressedx) { + rx1 = currentx; + rx2 = pressedx; + } + else { + rx1 = pressedx; + rx2 = currentx; + } + + if (currenty < pressedy) { + ry1 = currenty; + ry2 = pressedy; + } + else { + ry1 = pressedy; + ry2 = currenty; + } + + zoomrect->setPen(QPen(Qt::black, 1, Qt::DashLine)); + zoomrect->setRect(QRectF(QPointF(rx1, ry1), QPointF(rx2, ry2))); + + QString qstr = "x: "; + qstr += QString::number(getConcentrationFromXPosition((pressedx < currentx)?pressedx:currentx, origwidth)); + qstr += "-"; + qstr += QString::number(getConcentrationFromXPosition((pressedx < currentx)?currentx:pressedx, origwidth)); + qstr += "\ndiff: "; + qstr += QString::number(getConcentrationFromXPosition((pressedx < currentx)?currentx:pressedx, origwidth) - getConcentrationFromXPosition((pressedx < currentx)?pressedx:currentx, origwidth)); + + zoomsimpletextitem->setFont(myFont); + zoomsimpletextitem->setText(qstr); + zoomsimpletextitem->setPos(QPointF(pressedx, pressedy - 2)); + + zoomgroup->setVisible(true); +} + + +void cCalibrationChartScene::calculateMinMaxConcentration() { + if (pressedx < leftmargin) { + pressedx = leftmargin; + } + + if (pressedx > origwidth - rightmargin) { + pressedx = origwidth - rightmargin; + } + + if (currentx < leftmargin) { + currentx = leftmargin; + } + + if (currentx > origwidth - rightmargin) { + currentx = origwidth - rightmargin; + } + + double tmpminconcentration = getConcentrationFromXPosition((pressedx < currentx) ? pressedx : currentx, origwidth); + double tmpmaxconcentration = getConcentrationFromXPosition((pressedx < currentx) ? currentx : pressedx, origwidth); + + if (enablemouseconcentrationselection) { + minconcentration = tmpminconcentration; + maxconcentration = tmpmaxconcentration; + } + else { + if (pressedx > currentx) { + minconcentration = min(minconcentration + tmpmaxconcentration - tmpminconcentration, 1000000.0); + maxconcentration = min(maxconcentration + tmpmaxconcentration - tmpminconcentration, 1000000.0); + } + else { + minconcentration = max(0.0, minconcentration - tmpmaxconcentration + tmpminconcentration); + maxconcentration = max(0.0, maxconcentration - tmpmaxconcentration + tmpminconcentration); + } + } +} + + +double cCalibrationChartScene::getMaximumIntensity() { + return a * maxconcentration + b; +} + + +void cCalibrationChartScene::zoomIn() { + if (currentscale < 32) { + currentscale += factor; + setMatrix(originalmatrix); + scale(currentscale, currentscale); + verticalScrollBar()->setSliderPosition(verticalScrollBar()->maximum()); + } +} + + +void cCalibrationChartScene::zoomOut() { + if (currentscale > 1) { + currentscale -= factor; + setMatrix(originalmatrix); + scale(currentscale, currentscale); + verticalScrollBar()->setSliderPosition(verticalScrollBar()->maximum()); + } +} + + +void cCalibrationChartScene::normalSize() { + currentscale = 1; + setMatrix(originalmatrix); + verticalScrollBar()->setSliderPosition(verticalScrollBar()->maximum()); +} + + +void cCalibrationChartScene::setConcentrationInterval(double minconcentration, double maxconcentration) { + if (maxconcentration < minconcentration) { + double tmp = maxconcentration; + maxconcentration = minconcentration; + minconcentration = tmp; + } + + this->minconcentration = std::max(0.0, minconcentration); + this->maxconcentration = std::min(maxconcentration, 1000000.0); + emit updateConcentrationInterval(this->minconcentration, this->maxconcentration); + + redrawScene(); + viewport()->update(); +} + + +void cCalibrationChartScene::resetConcentrationInterval() { + minconcentration = 0; + maxconcentration = 1000; + emit updateConcentrationInterval(minconcentration, maxconcentration); + + redrawScene(); +} + + +//void cCalibrationChartScene::enableMouseConcentrationSelectionTool(bool enable) { +// enablemouseconcentrationselection = enable; +// pressedx = -1; +// pressedy = -1; +// +// redrawScene(); +//} + diff --git a/CycloBranch/gui/cCalibrationChartScene.h b/CycloBranch/gui/cCalibrationChartScene.h new file mode 100644 index 0000000..7d4a49f --- /dev/null +++ b/CycloBranch/gui/cCalibrationChartScene.h @@ -0,0 +1,303 @@ +/** + \file cCalibrationChartScene.h + \brief Calibration chart scene. +*/ + + +#ifndef _CCALIBRATIONCHARTSCENE_H +#define _CCALIBRATIONCHARTSCENE_H + +#include +#include +#include +#include +#include +#include + + +using namespace std; + + +// forward declaration +class QPaintEvent; +class QGraphicsScene; +class QMatrix; +class QGraphicsItemGroup; +class QGraphicsRectItem; +class QGraphicsSimpleTextItem; + + +/** + \brief Calculate the coefficient of determination R^2. + \param a a + \param b b + \param xvalues x coordinates of points + \param yvalues y coordinates of points + \retval double R^2 +*/ +double calculateR2Value(double a, double b, vector xvalues, vector yvalues); + + +/** + \brief Calculate limit of detection. + \param a a + \param xvalues x coordinates of points + \param yvalues y coordinates of points + \retval double limit of detection +*/ +double calculateLOD(double a, vector xvalues, vector yvalues); + + +/** + \brief Calculate limit of quantitation. + \param a a + \param xvalues x coordinates of points + \param yvalues y coordinates of points + \retval double limit of quantitation +*/ +double calculateLOQ(double a, vector xvalues, vector yvalues); + + +/** + \brief The implementation of an isotopic pattern simulator (graphics). +*/ +class cCalibrationChartScene : public QGraphicsView +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param parent pointer to a parent widget + */ + cCalibrationChartScene(QWidget* parent = 0); + + + /** + \brief The destructor. + */ + ~cCalibrationChartScene(); + + + /** + \brief Initialize the widget. + */ + void initialize(); + + + /** + \brief Export spectrum scene into a PDF or a PS file. + \param filename filename + \param postscript if true then PS file is generated instead of PDF + */ + void exportToPDF(QString filename, bool postscript); + + + /** + \brief Export spectrum scene into a SVG file. + \param filename filename + */ + void exportToSVG(QString filename); + + + /** + \brief Export spectrum scene into a PNG file. + \param filename filename + */ + void exportToPNG(QString filename); + + + /** + \brief Hide labels of calibration points. + \param state state of labels + */ + void hideLabels(bool state); + + + /** + \brief Set parameters of calibration curve. + \param equationtype 0 (y = a*x), 1 (y = a*x + b), 2 (manual mode) + \param a a + \param b b + \param xvalues x coordinates of points + \param yvalues y coordinates of points + \param sd standard deviation of y-values + */ + void setLineParameters(int equationtype, double a, double b, vector xvalues, vector yvalues, vector sd); + + + /** + \brief Set parameters of calibration curve. + \param datax x coordinates of data points + \param datay y coordinates of data points + \param datasd standard deviation of y-values + \param datagroups vector of group ids + */ + void setData(vector datax, vector datay, vector datasd, vector datagroups); + + +protected: + + + /** + \brief Handle the mouse wheel event. + \param event pointer to QWheelEvent + */ + void wheelEvent(QWheelEvent *event); + + + /** + \brief Handle the mouse move event. + \param event pointer to QMouseEvent + */ + void mouseMoveEvent(QMouseEvent *event); + + + /** + \brief Handle the mouse release event. + \param event pointer to QMouseEvent + */ + void mouseReleaseEvent(QMouseEvent *event); + + + /** + \brief Handle the mouse press event. + \param event pointer to QMouseEvent + */ + void mousePressEvent(QMouseEvent *event); + + + /** + \brief Handle the widget show event. + \param event pointer to QShowEvent + */ + void showEvent(QShowEvent *event); + + + /** + \brief Handle the widget resize event. + \param event pointer to QResizeEvent + */ + void resizeEvent(QResizeEvent *event); + + +private: + + QWidget* parent; + QGraphicsScene* scene; + QMatrix originalmatrix; + + QGraphicsItemGroup* zoomgroup; + QGraphicsRectItem* zoomrect; + QGraphicsSimpleTextItem* zoomsimpletextitem; + + QGraphicsSimpleTextItem* cursorsimpletextitem; + + //cPeaksList isotopicpattern; + + qreal currentscale; + qreal factor; + + int origwidth; + int origheight; + + bool calledbyresizeevent; + deque oldwidth; + deque oldheight; + + int pressedx; + int pressedy; + + int currentx; + int currenty; + + double minconcentration; + double maxconcentration; + + int topmargin; + int bottommargin; + int leftmargin; + int rightmargin; + + bool firstshow; + bool enablemouseconcentrationselection; + + int equationtype; + + double a; + double b; + + vector xvalues; + vector yvalues; + + vector sd; + + vector datax; + vector datay; + + vector datasd; + vector datagroups; + + bool hidelabels; + + + double getConcentrationFromXPosition(int x, int w); + + + int getXPositionFromConcentration(double concentration, int w); + + + double getIntensityFromYPosition(int y, int h); + + + int getYPositionFromIntensity(double intensity, int h); + + + void redrawScene(); + + + void updateZoomGroup(); + + + void calculateMinMaxConcentration(); + + + double getMaximumIntensity(); + + +signals: + + + /** + \brief The signal is emitted when the range of concentration has been changed. + \param minconcentration a minimum threshold of concentration + \param maxconcentration a maximum threshold of concentration + */ + void updateConcentrationInterval(double minconcentration, double maxconcentration); + + +private slots: + + + void zoomIn(); + + + void zoomOut(); + + + void normalSize(); + + + void setConcentrationInterval(double minconcentration, double maxconcentration); + + + void resetConcentrationInterval(); + + + //void enableMouseConcentrationSelectionTool(bool enable); + +}; + +#endif diff --git a/CycloBranch/gui/cChromatogramWindow.cpp b/CycloBranch/gui/cChromatogramWindow.cpp index 3b59b34..60913d5 100644 --- a/CycloBranch/gui/cChromatogramWindow.cpp +++ b/CycloBranch/gui/cChromatogramWindow.cpp @@ -2,9 +2,9 @@ #include "gui/cEventFilter.h" -cChromatogramWindow::cChromatogramWindow(cGlobalPreferences* globalpreferences, cTheoreticalSpectrumList& theoreticalspectrumlist, QWidget* parent) { +cChromatogramWindow::cChromatogramWindow(cGlobalPreferences* globalpreferences, cTheoreticalSpectrumList& listoftheoreticalspectra, QWidget* parent) { this->globalpreferences = globalpreferences; - this->theoreticalspectrumlist = &theoreticalspectrumlist; + this->listoftheoreticalspectra = &listoftheoreticalspectra; this->parent = parent; setWindowTitle("Chromatogram"); @@ -16,7 +16,7 @@ cChromatogramWindow::cChromatogramWindow(cGlobalPreferences* globalpreferences, menuView = new QMenu(tr("&View"), this); menuHelp = new QMenu(tr("&Help"), this); - chromatogramwindowwidget = new cChromatogramWindowWidget(theoreticalspectrumlist, this); + chromatogramwindowwidget = new cChromatogramWindowWidget(listoftheoreticalspectra, this); connect(chromatogramwindowwidget, SIGNAL(chromatogramWidgetDoubleClicked(int)), this, SLOT(chromatogramDoubleClickedSlot(int))); @@ -82,12 +82,39 @@ cChromatogramWindow::cChromatogramWindow(cGlobalPreferences* globalpreferences, toolbarView->addAction(actionAbsoluteIntensity); connect(actionAbsoluteIntensity, SIGNAL(toggled(bool)), chromatogramwindowwidget, SLOT(absoluteIntensityStateChanged(bool))); + actionRawData = new QAction(QIcon(":/images/icons/chromatography.png"), tr("&Profile Chromatogram"), this); + actionRawData->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P)); + actionRawData->setToolTip("Profile Chromatogram (Ctrl + P)"); + actionRawData->setCheckable(true); + toolbarView->addAction(actionRawData); + connect(actionRawData, SIGNAL(toggled(bool)), chromatogramwindowwidget, SLOT(rawDataStateChanged(bool))); + + peakshapelabel = new QLabel(); + peakshapelabel->setText("Peak Shape: "); + + comboboxpeakshape = new QComboBox(); + comboboxpeakshape->setToolTip("Select chromatographic peak shape to be used for area and concentration calculations:\nGaussian = basic Gaussian function,\nex-Gaussian (tailing) = Exponentially Modified Gaussian for chromatographic peaks with tailing,\nex-Gaussian (fronting) = Exponentially Modified Gaussian for chromatographic peaks with fronting."); + comboboxpeakshape->setSizeAdjustPolicy(QComboBox::AdjustToContents); + comboboxpeakshape->addItem("Gaussian"); + comboboxpeakshape->addItem("ex-Gaussian (tailing)"); + comboboxpeakshape->addItem("ex-Gaussian (fronting)"); + connect(comboboxpeakshape, SIGNAL(currentIndexChanged(int)), chromatogramwindowwidget, SLOT(peakShapeChanged(int))); + + peakshapehboxlayout = new QHBoxLayout(); + peakshapehboxlayout->addWidget(peakshapelabel); + peakshapehboxlayout->addWidget(comboboxpeakshape); + + peakshapewidget = new QWidget(); + peakshapewidget->setLayout(peakshapehboxlayout); + toolbarView->addWidget(peakshapewidget); + toolbarView->addSeparator(); actionHideTIC = new QAction(QIcon(":/images/icons/81.png"), tr("Hide &TIC"), this); actionHideTIC->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_T)); actionHideTIC->setToolTip("Hide TIC (Ctrl + Shift + T)"); actionHideTIC->setCheckable(true); + actionHideTIC->setChecked(true); toolbarView->addAction(actionHideTIC); connect(actionHideTIC, SIGNAL(toggled(bool)), chromatogramwindowwidget, SLOT(hideTIC(bool))); @@ -114,6 +141,8 @@ cChromatogramWindow::cChromatogramWindow(cGlobalPreferences* globalpreferences, toolbarHelp->addAction(actionHTMLDocumentation); connect(actionHTMLDocumentation, SIGNAL(triggered()), this, SLOT(showHTMLDocumentation())); + addToolBarBreak(); + toolbarTime = addToolBar(tr("Time and Spectrum ID")); @@ -210,6 +239,7 @@ cChromatogramWindow::cChromatogramWindow(cGlobalPreferences* globalpreferences, menuView->addAction(actionMouseSelection); menuView->addAction(actionRetentionTime); menuView->addAction(actionAbsoluteIntensity); + menuView->addAction(actionRawData); menuView->addSeparator(); menuView->addAction(actionHideTIC); menuView->addAction(actionHideEIC); @@ -235,6 +265,11 @@ cChromatogramWindow::cChromatogramWindow(cGlobalPreferences* globalpreferences, cChromatogramWindow::~cChromatogramWindow() { delete chromatogramwindowwidget; + delete peakshapelabel; + delete comboboxpeakshape; + delete peakshapehboxlayout; + delete peakshapewidget; + delete labelretentiontime; delete minretentiontime; delete labelseparatorretentiontime; @@ -261,6 +296,7 @@ cChromatogramWindow::~cChromatogramWindow() { delete actionMouseSelection; delete actionRetentionTime; delete actionAbsoluteIntensity; + delete actionRawData; delete actionHideTIC; delete actionHideEIC; delete actionHideLabels; @@ -280,8 +316,18 @@ void cChromatogramWindow::closeEvent(QCloseEvent *event) { } -void cChromatogramWindow::recalculateTICChromatogram() { - chromatogramwindowwidget->recalculateTICChromatogram(); +void cChromatogramWindow::recalculateTICChromatogram(int activefileid) { + chromatogramwindowwidget->recalculateTICChromatogram(activefileid); +} + + +void cChromatogramWindow::setAbsoluteIntensityEnabled(bool enabled) { + actionAbsoluteIntensity->setChecked(enabled); +} + + +void cChromatogramWindow::setPeakShape(int peakshape) { + comboboxpeakshape->setCurrentIndex(peakshape); } diff --git a/CycloBranch/gui/cChromatogramWindow.h b/CycloBranch/gui/cChromatogramWindow.h index e58e78c..7ce9c99 100644 --- a/CycloBranch/gui/cChromatogramWindow.h +++ b/CycloBranch/gui/cChromatogramWindow.h @@ -18,6 +18,7 @@ #include #include #include +#include #include "core/utilities.h" #include "core/cGlobalPreferences.h" #include "gui/cChromatogramWindowWidget.h" @@ -36,18 +37,18 @@ class cChromatogramWindow : public QMainWindow /** \brief The constructor. \param globalpreferences global preferences of the application - \param theoreticalspectrumlist list of spectra + \param listoftheoreticalspectra lists of theoretical spectra \param parent pointer to a parent widget - */ - cChromatogramWindow(cGlobalPreferences* globalpreferences, cTheoreticalSpectrumList& theoreticalspectrumlist, QWidget* parent = (QWidget *)0); + */ + cChromatogramWindow(cGlobalPreferences* globalpreferences, cTheoreticalSpectrumList& listoftheoreticalspectra, QWidget* parent = (QWidget *)0); /** \brief The destructor. - */ + */ ~cChromatogramWindow(); - + /** \brief Handle the window close event. \param event pointer to QCloseEvent @@ -57,8 +58,23 @@ class cChromatogramWindow : public QMainWindow /** \brief Recalculate TIC chromatogram. + \param activefileid id of an active file + */ + void recalculateTICChromatogram(int activefileid); + + + /** + \brief Enable/disable absolute intensity mode. + \param enabled if true the absolute intensity is used, if false the relative intensity is used */ - void recalculateTICChromatogram(); + void setAbsoluteIntensityEnabled(bool enabled); + + + /** + \brief Set chromatographic peak shape value. + \param peakshape 0 = Gaussian, 1 = ex-Gaussian (tailing), 2 = ex-Gaussian (fronting) + */ + void setPeakShape(int peakshape); /** @@ -71,7 +87,7 @@ class cChromatogramWindow : public QMainWindow private: cGlobalPreferences* globalpreferences; - cTheoreticalSpectrumList* theoreticalspectrumlist; + cTheoreticalSpectrumList* listoftheoreticalspectra; QWidget* parent; QMenuBar* menuBar; @@ -90,10 +106,16 @@ class cChromatogramWindow : public QMainWindow QAction* actionMouseSelection; QAction* actionRetentionTime; QAction* actionAbsoluteIntensity; + QAction* actionRawData; QAction* actionHideTIC; QAction* actionHideEIC; QAction* actionHideLabels; + QWidget* peakshapewidget; + QHBoxLayout* peakshapehboxlayout; + QLabel* peakshapelabel; + QComboBox* comboboxpeakshape; + QToolBar* toolbarTime; QWidget* widgetretentiontime; @@ -128,7 +150,7 @@ class cChromatogramWindow : public QMainWindow /** \brief Handle a key press event. \param event pointer to QKeyEvent - */ + */ void keyPressEvent(QKeyEvent *event); @@ -162,7 +184,7 @@ private slots: void exportImage(); - + void closeWindow(); diff --git a/CycloBranch/gui/cChromatogramWindowWidget.cpp b/CycloBranch/gui/cChromatogramWindowWidget.cpp index 5bebec0..31c333c 100644 --- a/CycloBranch/gui/cChromatogramWindowWidget.cpp +++ b/CycloBranch/gui/cChromatogramWindowWidget.cpp @@ -1,8 +1,973 @@ #include "gui/cChromatogramWindowWidget.h" -cChromatogramWindowWidget::cChromatogramWindowWidget(cTheoreticalSpectrumList& theoreticalspectrumlist, QWidget* parent) { - this->theoreticalspectrumlist = &theoreticalspectrumlist; +double getGaussianArea(double sigma, double height) { + return height * sigma * sqrt(2.0 * pi); +} + + +double getGaussianAreas(vector& sigmas, vector& heights) { + if (sigmas.size() != heights.size()) { + return 0; + } + + double area = 0; + size_t size = sigmas.size(); + for (size_t i = 0; i < size; i++) { + area += getGaussianArea(sigmas[i], heights[i]); + } + + return area; +} + + +double getExponentiallyModifiedGaussianArea(double x, double h, double ny, double sigma, double tau, bool fronting) { + if (sigma == 0) { + return 0; + } + + if (tau == 0) { + // to do - return Gaussian ? + return 0; + } + + //double y = computeExponentiallyModifiedGaussFunction(x, h, ny, sigma, tau, fronting); + + double t0, h0; + t0 = ny + erfcxinv(tau / sigma * sqrt(2.0 / pi)) * sigma * sqrt(2.0) - sigma * sigma / tau; + + h0 = ny - t0; + h0 *= h0; + h0 = h * pow(econst, -h0 / (2.0 * sigma * sigma)); + + h = h * h / h0; + + return getGaussianArea(sigma, h); + + //if (fronting) { + // ny = 2 * ny - t0; + //} + //else { + // ny = t0; + //} + + //double area = y * 2 * tau; + + //double z; + //if (fronting) { + // z = (-(ny - x) / sigma + sigma / tau) / sqrt(2.0); + //} + //else { + // z = ((ny - x) / sigma + sigma / tau) / sqrt(2.0); + //} + + //if (z < 0) { + // if (fronting) { + // area /= pow(econst, -(ny - x) / tau + sigma * sigma / (2.0 * tau * tau)); + // } + // else { + // area /= pow(econst, (ny - x) / tau + sigma * sigma / (2.0 * tau * tau)); + // } + // area /= erfc(z); + //} + //else { + // area /= pow(econst, -(ny - x)*(ny - x) / (2.0 * sigma * sigma)); + // area /= erfcx(z); + //} + // + //return area; +} + + +double getExponentiallyModifiedGaussianAreas(vector& xvalues, vector& heights, vector& nys, vector& sigmas, vector& taus, bool fronting) { + if ((sigmas.size() != xvalues.size()) || (sigmas.size() != heights.size()) || (sigmas.size() != nys.size()) || (sigmas.size() != taus.size())) { + return 0; + } + + double area = 0; + size_t size = sigmas.size(); + for (size_t i = 0; i < size; i++) { + area += getExponentiallyModifiedGaussianArea(xvalues[i], heights[i], nys[i], sigmas[i], taus[i], fronting); + } + + return area; +} + + +//double erfcx(double z) { +// if (z > 26) { +// return 1.0 / (z * sqrt(pi)); +// } +// return pow(econst, z*z) * erfc(z); +//} + + +/* + Based on: M. M. Shepherd and J. G. Laframboise, "Chebyshev Approximation of + (1+2x)exp(x^2)erfc x in 0 <= x < INF", Mathematics of Computation, Vol. 36, + No. 153, January 1981, pp. 249-253. + https://stackoverflow.com/questions/39777360/accurate-computation-of-scaled-complementary-error-function-erfcx +*/ +double erfcx(double x) { + double a, d, e, m, p, q, r, s, t; + + a = fmax(x, 0.0 - x); // NaN preserving absolute value computation + + /* Compute q = (a-4)/(a+4) accurately. [0,INF) -> [-1,1] */ + m = a - 4.0; + p = a + 4.0; + r = 1.0 / p; + q = m * r; + t = fma(q + 1.0, -4.0, a); + e = fma(q, -a, t); + q = fma(r, e, q); + + /* Approximate (1+2*a)*exp(a*a)*erfc(a) as p(q)+1 for q in [-1,1] */ + p = 0x1.edcad78fc8044p-31; // 8.9820305531190140e-10 + p = fma(p, q, 0x1.b1548f14735d1p-30); // 1.5764464777959401e-09 + p = fma(p, q, -0x1.a1ad2e6c4a7a8p-27); // -1.2155985739342269e-08 + p = fma(p, q, -0x1.1985b48f08574p-26); // -1.6386753783877791e-08 + p = fma(p, q, 0x1.c6a8093ac4f83p-24); // 1.0585794011876720e-07 + p = fma(p, q, 0x1.31c2b2b44b731p-24); // 7.1190423171700940e-08 + p = fma(p, q, -0x1.b87373facb29fp-21); // -8.2040389712752056e-07 + p = fma(p, q, 0x1.3fef1358803b7p-22); // 2.9796165315625938e-07 + p = fma(p, q, 0x1.7eec072bb0be3p-18); // 5.7059822144459833e-06 + p = fma(p, q, -0x1.78a680a741c4ap-17); // -1.1225056665965572e-05 + p = fma(p, q, -0x1.9951f39295cf4p-16); // -2.4397380523258482e-05 + p = fma(p, q, 0x1.3be1255ce180bp-13); // 1.5062307184282616e-04 + p = fma(p, q, -0x1.a1df71176b791p-13); // -1.9925728768782324e-04 + p = fma(p, q, -0x1.8d4aaa0099bc8p-11); // -7.5777369791018515e-04 + p = fma(p, q, 0x1.49c673066c831p-8); // 5.0319701025945277e-03 + p = fma(p, q, -0x1.0962386ea02b7p-6); // -1.6197733983519948e-02 + p = fma(p, q, 0x1.3079edf465cc3p-5); // 3.7167515521269866e-02 + p = fma(p, q, -0x1.0fb06dfedc4ccp-4); // -6.6330365820039094e-02 + p = fma(p, q, 0x1.7fee004e266dfp-4); // 9.3732834999538536e-02 + p = fma(p, q, -0x1.9ddb23c3e14d2p-4); // -1.0103906603588378e-01 + p = fma(p, q, 0x1.16ecefcfa4865p-4); // 6.8097054254651804e-02 + p = fma(p, q, 0x1.f7f5df66fc349p-7); // 1.5379652102610957e-02 + p = fma(p, q, -0x1.1df1ad154a27fp-3); // -1.3962111684056208e-01 + p = fma(p, q, 0x1.dd2c8b74febf6p-3); // 2.3299511862555250e-01 + + /* Divide (1+p) by (1+2*a) ==> exp(a*a)*erfc(a) */ + d = a + 0.5; + r = 1.0 / d; + r = r * 0.5; + q = fma(p, r, r); // q = (p+1)/(1+2*a) + t = q + q; + e = (p - q) + fma(t, -a, 1.0); // residual: (p+1)-q*(1+2*a) + r = fma(e, r, q); + + /* Handle argument of infinity */ + if (a > 0x1.fffffffffffffp1023) r = 0.0; + + /* Handle negative arguments: erfcx(x) = 2*exp(x*x) - erfcx(|x|) */ + if (x < 0.0) { + s = x * x; + d = fma(x, x, -s); + e = exp(s); + r = e - r; + r = fma(e, d + d, r); + r = r + e; + if (e > 0x1.fffffffffffffp1023) r = e; // avoid creating NaN + } + return r; +} + + +double erfcxinv(double z) { + double value; + + if (z <= 1) { + value = 1.0 / (z * sqrt(pi)); + } + else { + value = -sqrt(log(z)); + } + + for (int i = 0; i < 7; i++) { + value = value - (erfcx(value) - z) / (2.0 * value * erfcx(value) - 2.0 / sqrt(pi)); + } + + return value; +} + + +double computeExponentiallyModifiedGaussFunction(double x, double h, double ny, double sigma, double tau, bool fronting) { + if (sigma == 0) { + return 0; + } + + if (tau == 0) { + // to do - return Gaussian ? + return 0; + } + + double t0, h0; + t0 = ny + erfcxinv(tau / sigma * sqrt(2.0 / pi)) * sigma * sqrt(2.0) - sigma * sigma / tau; + + h0 = ny - t0; + h0 *= h0; + h0 = h * pow(econst, -h0 / (2.0 * sigma * sigma)); + + if (fronting) { + //x = x - ny + t0; + ny = 2 * ny - t0; + } + else { + //x = x + ny - t0; + ny = t0; + } + + h = h * h / h0; + + double z; + if (fronting) { + z = (-(ny - x) / sigma + sigma / tau) / sqrt(2.0); + } + else { + z = ((ny - x) / sigma + sigma / tau) / sqrt(2.0); + } + + double value; + if (z < 0) { + // Kalambet et al. equation (2) + if (fronting) { + value = -(ny - x) / tau + (sigma * sigma) / (2.0 * tau * tau); + } + else { + value = (ny - x) / tau + (sigma * sigma) / (2.0 * tau * tau); + } + value = pow(econst, value); + value = value * h * sigma * sqrt(pi / 2.0) / tau; + value = value * erfc(z); + } + else { + // Kalambet et al. equation (6) + value = ny - x; + value *= value; + value = pow(econst, -value / (2.0 * sigma * sigma)); + value = value * h * sigma * sqrt(pi / 2.0) / tau; + value = value * erfcx(z); + } + + return value; +} + + +double computeExponentialFunction(double x, double base, double tau, bool fronting) { + if (fronting) { + return 1.0 / tau * pow(base, x / tau); + } + return 1.0 / tau * pow(base, -x / tau); +} + + +void calculateCaruana(vector& x, vector& y, double& ny, double& sigma, double& height) { + long double a, b, c; + long double n = (long double)x.size(); + + long double sumx = 0; + long double sumx2 = 0; + long double sumx3 = 0; + long double sumx4 = 0; + + long double sumlny = 0; + long double sumxlny = 0; + long double sumx2lny = 0; + + long double tmp; + + int size = (int)x.size(); + for (int i = 0; i < size; i++) { + sumx += x[i]; + sumx2 += x[i] * x[i]; + sumx3 += x[i] * x[i] * x[i]; + sumx4 += x[i] * x[i] * x[i] * x[i]; + + sumlny += log(y[i]); + sumxlny += x[i] * log(y[i]); + sumx2lny += x[i] * x[i] * log(y[i]); + } + + ny = 0; + sigma = 0; + height = DBL_MAX; + + a = (sumlny * sumx4 - sumx2lny * sumx2) * (sumx2 * sumx4 - sumx3 * sumx3) - (sumxlny * sumx4 - sumx2lny * sumx3) * (sumx * sumx4 - sumx3 * sumx2); + tmp = (n * sumx4 - sumx2 * sumx2) * (sumx2 * sumx4 - sumx3 * sumx3) - (sumx * sumx4 - sumx2 * sumx3) * (sumx * sumx4 - sumx3 * sumx2); + if (tmp == 0) { + return; + } + a /= tmp; + + b = sumxlny * sumx4 - sumx2lny * sumx3 - a * (sumx * sumx4 - sumx2 * sumx3); + tmp = sumx2 * sumx4 - sumx3 * sumx3; + if (tmp == 0) { + return; + } + b /= tmp; + + c = sumx2lny - a * sumx2 - b * sumx3; + tmp = sumx4; + if (tmp == 0) { + return; + } + c /= tmp; + + //cout << "a = " << a << "; b = " << b << "; c = " << c << endl; + + //cout << n * a + sumx * b + sumx2 * c << " = " << sumlny << endl; + //cout << sumx * a + sumx2 * b + sumx3 * c << " = " << sumxlny << endl; + //cout << sumx2 * a + sumx3 * b + sumx4 * c << " = " << sumx2lny << endl; + //cout << endl; + + if (c >= 0) { + return; + } + + ny = -b / (2.0 * c); + + sigma = -1.0 / (2.0 * c); + sigma = sqrt(sigma); + + height = a - b * b / (4.0 * c); + height = pow(econst, height); +} + + +void calculateGuo(vector& x, vector& y, int iterations, double& ny, double& sigma, double& height) { + long double a, b, c; + + long double sumy2; + + long double sumxy2; + long double sumx2y2; + long double sumx3y2; + long double sumx4y2; + + long double sumy2lny; + long double sumxy2lny; + long double sumx2y2lny; + + long double y2; + long double tmp; + + long double expr1; + long double expr2; + long double expr3; + + int xsize; + + ny = 0; + sigma = 0; + height = DBL_MAX; + + double S; + double oldS = DBL_MAX; + double oldny, oldsigma, oldheight; + + for (int i = 0; i < iterations; i++) { + + sumy2 = 0; + + sumxy2 = 0; + sumx2y2 = 0; + sumx3y2 = 0; + sumx4y2 = 0; + + sumy2lny = 0; + sumxy2lny = 0; + sumx2y2lny = 0; + + y2 = 0; + + xsize = (int)x.size(); + for (int j = 0; j < xsize; j++) { + if (y[j] <= 1) { + return; + } + + if (i == 0) { + y2 = y[j] * y[j]; + } + else { + y2 = a + b * x[j] + c * x[j] * x[j]; + y2 = pow(econst, y2); + y2 *= y2; + } + + sumy2 += y2; + + sumxy2 += x[j] * y2; + sumx2y2 += x[j] * x[j] * y2; + sumx3y2 += x[j] * x[j] * x[j] * y2; + sumx4y2 += x[j] * x[j] * x[j] * x[j] * y2; + + sumy2lny += y2 * log(y[j]); + sumxy2lny += x[j] * y2 * log(y[j]); + sumx2y2lny += x[j] * x[j] * y2 * log(y[j]); + } + + expr1 = sumx2y2 * sumx4y2 - sumx3y2 * sumx3y2; + expr2 = sumxy2lny * sumx4y2 - sumx2y2lny * sumx3y2; + expr3 = sumxy2 * sumx4y2 - sumx3y2 * sumx2y2; + + a = (sumy2lny * sumx4y2 - sumx2y2lny * sumx2y2) * expr1 - expr2 * expr3; + tmp = (sumy2 * sumx4y2 - sumx2y2 * sumx2y2) * expr1 - expr3 * expr3; + if (tmp == 0) { + return; + } + a /= tmp; + + b = expr2 - a * expr3; + tmp = expr1; + if (tmp == 0) { + return; + } + b /= tmp; + + c = sumx2y2lny - a * sumx2y2 - b * sumx3y2; + tmp = sumx4y2; + if (tmp == 0) { + return; + } + c /= tmp; + + //cout << "iteration: " << i + 1 << endl; + //cout << "a = " << a << "; b = " << b << "; c = " << c << endl; + //cout << sumy2 * a + sumx * b + sumx2 * c << " = " << sumlny << endl; + //cout << sumx * a + sumx2 * b + sumx3 * c << " = " << sumxlny << endl; + //cout << sumx2 * a + sumx3 * b + sumx4 * c << " = " << sumx2lny << endl; + + if (c >= 0) { + return; + } + + ny = -b / (2.0 * c); + + sigma = -1.0 / (2.0 * c); + sigma = sqrt(sigma); + + height = a - b * b / (4.0 * c); + height = pow(econst, height); + + //cout << "iteration: " << i + 1 << ", "; + //cout << "ny: " << ny << ", "; + //cout << "sigma: " << sigma << ", "; + //cout << "height: " << height << ", "; + //cout << endl; + + if (xsize > 0) { + if ((ny < x[0]) || (ny > x[xsize - 1])) { + ny = 0; + sigma = 0; + height = DBL_MAX; + return; + } + } + + S = 0; + for (int j = 0; j < xsize; j++) { + tmp = y[j] - computeGaussFunction(x[j], height, ny, sigma); + S += tmp * tmp; + } + + //cout << "iteration: " << i + 1 << ", "; + //cout << "S: " << S << ", oldS: " << oldS << endl; + + if (i > 0) { + if (oldS <= S) { + ny = oldny; + sigma = oldsigma; + height = oldheight; + return; + } + } + + oldny = ny; + oldsigma = sigma; + oldheight = height; + oldS = S; + + } + + //cout << endl; +} + + +void calculateBaseTau(vector& x, vector& y, int iterations, bool fronting, double ynorm, double& base, double& tau) { + base = 0; + tau = 0; + + if (x.size() != y.size()) { + return; + } + + long double sumx; + long double sumx2; + + long double sumlny; + long double sumxlny; + + long double y2; + long double sumy2; + + long double A, B; + long double tmp; + + double S; + double oldS = DBL_MAX; + double oldbase, oldtau; + double x0; + + size_t xsize; + + if (fronting) { + + size_t k = 0; + while (k + 1 < x.size()) { + if (y[k + 1] < y[k]) { + x.erase(x.begin() + k + 1, x.end()); + y.erase(y.begin() + k + 1, y.end()); + break; + } + k++; + } + + xsize = (int)x.size(); + + if (xsize == 0) { + return; + } + + double maxy = 0; + for (int i = 0; i < xsize; i++) { + if (y[i] > maxy) { + maxy = y[i]; + } + } + + if (maxy == 0) { + return; + } + + x0 = x[0]; + for (int i = 0; i < xsize; i++) { + x[i] -= x0; + y[i] = y[i] / maxy; + } + + for (int i = 0; i < iterations; i++) { + y2 = 0; + sumy2 = 0; + + sumx = 0; + sumx2 = 0; + + sumlny = 0; + sumxlny = 0; + + for (int j = 0; j < xsize; j++) { + if (i == 0) { + y2 = y[j] * y[j]; + } + else { + y2 = A + B * x[j]; + y2 = pow(econst, y2); + y2 *= y2; + } + + sumy2 += y2; + + sumx += x[j] * y2; + sumx2 += x[j] * x[j] * y2; + + sumlny += log(y[j]) * y2; + sumxlny += x[j] * log(y[j]) * y2; + } + + tmp = sumx2 * sumy2 - sumx * sumx; + if (tmp == 0) { + return; + } + B = (sumxlny * sumy2 - sumlny * sumx) / tmp; + + if (sumy2 == 0) { + return; + } + A = (sumlny - B * sumx) / sumy2; + + tau = ynorm / pow(econst, A); + base = pow(econst, B * tau); + + if (tau <= 0) { + tau = 0; + base = 0; + return; + } + + S = 0; + for (int j = 0; j < xsize; j++) { + tmp = y[j] - computeExponentialFunction(x[j], base, tau, fronting); + S += tmp * tmp; + } + + cout << "fronting, iteration: " << i + 1 << ", base: " << base << ", tau: " << tau << ", S: " << S << endl; + + if (i > 0) { + if (oldS <= S) { + base = oldbase; + tau = oldtau; + return; + } + } + + oldbase = base; + oldtau = tau; + oldS = S; + + } + + } + else { + + while ((y.size() > 1) && (y[0] < y[1])) { + x.erase(x.begin()); + y.erase(y.begin()); + } + + xsize = (int)x.size(); + + double maxy = 0; + for (int i = 0; i < xsize; i++) { + if (y[i] > maxy) { + maxy = y[i]; + } + } + + if (maxy == 0) { + return; + } + + x0 = x[0]; + for (int i = 0; i < xsize; i++) { + x[i] -= x0; + y[i] = y[i] / maxy; + } + + for (int i = 0; i < iterations; i++) { + y2 = 0; + sumy2 = 0; + + sumx = 0; + sumx2 = 0; + + sumlny = 0; + sumxlny = 0; + + for (int j = 0; j < xsize; j++) { + if (i == 0) { + y2 = y[j] * y[j]; + } + else { + y2 = A + B * x[j]; + y2 = pow(econst, y2); + y2 *= y2; + } + + sumy2 += y2; + + sumx += x[j] * y2; + sumx2 += x[j] * x[j] * y2; + + sumlny += log(y[j]) * y2; + sumxlny += x[j] * log(y[j]) * y2; + } + + tmp = sumx2 * sumy2 - sumx * sumx; + if (tmp == 0) { + return; + } + B = (sumxlny * sumy2 - sumlny * sumx) / tmp; + + if (sumy2 == 0) { + return; + } + A = (sumlny - B * sumx) / sumy2; + + tau = ynorm / pow(econst, A); + base = pow(econst, -B * tau); + + if (tau <= 0) { + tau = 0; + base = 0; + return; + } + + S = 0; + for (int j = 0; j < xsize; j++) { + tmp = y[j] - computeExponentialFunction(x[j], base, tau, fronting); + S += tmp * tmp; + } + + cout << "tailing, iteration: " << i + 1 << ", base: " << base << ", tau: " << tau << ", S: " << S << endl; + + if (i > 0) { + if (oldS <= S) { + base = oldbase; + tau = oldtau; + return; + } + } + + oldbase = base; + oldtau = tau; + oldS = S; + + } + + } + +} + + +void calculateTauUsingWeightedAverage(vector& x, vector& y, bool fronting, double& tau) { + tau = 1; + + if (x.size() != y.size()) { + return; + } + + double x0; + size_t xsize; + + double maxy = 0; + double avg = 0; + double div = 0; + + if (fronting) { + size_t k = 0; + while (k + 1 < x.size()) { + if (y[k + 1] < y[k]) { + x.erase(x.begin() + k + 1, x.end()); + y.erase(y.begin() + k + 1, y.end()); + break; + } + k++; + } + } + else { + while ((y.size() > 1) && (y[0] < y[1])) { + x.erase(x.begin()); + y.erase(y.begin()); + } + } + + xsize = (int)x.size(); + + for (int i = 0; i < xsize; i++) { + if (y[i] > maxy) { + maxy = y[i]; + } + } + + if (maxy == 0) { + return; + } + + x0 = x[0]; + for (int i = 0; i < xsize; i++) { + x[i] -= x0; + y[i] = y[i] / maxy; + + avg += x[i] * y[i]; + div += y[i]; + } + + avg /= div; + tau = avg; +} + + +void calculateGaussianParameters(cPeaksList& eicchromatogram, vector& rtimes, int timeunit, bool absoluteintensity, bool usert, vector& nys, vector& sigmas, vector& as) { + if (eicchromatogram.size() != rtimes.size()) { + return; + } + + if ((rtimes.size() > 0) && (rtimes[rtimes.size() - 1] == 0)) { + usert = false; + } + + double ny, sigma, height; + + vector x; + vector y; + + nys.clear(); + sigmas.clear(); + as.clear(); + + int eicsize = eicchromatogram.size(); + for (int i = 0; i < eicsize; i++) { + if (absoluteintensity) { + if (eicchromatogram[i].absoluteintensity > 0) { + if (usert) { + if (timeunit == 1) { + x.push_back(rtimes[i] * 60.0); + } + else { + x.push_back(rtimes[i]); + } + y.push_back(eicchromatogram[i].absoluteintensity); + } + else { + x.push_back(eicchromatogram[i].mzratio); + y.push_back(eicchromatogram[i].absoluteintensity); + } + } + + if ((eicchromatogram[i].absoluteintensity == 0) && (x.size() > 0)) { + if ((i + 4 < eicsize) && (eicchromatogram[i + 1].absoluteintensity == 0) && (eicchromatogram[i + 2].absoluteintensity == 0) && (eicchromatogram[i + 3].absoluteintensity == 0) && (eicchromatogram[i + 4].absoluteintensity == 0)) { + //calculateCaruana(x, y, ny, sigma, height); + calculateGuo(x, y, 10, ny, sigma, height); + nys.push_back(ny); + sigmas.push_back(sigma); + as.push_back(height); + x.clear(); + y.clear(); + } + } + } + else { + if (eicchromatogram[i].relativeintensity > 0) { + if (usert) { + if (timeunit == 1) { + x.push_back(rtimes[i] * 60.0); + } + else { + x.push_back(rtimes[i]); + } + y.push_back(eicchromatogram[i].relativeintensity); + } + else { + x.push_back(eicchromatogram[i].mzratio); + y.push_back(eicchromatogram[i].relativeintensity); + } + } + + if ((eicchromatogram[i].relativeintensity == 0) && (x.size() > 0)) { + if ((i + 4 < eicsize) && (eicchromatogram[i + 1].relativeintensity == 0) && (eicchromatogram[i + 2].relativeintensity == 0) && (eicchromatogram[i + 3].relativeintensity == 0) && (eicchromatogram[i + 4].relativeintensity == 0)) { + //calculateCaruana(x, y, ny, sigma, height); + calculateGuo(x, y, 10, ny, sigma, height); + nys.push_back(ny); + sigmas.push_back(sigma); + as.push_back(height); + x.clear(); + y.clear(); + } + } + } + } + + if (x.size() > 0) { + //calculateCaruana(x, y, ny, sigma, height); + calculateGuo(x, y, 10, ny, sigma, height); + nys.push_back(ny); + sigmas.push_back(sigma); + as.push_back(height); + } +} + + +void calculateExponentialParameters(cPeaksList& eicchromatogram, vector& rtimes, int timeunit, bool absoluteintensity, bool usert, bool fronting, double ynorm, vector& bases, vector& taus) { + if (eicchromatogram.size() != rtimes.size()) { + return; + } + + if ((rtimes.size() > 0) && (rtimes[rtimes.size() - 1] == 0)) { + usert = false; + } + + double base = 0; + double tau = 0; + + vector x; + vector y; + + bases.clear(); + taus.clear(); + + int eicsize = eicchromatogram.size(); + for (int i = 0; i < eicsize; i++) { + if (absoluteintensity) { + if (eicchromatogram[i].absoluteintensity > 0) { + if (usert) { + if (timeunit == 1) { + x.push_back(rtimes[i] * 60.0); + } + else { + x.push_back(rtimes[i]); + } + y.push_back(eicchromatogram[i].absoluteintensity); + } + else { + x.push_back(eicchromatogram[i].mzratio); + y.push_back(eicchromatogram[i].absoluteintensity); + } + } + + if ((eicchromatogram[i].absoluteintensity == 0) && (x.size() > 0)) { + if ((i + 4 < eicsize) && (eicchromatogram[i + 1].absoluteintensity == 0) && (eicchromatogram[i + 2].absoluteintensity == 0) && (eicchromatogram[i + 3].absoluteintensity == 0) && (eicchromatogram[i + 4].absoluteintensity == 0)) { + calculateTauUsingWeightedAverage(x, y, fronting, tau); + //calculateBaseTau(x, y, 10, fronting, ynorm, base, tau); + bases.push_back(base); + taus.push_back(tau); + x.clear(); + y.clear(); + } + } + } + else { + if (eicchromatogram[i].relativeintensity > 0) { + if (usert) { + if (timeunit == 1) { + x.push_back(rtimes[i] * 60.0); + } + else { + x.push_back(rtimes[i]); + } + y.push_back(eicchromatogram[i].relativeintensity); + } + else { + x.push_back(eicchromatogram[i].mzratio); + y.push_back(eicchromatogram[i].relativeintensity); + } + } + + if ((eicchromatogram[i].relativeintensity == 0) && (x.size() > 0)) { + if ((i + 4 < eicsize) && (eicchromatogram[i + 1].relativeintensity == 0) && (eicchromatogram[i + 2].relativeintensity == 0) && (eicchromatogram[i + 3].relativeintensity == 0) && (eicchromatogram[i + 4].relativeintensity == 0)) { + calculateTauUsingWeightedAverage(x, y, fronting, tau); + //calculateBaseTau(x, y, 10, fronting, ynorm, base, tau); + bases.push_back(base); + taus.push_back(tau); + x.clear(); + y.clear(); + } + } + } + } + + if (x.size() > 0) { + calculateTauUsingWeightedAverage(x, y, fronting, tau); + //calculateBaseTau(x, y, 10, fronting, ynorm, base, tau); + bases.push_back(base); + taus.push_back(tau); + } +} + + +cChromatogramWindowWidget::cChromatogramWindowWidget(cTheoreticalSpectrumList& listoftheoreticalspectra, QWidget* parent) { + this->listoftheoreticalspectra = &listoftheoreticalspectra; this->parent = parent; ticchromatogram.clear(); @@ -31,7 +996,9 @@ cChromatogramWindowWidget::cChromatogramWindowWidget(cTheoreticalSpectrumList& t retentiontime = true; absoluteintensity = true; - hidetic = false; + peakshape = 0; + rawdatastate = false; + hidetic = true; hideeic = false; hidelabels = false; @@ -133,13 +1100,13 @@ void cChromatogramWindowWidget::exportToPNG(QString filename) { } -void cChromatogramWindowWidget::recalculateTICChromatogram() { +void cChromatogramWindowWidget::recalculateTICChromatogram(int activefileid) { int spectrumcount, peakscount; unsigned long long intensity; cPeak chromatogrampeak; ticchromatogram.clear(); - spectrumcount = theoreticalspectrumlist->size(); + spectrumcount = listoftheoreticalspectra->size(activefileid); rtimes.clear(); @@ -149,21 +1116,22 @@ void cChromatogramWindowWidget::recalculateTICChromatogram() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); rtimes.resize(spectrumcount); for (int i = 0; i < spectrumcount; i++) { intensity = 0; - peakscount = (*theoreticalspectrumlist)[i].getExperimentalSpectrum().size(); + peakscount = listoftheoreticalspectra->get(activefileid, i).getExperimentalSpectrum().size(); for (int j = 0; j < peakscount; j++) { - intensity += (*theoreticalspectrumlist)[i].getExperimentalSpectrum()[j].absoluteintensity; + intensity += listoftheoreticalspectra->get(activefileid, i).getExperimentalSpectrum()[j].absoluteintensity; } chromatogrampeak.clear(); chromatogrampeak.mzratio = (double)(ticchromatogram.size() + 1); chromatogrampeak.absoluteintensity = intensity; ticchromatogram.add(chromatogrampeak); - rtimes[i] = (*theoreticalspectrumlist)[i].getExperimentalSpectrum().getRetentionTime(); + rtimes[i] = listoftheoreticalspectra->get(activefileid, i).getExperimentalSpectrum().getRetentionTime(); progress.setValue(i); } @@ -184,7 +1152,31 @@ void cChromatogramWindowWidget::recalculateTICChromatogram() { void cChromatogramWindowWidget::setEICChromatogram(cPeaksList eic) { eicchromatogram = eic; - redrawScene(); + + bool autoupdate = true; + if (autoupdate) { + int minscan = 0; + int maxscan = eicchromatogram.size(); + + for (int i = 0; i < eicchromatogram.size(); i++) { + if (eicchromatogram[i].absoluteintensity > 0) { + minscan = i + 1; + break; + } + } + + for (int i = eicchromatogram.size() - 1; i >= 0; i--) { + if (eicchromatogram[i].absoluteintensity > 0) { + maxscan = i + 1; + break; + } + } + + setScanIDInterval(minscan - 10, maxscan + 10); + } + else { + redrawScene(); + } } @@ -413,6 +1405,18 @@ void cChromatogramWindowWidget::redrawScene() { int printscan; bool printintensity; + vector nys; + vector sigmas; + vector as; + vector bases; + vector taus; + cPeaksList localeic = eicchromatogram; + + bool fronting = false; + if (peakshape == 2) { + fronting = true; + } + if (!hidetic) { if (absoluteintensity) { maxintensitytic = ticchromatogram.getMaximumAbsoluteIntensityFromMZInterval((double)minscan, (double)maxscan, false, false, other, false); @@ -424,19 +1428,59 @@ void cChromatogramWindowWidget::redrawScene() { if (!hideeic) { if (absoluteintensity) { - maxintensityeic = eicchromatogram.getMaximumAbsoluteIntensityFromMZInterval((double)minscan, (double)maxscan, false, false, other, false); + maxintensityeic = localeic.getMaximumAbsoluteIntensityFromMZInterval((double)minscan, (double)maxscan, false, false, other, false); } else { - maxintensityeic = eicchromatogram.getMaximumRelativeIntensityFromMZInterval((double)minscan, (double)maxscan, false, false, other, false); + maxintensityeic = localeic.getMaximumRelativeIntensityFromMZInterval((double)minscan, (double)maxscan, false, false, other, false); } } double maxintensity = max(maxintensitytic, maxintensityeic); + if (rawdatastate && !hideeic && (maxscan > minscan - 1)) { + size_t eicsize = localeic.size(); + for (int i = 0; i < eicsize; i++) { + if ((localeic[i].mzratio < (double)minscan) || (localeic[i].mzratio > (double)maxscan)) { + localeic[i].absoluteintensity = 0; + localeic[i].relativeintensity = 0; + } + } + + calculateGaussianParameters(localeic, rtimes, 1, absoluteintensity, false, nys, sigmas, as); + + double newmaxintensity = maxintensity; + for (int i = 0; i < (int)nys.size(); i++) { + if (as[i] / maxintensity > 2 * maxintensity) { + nys[i] = 0; + sigmas[i] = 0; + as[i] = 0; + } + + if (as[i] > newmaxintensity) { + newmaxintensity = as[i]; + } + } + + if (absoluteintensity) { + maxintensity = max(maxintensity, newmaxintensity); + } + else { + if ((newmaxintensity > maxintensity) && (newmaxintensity > 0)) { + for (int i = 0; i < localeic.size(); i++) { + localeic[i].relativeintensity = localeic[i].relativeintensity * maxintensity / newmaxintensity; + } + + for (int i = 0; i < (int)as.size(); i++) { + as[i] = as[i] * maxintensity / newmaxintensity; + } + } + } + } + scene->removeItem(zoomgroup); scene->clear(); - if ((ticchromatogram.size() < 2) || (hidetic && (eicchromatogram.size() < 2))) { + if ((ticchromatogram.size() < 2) || (hidetic && (localeic.size() < 2))) { simpletext = scene->addSimpleText("The chromatogram is not available.", myFont); simpletext->setPos(0, 0); scene->setSceneRect(scene->itemsBoundingRect()); @@ -477,7 +1521,7 @@ void cChromatogramWindowWidget::redrawScene() { if (maxscan - minscan > rulergranularity) { xstep = (w - leftmargin - rightmargin) / rulergranularity; for (int i = 1; i < rulergranularity; i++) { - printscan = minscan + (maxscan - minscan) / rulergranularity * i; + printscan = (double)minscan + (double)(maxscan - minscan) / (double)rulergranularity * (double)i; if (retentiontime) { if (printscan - 1 >= 0) { simpletext = scene->addSimpleText(QString::number(rtimes[printscan - 1]), myFont); @@ -556,7 +1600,7 @@ void cChromatogramWindowWidget::redrawScene() { for (int i = 0; i < ticchromatogram.size(); i++) { - if ((ticchromatogram[i].mzratio < (double)minscan) || (ticchromatogram[i].mzratio >(double)maxscan)) { + if ((ticchromatogram[i].mzratio < (double)minscan) || (ticchromatogram[i].mzratio > (double)maxscan)) { continue; } @@ -588,24 +1632,24 @@ void cChromatogramWindowWidget::redrawScene() { // EIC peaks if (!hideeic) { - for (int i = 0; i < eicchromatogram.size(); i++) { + for (int i = 0; i < localeic.size(); i++) { - if ((eicchromatogram[i].mzratio < (double)minscan) || (eicchromatogram[i].mzratio >(double)maxscan)) { + if ((localeic[i].mzratio < (double)minscan) || (localeic[i].mzratio > (double)maxscan)) { continue; } - x = getXPositionFromScanID((int)eicchromatogram[i].mzratio, w); + x = getXPositionFromScanID((int)localeic[i].mzratio, w); printintensity = true; if (absoluteintensity) { - y = eicchromatogram[i].absoluteintensity / maxintensity * (h - topmargin - bottommargin); - if (eicchromatogram[i].absoluteintensity == 0) { + y = localeic[i].absoluteintensity / maxintensity * (h - topmargin - bottommargin); + if (localeic[i].absoluteintensity == 0) { printintensity = false; } } else { - y = eicchromatogram[i].relativeintensity / maxintensity * (h - topmargin - bottommargin); - if (eicchromatogram[i].relativeintensity == 0) { + y = localeic[i].relativeintensity / maxintensity * (h - topmargin - bottommargin); + if (localeic[i].relativeintensity == 0) { printintensity = false; } } @@ -671,24 +1715,24 @@ void cChromatogramWindowWidget::redrawScene() { // EIC descriptions if (!hideeic && (peakscount < 500)) { - for (int i = 0; i < eicchromatogram.size(); i++) { + for (int i = 0; i < localeic.size(); i++) { - if ((eicchromatogram[i].mzratio < (double)minscan) || (eicchromatogram[i].mzratio >(double)maxscan)) { + if ((localeic[i].mzratio < (double)minscan) || (localeic[i].mzratio >(double)maxscan)) { continue; } - x = getXPositionFromScanID((int)eicchromatogram[i].mzratio, w); + x = getXPositionFromScanID((int)localeic[i].mzratio, w); printintensity = true; if (absoluteintensity) { - y = eicchromatogram[i].absoluteintensity / maxintensity * (h - topmargin - bottommargin); - if (eicchromatogram[i].absoluteintensity == 0) { + y = localeic[i].absoluteintensity / maxintensity * (h - topmargin - bottommargin); + if (localeic[i].absoluteintensity == 0) { printintensity = false; } } else { - y = eicchromatogram[i].relativeintensity / maxintensity * (h - topmargin - bottommargin); - if (eicchromatogram[i].relativeintensity == 0) { + y = localeic[i].relativeintensity / maxintensity * (h - topmargin - bottommargin); + if (localeic[i].relativeintensity == 0) { printintensity = false; } } @@ -706,10 +1750,10 @@ void cChromatogramWindowWidget::redrawScene() { hits.clear(); if (!hidelabels) { - tmplong = eicchromatogram[i].description.c_str(); + tmplong = localeic[i].description.c_str(); pos = tmplong.find("
"); while (pos != string::npos) { - tmpshort = tmplong.substr(0, pos - 1); + tmpshort = tmplong.substr(0, pos); hits.push_back(tmpshort); tmplong = tmplong.substr(pos + 5); pos = tmplong.find("
"); @@ -724,7 +1768,7 @@ void cChromatogramWindowWidget::redrawScene() { tmpshort = QString::number(rtimes[i]).toStdString(); } else { - tmpshort = QString::number((int)eicchromatogram[i].mzratio).toStdString(); + tmpshort = QString::number((int)localeic[i].mzratio).toStdString(); } hits.push_back(tmpshort); @@ -764,6 +1808,118 @@ void cChromatogramWindowWidget::redrawScene() { } + // estimate chromatographic profile peaks + if (rawdatastate && !hideeic && (maxscan > minscan - 1)) { + + double ynorm = (double)(h - topmargin - bottommargin); + + if (peakshape > 0) { + calculateExponentialParameters(localeic, rtimes, 1, absoluteintensity, false, fronting, ynorm, bases, taus); + } + + for (int i = 0; i < (int)nys.size(); i++) { + nys[i] = nys[i] - ((double)minscan - 1.0); + nys[i] /= (double)maxscan - ((double)minscan - 1.0); + nys[i] *= (double)(w - leftmargin - rightmargin); + nys[i] += leftmargin; + + sigmas[i] /= (double)maxscan - ((double)minscan - 1.0); + sigmas[i] *= (double)(w - leftmargin - rightmargin); + + as[i] /= maxintensity; + as[i] *= (double)(h - topmargin - bottommargin); + + if (peakshape > 0) { + taus[i] /= (double)maxscan - ((double)minscan - 1.0); + taus[i] *= (double)(w - leftmargin - rightmargin); + } + } + + const int step = 1; + + int xmin = getXPositionFromScanID(minscan - 1.0, w); + int xmax = getXPositionFromScanID(maxscan, w); + + double relint; + int yval; + + QPainterPath rpath; + + if (peakshape == 0) { + for (int i = xmin; i < xmax; i += step) { + relint = 0; + + for (int j = 0; j < (int)as.size(); j++) { + relint += computeGaussFunction((double)i, as[j], nys[j], sigmas[j]); + } + + yval = h - topmargin - bottommargin - (int)relint; + + if (i == xmin) { + rpath.moveTo(i, yval); + } + else { + rpath.lineTo(i, yval); + } + } + + scene->addPath(rpath, QPen(Qt::gray, 1, Qt::SolidLine)); + } + + if (as.size() == taus.size()) { + + QPainterPath rpath2; + + if (peakshape > 0) { + for (int i = xmin; i < xmax; i += step) { + relint = 0; + + for (int j = 0; j < (int)as.size(); j++) { + relint += computeExponentiallyModifiedGaussFunction((double)i, as[j], nys[j], sigmas[j], taus[j], fronting); + } + + yval = h - topmargin - bottommargin - (int)relint; + + if (i == xmin) { + rpath2.moveTo(i, yval); + } + else { + rpath2.lineTo(i, yval); + } + } + + scene->addPath(rpath2, QPen(Qt::gray, 1, Qt::SolidLine)); + } + + //if (taus.size() == bases.size()) { + + // QPainterPath rpath3; + + // for (int i = xmin; i < xmax; i += step) { + // relint = 0; + + // for (int j = 0; j < (int)taus.size(); j++) { + // relint += ynorm * taus[j] * computeExponentialFunction((double)i /** log(bases[j])*/, econst, taus[j], fronting); + // } + + // yval = h - topmargin - bottommargin - (int)relint; + + // if (i == xmin) { + // rpath3.moveTo(i, yval); + // } + // else { + // rpath3.lineTo(i, yval); + // } + // } + + // scene->addPath(rpath3, QPen(Qt::blue, 1, Qt::SolidLine)); + + //} + + } + + } + scene->removeItem(zoomgroup); QRectF brect = scene->itemsBoundingRect(); @@ -921,6 +2077,12 @@ void cChromatogramWindowWidget::absoluteIntensityStateChanged(bool state) { } +void cChromatogramWindowWidget::rawDataStateChanged(bool state) { + rawdatastate = state; + redrawScene(); +} + + void cChromatogramWindowWidget::setRetentionTimeInterval(double mintime, double maxtime) { if (rtimes.size() == 0) { return; @@ -1010,3 +2172,9 @@ void cChromatogramWindowWidget::hideLabels(bool state) { redrawScene(); } + +void cChromatogramWindowWidget::peakShapeChanged(int shape) { + peakshape = shape; + redrawScene(); +} + diff --git a/CycloBranch/gui/cChromatogramWindowWidget.h b/CycloBranch/gui/cChromatogramWindowWidget.h index f735129..e5df769 100644 --- a/CycloBranch/gui/cChromatogramWindowWidget.h +++ b/CycloBranch/gui/cChromatogramWindowWidget.h @@ -20,11 +20,171 @@ #include "core/utilities.h" #include "core/cTheoreticalSpectrumList.h" #include "gui/cEventFilter.h" +#include "gui/cPatternSimulatorSceneWidget.h" using namespace std; +/** + \brief Get area under Gaussian function. + \param sigma sigma + \param height height + \retval double area +*/ +double getGaussianArea(double sigma, double height); + + +/** + \brief Get area of EIC peaks (Gaussian function). + \param sigmas input vector of sigmas + \param heights input vector of heights + \retval double area +*/ +double getGaussianAreas(vector& sigmas, vector& heights); + + +/** + \brief Get area under Exponentially Modified Gaussian function. + \param x some value of x + \param h height of Gaussian + \param ny ny of Gaussian + \param sigma sigma of Gaussian + \param tau tau of Exponential + \param fronting true = fronting enabled, false = tailing enabled + \retval double area +*/ +double getExponentiallyModifiedGaussianArea(double x, double h, double ny, double sigma, double tau, bool fronting); + + +/** + \brief Get area of EIC peaks (Exponentially Modified Gaussian function). + \param xvalues vector of x values + \param heights vector of heights of Gaussians + \param nys vector of nys of Gaussians + \param sigmas vector of sigmas of Gaussians + \param taus vector of taus of Exponentials + \param fronting true = fronting enabled, false = tailing enabled + \retval double area +*/ +double getExponentiallyModifiedGaussianAreas(vector& xvalues, vector& heights, vector& nys, vector& sigmas, vector& taus, bool fronting); + + +/** + \brief Calculate erfcx(z). + \param z input value + \retval erfcx(z) +*/ +double erfcx(double z); + + +/** + \brief Calculate erfcxinv(z). + \param z input value + \retval erfcxinv(z) +*/ +double erfcxinv(double z); + + +/** + \brief Compute value of exponentially modified Gaussian function. + \param x x + \param h h + \param ny ny + \param sigma sigma + \param tau tau + \param fronting true = fronting enabled, false = tailing enabled + \retval double f(x) +*/ +double computeExponentiallyModifiedGaussFunction(double x, double h, double ny, double sigma, double tau, bool fronting); + + +/** + \brief Compute value of exponential function. + \param x x + \param base base + \param tau tau + \param fronting true = fronting enabled, false = tailing enabled + \retval double f(x) +*/ +double computeExponentialFunction(double x, double base, double tau, bool fronting); + + +/** + \brief Calculate ny, sigma, and height using Caruana's algorithm. + \param x input vector of x-coordinates + \param y input vector of y-coordinates + \param ny output value of ny + \param sigma output value of sigma + \param height output value of height +*/ +void calculateCaruana(vector& x, vector& y, double& ny, double& sigma, double& height); + + +/** + \brief Calculate ny, sigma, and height using Guo's algorithm. + \param x input vector of x-coordinates + \param y input vector of y-coordinates + \param iterations number of iterations + \param ny output value of ny + \param sigma output value of sigma + \param height output value of height +*/ +void calculateGuo(vector& x, vector& y, int iterations, double& ny, double& sigma, double& height); + + +/** + \brief Calculate base and tau for exponential distribution. + \param x input vector of x-coordinates + \param y input vector of y-coordinates + \param iterations number of iterations + \param fronting true = fronting enabled, false = tailing enabled + \param ynorm y axis normalization value + \param base output value of base + \param tau output value of tau +*/ +void calculateBaseTau(vector& x, vector& y, int iterations, bool fronting, double ynorm, double& base, double& tau); + + +/** + \brief Calculate tau for exponential distribution using weighted average. + \param x input vector of x-coordinates + \param y input vector of y-coordinates + \param fronting true = fronting enabled, false = tailing enabled + \param tau output value of tau +*/ +void calculateTauUsingWeightedAverage(vector& x, vector& y, bool fronting, double& tau); + + +/** + \brief Get parameters of Gaussians functions (nys, sigmas, and heights). + \param eicchromatogram input EIC chromatogram + \param rtimes input retention time vector + \param timeunit RT time unit + \param absoluteintensity use absolute intensities + \param usert use RT instead of scan ids + \param nys output vector of nys + \param sigmas output vector of sigmas + \param as output vector of heights +*/ +void calculateGaussianParameters(cPeaksList& eicchromatogram, vector& rtimes, int timeunit, bool absoluteintensity, bool usert, vector& nys, vector& sigmas, vector& as); + + +/** + \brief Get parameters of Exponential functions (bases and taus). + \param eicchromatogram input EIC chromatogram + \param rtimes input retention time vector + \param timeunit RT time unit + \param absoluteintensity use absolute intensities + \param usert use RT instead of scan ids + \param fronting true = fronting enabled, false = tailing enabled + \param ynorm y axis normalization value + \param bases output vector of bases + \param taus output vector of taus +*/ +void calculateExponentialParameters(cPeaksList& eicchromatogram, vector& rtimes, int timeunit, bool absoluteintensity, bool usert, bool fronting, double ynorm, vector& bases, vector& taus); + + /** \brief Chromatogram window widget. */ @@ -37,10 +197,10 @@ class cChromatogramWindowWidget : public QGraphicsView /** \brief The constructor. - \param theoreticalspectrumlist list of spectra + \param listoftheoreticalspectra lists of theoretical spectra \param parent pointer to a parent widget */ - cChromatogramWindowWidget(cTheoreticalSpectrumList& theoreticalspectrumlist, QWidget* parent = 0); + cChromatogramWindowWidget(cTheoreticalSpectrumList& listoftheoreticalspectra, QWidget* parent = 0); /** @@ -73,8 +233,9 @@ class cChromatogramWindowWidget : public QGraphicsView /** \brief Recalculate TIC chromatogram. + \param activefileid id of an active file */ - void recalculateTICChromatogram(); + void recalculateTICChromatogram(int activefileid); /** @@ -137,7 +298,7 @@ class cChromatogramWindowWidget : public QGraphicsView private: - cTheoreticalSpectrumList* theoreticalspectrumlist; + cTheoreticalSpectrumList* listoftheoreticalspectra; cPeaksList ticchromatogram; cPeaksList eicchromatogram; vector rtimes; @@ -178,6 +339,8 @@ class cChromatogramWindowWidget : public QGraphicsView bool retentiontime; bool absoluteintensity; + bool rawdatastate; + int peakshape; bool hidetic; bool hideeic; bool hidelabels; @@ -241,6 +404,9 @@ private slots: void absoluteIntensityStateChanged(bool state); + void rawDataStateChanged(bool state); + + void setRetentionTimeInterval(double mintime, double maxtime); @@ -263,6 +429,9 @@ private slots: void hideLabels(bool state); + + + void peakShapeChanged(int shape); }; diff --git a/CycloBranch/gui/cDefineCalibrationWidget.cpp b/CycloBranch/gui/cDefineCalibrationWidget.cpp new file mode 100644 index 0000000..5a7c715 --- /dev/null +++ b/CycloBranch/gui/cDefineCalibrationWidget.cpp @@ -0,0 +1,631 @@ +#include "gui/cDefineCalibrationWidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +cDefineCalibrationWidget::cDefineCalibrationWidget() { + setWindowTitle("Define Samples and Calibration Curve..."); + setWindowIcon(QIcon(":/images/icons/features.png")); + + vlayout = new QVBoxLayout(); + filelistwidget = new QWidget(); + + gridlayout = new QGridLayout(); + + uselabel = new QLabel("Use: "); + filelabel = new QLabel("Filename: "); + datatypelabel = new QLabel("Data Type: "); + grouplabel = new QLabel("Group: "); + concentrationlabel = new QLabel("Concentration: "); + + filelistwidget->setLayout(gridlayout); + + compoundslabel = new QLabel("Ion Types: "); + compoundslist = new QListWidget(); + compoundslist->setSelectionMode(QAbstractItemView::MultiSelection); + compoundslayout = new QVBoxLayout(); + compoundswidget = new QWidget(); + + compoundslayout->addWidget(compoundslabel); + compoundslayout->addWidget(compoundslist); + compoundswidget->setLayout(compoundslayout); + + equationcombobox = new QComboBox(); + equationcombobox->setToolTip("Select the type of equation to estimate its parameters."); + equationcombobox->setSizeAdjustPolicy(QComboBox::AdjustToContents); + equationcombobox->addItem("Automatic mode (y = a*x)"); + equationcombobox->addItem("Automatic mode (y = a*x + b)"); + equationcombobox->addItem("Enter parameters manually"); + + connect(equationcombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(equationChanged(int))); + + doublespinboxa = new QDoubleSpinBox(); + doublespinboxa->setRange(-DBL_MAX, DBL_MAX); + doublespinboxa->setDecimals(6); + doublespinboxa->setValue(1); + doublespinboxa->setDisabled(true); + doublespinboxa->setToolTip("Enter the value of 'a' in the calibration curve 'y = a*x + b'."); + + doublespinboxb = new QDoubleSpinBox(); + doublespinboxb->setRange(-DBL_MAX, DBL_MAX); + doublespinboxb->setDecimals(6); + doublespinboxb->setValue(1); + doublespinboxb->setDisabled(true); + doublespinboxb->setToolTip("Enter the value of 'b' in the calibration curve 'y = a*x + b'."); + + eiccombobox = new QComboBox(); + eiccombobox->setToolTip("Select a method for construction of extracted ion chromatogram.\nHighest Peak = Intensity of the highest peak of a given ion in every spectrum is used.\nAll isotopes = Sums of intensities of all isotopes of a given ion in every spectrum are used."); + eiccombobox->setSizeAdjustPolicy(QComboBox::AdjustToContents); + eiccombobox->addItem("Highest Peak (e.g., 12C)"); + eiccombobox->addItem("All Isotopes (e.g., sum of 12C + 13C + 13C2 + ...)"); + + peakshapecombobox = new QComboBox(); + peakshapecombobox->setToolTip("Select chromatographic peak shape to be used for area and concentration calculations:\nGaussian = basic Gaussian function,\nex-Gaussian (tailing) = Exponentially Modified Gaussian for chromatographic peaks with tailing,\nex-Gaussian (fronting) = Exponentially Modified Gaussian for chromatographic peaks with fronting."); + peakshapecombobox->setSizeAdjustPolicy(QComboBox::AdjustToContents); + peakshapecombobox->addItem("Gaussian"); + peakshapecombobox->addItem("ex-Gaussian (tailing)"); + peakshapecombobox->addItem("ex-Gaussian (fronting)"); + + standardcombobox = new QComboBox(); + standardcombobox->setToolTip("Select compound standard."); + standardcombobox->setSizeAdjustPolicy(QComboBox::AdjustToContents); + + formlayout = new QFormLayout(); + formwidget = new QWidget(); + + formlayout->addRow(tr("Equation: "), equationcombobox); + formlayout->addRow(tr("a: "), doublespinboxa); + formlayout->addRow(tr("b: "), doublespinboxb); + formlayout->addRow(tr("Extracted Ion Chromatogram: "), eiccombobox); + formlayout->addRow(tr("Peak Shape: "), peakshapecombobox); + formlayout->addRow(tr("Standard: "), standardcombobox); + formwidget->setLayout(formlayout); + + okbutton = new QPushButton("Ok"); + cancelbutton = new QPushButton("Cancel"); + buttonslayout = new QHBoxLayout(); + buttonswidget = new QWidget(); + + buttonslayout->addStretch(1); + buttonslayout->addWidget(okbutton); + buttonslayout->addWidget(cancelbutton); + + buttonswidget->setLayout(buttonslayout); + + connect(okbutton, SIGNAL(released()), this, SLOT(okButtonReleased())); + connect(cancelbutton, SIGNAL(released()), this, SLOT(cancelButtonReleased())); + + vlayout->addWidget(filelistwidget); + vlayout->addWidget(compoundswidget); + vlayout->addWidget(formwidget); + vlayout->addWidget(buttonswidget); + vlayout->addStretch(1); + + scrollwidget = new QWidget(); + scrollwidget->setLayout(vlayout); + + scrollarea = new QScrollArea(); + scrollarea->setWidgetResizable(true); + scrollarea->setFrameShape(QFrame::NoFrame); + scrollarea->setWidget(scrollwidget); + + scrolllayout = new QVBoxLayout(); + scrolllayout->addWidget(scrollarea); + + setLayout(scrolllayout); + + resize(750, defaultwinsizey); + + internalusedvector.clear(); + internalfilenames.clear(); + internaldatatypesvector.clear(); + internalgroupsvector.clear(); + internalconcentrationsvector.clear(); + + internalcompounds.clear(); + internalselectedionsvector.clear(); + + internalequationtype = 0; + internala = 1; + internalb = 0; + internaleictype = 0; + internalpeakshape = 0; + internalstandard = 0; +} + + +cDefineCalibrationWidget::~cDefineCalibrationWidget() { + delete uselabel; + delete filelabel; + delete datatypelabel; + delete grouplabel; + delete concentrationlabel; + + for (auto& it : checkboxes) { + delete it; + } + + for (auto& it : lineedits) { + delete it; + } + + for (auto& it : comboboxes) { + delete it; + } + + for (auto& it : spinboxes) { + delete it; + } + + for (auto& it : doublespinboxes) { + delete it; + } + + delete gridlayout; + delete filelistwidget; + + delete compoundslabel; + delete compoundslist; + delete compoundslayout; + delete compoundswidget; + + delete equationcombobox; + delete doublespinboxa; + delete doublespinboxb; + delete eiccombobox; + delete peakshapecombobox; + delete standardcombobox; + + delete formlayout; + delete formwidget; + + delete okbutton; + delete cancelbutton; + delete buttonslayout; + delete buttonswidget; + + delete vlayout; + + delete scrollwidget; + delete scrollarea; + delete scrolllayout; +} + + +void cDefineCalibrationWidget::closeEvent(QCloseEvent *event) { + hide(); + event->accept(); +} + + +void cDefineCalibrationWidget::store(ofstream& os) { + storeIntVector(internalusedvector, os); + storeStringVector(internalfilenames, os); + storeIntVector(internaldatatypesvector, os); + storeIntVector(internalgroupsvector, os); + storeDoubleVector(internalconcentrationsvector, os); + + storeStringVector(internalcompounds, os); + storeIntVector(internalselectedionsvector, os); + + os.write((char *)&internalequationtype, sizeof(int)); + os.write((char *)&internaleictype, sizeof(int)); + os.write((char *)&internalpeakshape, sizeof(int)); + os.write((char *)&internalstandard, sizeof(int)); + + os.write((char *)&internala, sizeof(double)); + os.write((char *)&internalb, sizeof(double)); +} + + +void cDefineCalibrationWidget::load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3) { + loadIntVector(internalusedvector, is); + loadStringVector(internalfilenames, is); + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 18)) { + loadIntVector(internaldatatypesvector, is); + loadIntVector(internalgroupsvector, is); + } + else { + internaldatatypesvector.clear(); + internaldatatypesvector.resize(internalusedvector.size(), 0); + + internalgroupsvector.clear(); + internalgroupsvector.resize(internalusedvector.size()); + + for (int i = 0; i < (int)internalgroupsvector.size(); i++) { + internalgroupsvector[i] = i + 1; + } + } + + loadDoubleVector(internalconcentrationsvector, is); + + loadStringVector(internalcompounds, is); + loadIntVector(internalselectedionsvector, is); + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 16)) { + is.read((char *)&internalequationtype, sizeof(int)); + is.read((char *)&internaleictype, sizeof(int)); + is.read((char *)&internalpeakshape, sizeof(int)); + is.read((char *)&internalstandard, sizeof(int)); + } + else { + internalequationtype = 0; + internaleictype = 0; + internalpeakshape = 0; + internalstandard = 0; + } + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 19)) { + is.read((char *)&internala, sizeof(double)); + is.read((char *)&internalb, sizeof(double)); + } + else { + internala = 1; + internalb = 0; + } +} + + +void cDefineCalibrationWidget::prepareWidget(vector& filenames, vector& compounds) { + delete uselabel; + delete filelabel; + delete datatypelabel; + delete grouplabel; + delete concentrationlabel; + + for (auto& it : checkboxes) { + delete it; + } + + for (auto& it : lineedits) { + delete it; + } + + for (auto& it : comboboxes) { + delete it; + } + + for (auto& it : spinboxes) { + delete it; + } + + for (auto& it : doublespinboxes) { + delete it; + } + + checkboxes.clear(); + lineedits.clear(); + comboboxes.clear(); + spinboxes.clear(); + doublespinboxes.clear(); + + delete gridlayout; + + bool load = compareStringVectors(internalfilenames, filenames) && compareStringVectors(internalcompounds, compounds) && (filenames.size() == internalusedvector.size()) && (filenames.size() == internaldatatypesvector.size()) && (filenames.size() == internalgroupsvector.size()) && (filenames.size() == internalconcentrationsvector.size()) && (compounds.size() == internalselectedionsvector.size()); + + if (!load) { + internalusedvector.clear(); + internalfilenames = filenames; + internaldatatypesvector.clear(); + internalgroupsvector.clear(); + internalconcentrationsvector.clear(); + + internalcompounds = compounds; + internalselectedionsvector.clear(); + + internalequationtype = 0; + internala = 1; + internalb = 0; + internaleictype = 0; + internalpeakshape = 0; + internalstandard = 0; + } + + gridlayout = new QGridLayout(); + filelistwidget->setLayout(gridlayout); + + uselabel = new QLabel("Use: "); + filelabel = new QLabel("Filename: "); + datatypelabel = new QLabel("Data Type: "); + grouplabel = new QLabel("Group: "); + concentrationlabel = new QLabel("Concentration: "); + + gridlayout->addWidget(uselabel, 0, 0, 1, 1); + gridlayout->addWidget(filelabel, 0, 1, 1, 10); + gridlayout->addWidget(datatypelabel, 0, 11, 1, 2); + gridlayout->addWidget(grouplabel, 0, 13, 1, 1); + gridlayout->addWidget(concentrationlabel, 0, 14, 1, 1); + + int size = (int)filenames.size(); + for (int i = 0; i < size; i++) { + QCheckBox* checkbox = new QCheckBox(); + checkbox->setChecked(true); + checkboxes.push_back(checkbox); + + QLineEdit* lineedit = new QLineEdit(); + lineedit->setText(filenames[i].c_str()); + lineedit->setDisabled(true); + lineedits.push_back(lineedit); + + QComboBox* combobox = new QComboBox(); + combobox->addItem("Sample"); + combobox->addItem("Calibration"); + comboboxes.push_back(combobox); + + connect(combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(dataTypeChanged(int))); + + QSpinBox* spinbox = new QSpinBox(); + spinbox->setToolTip("Enter a number. Items with the same number form a group of technical replicates and the results are averaged."); + spinbox->setRange(0, 1000000); + spinbox->setSingleStep(1); + spinboxes.push_back(spinbox); + spinbox->setValue((int)spinboxes.size()); + + QDoubleSpinBox* doublespinbox = new QDoubleSpinBox(); + doublespinbox->setToolTip("Enter the concentration of compound in corresponding dataset. Units are dataset dependent. Multiple datasets can have the same value (results are averaged)."); + doublespinbox->setDecimals(3); + doublespinbox->setRange(0, 1000000); + doublespinbox->setSingleStep(1); + doublespinboxes.push_back(doublespinbox); + + doublespinbox->setDisabled(true); + + gridlayout->addWidget(checkbox, i + 1, 0, 1, 1); + gridlayout->addWidget(lineedit, i + 1, 1, 1, 10); + gridlayout->addWidget(combobox, i + 1, 11, 1, 2); + gridlayout->addWidget(spinbox, i + 1, 13, 1, 1); + gridlayout->addWidget(doublespinbox, i + 1, 14, 1, 1); + + if (load) { + checkbox->setChecked(internalusedvector[i]); + combobox->setCurrentIndex(internaldatatypesvector[i]); + spinbox->setValue(internalgroupsvector[i]); + doublespinbox->setValue(internalconcentrationsvector[i]); + } + else { + internalusedvector.push_back(checkbox->isChecked()); + internaldatatypesvector.push_back(combobox->currentIndex()); + internalgroupsvector.push_back(spinbox->value()); + internalconcentrationsvector.push_back(doublespinbox->value()); + } + } + + compoundslist->clear(); + + standardcombobox->clear(); + standardcombobox->addItem("None"); + + size = (int)compounds.size(); + for (int i = 0; i < size; i++) { + compoundslist->addItem(compounds[i].c_str()); + + if (load) { + compoundslist->item(i)->setSelected(internalselectedionsvector[i]); + } + else { + internalselectedionsvector.push_back(false); + } + + standardcombobox->addItem(compounds[i].c_str()); + } + + equationcombobox->setCurrentIndex(internalequationtype); + doublespinboxa->setValue(internala); + doublespinboxb->setValue(internalb); + eiccombobox->setCurrentIndex(internaleictype); + peakshapecombobox->setCurrentIndex(internalpeakshape); + standardcombobox->setCurrentIndex(internalstandard); +} + + +void cDefineCalibrationWidget::getData(vector& usedvector, vector& datatypesvector, vector& groupsvector, vector& concentrationsvector, vector& selectedionsvector, int& equationtype, double& manuala, double& manualb, int& eictype, int& peakshape, int& standard) { + usedvector = internalusedvector; + datatypesvector = internaldatatypesvector; + groupsvector = internalgroupsvector; + concentrationsvector = internalconcentrationsvector; + selectedionsvector = internalselectedionsvector; + + equationtype = internalequationtype; + manuala = internala; + manualb = internalb; + eictype = internaleictype; + peakshape = internalpeakshape; + standard = internalstandard; +} + + +void cDefineCalibrationWidget::keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Escape) { + hide(); + } + + if (event->key() == Qt::Key_F1) { + #if OS_TYPE == WIN + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/annotatedfeatures.html").absoluteFilePath())); + #else + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/annotatedfeatures.html").absoluteFilePath())); + #endif + } + + event->accept(); +} + + +void cDefineCalibrationWidget::okButtonReleased() { + int firstvalue = -1; + bool allzeros = true; + int size; + + if (equationcombobox->currentIndex() < 2) { + + size = (int)checkboxes.size(); + for (int i = 0; i < size; i++) { + if (checkboxes[i]->isChecked() && (comboboxes[i]->currentIndex() == 1)) { + if (firstvalue == -1) { + firstvalue = doublespinboxes[i]->value() * 1000.0; + } + else { + if (firstvalue != doublespinboxes[i]->value() * 1000.0) { + allzeros = false; + break; + } + } + } + } + + if (allzeros) { + QMessageBox msgBox; + QString errstr = "At least two different values of concentration must be defined !"; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + } + else { + + if (doublespinboxa->value() == 0) { + QMessageBox msgBox; + QString errstr = "The parameter 'a' cannot be zero !"; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + } + + allzeros = true; + + size = (int)compoundslist->count(); + for (int i = 0; i < size; i++) { + if (compoundslist->item(i)->isSelected()) { + allzeros = false; + break; + } + } + + if (allzeros) { + QMessageBox msgBox; + QString errstr = "At least one ion type must be selected !"; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + internalusedvector.clear(); + internalfilenames.clear(); + internaldatatypesvector.clear(); + internalgroupsvector.clear(); + internalconcentrationsvector.clear(); + + size = (int)lineedits.size(); + for (int i = 0; i < size; i++) { + internalusedvector.push_back(checkboxes[i]->isChecked()); + internalfilenames.push_back(lineedits[i]->text().toStdString()); + internaldatatypesvector.push_back(comboboxes[i]->currentIndex()); + internalgroupsvector.push_back(spinboxes[i]->value()); + internalconcentrationsvector.push_back(doublespinboxes[i]->value()); + } + + internalcompounds.clear(); + internalselectedionsvector.clear(); + + size = (int)compoundslist->count(); + for (int i = 0; i < size; i++) { + internalcompounds.push_back(compoundslist->item(i)->text().toStdString()); + internalselectedionsvector.push_back(compoundslist->item(i)->isSelected()); + } + + internalequationtype = equationcombobox->currentIndex(); + internala = doublespinboxa->value(); + internalb = doublespinboxb->value(); + internaleictype = eiccombobox->currentIndex(); + internalpeakshape = peakshapecombobox->currentIndex(); + internalstandard = standardcombobox->currentIndex(); + + hide(); + + emit calibrationRedefined(); +} + + +void cDefineCalibrationWidget::cancelButtonReleased() { + int size = (int)internalfilenames.size(); + for (int i = 0; i < size; i++) { + checkboxes[i]->setChecked(internalusedvector[i]); + lineedits[i]->setText(internalfilenames[i].c_str()); + comboboxes[i]->setCurrentIndex(internaldatatypesvector[i]); + spinboxes[i]->setValue(internalgroupsvector[i]); + doublespinboxes[i]->setValue(internalconcentrationsvector[i]); + } + + compoundslist->clear(); + + size = (int)internalcompounds.size(); + for (int i = 0; i < size; i++) { + compoundslist->addItem(internalcompounds[i].c_str()); + compoundslist->item(i)->setSelected(internalselectedionsvector[i]); + } + + equationcombobox->setCurrentIndex(internalequationtype); + doublespinboxa->setValue(internala); + doublespinboxb->setValue(internalb); + eiccombobox->setCurrentIndex(internaleictype); + peakshapecombobox->setCurrentIndex(internalpeakshape); + standardcombobox->setCurrentIndex(internalstandard); + + hide(); +} + + +void cDefineCalibrationWidget::dataTypeChanged(int index) { + QComboBox* combobox = qobject_cast(sender()); + int position = gridlayout->indexOf(combobox); + + int row, column, rowspan, colspan; + gridlayout->getItemPosition(position, &row, &column, &rowspan, &colspan); + + row--; + + if (row < 0) { + return; + } + + if (index == 0) { + spinboxes[row]->setDisabled(false); + doublespinboxes[row]->setDisabled(true); + } + + if (index == 1) { + spinboxes[row]->setDisabled(true); + doublespinboxes[row]->setDisabled(false); + } +} + + +void cDefineCalibrationWidget::equationChanged(int index) { + if (index == 2) { + doublespinboxa->setEnabled(true); + doublespinboxb->setEnabled(true); + } + else { + doublespinboxa->setEnabled(false); + doublespinboxb->setEnabled(false); + } +} + diff --git a/CycloBranch/gui/cDefineCalibrationWidget.h b/CycloBranch/gui/cDefineCalibrationWidget.h new file mode 100644 index 0000000..4323286 --- /dev/null +++ b/CycloBranch/gui/cDefineCalibrationWidget.h @@ -0,0 +1,199 @@ +/** + \file cDefineCalibrationWidget.h + \brief The widget for definition of calibration curve. +*/ + + +#ifndef _CDEFINECALIBRATIONWIDGET_H +#define _CDEFINECALIBRATIONWIDGET_H + +#include +#include +#include +#include + +#include "core/utilities.h" + + +// forward declaration +class QScrollArea; +class QVBoxLayout; +class QHBoxLayout; +class QGridLayout; +class QLabel; +class QListWidget; +class QCheckBox; +class QLineEdit; +class QSpinBox; +class QDoubleSpinBox; +class QPushButton; +class QComboBox; +class QFormLayout; + + +/** + \brief The widget for definition of calibration curve. +*/ +class cDefineCalibrationWidget : public QWidget +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + */ + cDefineCalibrationWidget(); + + + /** + \brief The destructor. + */ + ~cDefineCalibrationWidget(); + + + /** + \brief Handle the window close event. + \param event pointer to QCloseEvent + */ + void closeEvent(QCloseEvent *event); + + + /** + \brief Store the content into an output stream. + \param os an output stream + */ + void store(ofstream& os); + + + /** + \brief Load the content from an input stream. + \param is an input stream + \param fileversionpart1 first number of .res the file version + \param fileversionpart2 second number of .res the file version + \param fileversionpart3 third number of .res the file version + */ + void load(ifstream& is, int fileversionpart1, int fileversionpart2, int fileversionpart3); + + + /** + \brief Prepare widget for visualization. + \param filenames list of files + \param compounds list of compounds + */ + void prepareWidget(vector& filenames, vector& compounds); + + + /** + \brief Get data from dialog. + \param usedvector vector of used items + \param datatypesvector vector of sample types + \param groupsvector vector of groups of technical replicates + \param concentrationsvector vector of concentrations + \param selectedionsvector vector of selected ions + \param equationtype type of linear equation (y = a*x, y = a*x + b or manual mode) + \param manuala the parameter 'a' in manual mode + \param manualb the parameter 'b' in manual mode + \param eictype type of EIC chromatogram (highest peaks = 0, all isotopes = 1) + \param peakshape shape of chromatographic peak + \param standard compound standard + */ + void getData(vector& usedvector, vector& datatypesvector, vector& groupsvector, vector& concentrationsvector, vector& selectedionsvector, int& equationtype, double& manuala, double& manualb, int& eictype, int& peakshape, int& standard); + + +private: + + QScrollArea* scrollarea; + QWidget* scrollwidget; + QVBoxLayout* scrolllayout; + + QVBoxLayout* vlayout; + QWidget* filelistwidget; + + QGridLayout* gridlayout; + + QLabel* uselabel; + QLabel* filelabel; + QLabel* grouplabel; + QLabel* datatypelabel; + QLabel* concentrationlabel; + + vector checkboxes; + vector lineedits; + vector comboboxes; + vector spinboxes; + vector doublespinboxes; + + QLabel* compoundslabel; + QListWidget* compoundslist; + QVBoxLayout* compoundslayout; + QWidget* compoundswidget; + + QFormLayout* formlayout; + QWidget* formwidget; + + QComboBox* equationcombobox; + QDoubleSpinBox* doublespinboxa; + QDoubleSpinBox* doublespinboxb; + QComboBox* eiccombobox; + QComboBox* peakshapecombobox; + QComboBox* standardcombobox; + + QPushButton* okbutton; + QPushButton* cancelbutton; + QHBoxLayout* buttonslayout; + QWidget* buttonswidget; + + vector internalusedvector; + vector internalfilenames; + vector internaldatatypesvector; + vector internalgroupsvector; + vector internalconcentrationsvector; + + vector internalcompounds; + vector internalselectedionsvector; + + int internalequationtype; + double internala; + double internalb; + int internaleictype; + int internalpeakshape; + int internalstandard; + +protected: + + + /** + \brief Handle a key press event. + \param event pointer to QKeyEvent + */ + void keyPressEvent(QKeyEvent *event); + + +private slots: + + void okButtonReleased(); + + + void cancelButtonReleased(); + + + void dataTypeChanged(int index); + + + void equationChanged(int index); + + +signals: + + + /** + \brief Parameters of calibration curve were redefined. + */ + void calibrationRedefined(); + +}; + +#endif + diff --git a/CycloBranch/gui/cFormulaPredictor.cpp b/CycloBranch/gui/cFormulaPredictor.cpp new file mode 100644 index 0000000..ccd04dd --- /dev/null +++ b/CycloBranch/gui/cFormulaPredictor.cpp @@ -0,0 +1,720 @@ +#include "gui/cFormulaPredictor.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "core/cParameters.h" + + +cFormulaPredictor::cFormulaPredictor(cGlobalPreferences* globalpreferences, QWidget *parent) { + this->parent = parent; + this->globalpreferences = globalpreferences; + + formulapredictorthread = 0; + chargevalue = 0; + maximumcombinedelements = 0; + basicformulacheck = false; + advancedformulacheck = false; + noratiocheck = false; + mzvalue = 0; + mzerror = 0; + + selectedions.clear(); + selectedelements.clear(); + ionitems.clear(); + + success = false; + terminatecomputation = false; + errmsg = ""; + + pchemdata.clear(); + + setWindowTitle("Calculate Molecular Formula"); + setWindowIcon(QIcon(":/images/icons/formula.png")); + + menuBar = new QMenuBar(this); + menuBar->setNativeMenuBar(false); + menuFile = new QMenu(tr("&File"), this); + menuSearch = new QMenu(tr("&Search"), this); + menuHelp = new QMenu(tr("&Help"), this); + + toolbarFile = addToolBar(tr("File")); + + actionExportTable = new QAction(QIcon(":/images/icons/csv.png"), tr("&Export Table to CSV"), this); + actionExportTable->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_E)); + actionExportTable->setToolTip("Export Table to CSV (Ctrl + E)"); + toolbarFile->addAction(actionExportTable); + connect(actionExportTable, SIGNAL(triggered()), this, SLOT(exportTableToCSV())); + + actionCloseWindow = new QAction(QIcon(":/images/icons/33.png"), tr("&Close"), this); + actionCloseWindow->setShortcut(QKeySequence(Qt::Key_Escape)); + actionCloseWindow->setToolTip("Close (Esc)"); + toolbarFile->addAction(actionCloseWindow); + connect(actionCloseWindow, SIGNAL(triggered()), this, SLOT(closeWindow())); + + toolbarSearch = addToolBar(tr("Search")); + + actionSearchPubChem = new QAction(QIcon(":/images/icons/search.png"), tr("Search &PubChem..."), this); + actionSearchPubChem->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P)); + actionSearchPubChem->setToolTip("Search PubChem... (Ctrl + P)"); + toolbarSearch->addAction(actionSearchPubChem); + connect(actionSearchPubChem, SIGNAL(triggered()), this, SLOT(searchPubChem())); + + toolbarHelp = addToolBar(tr("Help")); + + actionHTMLDocumentation = new QAction(QIcon(":/images/icons/3.png"), tr("&HTML Documentation"), this); + actionHTMLDocumentation->setShortcut(QKeySequence(Qt::Key_F1)); + actionHTMLDocumentation->setToolTip("Show HTML Documentation (F1)"); + toolbarHelp->addAction(actionHTMLDocumentation); + connect(actionHTMLDocumentation, SIGNAL(triggered()), this, SLOT(showHTMLDocumentation())); + + const int formwidth = 350; + + formlayout = new QFormLayout(); + + doublespinboxmz = new QDoubleSpinBox(); + doublespinboxmz->setToolTip("Enter the value of m/z."); + doublespinboxmz->setFixedWidth(formwidth); + doublespinboxmz->setDecimals(6); + doublespinboxmz->setRange(0, 1000000); + doublespinboxmz->setSingleStep(1); + doublespinboxmz->setValue(500.0); + formlayout->addRow(tr("m/z: "), doublespinboxmz); + + spinboxcharge = new QSpinBox(); + spinboxcharge->setToolTip("Enter the value of charge. Use negative values in negative ion mode (e.g., -1)."); + spinboxcharge->setFixedWidth(formwidth); + spinboxcharge->setRange(-100, 100); + spinboxcharge->setSingleStep(1); + spinboxcharge->setValue(1); + formlayout->addRow(tr("Charge: "), spinboxcharge); + + doublespinboxmzerror = new QDoubleSpinBox(); + doublespinboxmzerror->setToolTip("Enter the m/z error tolerance in ppm."); + doublespinboxmzerror->setFixedWidth(formwidth); + doublespinboxmzerror->setDecimals(6); + doublespinboxmzerror->setRange(0, 10000); + doublespinboxmzerror->setSingleStep(1); + doublespinboxmzerror->setValue(5.0); + doublespinboxmzerror->setSuffix(" ppm"); + formlayout->addRow(tr("m/z Error Tolerance: "), doublespinboxmzerror); + + widgetiontypes = new cFragmentIonsListWidget(this); + widgetiontypes->setToolTip("Select the types of ions to be generated."); + widgetiontypes->setFixedWidth(formwidth); + formlayout->addRow(tr("Ion Types: "), widgetiontypes); + + widgetelements = new cNeutralLossesListWidget(false, true, this); + widgetelements->setToolTip("Define and select the chemical elements. Use the colon to limit the maximum number of occurrences of an element (e.g., S:2)."); + widgetelements->setFixedWidth(formwidth); + formlayout->addRow(tr("Chemical Elements: "), widgetelements); + + spinboxmaximumcombinedelements = new QSpinBox(); + spinboxmaximumcombinedelements->setToolTip("Enter the maximum number of chemical elements in a neutral molecule (i.e., M)."); + spinboxmaximumcombinedelements->setRange(1, 10000); + spinboxmaximumcombinedelements->setSingleStep(1); + spinboxmaximumcombinedelements->setFixedWidth(formwidth); + spinboxmaximumcombinedelements->setValue(200); + formlayout->addRow(tr("Maximum Number of Combined Elements "), spinboxmaximumcombinedelements); + + checkboxbasicformula = new QCheckBox(); + checkboxbasicformula->setToolTip("Apply Senior's filtering rules."); + checkboxbasicformula->setFixedWidth(formwidth); + checkboxbasicformula->setChecked(true); + formlayout->addRow(tr("Basic Formula Check: "), checkboxbasicformula); + + checkboxadvancedformula = new QCheckBox(); + checkboxadvancedformula->setToolTip("Apply advanced filtering rules."); + checkboxadvancedformula->setFixedWidth(formwidth); + checkboxadvancedformula->setChecked(true); + formlayout->addRow(tr("Advanced Formula Check: "), checkboxadvancedformula); + + checkboxnoratio = new QCheckBox(); + checkboxnoratio->setToolTip("Check if the number of nitrogen atoms is less or equal to the number of oxygen atoms."); + checkboxnoratio->setFixedWidth(formwidth); + checkboxnoratio->setChecked(true); + formlayout->addRow(tr("N/O Ratio Check: "), checkboxnoratio); + + predictbutton = new QPushButton("Calculate"); + predictbutton->setFixedWidth(100); + //formlayout->addRow("", predictbutton); + formlayout->addRow(predictbutton); + connect(predictbutton, SIGNAL(released()), this, SLOT(predictButtonReleased())); + + cancelbutton = new QPushButton("Cancel"); + cancelbutton->setFixedWidth(100); + //formlayout->addRow("", cancelbutton); + formlayout->addRow(cancelbutton); + connect(cancelbutton, SIGNAL(released()), this, SLOT(cancelButtonReleased())); + + formwidget = new QWidget(); + formwidget->setLayout(formlayout); + + peakstable = new QTableView(this); + peakstablemodel = new QStandardItemModel(0, 0, this); + proxymodel = new cSpectrumDetailProxyModel(this); + proxymodel->setSourceModel(peakstablemodel); + proxymodel->setDynamicSortFilter(false); + peakstable->setModel(proxymodel); + peakstable->setSortingEnabled(true); + + hsplitter = new QSplitter(); + hsplitter->setOrientation(Qt::Horizontal); + + vsplitter1 = new QSplitter(); + vsplitter1->setOrientation(Qt::Vertical); + + vsplitter2 = new QSplitter(); + vsplitter2->setOrientation(Qt::Vertical); + + vsplitter1->addWidget(peakstable); + vsplitter2->addWidget(formwidget); + + QList sizes; + sizes.push_back(1900); + sizes.push_back(100); + + hsplitter->addWidget(vsplitter1); + hsplitter->addWidget(vsplitter2); + + hsplitter->setSizes(sizes); + + setCentralWidget(hsplitter); + centralWidget()->setContentsMargins(5, 5, 5, 5); + + menuFile->addAction(actionExportTable); + menuFile->addSeparator(); + menuFile->addAction(actionCloseWindow); + + menuSearch->addAction(actionSearchPubChem); + + menuHelp->addAction(actionHTMLDocumentation); + + menuBar->addMenu(menuFile); + menuBar->addMenu(menuSearch); + menuBar->addMenu(menuHelp); + + setMenuBar(menuBar); + + connect(widgetiontypes, SIGNAL(resetReleased()), this, SLOT(resetIonTypes())); + + resize(defaultwinsizex, defaultwinsizey); + + applyGlobalPreferences(); +} + + +cFormulaPredictor::~cFormulaPredictor() { + delete doublespinboxmz; + delete spinboxcharge; + delete doublespinboxmzerror; + delete widgetiontypes; + delete widgetelements; + delete spinboxmaximumcombinedelements; + delete checkboxbasicformula; + delete checkboxadvancedformula; + delete checkboxnoratio; + delete predictbutton; + delete cancelbutton; + + delete formlayout; + delete formwidget; + + deleteTable(); + + delete peakstablemodel; + delete proxymodel; + delete peakstable; + + delete vsplitter1; + delete vsplitter2; + + delete hsplitter; + + delete actionExportTable; + delete actionCloseWindow; + delete actionSearchPubChem; + delete actionHTMLDocumentation; + + delete menuFile; + delete menuSearch; + delete menuHelp; + + delete menuBar; +} + + +void cFormulaPredictor::closeEvent(QCloseEvent *event) { + hide(); + event->accept(); +} + + +void cFormulaPredictor::applyGlobalPreferences() { + if (globalpreferences) { + resetIonTypes(); + } +} + + +void cFormulaPredictor::keyPressEvent(QKeyEvent *event) { + if ((event->key() == Qt::Key_Enter) || (event->key() == Qt::Key_Return)) { + predictButtonReleased(); + } + + if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) { + QModelIndexList selectedindexes = peakstable->selectionModel()->selectedIndexes(); + QStandardItem* item; + + QString selectedtext; + string itemtext; + + int selectedcount = selectedindexes.count(); + for (int i = 0; i < selectedcount; i++) { + if (i > 0) { + if (proxymodel->mapToSource(selectedindexes[i - 1]).row() != proxymodel->mapToSource(selectedindexes[i]).row()) { + selectedtext += "\n"; + } + else { + selectedtext += "\t"; + } + } + + item = peakstablemodel->itemFromIndex(proxymodel->mapToSource(selectedindexes[i])); + if (item) { + itemtext = item->text().toStdString(); + selectedtext += stripHTML(itemtext).c_str(); + } + } + selectedtext += "\n"; + QApplication::clipboard()->setText(selectedtext); + } + + event->accept(); +} + + +void cFormulaPredictor::preparePeaksTable() { + deleteTable(); + + pchemdata.clear(); + + peakstable->setEditTriggers(QAbstractItemView::NoEditTriggers); + peakstable->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); + peakstable->horizontalHeader()->setSectionsMovable(true); + //peakstable->verticalHeader()->setDefaultSectionSize(30); + + peakstablemodel->setColumnCount(7); + + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + peakstablemodel->setHorizontalHeaderItem(i, new QStandardItem()); + } + + int currentcolumn = 0; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Compound"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Theoretical m/z"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Error [ppm]"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Selected Ion"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Charge"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("PubChem Results"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Reference"); + peakstable->setItemDelegateForColumn(currentcolumn, new cViewButtonDelegate()); + + int formulascount = (int)ionitems.size(); + peakstablemodel->setRowCount(formulascount); + + peakstable->setModel(0); + proxymodel->setSourceModel(0); + peakstable->setSortingEnabled(false); + + string link; + for (int i = 0; i < formulascount; i++) { + currentcolumn = 0; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setText(ionitems[i].ionformula.c_str()); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(ionitems[i].theoreticalmz)), Qt::DisplayRole); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(ppmError(mzvalue, ionitems[i].theoreticalmz))), Qt::DisplayRole); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setText(ionitems[i].iontype.c_str()); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setData(QVariant::fromValue(ionitems[i].charge), Qt::DisplayRole); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + currentcolumn++; + + link = "https://pubchem.ncbi.nlm.nih.gov/#query=" + ionitems[i].ionformula; + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setText(link.c_str()); + } + + proxymodel->setSourceModel(peakstablemodel); + peakstable->setModel(proxymodel); + peakstable->setSortingEnabled(true); + + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + peakstable->resizeColumnToContents(i); + } + + //peakstable->setColumnWidth(4, min(1200, peakstable->columnWidth(4))); +} + + +void cFormulaPredictor::deleteTable() { + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + if (peakstable->itemDelegateForColumn(i)) { + delete peakstable->itemDelegateForColumn(i); + } + } + peakstablemodel->clear(); +} + + +void cFormulaPredictor::predictButtonReleased() { + if (!globalpreferences) { + return; + } + + chargevalue = spinboxcharge->value(); + maximumcombinedelements = spinboxmaximumcombinedelements->value(); + + basicformulacheck = checkboxbasicformula->isChecked(); + advancedformulacheck = checkboxadvancedformula->isChecked(); + noratiocheck = checkboxnoratio->isChecked(); + + mzvalue = doublespinboxmz->value(); + mzerror = doublespinboxmzerror->value(); + + selectedions.clear(); + selectedelements.clear(); + ionitems.clear(); + + QMessageBox msgbox; + errmsg = ""; + + if (chargevalue == 0) { + errmsg = "The charge cannot be zero !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + for (int i = 0; i < widgetiontypes->getList()->count(); i++) { + if (widgetiontypes->getList()->item(i)->isSelected()) { + if ((globalpreferences->customions[i].positive && (chargevalue > 0)) || (!globalpreferences->customions[i].positive && (chargevalue < 0))) { + selectedions.push_back(globalpreferences->customions[i]); + } + } + } + + if (selectedions.empty()) { + errmsg = "Please, select at least one valid ion type.\n\nIf charge > 0, select positive ions only.\nIf charge < 0, select negative ions only."; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + for (int i = 0; i < widgetelements->getList()->count(); i++) { + if (widgetelements->getList()->item(i)->isSelected()) { + selectedelements.push_back(widgetelements->getList()->item(i)->text().toStdString()); + } + } + + if (selectedelements.empty()) { + errmsg = "Please, select some chemical elements first."; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + predictbutton->setDisabled(true); + predictbutton->setText("Calculating..."); + + success = false; + terminatecomputation = false; + + //cout << "Starting thread..." << endl; + + formulapredictorthread = new cFormulaPredictorThread(); + formulapredictorthread->initialize(chargevalue, maximumcombinedelements, basicformulacheck, advancedformulacheck, noratiocheck, mzvalue, mzerror, selectedions, selectedelements, ionitems, success, terminatecomputation, errmsg); + connect(formulapredictorthread, SIGNAL(finished()), this, SLOT(formulaPredictorThreadFinished())); + formulapredictorthread->start(); +} + + +void cFormulaPredictor::cancelButtonReleased() { + terminatecomputation = true; +} + + +void cFormulaPredictor::exportTableToCSV() { + QString currentdir = "./"; + if (globalpreferences) { + currentdir = globalpreferences->exportcsvdefaultdir; + } + + QString filename = QFileDialog::getSaveFileName(this, tr("Export Table to CSV..."), currentdir, "Files (*.csv)"); + + if (!filename.isEmpty()) { + + QProgressDialog progress("Exporting the CSV file...", "Cancel", 0, proxymodel->rowCount(), this); + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + + bool removefile = false; + QFile file(filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + return; + } + + QTextStream out(&file); + + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + out << "\"" << peakstablemodel->horizontalHeaderItem(i)->text() << "\""; + if (i < peakstablemodel->columnCount() - 1) { + out << ","; + } + } + out << endl; + + QStandardItem* item; + string str; + for (int i = 0; i < proxymodel->rowCount(); i++) { + + for (int j = 0; j < peakstablemodel->columnCount(); j++) { + item = peakstablemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, j))); + if (item) { + str = item->data(Qt::DisplayRole).toString().toStdString(); + out << "\"" << stripHTML(str).c_str() << "\""; + if (j < peakstablemodel->columnCount() - 1) { + out << ","; + } + } + else { + if (j < peakstablemodel->columnCount() - 1) { + out << ","; + } + } + } + out << endl; + + progress.setValue(i); + if (progress.wasCanceled()) { + removefile = true; + break; + } + } + + file.close(); + + if (removefile) { + file.remove(); + } + + progress.setValue(proxymodel->rowCount()); + + } +} + + +void cFormulaPredictor::showHTMLDocumentation() { + #if OS_TYPE == WIN + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/calculatemolecularformula.html").absoluteFilePath())); + #else + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/calculatemolecularformula.html").absoluteFilePath())); + #endif +} + + +void cFormulaPredictor::closeWindow() { + hide(); +} + + +void cFormulaPredictor::resetIonTypes() { + if (globalpreferences) { + widgetiontypes->getList()->clear(); + for (int i = 0; i < (int)globalpreferences->customions.size(); i++) { + widgetiontypes->getList()->addItem(globalpreferences->customions[i].name.c_str()); + if (globalpreferences->customions[i].name.compare("[M+H]+") == 0) { + widgetiontypes->getList()->item(i)->setSelected(true); + } + } + } +} + + +void cFormulaPredictor::formulaPredictorThreadFinished() { + QMessageBox msgbox; + + if (success) { + preparePeaksTable(); + } + else { + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + } + + predictbutton->setText("Calculate"); + predictbutton->setDisabled(false); +} + + +void cFormulaPredictor::searchPubChem() { + bool repeatsearch = false; + if (pchemdata.size() > 0) { + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, "Search PubChem...", "Search again ?", QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::Yes) { + repeatsearch = true; + } + } + + if (repeatsearch || (pchemdata.size() == 0)) { + + int formulacol = 0; + int pchemcol = 5; + + set formulas; + QStandardItem* itemname; + QStandardItem* pchemres; + + pchemdata.clear(); + + for (int i = 0; i < proxymodel->rowCount(); i++) { + itemname = peakstablemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, formulacol))); + if (itemname) { + formulas.insert(itemname->text().toStdString()); + } + } + + if (formulas.size() == 0) { + return; + } + + const int limit = 500; + + if (formulas.size() > limit) { + QMessageBox msgBox; + QString errstr = "The maximum number of formulas to be searched is " + QVariant(limit).toString() + ". You generated " + QVariant((int)formulas.size()).toString() + " formulas. "; + errstr += "Please, optimize the search settings."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + int maxthreadsbackup = QThreadPool::globalInstance()->maxThreadCount(); + int maxparallelqueries = 2; + + QThreadPool::globalInstance()->setMaxThreadCount(maxparallelqueries); + + vector vformulas; + for (auto& it : formulas) { + vformulas.push_back(it); + } + + QProgressDialog firstdialog("Searching compounds...", "Cancel", 0, (int)formulas.size(), this); + firstdialog.setMinimumWidth(250); + cEventFilter firstfilter; + firstdialog.installEventFilter(&firstfilter); + firstdialog.setMinimumDuration(0); + firstdialog.setWindowModality(Qt::ApplicationModal); + firstdialog.setValue(0); + + QFutureWatcher firstfuturewatcher; + QObject::connect(&firstfuturewatcher, SIGNAL(finished()), &firstdialog, SLOT(reset())); + QObject::connect(&firstdialog, SIGNAL(canceled()), &firstfuturewatcher, SLOT(cancel())); + QObject::connect(&firstfuturewatcher, SIGNAL(progressRangeChanged(int, int)), &firstdialog, SLOT(setRange(int, int))); + QObject::connect(&firstfuturewatcher, SIGNAL(progressValueChanged(int)), &firstdialog, SLOT(setValue(int))); + + QFuture firstfuture = QtConcurrent::mapped(vformulas.begin(), vformulas.end(), cPubchemCIDReader()); + + firstfuturewatcher.setFuture(firstfuture); + + firstdialog.exec(); + + if (firstfuturewatcher.isCanceled()) { + QThreadPool::globalInstance()->clear(); + } + + firstfuturewatcher.waitForFinished(); + + if (!firstfuturewatcher.isCanceled()) { + + cPubchemCIDReader pubchemformulareader; + string firstfutureresult; + for (int i = 0; i < (int)vformulas.size(); i++) { + firstfutureresult = firstfuture.resultAt(i); + + if (firstfutureresult.substr(0, 6).compare("@ERROR") == 0) { + firstfutureresult.clear(); + } + + pchemdata[vformulas[i]] = pubchemformulareader.getNumberOfCIDs(firstfutureresult); + } + + } + + QThreadPool::globalInstance()->setMaxThreadCount(maxthreadsbackup); + + for (int i = 0; i < proxymodel->rowCount(); i++) { + itemname = peakstablemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, formulacol))); + pchemres = peakstablemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, pchemcol))); + + if (itemname && pchemres) { + pchemres->setData(QVariant::fromValue(pchemdata[itemname->text().toStdString()]), Qt::DisplayRole); + } + } + + } + +} + diff --git a/CycloBranch/gui/cFormulaPredictor.h b/CycloBranch/gui/cFormulaPredictor.h new file mode 100644 index 0000000..7b4ec34 --- /dev/null +++ b/CycloBranch/gui/cFormulaPredictor.h @@ -0,0 +1,192 @@ +/** + \file cFormulaPredictor.h + \brief Predicts the molecular formula from the exact mass. +*/ + + +#ifndef _CFORMULAPREDICTOR_H +#define _CFORMULAPREDICTOR_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "core/cGlobalPreferences.h" +#include "core/cPeaksList.h" +#include "gui/cViewButtonDelegate.h" +#include "gui/cFragmentIonsListWidget.h" +#include "gui/cNeutralLossesListWidget.h" +#include "gui/cSpectrumDetailProxyModel.h" +#include "gui/cEventFilter.h" +#include "gui/cPubChemSearchWidget.h" +#include "parallel/cFormulaPredictorThread.h" + + +// forward declaration +class QTextBrowser; +class QHBoxLayout; +class QVBoxLayout; +class QFormLayout; +class QCheckBox; +class QPushButton; +class QSplitter; +class QComboBox; +class QDoubleSpinBox; +class QSpinBox; +class QAction; +class QLabel; +class QLineEdit; + + +/** + \brief Predicts the molecular formula from the exact mass. +*/ +class cFormulaPredictor : public QMainWindow +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param globalpreferences global preferences of the application + \param parent pointer to a parent widget + */ + cFormulaPredictor(cGlobalPreferences* globalpreferences, QWidget *parent); + + + /** + \brief The destructor. + */ + ~cFormulaPredictor(); + + + /** + \brief Handle the window close event. + \param event pointer to QCloseEvent + */ + void closeEvent(QCloseEvent *event); + + + /** + \brief Apply new global preferences. + */ + void applyGlobalPreferences(); + + +protected: + + + /** + \brief Handle a key press event. + \param event pointer to QKeyEvent + */ + void keyPressEvent(QKeyEvent *event); + + +private: + + cGlobalPreferences* globalpreferences; + QWidget* parent; + + cFormulaPredictorThread* formulapredictorthread; + int chargevalue; + int maximumcombinedelements; + bool basicformulacheck; + bool advancedformulacheck; + bool noratiocheck; + double mzvalue; + double mzerror; + vector selectedions; + vector selectedelements; + vector ionitems; + bool success; + bool terminatecomputation; + string errmsg; + + map pchemdata; + + QMenuBar* menuBar; + QMenu* menuFile; + QMenu* menuSearch; + QMenu* menuHelp; + + QToolBar* toolbarFile; + QToolBar* toolbarSearch; + QToolBar* toolbarHelp; + + QAction* actionExportTable; + QAction* actionCloseWindow; + QAction* actionSearchPubChem; + QAction* actionHTMLDocumentation; + + QDoubleSpinBox* doublespinboxmz; + QSpinBox* spinboxcharge; + QDoubleSpinBox* doublespinboxmzerror; + cFragmentIonsListWidget* widgetiontypes; + cNeutralLossesListWidget* widgetelements; + QSpinBox* spinboxmaximumcombinedelements; + QCheckBox* checkboxbasicformula; + QCheckBox* checkboxadvancedformula; + QCheckBox* checkboxnoratio; + QPushButton* predictbutton; + QPushButton* cancelbutton; + + QFormLayout* formlayout; + QWidget* formwidget; + + QTableView* peakstable; + QStandardItemModel* peakstablemodel; + cSpectrumDetailProxyModel* proxymodel; + + QSplitter* vsplitter1; + QSplitter* vsplitter2; + QSplitter* hsplitter; + + void preparePeaksTable(); + + void deleteTable(); + + +private slots: + + + void predictButtonReleased(); + + + void cancelButtonReleased(); + + + void exportTableToCSV(); + + + void showHTMLDocumentation(); + + + void closeWindow(); + + + void resetIonTypes(); + + + void formulaPredictorThreadFinished(); + + + void searchPubChem(); + +}; + +#endif + diff --git a/CycloBranch/gui/cImageWindow.cpp b/CycloBranch/gui/cImageWindow.cpp index 1c8281f..461b1dc 100644 --- a/CycloBranch/gui/cImageWindow.cpp +++ b/CycloBranch/gui/cImageWindow.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -13,11 +14,15 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* parent) { + editorname = "Image Fusion"; + this->globalpreferences = globalpreferences; this->parent = parent; - setWindowTitle("CrossVis"); - setWindowIcon(QIcon(":/images/icons/image.png")); + redrawenabled = false; + + setWindowTitle(editorname); + setWindowIcon(QIcon(":/images/icons/image_edit.png")); menuBar = new QMenuBar(this); menuBar->setNativeMenuBar(false); @@ -218,7 +223,7 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren microscopyx = new QDoubleSpinBox(); microscopyx->setRange(0, 1000000); - microscopyx->setDecimals(6); + microscopyx->setDecimals(3); microscopyx->setSingleStep(1); microscopyx->setValue(0); microscopyx->setSuffix(" um"); @@ -228,7 +233,7 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren microscopyy = new QDoubleSpinBox(); microscopyy->setRange(0, 1000000); - microscopyy->setDecimals(6); + microscopyy->setDecimals(3); microscopyy->setSingleStep(1); microscopyy->setValue(0); microscopyy->setSuffix(" um"); @@ -238,7 +243,7 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren microscopywidth = new QDoubleSpinBox(); microscopywidth->setRange(0, 1000000); - microscopywidth->setDecimals(6); + microscopywidth->setDecimals(3); microscopywidth->setSingleStep(1); microscopywidth->setValue(0); microscopywidth->setSuffix(" um"); @@ -248,7 +253,7 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren microscopyheight = new QDoubleSpinBox(); microscopyheight->setRange(0, 1000000); - microscopyheight->setDecimals(6); + microscopyheight->setDecimals(3); microscopyheight->setSingleStep(1); microscopyheight->setValue(0); microscopyheight->setSuffix(" um"); @@ -263,12 +268,23 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren microscopyangle->setValue(0); microscopyangle->setToolTip("Rotation angle of microscopy image [degrees]."); + microscopynavigationlabel = new QLabel("Navigation: "); + microscopynavigationcombobox = new QComboBox(); + microscopynavigationcombobox->setToolTip("The navigation layer used for currently selected image."); + updateMicroscopyNavigationCombobox(numberoflayers); + microscopydefaultbutton = new QPushButton(" Default "); microscopydefaultbutton->setToolTip("Set default position of microscopy image."); microscopygobutton = new QPushButton(" Go "); microscopygobutton->setToolTip("Go to position."); + microscopyprevbutton = new QPushButton("Previous"); + microscopyprevbutton->setToolTip("Go to previous position."); + + microscopynextbutton = new QPushButton("Next"); + microscopynextbutton->setToolTip("Go to next position."); + microscopyhbox = new QHBoxLayout(); microscopyhbox->addWidget(microscopyxlabel); microscopyhbox->addWidget(microscopyx); @@ -280,8 +296,12 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren microscopyhbox->addWidget(microscopyheight); microscopyhbox->addWidget(microscopyanglelabel); microscopyhbox->addWidget(microscopyangle); + microscopyhbox->addWidget(microscopynavigationlabel); + microscopyhbox->addWidget(microscopynavigationcombobox); microscopyhbox->addWidget(microscopydefaultbutton); microscopyhbox->addWidget(microscopygobutton); + microscopyhbox->addWidget(microscopyprevbutton); + microscopyhbox->addWidget(microscopynextbutton); microscopywidget = new QWidget(); microscopywidget->setLayout(microscopyhbox); @@ -290,14 +310,14 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren image = new QImage(); histologyimage = new QImage(); - microscopylayers.resize(layer_end); + microscopylayers.resize(numberoflayers); imagewindowwidget = new cImageWindowWidget(); layerslayout = new QGridLayout(); layerslayout->setAlignment(Qt::AlignTop); - connect(this, SIGNAL(layerChanged(int, bool, int, int)), imagewindowwidget, SLOT(changeLayer(int, bool, int, int))); + connect(this, SIGNAL(layerChanged(int, bool, int, int, bool)), imagewindowwidget, SLOT(changeLayer(int, bool, int, int, bool))); connect(this, SIGNAL(activeLayerChanged(int)), imagewindowwidget, SLOT(changeActiveLayer(int))); connect(imagewindowwidget, SIGNAL(imageWidgetDoubleClicked(int)), this, SLOT(imageDoubleClickedSlot(int))); @@ -307,30 +327,30 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren addLayer("Compounds"); addLayer("Optical Image"); addLayer("Histology Image"); -#ifdef MICROSCOPY_IMAGES addLayer("Microscopy Image (nav.)"); - addLayer("Microscopy Image 1"); - addLayer("Microscopy Image 2"); - addLayer("Microscopy Image 3"); - addLayer("Microscopy Image 4"); - addLayer("Microscopy Image 5"); - addLayer("Microscopy Image 6"); - addLayer("Microscopy Image 7"); - addLayer("Microscopy Image 8"); - addLayer("Microscopy Image 9"); - addLayer("Microscopy Image 10"); -#endif + + QString microscopylayername = "Microscopy Image "; + QString tmpname; + for (int i = 0; i < numberoflayers - 4; i++) { + tmpname = microscopylayername + QVariant(i + 1).toString(); + addLayer(tmpname); + } + colorSpinBoxes(0); layerswidget = new QWidget(); layerswidget->setLayout(layerslayout); + layersscrollarea = new QScrollArea(); + layersscrollarea->setWidgetResizable(true); + layersscrollarea->setWidget(layerswidget); + mainwidget = new QSplitter(); mainwidget->setOrientation(Qt::Horizontal); mainwidget->addWidget(imagewindowwidget); - mainwidget->addWidget(layerswidget); - mainwidget->setStretchFactor(0, 9); - mainwidget->setStretchFactor(1, 1); + mainwidget->addWidget(layersscrollarea); + mainwidget->setStretchFactor(0, 7); + mainwidget->setStretchFactor(1, 3); connect(setregionbutton, SIGNAL(released()), this, SLOT(setRegionButtonReleased())); connect(resetregionbutton, SIGNAL(released()), this, SLOT(resetSelection())); @@ -349,22 +369,61 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren connect(microscopywidth, SIGNAL(valueChanged(double)), this, SLOT(microscopyPositionChanged(double))); connect(microscopyheight, SIGNAL(valueChanged(double)), this, SLOT(microscopyPositionChanged(double))); connect(microscopyangle, SIGNAL(valueChanged(double)), this, SLOT(microscopyAngleChanged(double))); + connect(microscopynavigationcombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(microscopyNavigationChanged(int))); connect(microscopydefaultbutton, SIGNAL(released()), this, SLOT(microscopyDefaultButtonReleased())); connect(microscopygobutton, SIGNAL(released()), this, SLOT(microscopyGoButtonReleased())); + connect(microscopyprevbutton, SIGNAL(released()), this, SLOT(microscopyPrevButtonReleased())); + connect(microscopynextbutton, SIGNAL(released()), this, SLOT(microscopyNextButtonReleased())); toolbarFile = addToolBar(tr("File")); - actionOpenImage = new QAction(QIcon(":/images/icons/52.png"), tr("&Open Image"), this); + actionLoadLayers = new QAction(QIcon(":/images/icons/52.png"), tr("&Load Layers"), this); + actionLoadLayers->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); + actionLoadLayers->setToolTip("Load Layers (Ctrl + L)"); + toolbarFile->addAction(actionLoadLayers); + connect(actionLoadLayers, SIGNAL(triggered()), this, SLOT(loadLayers())); + + actionSaveLayers = new QAction(QIcon(":/images/icons/22.png"), tr("&Save Layers"), this); + actionSaveLayers->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); + actionSaveLayers->setToolTip("Save Layers (Ctrl + S)"); + toolbarFile->addAction(actionSaveLayers); + connect(actionSaveLayers, SIGNAL(triggered()), this, SLOT(saveLayers())); + + actionSaveLayersAs = new QAction(QIcon(":/images/icons/86.png"), tr("Save La&yers As..."), this); + actionSaveLayersAs->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D)); + actionSaveLayersAs->setToolTip("Save Layers As... (Ctrl + D)"); + toolbarFile->addAction(actionSaveLayersAs); + connect(actionSaveLayersAs, SIGNAL(triggered()), this, SLOT(saveLayersAs())); + + toolbarFile->addSeparator(); + + actionOpenImage = new QAction(QIcon(":/images/icons/image_open.png"), tr("&Open Image"), this); actionOpenImage->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); actionOpenImage->setToolTip("Open Image (Ctrl + O)"); toolbarFile->addAction(actionOpenImage); connect(actionOpenImage, SIGNAL(triggered()), this, SLOT(selectImageType())); - actionSaveImage = new QAction(QIcon(":/images/icons/22.png"), tr("&Save Image"), this); - actionSaveImage->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); - actionSaveImage->setToolTip("Save Image (Ctrl + S)"); - toolbarFile->addAction(actionSaveImage); - connect(actionSaveImage, SIGNAL(triggered()), this, SLOT(saveImage())); + actionImportDialog = new QAction(QIcon(":/images/icons/import.png"), tr("I&mport Images..."), this); + actionImportDialog->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); + actionImportDialog->setToolTip("Import Images... (Ctrl + M)"); + toolbarFile->addAction(actionImportDialog); + connect(actionImportDialog, SIGNAL(triggered()), this, SLOT(openImportDialog())); + + actionExportImage = new QAction(QIcon(":/images/icons/66.png"), tr("Export Ima&ge"), this); + actionExportImage->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_G)); + actionExportImage->setToolTip("Export Image (Ctrl + G)"); + toolbarFile->addAction(actionExportImage); + connect(actionExportImage, SIGNAL(triggered()), this, SLOT(exportImage())); + + toolbarFile->addSeparator(); + + actionClearAll = new QAction(QIcon(":/images/icons/clear.png"), tr("Clear &All Layers"), this); + actionClearAll->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W)); + actionClearAll->setToolTip("Clear All Layers (Ctrl + W)"); + toolbarFile->addAction(actionClearAll); + connect(actionClearAll, SIGNAL(triggered()), this, SLOT(clearAllLayersSlot())); + + toolbarFile->addSeparator(); actionCloseWindow = new QAction(QIcon(":/images/icons/33.png"), tr("&Close"), this); actionCloseWindow->setShortcut(QKeySequence(Qt::Key_Escape)); @@ -421,7 +480,7 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren rulerValue = new QDoubleSpinBox(); rulerValue->setRange(0.000001, 1000000); - rulerValue->setDecimals(6); + rulerValue->setDecimals(3); rulerValue->setSingleStep(1); rulerValue->setValue(1000); rulerValue->setSuffix(" um"); @@ -469,15 +528,36 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren toolbarHistology->addSeparator(); toolbarHistology->addWidget(histologywidget); -#ifdef MICROSCOPY_IMAGES addToolBarBreak(); toolbarMicroscopy = addToolBar(tr("Microscopy Image")); + + actionFlipMicroscopyHorizontal = new QAction(QIcon(":/images/icons/flip_horizontal.png"), tr("Flip &Microscopy Horizontally"), this); + actionFlipMicroscopyHorizontal->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_H)); + actionFlipMicroscopyHorizontal->setToolTip("Flip Microscopy Horizontally (Ctrl + Shift + H)"); + actionFlipMicroscopyHorizontal->setCheckable(true); + toolbarMicroscopy->addAction(actionFlipMicroscopyHorizontal); + connect(actionFlipMicroscopyHorizontal, SIGNAL(toggled(bool)), this, SLOT(microscopyFlipStateChanged(bool))); + + actionFlipMicroscopyVertical = new QAction(QIcon(":/images/icons/flip_vertical.png"), tr("Flip Microscopy Ver&tically"), this); + actionFlipMicroscopyVertical->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_V)); + actionFlipMicroscopyVertical->setToolTip("Flip Microscopy Vertically (Ctrl + Shift + V)"); + actionFlipMicroscopyVertical->setCheckable(true); + toolbarMicroscopy->addAction(actionFlipMicroscopyVertical); + connect(actionFlipMicroscopyVertical, SIGNAL(toggled(bool)), this, SLOT(microscopyFlipStateChanged(bool))); + + toolbarMicroscopy->addSeparator(); toolbarMicroscopy->addWidget(microscopywidget); -#endif + menuFile->addAction(actionLoadLayers); + menuFile->addAction(actionSaveLayers); + menuFile->addAction(actionSaveLayersAs); + menuFile->addSeparator(); menuFile->addAction(actionOpenImage); - menuFile->addAction(actionSaveImage); + menuFile->addAction(actionImportDialog); + menuFile->addAction(actionExportImage); + menuFile->addSeparator(); + menuFile->addAction(actionClearAll); menuFile->addSeparator(); menuFile->addAction(actionCloseWindow); @@ -491,6 +571,9 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren menuView->addSeparator(); menuView->addAction(actionFlipHistologyHorizontal); menuView->addAction(actionFlipHistologyVertical); + menuView->addSeparator(); + menuView->addAction(actionFlipMicroscopyHorizontal); + menuView->addAction(actionFlipMicroscopyVertical); menuHelp->addAction(actionHTMLDocumentation); @@ -508,17 +591,23 @@ cImageWindow::cImageWindow(cGlobalPreferences* globalpreferences, QWidget* paren connect(this, SIGNAL(updateSummaryPeaksTableFilter(int, int, int, int)), this->parent, SLOT(updateSummaryPeaksTableFilterSlot(int, int, int, int))); connect(imagewindowwidget, SIGNAL(updateCorrelation(int, int, int, int)), this, SLOT(updatePointsArea(int, int, int, int))); connect(imagewindowwidget, SIGNAL(updateHistologyPosition(int, int, int, int, double)), this, SLOT(updateHistologySlot(int, int, int, int, double))); - connect(imagewindowwidget, SIGNAL(updateMicroscopyPosition(double, double, double, double, double)), this, SLOT(updateMicroscopySlot(double, double, double, double, double))); + connect(imagewindowwidget, SIGNAL(updateMicroscopyPosition(bool, bool, double, double, double, double, double)), this, SLOT(updateMicroscopySlot(bool, bool, double, double, double, double, double))); resize(defaultwinsizex, defaultwinsizey); applyGlobalPreferences(globalpreferences); + + layersfileloaded = false; + saveascalled = false; + imzmlfilename.clear(); defaultmaxx = 1; defaultmaxy = 1; defaultpixelsizex = 1; defaultpixelsizey = 1; vendor = unknownvendor; + + redrawenabled = true; } @@ -577,7 +666,11 @@ cImageWindow::~cImageWindow() { delete microscopyanglelabel; delete microscopyangle; delete microscopydefaultbutton; + delete microscopynavigationlabel; + delete microscopynavigationcombobox; delete microscopygobutton; + delete microscopyprevbutton; + delete microscopynextbutton; delete microscopyhbox; delete microscopywidget; @@ -586,16 +679,20 @@ cImageWindow::~cImageWindow() { delete imagewindowwidget; delete layerslayout; - delete layerswidget; - + delete layersscrollarea; delete mainwidget; delete rulerLabel; delete rulerValue; + delete actionLoadLayers; + delete actionSaveLayers; + delete actionSaveLayersAs; delete actionOpenImage; - delete actionSaveImage; + delete actionImportDialog; + delete actionExportImage; + delete actionClearAll; delete actionCloseWindow; delete actionShowSelection; delete actionColorScale; @@ -621,13 +718,29 @@ void cImageWindow::closeEvent(QCloseEvent *event) { } -void cImageWindow::setDefaultMaxXY(int defaultmaxx, int defaultmaxy, int defaultpixelsizex, int defaultpixelsizey, eVendorType vendor) { +void cImageWindow::setDefaultValues(string imzmlfilename, int defaultmaxx, int defaultmaxy, int defaultpixelsizex, int defaultpixelsizey, eVendorType vendor) { + this->imzmlfilename = imzmlfilename; this->defaultmaxx = defaultmaxx; this->defaultmaxy = defaultmaxy; this->defaultpixelsizex = defaultpixelsizex; this->defaultpixelsizey = defaultpixelsizey; this->vendor = vendor; imagewindowwidget->setDefaultMaxXY(defaultmaxx, defaultmaxy, defaultpixelsizex, defaultpixelsizey, vendor); + + string settingsfile = imzmlfilename; + if (settingsfile.rfind('.') == string::npos) { + return; + } + settingsfile = settingsfile.substr(0, settingsfile.rfind('.')); + settingsfile += ".layers"; + + lastdirlayersfile = settingsfile.c_str(); + layersfileloaded = false; + + QString shortname = getShortFileName(imzmlfilename).c_str(); + ((QLabel *)layerslayout->itemAtPosition(0, 7)->widget())->setText(shortname); + + setWindowTitle(editorname); } @@ -647,6 +760,7 @@ void cImageWindow::addLayer(QString name) { layerlabel->setText(name); QSlider* layerslider = new QSlider(Qt::Horizontal); + layerslider->setMinimumWidth(100); layerslider->setTickPosition(QSlider::TicksBelow); layerslider->setRange(0, 100); layerslider->setSingleStep(1); @@ -664,16 +778,23 @@ void cImageWindow::addLayer(QString name) { layerzvalue->setSingleStep(1); if (layerscount == 0) { - layerzvalue->setValue(2); - } - else if (layerscount == 1) { - layerzvalue->setValue(1); + layerzvalue->setValue(500); } else { - layerzvalue->setValue(layerscount + 1); + layerzvalue->setValue(layerscount); } layerzvalue->setToolTip("Order of Layer"); + QLabel* layerdescription = new QLabel(); + + QPushButton* layerclearbutton = new QPushButton("x"); + layerclearbutton->setToolTip("Clear Layer"); + layerclearbutton->setFixedWidth(25); + + if (layerscount == 0) { + layerclearbutton->setDisabled(true); + } + // the ownership is taken by QGridLayout layerslayout->addWidget(layerradiobutton, layerscount, 0); layerslayout->addWidget(layercheckbox, layerscount, 1); @@ -681,6 +802,8 @@ void cImageWindow::addLayer(QString name) { layerslayout->addWidget(layerslider, layerscount, 3); layerslayout->addWidget(layerspinbox, layerscount, 4); layerslayout->addWidget(layerzvalue, layerscount, 5); + layerslayout->addWidget(layerclearbutton, layerscount, 6); + layerslayout->addWidget(layerdescription, layerscount, 7); connect(layerspinbox, SIGNAL(valueChanged(int)), layerslider, SLOT(setValue(int))); connect(layerslider, SIGNAL(valueChanged(int)), layerspinbox, SLOT(setValue(int))); @@ -692,7 +815,9 @@ void cImageWindow::addLayer(QString name) { connect(layerzvalue, SIGNAL(valueChanged(int)), this, SLOT(layerZValueChangedSlot(int))); - emit layerChanged(layerscount, layercheckbox->isChecked(), layerspinbox->value(), layerzvalue->value()); + connect(layerclearbutton, SIGNAL(released()), this, SLOT(clearLayer())); + + emit layerChanged(layerscount, layercheckbox->isChecked(), layerspinbox->value(), layerzvalue->value(), redrawenabled); layerscount++; } @@ -736,7 +861,7 @@ void cImageWindow::applyGlobalPreferences(cGlobalPreferences* globalpreferences) void cImageWindow::colorSpinBoxes(int layerid) { - if ((eLayerType)layerid == layer_compounds) { + if (layerid == 0) { xfrom->setStyleSheet("QSpinBox { background-color: lime; }"); xto->setStyleSheet("QSpinBox { background-color: lime; }"); yfrom->setStyleSheet("QSpinBox { background-color: lime; }"); @@ -749,7 +874,7 @@ void cImageWindow::colorSpinBoxes(int layerid) { yto->setStyleSheet("QSpinBox { background-color: white; }"); } - if ((eLayerType)layerid == layer_optical_image) { + if (layerid == 1) { leftshift->setStyleSheet("QSpinBox { background-color: lime; }"); topshift->setStyleSheet("QSpinBox { background-color: lime; }"); maxx->setStyleSheet("QSpinBox { background-color: lime; }"); @@ -766,7 +891,7 @@ void cImageWindow::colorSpinBoxes(int layerid) { pixelsizeyspinbox->setStyleSheet("QSpinBox { background-color: white; }"); } - if ((eLayerType)layerid == layer_histology_image) { + if (layerid == 2) { histologyx->setStyleSheet("QSpinBox { background-color: lime; }"); histologyy->setStyleSheet("QSpinBox { background-color: lime; }"); histologywidth->setStyleSheet("QSpinBox { background-color: lime; }"); @@ -781,7 +906,7 @@ void cImageWindow::colorSpinBoxes(int layerid) { histologyangle->setStyleSheet("QDoubleSpinBox { background-color: white; }"); } - if (((eLayerType)layerid >= layer_microscopy_navigation_image) && (((eLayerType)layerid < layer_end))) { + if (layerid >= 3) { microscopyx->setStyleSheet("QDoubleSpinBox { background-color: lime; }"); microscopyy->setStyleSheet("QDoubleSpinBox { background-color: lime; }"); microscopywidth->setStyleSheet("QDoubleSpinBox { background-color: lime; }"); @@ -799,7 +924,17 @@ void cImageWindow::colorSpinBoxes(int layerid) { } +void cImageWindow::setNavigationLayer(int layer, int navigation) { + microscopylayers[layer].navigationlayer = navigation; + imagewindowwidget->setNavigationLayer(layer, navigation); +} + + void cImageWindow::keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Control) { + imagewindowwidget->setKeepAspectRatio(true); + } + if ((event->key() == Qt::Key_Enter) || (event->key() == Qt::Key_Return)) { if (xfrom->hasFocus() || xto->hasFocus() || yfrom->hasFocus() || yto->hasFocus()) { @@ -811,11 +946,29 @@ void cImageWindow::keyPressEvent(QKeyEvent *event) { } } + + event->accept(); +} + + +void cImageWindow::keyReleaseEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Control) { + imagewindowwidget->setKeepAspectRatio(false); + } + event->accept(); } void cImageWindow::closeWindow() { + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, editorname, "Save changes ?", QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::Yes) { + saveascalled = true; + saveLayers(); + } + hide(); } @@ -824,19 +977,15 @@ void cImageWindow::selectImageType() { QStringList imagetypes; imagetypes << "Optical Image"; imagetypes << "Histology Image"; -#ifdef MICROSCOPY_IMAGES imagetypes << "Microscopy Image (navigation)"; - imagetypes << "Microscopy Image 1"; - imagetypes << "Microscopy Image 2"; - imagetypes << "Microscopy Image 3"; - imagetypes << "Microscopy Image 4"; - imagetypes << "Microscopy Image 5"; - imagetypes << "Microscopy Image 6"; - imagetypes << "Microscopy Image 7"; - imagetypes << "Microscopy Image 8"; - imagetypes << "Microscopy Image 9"; - imagetypes << "Microscopy Image 10"; -#endif + + QString microscopylayername = "Microscopy Image "; + QString tmpname; + int size = (int)microscopylayers.size(); + for (int i = 0; i < size - 4; i++) { + tmpname = microscopylayername + QVariant(i + 1).toString(); + imagetypes << tmpname; + } QInputDialog input; input.setInputMode(QInputDialog::TextInput); @@ -844,6 +993,8 @@ void cImageWindow::selectImageType() { input.setComboBoxItems(imagetypes); input.setWindowTitle("Open Image..."); input.setLabelText("Select Image Type:"); + input.setWindowIcon(QIcon(":/images/icons/image_open.png")); + input.resize(300, 400); connect(&input, SIGNAL(textValueSelected(const QString &)), this, SLOT(imageTypeSelected(const QString &))); @@ -855,52 +1006,44 @@ void cImageWindow::imageTypeSelected(const QString &s) { if (s.compare("Optical Image") == 0) { openOpticalImage(); } + if (s.compare("Histology Image") == 0) { openHistologyImage(); } + if (s.compare("Microscopy Image (navigation)") == 0) { - openMicroscopyImage(layer_microscopy_navigation_image, s); - } - if (s.compare("Microscopy Image 1") == 0) { - openMicroscopyImage(layer_microscopy_image_1, s); - } - if (s.compare("Microscopy Image 2") == 0) { - openMicroscopyImage(layer_microscopy_image_2, s); - } - if (s.compare("Microscopy Image 3") == 0) { - openMicroscopyImage(layer_microscopy_image_3, s); - } - if (s.compare("Microscopy Image 4") == 0) { - openMicroscopyImage(layer_microscopy_image_4, s); + openMicroscopyImage(3, s); } - if (s.compare("Microscopy Image 5") == 0) { - openMicroscopyImage(layer_microscopy_image_5, s); - } - if (s.compare("Microscopy Image 6") == 0) { - openMicroscopyImage(layer_microscopy_image_6, s); - } - if (s.compare("Microscopy Image 7") == 0) { - openMicroscopyImage(layer_microscopy_image_7, s); - } - if (s.compare("Microscopy Image 8") == 0) { - openMicroscopyImage(layer_microscopy_image_8, s); - } - if (s.compare("Microscopy Image 9") == 0) { - openMicroscopyImage(layer_microscopy_image_9, s); - } - if (s.compare("Microscopy Image 10") == 0) { - openMicroscopyImage(layer_microscopy_image_10, s); + + QString microscopylayername = "Microscopy Image "; + QString tmpname; + int size = (int)microscopylayers.size(); + for (int i = 0; i < size - 4; i++) { + tmpname = microscopylayername + QVariant(i + 1).toString(); + if (s.compare(tmpname) == 0) { + openMicroscopyImage(i + 4, s); + } } } void cImageWindow::openOpticalImage() { - QString filename = QFileDialog::getOpenFileName(this, tr("Open Optical Image ..."), lastdiropticalimage, tr("Image Files (*.jpg *.jpeg *.png *.tif *.tiff *.bmp *.gif)")); + QString filename = QFileDialog::getOpenFileName(this, tr("Open Optical Image ..."), lastdiropticalimage, tr("Image Files (*.tif *.tiff *.jpg *.jpeg *.bmp *.png *.gif)")); + reopenOpticalImage(filename); +} + +void cImageWindow::reopenOpticalImage(QString filename) { if (!filename.isEmpty()) { lastdiropticalimage = filename; - image->load(filename); + if (!image->load(filename)) { + QMessageBox msgBox; + QString errstr = "The image cannot be opened."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } leftshift->setValue(0); topshift->setValue(0); @@ -908,27 +1051,46 @@ void cImageWindow::openOpticalImage() { maxy->setValue(defaultmaxy); pixelsizexspinbox->setValue(defaultpixelsizex); pixelsizeyspinbox->setValue(defaultpixelsizey); - + setMaxButtonReleased(); imagewindowwidget->setOpticalImage(image); - ((QCheckBox *)layerslayout->itemAtPosition((int)layer_optical_image, 1)->widget())->setChecked(true); + ((QCheckBox *)layerslayout->itemAtPosition(1, 1)->widget())->setChecked(true); + + QString shortname = getShortFileName(filename.toStdString()).c_str(); + ((QLabel *)layerslayout->itemAtPosition(1, 7)->widget())->setText(shortname); } } void cImageWindow::openHistologyImage() { - QString filename = QFileDialog::getOpenFileName(this, tr("Open Histology Image ..."), lastdirhistologyimage, tr("Image Files (*.jpg *.jpeg *.png *.tif *.tiff *.bmp *.gif)")); + QString filename = QFileDialog::getOpenFileName(this, tr("Open Histology Image ..."), lastdirhistologyimage, tr("Image Files (*.tif *.tiff *.jpg *.jpeg *.bmp *.png *.gif)")); + reopenHistologyImage(filename); +} + +void cImageWindow::reopenHistologyImage(QString filename) { if (!filename.isEmpty()) { lastdirhistologyimage = filename; - histologyimage->load(filename); + if (!histologyimage->load(filename)) { + QMessageBox msgBox; + QString errstr = "The image cannot be opened."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + checkLoadedImage(histologyimage); + imagewindowwidget->setHistologyImage(histologyimage); - ((QRadioButton *)layerslayout->itemAtPosition((int)layer_histology_image, 0)->widget())->setChecked(true); - ((QCheckBox *)layerslayout->itemAtPosition((int)layer_histology_image, 1)->widget())->setChecked(true); + ((QRadioButton *)layerslayout->itemAtPosition(2, 0)->widget())->setChecked(true); + ((QCheckBox *)layerslayout->itemAtPosition(2, 1)->widget())->setChecked(true); + + QString shortname = getShortFileName(filename.toStdString()).c_str(); + ((QLabel *)layerslayout->itemAtPosition(2, 7)->widget())->setText(shortname); histologyx->blockSignals(true); histologyy->blockSignals(true); @@ -953,7 +1115,7 @@ void cImageWindow::openHistologyImage() { } -bool cImageWindow::parseMicroscopyImage(QString& filename, double& pixelwidth, double& pixelheight, int& resolutionx, int& resolutiony, double& stagex, double& stagey) { +bool cImageWindow::parseMicroscopyImage(QString& filename, double& pixelwidth, double& pixelheight, int& resolutionx, int& resolutiony, double& realwidth, double& stagex, double& stagey) { ifstream is; char buffer; bool tags = false; @@ -1024,6 +1186,14 @@ bool cImageWindow::parseMicroscopyImage(QString& filename, double& pixelwidth, d } } + pos = desc.find("[Image]"); + if (pos != string::npos) { + pos = desc.find("MagCanvasRealWidth=", pos); + if (pos != string::npos) { + sscanf_s(desc.substr(pos + 19).c_str(), "%lf", &realwidth); + } + } + pos = desc.find("[Stage]"); if (pos != string::npos) { pos = desc.find("StageX=", pos); @@ -1046,276 +1216,1260 @@ bool cImageWindow::parseMicroscopyImage(QString& filename, double& pixelwidth, d } -void cImageWindow::openMicroscopyImage(eLayerType layer, const QString &layername) { +void cImageWindow::openMicroscopyImage(int layer, const QString &layername) { QString title = "Open " + layername + " ..."; - QString filename; - filename = QFileDialog::getOpenFileName(this, tr(title.toStdString().c_str()), lastdirmicroscopyimage, tr("Image Files (*.jpg *.jpeg *.png *.tif *.tiff *.bmp *.gif)")); + string imagetypes = "Image Files (*.tif *.tiff *.jpg *.jpeg *.bmp *.png *.gif *.lif)"; - if (!filename.isEmpty()) { - lastdirmicroscopyimage = filename; + QString filename = QFileDialog::getOpenFileName(this, tr(title.toStdString().c_str()), lastdirmicroscopyimage, tr(imagetypes.c_str())); - int microscopycountx, microscopycounty; - double microscopypixelwidth, microscopypixelheight, stagex, stagey; + if ((filename.toStdString().size() > 4) && (filename.toStdString().substr(filename.toStdString().size() - 4).compare(".lif") == 0)) { + lastdirmicroscopyimage = filename; - if (parseMicroscopyImage(filename, microscopypixelwidth, microscopypixelheight, microscopycountx, microscopycounty, stagex, stagey)) { - QImage image; - image.load(filename); + vector parsedmetadata; + readLifMetadata(filename.toStdString(), parsedmetadata); - *microscopylayers[layer].image = image.copy(0, 0, microscopycountx, microscopycounty); - imagewindowwidget->setMicroscopyImage(layer, microscopylayers[layer].image); + if (parsedmetadata.size() == 0) { + QMessageBox msgBox; + QString errstr = "The selected LIF file does not contain any image !"; + msgBox.setText(errstr); + msgBox.exec(); + return; + } - ((QRadioButton *)layerslayout->itemAtPosition((int)layer, 0)->widget())->setChecked(true); - ((QCheckBox *)layerslayout->itemAtPosition((int)layer, 1)->widget())->setChecked(true); + int imagepos = -1; - microscopylayers[layer].defaultwidth = (double)microscopycountx * microscopypixelwidth * 1000000.0; - microscopylayers[layer].defaultheight = (double)microscopycounty * microscopypixelheight * 1000000.0; + if (parsedmetadata.size() == 1) { + imagepos = 0; + } - microscopylayers[layer].stagex = stagex; - microscopylayers[layer].stagey = stagey; + if (parsedmetadata.size() > 1) { + QStringList items; + QString tmpname; + + for (int i = 0; i < (int)parsedmetadata.size(); i++) { + tmpname = QVariant(parsedmetadata[i].magnification).toString(); + tmpname += "x, "; + tmpname += parsedmetadata[i].imagename.c_str(); + //if (parsedmetadata[i].microscopytype == 1) { + // if (parsedmetadata[i].luts.size() == 1) { + // tmpname += ", "; + // tmpname += parsedmetadata[i].luts[0].c_str(); + // } + // if (parsedmetadata[i].luts.size() > 1) { + // tmpname += ", number of luts: "; + // tmpname += QVariant((int)parsedmetadata[i].luts.size()).toString(); + // } + //} + items << tmpname; + } - microscopyDefaultButtonReleased(); + QInputDialog input; + input.setInputMode(QInputDialog::TextInput); + input.setOptions(QInputDialog::UseListViewForComboBoxItems); + input.setComboBoxItems(items); + input.setWindowTitle("Open Image..."); + input.setLabelText("Select Image:"); + input.setWindowIcon(QIcon(":/images/icons/image_open.png")); + input.resize(300, 400); + + if (input.exec()) { + for (int i = 0; i < items.size(); i++) { + if (input.textValue().compare(items[i]) == 0) { + imagepos = i; + break; + } + } + } } - else { - microscopylayers[layer].image->load(filename); - imagewindowwidget->setMicroscopyImage(layer, microscopylayers[layer].image); - - ((QRadioButton *)layerslayout->itemAtPosition((int)layer, 0)->widget())->setChecked(true); - ((QCheckBox *)layerslayout->itemAtPosition((int)layer, 1)->widget())->setChecked(true); - microscopylayers[layer].defaultwidth = microscopylayers[layer].image->width(); - microscopylayers[layer].defaultheight = microscopylayers[layer].image->height(); + if (imagepos == -1) { + return; + } - microscopylayers[layer].stagex = 0; - microscopylayers[layer].stagex = 0; + QInputDialog minthreshold; + minthreshold.setInputMode(QInputDialog::IntInput); + minthreshold.setIntMinimum(0); + minthreshold.setIntMaximum(255); + minthreshold.setIntValue(0); + minthreshold.setWindowTitle("Open Image..."); + minthreshold.setLabelText("Noise Threshold:"); + minthreshold.setWindowIcon(QIcon(":/images/icons/image_open.png")); + + if (!minthreshold.exec()) { + return; + } - microscopyDefaultButtonReleased(); - - QMessageBox msgBox; - QString errstr = "The microscopy image does not include any metadata.\nThe width and height of the image must be set up manually !"; - msgBox.setText(errstr); - msgBox.exec(); + QInputDialog maxthreshold; + maxthreshold.setInputMode(QInputDialog::IntInput); + maxthreshold.setIntMinimum(0); + maxthreshold.setIntMaximum(255); + maxthreshold.setIntValue(255); + maxthreshold.setWindowTitle("Open Image..."); + maxthreshold.setLabelText("Signal Threshold:"); + maxthreshold.setWindowIcon(QIcon(":/images/icons/image_open.png")); + + if (!maxthreshold.exec()) { + return; } - - } -} + microscopylayers[layer].thresholdmin = minthreshold.intValue(); + microscopylayers[layer].thresholdmax = maxthreshold.intValue(); -void cImageWindow::saveImage() { - QString filename = QFileDialog::getSaveFileName(this, tr("Save Image ..."), lastdirexportimage, "PNG Files (*.png)"); + openLifImage(filename.toStdString(), layer, parsedmetadata[imagepos], true); - if (!filename.isEmpty()) { - lastdirexportimage = filename; - imagewindowwidget->getImage().save(filename, "PNG"); - } -} + //parsedmetadata[imagepos].print(); + setNavigationLayer(layer, layer/*3*/); -void cImageWindow::setFilterOptionsSlot(vector coordinateinfo, bool operatortype, string columnname1, string comparatorname1, string filterstring1, string columnname2, string comparatorname2, string filterstring2, bool casesensitive, bool wholeword) { - imagewindowwidget->setFilterOptions(coordinateinfo, operatortype, columnname1, comparatorname1, filterstring1, columnname2, comparatorname2, filterstring2, casesensitive, wholeword); + microscopyDefaultButtonReleased(); + } + else { + reopenMicroscopyImage(layer, filename, false); + } } -void cImageWindow::setMaxButtonReleased() { - imagewindowwidget->setCorrelationValues(leftshift->value(), topshift->value(), maxx->value(), maxy->value(), pixelsizexspinbox->value(), pixelsizeyspinbox->value()); - resetregionbutton->click(); -} +void cImageWindow::reopenMicroscopyImage(int layer, QString filename, bool reopen) { + if (!filename.isEmpty()) { + if (!reopen) { + lastdirmicroscopyimage = filename; + } + int microscopycountx, microscopycounty; + double microscopypixelwidth, microscopypixelheight, realwidth, stagex, stagey; -void cImageWindow::setDefaultButtonReleased() { - leftshift->setValue(0); - topshift->setValue(0); - maxx->setValue(defaultmaxx); - maxy->setValue(defaultmaxy); - pixelsizexspinbox->setValue(defaultpixelsizex); - pixelsizeyspinbox->setValue(defaultpixelsizey); - imagewindowwidget->setCorrelationValues(leftshift->value(), topshift->value(), maxx->value(), maxy->value(), pixelsizexspinbox->value(), pixelsizeyspinbox->value()); - resetregionbutton->click(); -} + microscopylayers[layer].sourcename = filename; + microscopylayers[layer].imagename = filename; + QString description = getShortFileName(filename.toStdString()).c_str(); -void cImageWindow::setRegionButtonReleased() { - imagewindowwidget->setSelectedRegion(xfrom->value(), xto->value(), yfrom->value(), yto->value()); - emit updateSummaryPeaksTableFilter(xfrom->value(), xto->value(), yfrom->value(), yto->value()); -} + if (parseMicroscopyImage(filename, microscopypixelwidth, microscopypixelheight, microscopycountx, microscopycounty, realwidth, stagex, stagey)) { + QImage image; + if (!image.load(filename)) { + QMessageBox msgBox; + QString errstr = "The image cannot be opened."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } -void cImageWindow::histologyChanged() { - imagewindowwidget->setHistologyPosition(histologyx->value(), histologyy->value(), histologywidth->value(), histologyheight->value(), histologyangle->value()); - imagewindowwidget->redraw(); -} + *microscopylayers[layer].image = image.copy(0, 0, microscopycountx, microscopycounty); + checkLoadedImage(microscopylayers[layer].image); -void cImageWindow::histologyPositionChanged(int value) { - histologyChanged(); -} + imagewindowwidget->setMicroscopyImage(layer, microscopylayers[layer].image); + ((QRadioButton *)layerslayout->itemAtPosition(layer, 0)->widget())->setChecked(true); + ((QCheckBox *)layerslayout->itemAtPosition(layer, 1)->widget())->setChecked(true); -void cImageWindow::histologyAngleChanged(double value) { - histologyChanged(); -} + int magnification = 0; + if ((double)microscopycountx * microscopypixelwidth > 0) { + magnification = round(realwidth / ((double)microscopycountx * microscopypixelwidth)); + } + if (magnification > 0) { + description = QVariant(magnification).toString() + "x, " + description; + } + ((QLabel *)layerslayout->itemAtPosition(layer, 7)->widget())->setText(description); -void cImageWindow::microscopyChanged() { - if ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end)) { - microscopylayers[activelayer].x = microscopyx->value(); - microscopylayers[activelayer].y = microscopyy->value(); - microscopylayers[activelayer].width = microscopywidth->value(); - microscopylayers[activelayer].height = microscopyheight->value(); - microscopylayers[activelayer].angle = microscopyangle->value(); - imagewindowwidget->setMicroscopyPosition((eLayerType)activelayer, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); - - if (activelayer == layer_microscopy_navigation_image) { - double widthratio, heightratio; - for (int i = layer_microscopy_navigation_image + 1; i < layer_end; i++) { - if (!microscopylayers[i].image->size().isEmpty()) { - widthratio = microscopylayers[layer_microscopy_navigation_image].width / microscopylayers[layer_microscopy_navigation_image].defaultwidth; - heightratio = microscopylayers[layer_microscopy_navigation_image].height / microscopylayers[layer_microscopy_navigation_image].defaultheight; - - microscopylayers[i].x = microscopylayers[layer_microscopy_navigation_image].x + (microscopylayers[layer_microscopy_navigation_image].width - microscopylayers[i].defaultwidth * widthratio) / 2.0 + (microscopylayers[i].stagex - microscopylayers[layer_microscopy_navigation_image].stagex) * widthratio * 1000000.0; - microscopylayers[i].y = microscopylayers[layer_microscopy_navigation_image].y + (microscopylayers[layer_microscopy_navigation_image].height - microscopylayers[i].defaultheight * heightratio) / 2.0 + (microscopylayers[i].stagey - microscopylayers[layer_microscopy_navigation_image].stagey) * heightratio * 1000000.0; - microscopylayers[i].width = microscopylayers[i].defaultwidth * widthratio; - microscopylayers[i].height = microscopylayers[i].defaultheight * heightratio; - imagewindowwidget->setMicroscopyPosition((eLayerType)i, microscopylayers[i].x, microscopylayers[i].y, microscopylayers[i].width, microscopylayers[i].height, microscopylayers[i].angle); - } - } - } + if (!reopen) { + microscopylayers[layer].defaultwidth = (double)microscopycountx * microscopypixelwidth * 1000000.0; + microscopylayers[layer].defaultheight = (double)microscopycounty * microscopypixelheight * 1000000.0; - imagewindowwidget->redraw(); - } -} + microscopylayers[layer].stagex = stagex; + microscopylayers[layer].stagey = stagey; + microscopylayers[layer].type = 0; -void cImageWindow::microscopyDefaultButtonReleased() { - if ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end)) { - if (activelayer == layer_microscopy_navigation_image) { - microscopylayers[activelayer].x = 0; - microscopylayers[activelayer].y = 0; - microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; - microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; - microscopylayers[activelayer].angle = 0; - imagewindowwidget->setMicroscopyPosition((eLayerType)activelayer, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); - - for (int i = layer_microscopy_navigation_image + 1; i < layer_end; i++) { - if (!microscopylayers[i].image->size().isEmpty()) { - microscopylayers[i].x = microscopylayers[layer_microscopy_navigation_image].x + (microscopylayers[layer_microscopy_navigation_image].width - microscopylayers[i].defaultwidth) / 2.0 + (microscopylayers[i].stagex - microscopylayers[layer_microscopy_navigation_image].stagex) * 1000000.0; - microscopylayers[i].y = microscopylayers[layer_microscopy_navigation_image].y + (microscopylayers[layer_microscopy_navigation_image].height - microscopylayers[i].defaultheight) / 2.0 + (microscopylayers[i].stagey - microscopylayers[layer_microscopy_navigation_image].stagey) * 1000000.0; - microscopylayers[i].width = microscopylayers[i].defaultwidth; - microscopylayers[i].height = microscopylayers[i].defaultheight; - microscopylayers[i].angle = 0; - imagewindowwidget->setMicroscopyPosition((eLayerType)i, microscopylayers[i].x, microscopylayers[i].y, microscopylayers[i].width, microscopylayers[i].height, microscopylayers[i].angle); - } + microscopyDefaultButtonReleased(); } } + else { + + if (!microscopylayers[layer].image->load(filename)) { + QMessageBox msgBox; + QString errstr = "The image cannot be opened."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } - if ((activelayer > layer_microscopy_navigation_image) && (activelayer < layer_end)) { - microscopylayers[activelayer].x = microscopylayers[layer_microscopy_navigation_image].x + (microscopylayers[layer_microscopy_navigation_image].width - microscopylayers[activelayer].defaultwidth) / 2.0 + (microscopylayers[activelayer].stagex - microscopylayers[layer_microscopy_navigation_image].stagex) * 1000000.0; - microscopylayers[activelayer].y = microscopylayers[layer_microscopy_navigation_image].y + (microscopylayers[layer_microscopy_navigation_image].height - microscopylayers[activelayer].defaultheight) / 2.0 + (microscopylayers[activelayer].stagey - microscopylayers[layer_microscopy_navigation_image].stagey) * 1000000.0; - microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; - microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; - microscopylayers[activelayer].angle = microscopylayers[layer_microscopy_navigation_image].angle; - imagewindowwidget->setMicroscopyPosition((eLayerType)activelayer, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); - } + microscopylayers[layer].reduced = checkLoadedImage(microscopylayers[layer].image); - microscopyx->blockSignals(true); - microscopyy->blockSignals(true); - microscopywidth->blockSignals(true); - microscopyheight->blockSignals(true); - microscopyangle->blockSignals(true); + imagewindowwidget->setMicroscopyImage(layer, microscopylayers[layer].image); - microscopyx->setValue(microscopylayers[activelayer].x); - microscopyy->setValue(microscopylayers[activelayer].y); - microscopywidth->setValue(microscopylayers[activelayer].width); - microscopyheight->setValue(microscopylayers[activelayer].height); - microscopyangle->setValue(microscopylayers[activelayer].angle); + ((QRadioButton *)layerslayout->itemAtPosition(layer, 0)->widget())->setChecked(true); + ((QCheckBox *)layerslayout->itemAtPosition(layer, 1)->widget())->setChecked(true); - microscopyx->blockSignals(false); - microscopyy->blockSignals(false); - microscopywidth->blockSignals(false); - microscopyheight->blockSignals(false); - microscopyangle->blockSignals(false); + if (!reopen) { - imagewindowwidget->redraw(); - } -} + QMessageBox::StandardButton reply; + QString s = "The microscopy image does not include any metadata.\nDo you want to load the metadata from a LIF file ?\n\nYes = Select the LIF file.\nNo = Set up the image width and height manually."; + reply = QMessageBox::question(this, "Load metadata ?", s, QMessageBox::Yes | QMessageBox::No); -void cImageWindow::microscopyGoButtonReleased() { - if ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end)) { - imagewindowwidget->goToMicroscopyPosition((eLayerType)activelayer); - } -} + QString liffile; + vector parsedmetadata; + microscopylayers[layer].defaultwidth = microscopylayers[layer].image->width(); + microscopylayers[layer].defaultheight = microscopylayers[layer].image->height(); -void cImageWindow::microscopyPositionChanged(double value) { - microscopyChanged(); -} + microscopylayers[layer].stagex = 0; + microscopylayers[layer].stagey = 0; + microscopylayers[layer].type = 1; -void cImageWindow::microscopyAngleChanged(double value) { - microscopyChanged(); -} + if (reply == QMessageBox::Yes) { + liffile = QFileDialog::getOpenFileName(this, tr("Select LIF file ..."), lastdirmicroscopyimage, tr("LIF Files (*.lif)")); + if (!liffile.isEmpty()) { -void cImageWindow::showHTMLDocumentation() { - #if OS_TYPE == WIN - QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/crossvis.html").absoluteFilePath())); - #else - QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/crossvis.html").absoluteFilePath())); - #endif -} + readLifMetadata(liffile.toStdString(), parsedmetadata); + string tmpimagename; + for (auto& it : parsedmetadata) { + tmpimagename = it.imagename; -void cImageWindow::updateSelection(int xmin, int xmax, int ymin, int ymax) { - xfrom->setValue(xmin); - xto->setValue(xmax); - yfrom->setValue(ymin); - yto->setValue(ymax); -} + if ((it.microscopytype == 1) && (it.luts.size() == 1) && (it.luts[0].size() > 0)) { + size_t lutcomma = it.imagename.rfind(','); + if (lutcomma != string::npos) { + tmpimagename = tmpimagename.substr(0, lutcomma); + } + } + if (microscopylayers[layer].sourcename.toStdString().find(tmpimagename) != string::npos) { + if (microscopylayers[layer].reduced || (!microscopylayers[layer].reduced && (microscopylayers[layer].image->width() == it.dimx) && (microscopylayers[layer].image->height() == it.dimy))) { + if (it.dim10 == 0) { + microscopylayers[layer].defaultwidth = it.width * 1000000.0; + microscopylayers[layer].defaultheight = it.height * 1000000.0; + + // move stagex/stagey from image center to top-left corner + if (it.tiles.size() == 1) { + microscopylayers[layer].stagex = max(0.0, it.tiles[0].posx - it.width / 2.0); + microscopylayers[layer].stagey = max(0.0, it.tiles[0].posy - it.height / 2.0); + } + else { + microscopylayers[layer].stagex = max(0.0, it.stageposx - it.width / 2.0); + microscopylayers[layer].stagey = max(0.0, it.stageposy - it.height / 2.0); + } + + if (it.magnification > 0) { + description = QVariant(it.magnification).toString() + "x, " + description; + } + + //if ((it.microscopytype == 1) && (it.luts.size() == 1) && (it.luts[0].size() > 0)) { + // description += ", "; + // description += it.luts[0].c_str(); + //} + + break; + } + } + } + } -void cImageWindow::clearSelection() { - xfrom->setValue(0); - yfrom->setValue(0); - xto->setValue(maxx->value()); - yto->setValue(maxy->value()); -} + } + } -void cImageWindow::resetSelection() { - clearSelection(); - imagewindowwidget->setSelectedRegion(xfrom->value(), xto->value(), yfrom->value(), yto->value()); - emit updateSummaryPeaksTableFilter(xfrom->value(), xto->value(), yfrom->value(), yto->value()); -} + setNavigationLayer(layer, 3); + microscopyDefaultButtonReleased(); -void cImageWindow::updatePointsArea(int xmin, int xmax, int ymin, int ymax) { - leftshift->setValue(xmin); - maxx->setValue(xmax); - topshift->setValue(ymin); - maxy->setValue(ymax); - setMaxButtonReleased(); -} + if ((reply == QMessageBox::Yes) && (liffile.isEmpty() || parsedmetadata.empty())) { + QMessageBox msgBox; + QString errstr = "The file does not include any metadata.\nThe image width and height must be set up manually !"; + msgBox.setText(errstr); + msgBox.exec(); + } + } -void cImageWindow::layerSpinBoxChangedSlot(int alpha) { - int row, column, rowSpan, columnSpan; - QSpinBox* spinbox = qobject_cast(sender()); + ((QLabel *)layerslayout->itemAtPosition(layer, 7)->widget())->setText(description); - layerslayout->getItemPosition(layerslayout->indexOf(spinbox), &row, &column, &rowSpan, &columnSpan); + } - emit layerChanged(row, ((QCheckBox *)layerslayout->itemAtPosition(row, 1)->widget())->isChecked(), alpha, ((QSpinBox *)layerslayout->itemAtPosition(row, 5)->widget())->value()); + } } -void cImageWindow::layerZValueChangedSlot(int zvalue) { - int row, column, rowSpan, columnSpan; - QSpinBox* spinbox = qobject_cast(sender()); - - layerslayout->getItemPosition(layerslayout->indexOf(spinbox), &row, &column, &rowSpan, &columnSpan); +void cImageWindow::clearLayers() { + redrawenabled = false; - emit layerChanged(row, ((QCheckBox *)layerslayout->itemAtPosition(row, 1)->widget())->isChecked(), ((QSpinBox *)layerslayout->itemAtPosition(row, 4)->widget())->value(), zvalue); -} + activelayer = 0; + imagewindowwidget->clearLayers(); + + int size = (int)microscopylayers.size(); + for (int i = 0; i < size; i++) { + ((QRadioButton *)layerslayout->itemAtPosition(i, 0)->widget())->setChecked(false); + ((QCheckBox *)layerslayout->itemAtPosition(i, 1)->widget())->setChecked(false); + ((QSlider *)layerslayout->itemAtPosition(i, 3)->widget())->setValue(100); + ((QSpinBox *)layerslayout->itemAtPosition(i, 4)->widget())->setValue(100); + + if (i == 0) { + ((QSpinBox *)layerslayout->itemAtPosition(i, 5)->widget())->setValue(500); + } + else { + ((QSpinBox *)layerslayout->itemAtPosition(i, 5)->widget())->setValue(i); + } + + ((QLabel *)layerslayout->itemAtPosition(i, 7)->widget())->setText(""); + + microscopylayers[i].clear(); + } + + leftshift->setValue(0); + topshift->setValue(0); + maxx->setValue(500); + maxy->setValue(500); + pixelsizexspinbox->setValue(100); + pixelsizeyspinbox->setValue(100); + + setMaxButtonReleased(); + + //actionFlipHistologyHorizontal->blockSignals(true); + //actionFlipHistologyVertical->blockSignals(true); + histologyx->blockSignals(true); + histologyy->blockSignals(true); + histologywidth->blockSignals(true); + histologyheight->blockSignals(true); + histologyangle->blockSignals(true); + + actionFlipHistologyHorizontal->setChecked(false); + actionFlipHistologyVertical->setChecked(false); + + histologyx->setValue(0); + histologyy->setValue(0); + histologywidth->setValue(0); + histologyheight->setValue(0); + histologyangle->setValue(0); + + //actionFlipHistologyHorizontal->blockSignals(false); + //actionFlipHistologyVertical->blockSignals(false); + histologyx->blockSignals(false); + histologyy->blockSignals(false); + histologywidth->blockSignals(false); + histologyheight->blockSignals(false); + histologyangle->blockSignals(false); + + histologyChanged(); + + actionFlipMicroscopyHorizontal->blockSignals(true); + actionFlipMicroscopyVertical->blockSignals(true); + microscopyx->blockSignals(true); + microscopyy->blockSignals(true); + microscopywidth->blockSignals(true); + microscopyheight->blockSignals(true); + microscopyangle->blockSignals(true); + microscopynavigationcombobox->blockSignals(true); + + actionFlipMicroscopyHorizontal->setChecked(false); + actionFlipMicroscopyVertical->setChecked(false); + + microscopyx->setValue(0); + microscopyy->setValue(0); + microscopywidth->setValue(0); + microscopyheight->setValue(0); + microscopyangle->setValue(0); + microscopynavigationcombobox->setCurrentIndex(0); + + actionFlipMicroscopyHorizontal->blockSignals(false); + actionFlipMicroscopyVertical->blockSignals(false); + microscopyx->blockSignals(false); + microscopyy->blockSignals(false); + microscopywidth->blockSignals(false); + microscopyheight->blockSignals(false); + microscopyangle->blockSignals(false); + microscopynavigationcombobox->blockSignals(false); + + redrawenabled = true; +} + + +void cImageWindow::updateMicroscopyNavigationCombobox(int numberofitems) { + QString layername = "Microscopy Image "; + QString tmpname = layername + "(nav.)"; + + microscopynavigationcombobox->blockSignals(true); + microscopynavigationcombobox->clear(); + microscopynavigationcombobox->insertItem(0, tmpname); + for (int i = 0; i < numberofitems - 4; i++) { + tmpname = layername + QVariant(i + 1).toString(); + microscopynavigationcombobox->insertItem(i + 1, tmpname); + } + microscopynavigationcombobox->blockSignals(false); +} + + +bool cImageWindow::checkLoadedImage(QImage* image) { + double checkw = image->width(); + double checkh = image->height(); + double maxrotationsize = sqrt(checkw * checkw + checkh * checkh); + + if (maxrotationsize == 0) { + return false; + } + + // can be increased up to max uint + double maximumsize = 18000.0; + double ratio = maximumsize / maxrotationsize; + + if (maxrotationsize > maximumsize) { + checkw = checkw * ratio; + checkh = checkh * ratio; + *image = image->scaled((int)checkw, (int)checkh, Qt::KeepAspectRatio); + return true; + } + + return false; +} + + +void cImageWindow::readLifImageOptical(string filename, cLifMetadata& metadata, QImage& image, bool enableprogress) { + if ((metadata.memoryblockoffsets.size() == 0) || (metadata.memoryblockoffsets[0] == 0) || (metadata.dimx == 0) || (metadata.dimy == 0) || (metadata.dimx > 32767) || (metadata.dimy > 32767)) { + return; + } + + int flipx = (metadata.tilescaninfoflipx == -1) ? metadata.flipx : metadata.tilescaninfoflipx; + int flipy = (metadata.tilescaninfoflipy == -1) ? metadata.flipy : metadata.tilescaninfoflipy; + + if (flipx != flipy) { + return; + } + + int x, y; + int r, g, b, value; + QRgb pixelcolor; + + ifstream is; + is.open(filename, ifstream::binary); + + if (!is.good()) { + return; + } + + is.seekg(metadata.memoryblockoffsets[0]); + + image = QImage(metadata.dimx, metadata.dimy, QImage::Format_RGB32); + + if (metadata.channels.size() != 3) { + // empty image + return; + } + + int lastdimy = 0; + + QProgressDialog progress("Loading image...", /*"Cancel"*/0, 0, metadata.dimy, this); + if (enableprogress) { + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + } + + for (unsigned i = 0; i < (unsigned)metadata.memoryblocksize; i++) { + if (!is.good()) { + break; + } + + value = is.get(); + + if (metadata.channels[i % 3] == red) { + r = value; + } + if (metadata.channels[i % 3] == green) { + g = value; + } + if (metadata.channels[i % 3] == blue) { + b = value; + } + + if (i % 3 == 2) { + x = (i / 3) % metadata.dimx; + y = (i / 3) / metadata.dimx; + + pixelcolor = qRgb(r, g, b); + + if (!flipx && !flipy) { + image.setPixel(x, y, pixelcolor); + } + + if (flipx && flipy) { + image.setPixel(metadata.dimx - 1 - x, metadata.dimy - 1 - y, pixelcolor); + } + + if (enableprogress) { + if (y != lastdimy) { + progress.setValue(y); + lastdimy = y; + } + } + } + } + + if (enableprogress) { + progress.setValue(metadata.dimy); + } +} + + +void cImageWindow::readLifImageFluorescence(string filename, cLifMetadata& metadata, QImage& image, int minthreshold, int maxthreshold, bool enableprogress) { + if ((metadata.memoryblockoffsets.size() == 0) || (metadata.memoryblockoffsets[0] == 0) || (metadata.dimx == 0) || (metadata.dimy == 0) || (metadata.dimx > 32767) || (metadata.dimy > 32767)) { + return; + } + + int flipx = (metadata.tilescaninfoflipx == -1) ? metadata.flipx : metadata.tilescaninfoflipx; + int flipy = (metadata.tilescaninfoflipy == -1) ? metadata.flipy : metadata.tilescaninfoflipy; + + if (flipx != flipy) { + return; + } + + int x, y; + int value; + QRgb pixelrgb; + QColor pixelclr; + + ifstream is; + is.open(filename, ifstream::binary); + + if (!is.good()) { + return; + } + + image = QImage(metadata.dimx, metadata.dimy, QImage::Format_RGB32); + + if ((metadata.channels.size() != metadata.luts.size()) || (metadata.channels.size() != 1)) { + // empty image + return; + } + + int offsetssize = (int)metadata.memoryblockoffsets.size(); + + QProgressDialog progress("Loading image...", /*"Cancel"*/0, 0, metadata.dimy * offsetssize, this); + if (enableprogress) { + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + } + + eChannelType currentchannel = gray; + if (metadata.luts[0].compare("Red") == 0) { + currentchannel = red; + } + if (metadata.luts[0].compare("Green") == 0) { + currentchannel = green; + } + if (metadata.luts[0].compare("Blue") == 0) { + currentchannel = blue; + } + + if (currentchannel == gray) { + // empty image + return; + } + + int lastdimy = 0; + + for (int i = 0; i < offsetssize; i++) { + + is.seekg(metadata.memoryblockoffsets[i]); + + for (unsigned j = 0; j < metadata.memoryblocksize; j++) { + if (!is.good()) { + break; + } + + value = is.get(); + + if (value < minthreshold) { + value = 0; + } + + if (value >= maxthreshold) { + value = 255; + } + + x = j % metadata.dimx; + y = j / metadata.dimx; + + if (i > 0) { + if (!flipx && !flipy) { + pixelclr = image.pixel(x, y); + } + + if (flipx && flipy) { + pixelclr = image.pixel(metadata.dimx - 1 - x, metadata.dimy - 1 - y); + } + } + + switch (currentchannel) { + case red: + if (i > 0) { + pixelrgb = qRgb(max(value, pixelclr.red()), 0, 0); + } + else { + pixelrgb = qRgb(value, 0, 0); + } + break; + case green: + if (i > 0) { + pixelrgb = qRgb(0, max(value, pixelclr.green()), 0); + } + else { + pixelrgb = qRgb(0, value, 0); + } + break; + case blue: + if (i > 0) { + pixelrgb = qRgb(0, 0, max(value, pixelclr.blue())); + } + else { + pixelrgb = qRgb(0, 0, value); + } + break; + default: + pixelrgb = qRgb(0, 0, 0); + break; + } + + if (!flipx && !flipy) { + image.setPixel(x, y, pixelrgb); + } + + if (flipx && flipy) { + image.setPixel(metadata.dimx - 1 - x, metadata.dimy - 1 - y, pixelrgb); + } + + if (enableprogress) { + if (y != lastdimy) { + progress.setValue(y + i * metadata.dimy); + lastdimy = y; + } + } + } + + } + + if (enableprogress) { + progress.setValue(metadata.dimy * offsetssize); + } +} + + +void cImageWindow::openLifImage(string liffilename, int layer, cLifMetadata& metadata, bool enableprogress) { + microscopylayers[layer].sourcename = liffilename.c_str(); + microscopylayers[layer].imagename = metadata.imagename.c_str(); + + QString description = metadata.imagename.c_str(); + + if (metadata.microscopytype == 1) { + readLifImageFluorescence(liffilename, metadata, *microscopylayers[layer].image, microscopylayers[layer].thresholdmin, microscopylayers[layer].thresholdmax, enableprogress); + } + else { + readLifImageOptical(liffilename, metadata, *microscopylayers[layer].image, enableprogress); + } + + microscopylayers[layer].reduced = checkLoadedImage(microscopylayers[layer].image); + + imagewindowwidget->setMicroscopyImage(layer, microscopylayers[layer].image); + + ((QRadioButton *)layerslayout->itemAtPosition(layer, 0)->widget())->setChecked(true); + ((QCheckBox *)layerslayout->itemAtPosition(layer, 1)->widget())->setChecked(true); + + microscopylayers[layer].defaultwidth = microscopylayers[layer].image->width(); + microscopylayers[layer].defaultheight = microscopylayers[layer].image->height(); + + microscopylayers[layer].stagex = 0; + microscopylayers[layer].stagey = 0; + + microscopylayers[layer].type = 1; + + if (metadata.dim10 == 0) { + microscopylayers[layer].defaultwidth = metadata.width * 1000000.0; + microscopylayers[layer].defaultheight = metadata.height * 1000000.0; + + // move stagex/stagey from image center to top-left corner + if (metadata.tiles.size() == 1) { + microscopylayers[layer].stagex = max(0.0, metadata.tiles[0].posx - metadata.width / 2.0); + microscopylayers[layer].stagey = max(0.0, metadata.tiles[0].posy - metadata.height / 2.0); + } + else { + microscopylayers[layer].stagex = max(0.0, metadata.stageposx - metadata.width / 2.0); + microscopylayers[layer].stagey = max(0.0, metadata.stageposy - metadata.height / 2.0); + } + + if (metadata.magnification > 0) { + description = QVariant(metadata.magnification).toString() + "x, " + description; + } + + //if ((metadata.microscopytype == 1) && (metadata.luts.size() == 1) && (metadata.luts[0].size() > 0)) { + // description += ", "; + // description += metadata.luts[0].c_str(); + //} + } + + ((QLabel *)layerslayout->itemAtPosition(layer, 7)->widget())->setText(description); +} + + +void cImageWindow::openImportDialog() { + importdialog.setFormValues(lastdirmicroscopyimage, (int)microscopylayers.size()); + + if (importdialog.exec() != QDialog::Accepted) { + importdialog.setFormValues(lastdirmicroscopyimage, (int)microscopylayers.size()); + return; + } + + int startfromindex; + int navigationindex; + QStringList tiffilenames; + QString liffilename; + + int layer; + + vector parsedmetadata; + + int tabindex = importdialog.getFormValues(startfromindex, tiffilenames, navigationindex, liffilename); + + int numberofimages = tiffilenames.size(); + bool lifopen = false; + + switch (tabindex) { + case 0: + if (tiffilenames.size() == 0) { + return; + } + break; + case 1: + readLifMetadata(liffilename.toStdString(), parsedmetadata); + + if (tiffilenames.size() == 0) { + if (parsedmetadata.size() == 0) { + return; + } + numberofimages = (int)parsedmetadata.size(); + lifopen = true; + } + break; + default: + break; + } + + + QProgressDialog progress("Importing images...", /*"Cancel"*/0, 0, numberofimages, this); + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + + switch (tabindex) { + case 0: + for (int i = 0; i < tiffilenames.size(); i++) { + reopenMicroscopyImage(startfromindex + 4 + i, tiffilenames[i], false); + progress.setValue(i + 1); + } + break; + case 1: + if (parsedmetadata.size() > 0) { + startfromindex += 4; + navigationindex += 3; + + for (int i = 0; i < numberofimages; i++) { + layer = startfromindex + i; + + if (layer >= microscopylayers.size()) { + QMessageBox msgBox; + QString errstr = "Not enough free layers ! Number of imported images: " + QVariant(i).toString() + "."; + msgBox.setText(errstr); + msgBox.exec(); + break; + } + + if (lifopen) { + microscopylayers[layer].thresholdmin = 0; + microscopylayers[layer].thresholdmax = 255; + + openLifImage(liffilename.toStdString(), layer, parsedmetadata[i], false); + } + else { + reopenMicroscopyImage(layer, tiffilenames[i], true); + + microscopylayers[layer].defaultwidth = microscopylayers[layer].image->width(); + microscopylayers[layer].defaultheight = microscopylayers[layer].image->height(); + + microscopylayers[layer].stagex = 0; + microscopylayers[layer].stagey = 0; + + microscopylayers[layer].type = 1; + + string tmpimagename; + for (auto& it : parsedmetadata) { + tmpimagename = it.imagename; + + if ((it.microscopytype == 1) && (it.luts.size() == 1) && (it.luts[0].size() > 0)) { + size_t lutcomma = it.imagename.rfind(','); + if (lutcomma != string::npos) { + tmpimagename = tmpimagename.substr(0, lutcomma); + } + } + + if (tiffilenames[i].toStdString().find(tmpimagename) != string::npos) { + if (microscopylayers[layer].reduced || (!microscopylayers[layer].reduced && (microscopylayers[layer].image->width() == it.dimx) && (microscopylayers[layer].image->height() == it.dimy))) { + if (it.dim10 == 0) { + microscopylayers[layer].defaultwidth = it.width * 1000000.0; + microscopylayers[layer].defaultheight = it.height * 1000000.0; + + // move stagex/stagey from image center to top-left corner + if (it.tiles.size() == 1) { + microscopylayers[layer].stagex = max(0.0, it.tiles[0].posx - it.width / 2.0); + microscopylayers[layer].stagey = max(0.0, it.tiles[0].posy - it.height / 2.0); + } + else { + microscopylayers[layer].stagex = max(0.0, it.stageposx - it.width / 2.0); + microscopylayers[layer].stagey = max(0.0, it.stageposy - it.height / 2.0); + } + + if (it.magnification > 0) { + QString description = ((QLabel *)layerslayout->itemAtPosition(layer, 7)->widget())->text(); + description = QVariant(it.magnification).toString() + "x, " + description; + ((QLabel *)layerslayout->itemAtPosition(layer, 7)->widget())->setText(description); + } + + break; + } + } + } + } + } + + setNavigationLayer(layer, navigationindex); + + microscopyDefaultButtonReleased(); + + progress.setValue(i + 1); + } + } + break; + default: + break; + } + + progress.setValue(numberofimages); +} + + +void cImageWindow::exportImage() { + QString filename = QFileDialog::getSaveFileName(this, tr("Export Image ..."), lastdirexportimage, "PNG Files (*.png)"); + + if (!filename.isEmpty()) { + lastdirexportimage = filename; + imagewindowwidget->getImage().save(filename, "PNG"); + } +} + + +void cImageWindow::setFilterOptionsSlot(vector coordinateinfo, bool operatortype, string columnname1, string comparatorname1, string filterstring1, string columnname2, string comparatorname2, string filterstring2, bool casesensitive, bool wholeword) { + imagewindowwidget->setFilterOptions(coordinateinfo, operatortype, columnname1, comparatorname1, filterstring1, columnname2, comparatorname2, filterstring2, casesensitive, wholeword); +} + + +void cImageWindow::setMaxButtonReleased() { + imagewindowwidget->setCorrelationValues(leftshift->value(), topshift->value(), maxx->value(), maxy->value(), pixelsizexspinbox->value(), pixelsizeyspinbox->value()); + resetregionbutton->click(); +} + + +void cImageWindow::setDefaultButtonReleased() { + leftshift->setValue(0); + topshift->setValue(0); + maxx->setValue(defaultmaxx); + maxy->setValue(defaultmaxy); + pixelsizexspinbox->setValue(defaultpixelsizex); + pixelsizeyspinbox->setValue(defaultpixelsizey); + imagewindowwidget->setCorrelationValues(leftshift->value(), topshift->value(), maxx->value(), maxy->value(), pixelsizexspinbox->value(), pixelsizeyspinbox->value()); + resetregionbutton->click(); +} + + +void cImageWindow::setRegionButtonReleased() { + imagewindowwidget->setSelectedRegion(xfrom->value(), xto->value(), yfrom->value(), yto->value()); + emit updateSummaryPeaksTableFilter(xfrom->value(), xto->value(), yfrom->value(), yto->value()); +} + + +void cImageWindow::histologyChanged() { + imagewindowwidget->setHistologyPosition(histologyx->value(), histologyy->value(), histologywidth->value(), histologyheight->value(), histologyangle->value()); + imagewindowwidget->redraw(); +} + + +void cImageWindow::histologyPositionChanged(int value) { + histologyChanged(); +} + + +void cImageWindow::histologyAngleChanged(double value) { + histologyChanged(); +} + + +void cImageWindow::microscopyChanged() { + double lastnavigationangle = 0; + double widthratio, heightratio; + int size = (int)microscopylayers.size(); + + if (activelayer >= 3) { + if (activelayer == 3) { + lastnavigationangle = microscopylayers[activelayer].angle; + } + + microscopylayers[activelayer].flipx = actionFlipMicroscopyHorizontal->isChecked(); + microscopylayers[activelayer].flipy = actionFlipMicroscopyVertical->isChecked(); + microscopylayers[activelayer].x = microscopyx->value(); + microscopylayers[activelayer].y = microscopyy->value(); + microscopylayers[activelayer].width = microscopywidth->value(); + microscopylayers[activelayer].height = microscopyheight->value(); + microscopylayers[activelayer].angle = microscopyangle->value(); + + //if (microscopylayers[activelayer].flipx) { + // microscopylayers[activelayer].y = microscopylayers[microscopylayers[activelayer].navigationlayer].y + microscopylayers[microscopylayers[activelayer].navigationlayer].height - (microscopylayers[activelayer].y + microscopylayers[activelayer].height - microscopylayers[microscopylayers[activelayer].navigationlayer].y); + //} + + //if (microscopylayers[activelayer].flipy) { + // microscopylayers[activelayer].x = microscopylayers[microscopylayers[activelayer].navigationlayer].x + microscopylayers[microscopylayers[activelayer].navigationlayer].width - (microscopylayers[activelayer].x + microscopylayers[activelayer].width - microscopylayers[microscopylayers[activelayer].navigationlayer].x); + //} + + imagewindowwidget->setMicroscopyPosition(activelayer, microscopylayers[activelayer].flipx, microscopylayers[activelayer].flipy, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); + + if (activelayer == 3) { + if (microscopylayers[activelayer].type == 0) { + for (int i = 4; i < size; i++) { + if ((microscopylayers[i].navigationlayer == 3) && (!microscopylayers[i].image->size().isEmpty())) { + widthratio = microscopylayers[3].width / microscopylayers[3].defaultwidth; + heightratio = microscopylayers[3].height / microscopylayers[3].defaultheight; + + microscopylayers[i].flipx = microscopylayers[3].flipx; + microscopylayers[i].flipy = microscopylayers[3].flipy; + microscopylayers[i].x = microscopylayers[3].x + (microscopylayers[3].width - microscopylayers[i].defaultwidth * widthratio) / 2.0 + (microscopylayers[i].stagex - microscopylayers[3].stagex) * widthratio * 1000000.0; + microscopylayers[i].y = microscopylayers[3].y + (microscopylayers[3].height - microscopylayers[i].defaultheight * heightratio) / 2.0 + (microscopylayers[i].stagey - microscopylayers[3].stagey) * heightratio * 1000000.0; + microscopylayers[i].width = microscopylayers[i].defaultwidth * widthratio; + microscopylayers[i].height = microscopylayers[i].defaultheight * heightratio; + microscopylayers[i].angle = microscopylayers[3].angle - lastnavigationangle + microscopylayers[i].angle; + + //if (microscopylayers[i].flipx) { + // microscopylayers[i].y = microscopylayers[3].y + microscopylayers[3].height - (microscopylayers[activelayer].y + microscopylayers[activelayer].height - microscopylayers[3].y); + //} + + //if (microscopylayers[i].flipy) { + // microscopylayers[i].x = microscopylayers[3].x + microscopylayers[3].width - (microscopylayers[activelayer].x + microscopylayers[activelayer].width - microscopylayers[3].x); + //} + + imagewindowwidget->setMicroscopyPosition(i, microscopylayers[i].flipx, microscopylayers[i].flipy, microscopylayers[i].x, microscopylayers[i].y, microscopylayers[i].width, microscopylayers[i].height, microscopylayers[i].angle); + } + } + } + + if (microscopylayers[activelayer].type == 1) { + for (int i = 4; i < size; i++) { + if ((microscopylayers[i].navigationlayer == 3) && (!microscopylayers[i].image->size().isEmpty())) { + widthratio = microscopylayers[3].width / microscopylayers[3].defaultwidth; + heightratio = microscopylayers[3].height / microscopylayers[3].defaultheight; + + microscopylayers[i].flipx = microscopylayers[3].flipx; + microscopylayers[i].flipy = microscopylayers[3].flipy; + microscopylayers[i].x = microscopylayers[3].x + (microscopylayers[i].stagex - microscopylayers[3].stagex) * widthratio * 1000000.0; + microscopylayers[i].y = microscopylayers[3].y + (microscopylayers[i].stagey - microscopylayers[3].stagey) * heightratio * 1000000.0; + microscopylayers[i].width = microscopylayers[i].defaultwidth * widthratio; + microscopylayers[i].height = microscopylayers[i].defaultheight * heightratio; + microscopylayers[i].angle = microscopylayers[3].angle - lastnavigationangle + microscopylayers[i].angle; + + //if (microscopylayers[i].flipx) { + // microscopylayers[i].y = microscopylayers[3].y + microscopylayers[3].height - (microscopylayers[activelayer].y + microscopylayers[activelayer].height - microscopylayers[3].y); + //} + + //if (microscopylayers[i].flipy) { + // microscopylayers[i].x = microscopylayers[3].x + microscopylayers[3].width - (microscopylayers[activelayer].x + microscopylayers[activelayer].width - microscopylayers[3].x); + //} + + imagewindowwidget->setMicroscopyPosition(i, microscopylayers[i].flipx, microscopylayers[i].flipy, microscopylayers[i].x, microscopylayers[i].y, microscopylayers[i].width, microscopylayers[i].height, microscopylayers[i].angle); + } + } + } + } + + imagewindowwidget->redraw(); + } +} + + +void cImageWindow::microscopyDefaultButtonReleased() { + if (activelayer >= 3) { + if (activelayer == 3) { + int size = (int)microscopylayers.size(); + + if (microscopylayers[activelayer].type == 0) { + microscopylayers[activelayer].flipx = false; + microscopylayers[activelayer].flipy = false; + microscopylayers[activelayer].x = 0; + microscopylayers[activelayer].y = 0; + microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; + microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; + microscopylayers[activelayer].angle = 0; + imagewindowwidget->setMicroscopyPosition(activelayer, microscopylayers[activelayer].flipx, microscopylayers[activelayer].flipy, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); + + for (int i = 4; i < size; i++) { + if ((microscopylayers[i].navigationlayer == 3) && (!microscopylayers[i].image->size().isEmpty())) { + microscopylayers[i].flipx = false; + microscopylayers[i].flipy = false; + microscopylayers[i].x = microscopylayers[3].x + (microscopylayers[3].width - microscopylayers[i].defaultwidth) / 2.0 + (microscopylayers[i].stagex - microscopylayers[3].stagex) * 1000000.0; + microscopylayers[i].y = microscopylayers[3].y + (microscopylayers[3].height - microscopylayers[i].defaultheight) / 2.0 + (microscopylayers[i].stagey - microscopylayers[3].stagey) * 1000000.0; + microscopylayers[i].width = microscopylayers[i].defaultwidth; + microscopylayers[i].height = microscopylayers[i].defaultheight; + microscopylayers[i].angle = 0; + imagewindowwidget->setMicroscopyPosition(i, microscopylayers[i].flipx, microscopylayers[i].flipy, microscopylayers[i].x, microscopylayers[i].y, microscopylayers[i].width, microscopylayers[i].height, microscopylayers[i].angle); + } + } + } + + if (microscopylayers[activelayer].type == 1) { + microscopylayers[activelayer].flipx = false; + microscopylayers[activelayer].flipy = false; + microscopylayers[activelayer].x = microscopylayers[activelayer].stagex * 1000000.0; + microscopylayers[activelayer].y = microscopylayers[activelayer].stagey * 1000000.0; + microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; + microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; + microscopylayers[activelayer].angle = 0; + + // fix the coordinates if they are outside of range + if (vendor == bruker) { + if ((microscopylayers[activelayer].x + microscopylayers[activelayer].width > (maxx->value() + 1) * pixelsizexspinbox->value()) || (microscopylayers[activelayer].y + microscopylayers[activelayer].height > (maxy->value() + 1) * pixelsizeyspinbox->value())) { + microscopylayers[activelayer].x = 0; + microscopylayers[activelayer].y = 0; + } + } + else { + if ((microscopylayers[activelayer].x + microscopylayers[activelayer].width > maxx->value() * pixelsizexspinbox->value()) || (microscopylayers[activelayer].y + microscopylayers[activelayer].height > maxy->value() * pixelsizeyspinbox->value())) { + microscopylayers[activelayer].x = 0; + microscopylayers[activelayer].y = 0; + } + } + + imagewindowwidget->setMicroscopyPosition(activelayer, microscopylayers[activelayer].flipx, microscopylayers[activelayer].flipy, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); + + for (int i = 4; i < size; i++) { + if ((microscopylayers[i].navigationlayer == 3) && (!microscopylayers[i].image->size().isEmpty())) { + microscopylayers[i].flipx = false; + microscopylayers[i].flipy = false; + microscopylayers[i].x = microscopylayers[3].x + (microscopylayers[i].stagex - microscopylayers[3].stagex) * 1000000.0; + microscopylayers[i].y = microscopylayers[3].y + (microscopylayers[i].stagey - microscopylayers[3].stagey) * 1000000.0; + microscopylayers[i].width = microscopylayers[i].defaultwidth; + microscopylayers[i].height = microscopylayers[i].defaultheight; + microscopylayers[i].angle = 0; + + if ((microscopylayers[i].x < 0) || (microscopylayers[i].y < 0)) { + microscopylayers[i].x = 0; + microscopylayers[i].y = 0; + } + + imagewindowwidget->setMicroscopyPosition(i, microscopylayers[i].flipx, microscopylayers[i].flipy, microscopylayers[i].x, microscopylayers[i].y, microscopylayers[i].width, microscopylayers[i].height, microscopylayers[i].angle); + } + } + } + } + + if (activelayer > 3) { + if ((microscopylayers[activelayer].type == 0) && (microscopylayers[activelayer].navigationlayer >= 3)) { + if (activelayer != microscopylayers[activelayer].navigationlayer) { + microscopylayers[activelayer].flipx = microscopylayers[microscopylayers[activelayer].navigationlayer].flipx; + microscopylayers[activelayer].flipy = microscopylayers[microscopylayers[activelayer].navigationlayer].flipy; + microscopylayers[activelayer].x = microscopylayers[microscopylayers[activelayer].navigationlayer].x + (microscopylayers[microscopylayers[activelayer].navigationlayer].width - microscopylayers[activelayer].defaultwidth) / 2.0 + (microscopylayers[activelayer].stagex - microscopylayers[microscopylayers[activelayer].navigationlayer].stagex) * 1000000.0; + microscopylayers[activelayer].y = microscopylayers[microscopylayers[activelayer].navigationlayer].y + (microscopylayers[microscopylayers[activelayer].navigationlayer].height - microscopylayers[activelayer].defaultheight) / 2.0 + (microscopylayers[activelayer].stagey - microscopylayers[microscopylayers[activelayer].navigationlayer].stagey) * 1000000.0; + microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; + microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; + microscopylayers[activelayer].angle = microscopylayers[microscopylayers[activelayer].navigationlayer].angle; + imagewindowwidget->setMicroscopyPosition(activelayer, microscopylayers[activelayer].flipx, microscopylayers[activelayer].flipy, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); + } + else { + microscopylayers[activelayer].flipx = false; + microscopylayers[activelayer].flipy = false; + microscopylayers[activelayer].x = 0; + microscopylayers[activelayer].y = 0; + microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; + microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; + microscopylayers[activelayer].angle = 0; + imagewindowwidget->setMicroscopyPosition(activelayer, microscopylayers[activelayer].flipx, microscopylayers[activelayer].flipy, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); + } + } + + if ((microscopylayers[activelayer].type == 1) && (microscopylayers[activelayer].navigationlayer >= 3)) { + if (activelayer != microscopylayers[activelayer].navigationlayer) { + microscopylayers[activelayer].flipx = microscopylayers[microscopylayers[activelayer].navigationlayer].flipx; + microscopylayers[activelayer].flipy = microscopylayers[microscopylayers[activelayer].navigationlayer].flipy; + microscopylayers[activelayer].x = microscopylayers[microscopylayers[activelayer].navigationlayer].x + (microscopylayers[activelayer].stagex - microscopylayers[microscopylayers[activelayer].navigationlayer].stagex) * 1000000.0; + microscopylayers[activelayer].y = microscopylayers[microscopylayers[activelayer].navigationlayer].y + (microscopylayers[activelayer].stagey - microscopylayers[microscopylayers[activelayer].navigationlayer].stagey) * 1000000.0; + microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; + microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; + microscopylayers[activelayer].angle = microscopylayers[microscopylayers[activelayer].navigationlayer].angle; + + if ((microscopylayers[activelayer].x < 0) || (microscopylayers[activelayer].y < 0)) { + microscopylayers[activelayer].x = 0; + microscopylayers[activelayer].y = 0; + } + + imagewindowwidget->setMicroscopyPosition(activelayer, microscopylayers[activelayer].flipx, microscopylayers[activelayer].flipy, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); + } + else { + microscopylayers[activelayer].flipx = false; + microscopylayers[activelayer].flipy = false; + microscopylayers[activelayer].x = 0; + microscopylayers[activelayer].y = 0; + microscopylayers[activelayer].width = microscopylayers[activelayer].defaultwidth; + microscopylayers[activelayer].height = microscopylayers[activelayer].defaultheight; + microscopylayers[activelayer].angle = 0; + imagewindowwidget->setMicroscopyPosition(activelayer, microscopylayers[activelayer].flipx, microscopylayers[activelayer].flipy, microscopylayers[activelayer].x, microscopylayers[activelayer].y, microscopylayers[activelayer].width, microscopylayers[activelayer].height, microscopylayers[activelayer].angle); + } + } + } + + actionFlipMicroscopyHorizontal->blockSignals(true); + actionFlipMicroscopyVertical->blockSignals(true); + microscopyx->blockSignals(true); + microscopyy->blockSignals(true); + microscopywidth->blockSignals(true); + microscopyheight->blockSignals(true); + microscopyangle->blockSignals(true); + microscopynavigationcombobox->blockSignals(true); + + actionFlipMicroscopyHorizontal->setChecked(microscopylayers[activelayer].flipx); + actionFlipMicroscopyVertical->setChecked(microscopylayers[activelayer].flipy); + microscopyx->setValue(microscopylayers[activelayer].x); + microscopyy->setValue(microscopylayers[activelayer].y); + microscopywidth->setValue(microscopylayers[activelayer].width); + microscopyheight->setValue(microscopylayers[activelayer].height); + microscopyangle->setValue(microscopylayers[activelayer].angle); + microscopynavigationcombobox->setCurrentIndex(max(0, microscopylayers[activelayer].navigationlayer - 3)); + + actionFlipMicroscopyHorizontal->blockSignals(false); + actionFlipMicroscopyVertical->blockSignals(false); + microscopyx->blockSignals(false); + microscopyy->blockSignals(false); + microscopywidth->blockSignals(false); + microscopyheight->blockSignals(false); + microscopyangle->blockSignals(false); + microscopynavigationcombobox->blockSignals(false); + + imagewindowwidget->redraw(); + } +} + + +void cImageWindow::microscopyGoButtonReleased() { + if (activelayer >= 3) { + imagewindowwidget->goToMicroscopyPosition(activelayer); + } +} + + +void cImageWindow::microscopyPrevButtonReleased() { + if ((activelayer > 3) && (activelayer < microscopylayers.size())) { + ((QRadioButton *)layerslayout->itemAtPosition(activelayer - 1, 0)->widget())->setChecked(true); + imagewindowwidget->goToMicroscopyPosition(activelayer); + } +} + + +void cImageWindow::microscopyNextButtonReleased() { + if ((activelayer >= 3) && (activelayer < microscopylayers.size() - 1)) { + ((QRadioButton *)layerslayout->itemAtPosition(activelayer + 1, 0)->widget())->setChecked(true); + imagewindowwidget->goToMicroscopyPosition(activelayer); + } +} + + +void cImageWindow::microscopyPositionChanged(double value) { + microscopyChanged(); +} + + +void cImageWindow::microscopyAngleChanged(double value) { + microscopyChanged(); +} + + +void cImageWindow::microscopyFlipStateChanged(bool state) { + microscopyChanged(); +} + + +void cImageWindow::showHTMLDocumentation() { + #if OS_TYPE == WIN + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/imagefusion.html").absoluteFilePath())); + #else + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/imagefusion.html").absoluteFilePath())); + #endif +} + + +void cImageWindow::updateSelection(int xmin, int xmax, int ymin, int ymax) { + xfrom->setValue(xmin); + xto->setValue(xmax); + yfrom->setValue(ymin); + yto->setValue(ymax); +} + + +void cImageWindow::clearSelection() { + xfrom->setValue(0); + yfrom->setValue(0); + xto->setValue(maxx->value()); + yto->setValue(maxy->value()); +} + + +void cImageWindow::resetSelection() { + clearSelection(); + imagewindowwidget->setSelectedRegion(xfrom->value(), xto->value(), yfrom->value(), yto->value()); + emit updateSummaryPeaksTableFilter(xfrom->value(), xto->value(), yfrom->value(), yto->value()); +} + + +void cImageWindow::updatePointsArea(int xmin, int xmax, int ymin, int ymax) { + leftshift->setValue(xmin); + maxx->setValue(xmax); + topshift->setValue(ymin); + maxy->setValue(ymax); + setMaxButtonReleased(); +} + + +void cImageWindow::layerSpinBoxChangedSlot(int alpha) { + int row, column, rowSpan, columnSpan; + QSpinBox* spinbox = qobject_cast(sender()); + + layerslayout->getItemPosition(layerslayout->indexOf(spinbox), &row, &column, &rowSpan, &columnSpan); + + emit layerChanged(row, ((QCheckBox *)layerslayout->itemAtPosition(row, 1)->widget())->isChecked(), alpha, ((QSpinBox *)layerslayout->itemAtPosition(row, 5)->widget())->value(), redrawenabled); +} + + +void cImageWindow::layerZValueChangedSlot(int zvalue) { + int row, column, rowSpan, columnSpan; + QSpinBox* spinbox = qobject_cast(sender()); + + layerslayout->getItemPosition(layerslayout->indexOf(spinbox), &row, &column, &rowSpan, &columnSpan); + + emit layerChanged(row, ((QCheckBox *)layerslayout->itemAtPosition(row, 1)->widget())->isChecked(), ((QSpinBox *)layerslayout->itemAtPosition(row, 4)->widget())->value(), zvalue, redrawenabled); +} void cImageWindow::layerCheckBoxChangedSlot(int state) { @@ -1324,7 +2478,7 @@ void cImageWindow::layerCheckBoxChangedSlot(int state) { layerslayout->getItemPosition(layerslayout->indexOf(checkbox), &row, &column, &rowSpan, &columnSpan); - emit layerChanged(row, ((QCheckBox *)layerslayout->itemAtPosition(row, 1)->widget())->isChecked(), ((QSpinBox *)layerslayout->itemAtPosition(row, 4)->widget())->value(), ((QSpinBox *)layerslayout->itemAtPosition(row, 5)->widget())->value()); + emit layerChanged(row, ((QCheckBox *)layerslayout->itemAtPosition(row, 1)->widget())->isChecked(), ((QSpinBox *)layerslayout->itemAtPosition(row, 4)->widget())->value(), ((QSpinBox *)layerslayout->itemAtPosition(row, 5)->widget())->value(), redrawenabled); } @@ -1340,32 +2494,56 @@ void cImageWindow::activeLayerChangedSlot(bool checked) { activelayer = row; emit activeLayerChanged(row); + actionFlipMicroscopyHorizontal->blockSignals(true); + actionFlipMicroscopyVertical->blockSignals(true); microscopyx->blockSignals(true); microscopyy->blockSignals(true); microscopywidth->blockSignals(true); microscopyheight->blockSignals(true); microscopyangle->blockSignals(true); + microscopynavigationcombobox->blockSignals(true); - if ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end) && (!microscopylayers[activelayer].image->size().isEmpty())) { + if ((activelayer >= 3) && (!microscopylayers[activelayer].image->size().isEmpty())) { + actionFlipMicroscopyHorizontal->setChecked(microscopylayers[activelayer].flipx); + actionFlipMicroscopyVertical->setChecked(microscopylayers[activelayer].flipy); microscopyx->setValue(microscopylayers[activelayer].x); microscopyy->setValue(microscopylayers[activelayer].y); microscopywidth->setValue(microscopylayers[activelayer].width); microscopyheight->setValue(microscopylayers[activelayer].height); microscopyangle->setValue(microscopylayers[activelayer].angle); + microscopynavigationcombobox->setCurrentIndex(max(0, microscopylayers[activelayer].navigationlayer - 3)); } else { + actionFlipMicroscopyHorizontal->setChecked(false); + actionFlipMicroscopyVertical->setChecked(false); microscopyx->setValue(0); microscopyy->setValue(0); microscopywidth->setValue(0); microscopyheight->setValue(0); microscopyangle->setValue(0); + microscopynavigationcombobox->setCurrentIndex(0); } + actionFlipMicroscopyHorizontal->blockSignals(false); + actionFlipMicroscopyVertical->blockSignals(false); microscopyx->blockSignals(false); microscopyy->blockSignals(false); microscopywidth->blockSignals(false); microscopyheight->blockSignals(false); microscopyangle->blockSignals(false); + microscopynavigationcombobox->blockSignals(false); + + if ((activelayer == 0) || (activelayer == 1)) { + if (actionShowSelection->isChecked()) { + actionShowSelection->setChecked(false); + } + } + + if (activelayer >= 2) { + if (!actionShowSelection->isChecked()) { + actionShowSelection->setChecked(true); + } + } } } @@ -1393,19 +2571,25 @@ void cImageWindow::updateHistologySlot(int x, int y, int width, int height, doub } -void cImageWindow::updateMicroscopySlot(double x, double y, double width, double height, double angle) { +void cImageWindow::updateMicroscopySlot(bool flipx, bool flipy, double x, double y, double width, double height, double angle) { + actionFlipMicroscopyHorizontal->blockSignals(true); + actionFlipMicroscopyVertical->blockSignals(true); microscopyx->blockSignals(true); microscopyy->blockSignals(true); microscopywidth->blockSignals(true); microscopyheight->blockSignals(true); microscopyangle->blockSignals(true); + actionFlipMicroscopyHorizontal->setChecked(flipx); + actionFlipMicroscopyVertical->setChecked(flipy); microscopyx->setValue(x); microscopyy->setValue(y); microscopywidth->setValue(width); microscopyheight->setValue(height); microscopyangle->setValue(angle); + actionFlipMicroscopyHorizontal->blockSignals(false); + actionFlipMicroscopyVertical->blockSignals(false); microscopyx->blockSignals(false); microscopyy->blockSignals(false); microscopywidth->blockSignals(false); @@ -1425,3 +2609,573 @@ void cImageWindow::imageDoubleClickedSlot(int spectrumid) { emit doubleClickedSpectrumIDSignal(spectrumid); } + +void cImageWindow::loadLayers() { + QString filename = QFileDialog::getOpenFileName(this, tr("Load Layers..."), lastdirlayersfile, tr("Layers File (*.layers)")); + + if (filename.isEmpty()) { + return; + } + + lastdirlayersfile = filename; + layersfileloaded = true; + + QString shortname; + if (lastdirlayersfile.toStdString().rfind('/') != string::npos) { + shortname = lastdirlayersfile.toStdString().substr(lastdirlayersfile.toStdString().rfind('/') + 1).c_str(); + } + if (!shortname.isEmpty()) { + setWindowTitle(editorname + QString(" - ") + shortname); + } + else { + setWindowTitle(editorname); + } + + clearLayers(); + + QString qloadstring, qlayername; + QSettings settings(lastdirlayersfile, QSettings::IniFormat); + + QString opticalfilename = settings.value("opticalimage_file", "").toString(); + QFileInfo opticalfilecheck(opticalfilename); + if (!(opticalfilecheck.exists() && opticalfilecheck.isFile())) { + QMessageBox msgBox; + QString errstr = "The optical image does not exist. Cannot open the file '" + opticalfilename + "'."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + QProgressDialog progress("Loading layers...", /*"Cancel"*/0, 0, max(5, (int)microscopylayers.size()), this); + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + + reopenOpticalImage(opticalfilename); + + leftshift->setValue(settings.value("opticalimage_horizontal_shift", 0).toInt()); + topshift->setValue(settings.value("opticalimage_vertical_shift", 0).toInt()); + maxx->setValue(settings.value("opticalimage_max_x", defaultmaxx).toInt()); + maxy->setValue(settings.value("opticalimage_max_y", defaultmaxy).toInt()); + pixelsizexspinbox->setValue(settings.value("opticalimage_pixel_width", defaultpixelsizex).toInt()); + pixelsizeyspinbox->setValue(settings.value("opticalimage_pixel_height", defaultpixelsizey).toInt()); + + setMaxButtonReleased(); + + progress.setValue(1); + + QString histologyfilename = settings.value("histologyimage_file", "").toString(); + if (!histologyfilename.isEmpty()) { + QFileInfo histologyfilecheck(histologyfilename); + if (histologyfilecheck.exists() && histologyfilecheck.isFile()) { + reopenHistologyImage(histologyfilename); + + histologyx->blockSignals(true); + histologyy->blockSignals(true); + histologywidth->blockSignals(true); + histologyheight->blockSignals(true); + histologyangle->blockSignals(true); + + qloadstring = "histologyimage_flip_horizontal"; + settings.value(qloadstring, 0).toInt() == 0 ? actionFlipHistologyHorizontal->setChecked(false) : actionFlipHistologyHorizontal->setChecked(true); + + qloadstring = "histologyimage_flip_vertical"; + settings.value(qloadstring, 0).toInt() == 0 ? actionFlipHistologyVertical->setChecked(false) : actionFlipHistologyVertical->setChecked(true); + + histologyx->setValue(settings.value("histologyimage_x", 0).toInt()); + histologyy->setValue(settings.value("histologyimage_y", 0).toInt()); + histologywidth->setValue(settings.value("histologyimage_width", 400).toInt()); + histologyheight->setValue(settings.value("histologyimage_height", (int)((double)histologyimage->height() / (double)histologyimage->width() * (double)histologywidth->value())).toInt()); + histologyangle->setValue(settings.value("histologyimage_angle", 0).toDouble()); + + histologyx->blockSignals(false); + histologyy->blockSignals(false); + histologywidth->blockSignals(false); + histologyheight->blockSignals(false); + histologyangle->blockSignals(false); + + histologyChanged(); + } + else { + QMessageBox msgBox; + QString errstr = "The histology image does not exist. Cannot open the file '" + histologyfilename + "'."; + msgBox.setText(errstr); + msgBox.exec(); + progress.setValue(max(5, (int)microscopylayers.size())); + return; + } + } + + progress.setValue(2); + + int size = settings.value("microscopy_layers_count", 0).toInt(); + microscopylayers.resize(max(3, size)); + + for (int i = 3; i < size; i++) { + qlayername = "microscopy_layer_" + QVariant(i).toString() + "_"; + + qloadstring = qlayername + "sourcename"; + microscopylayers[i].sourcename = settings.value(qloadstring, "").toString(); + + qloadstring = qlayername + "imagename"; + microscopylayers[i].imagename = settings.value(qloadstring, "").toString(); + + qloadstring = qlayername + "thresholdmin"; + microscopylayers[i].thresholdmin = settings.value(qloadstring, 0).toInt(); + + qloadstring = qlayername + "thresholdmax"; + microscopylayers[i].thresholdmax = settings.value(qloadstring, 255).toInt(); + + if (!microscopylayers[i].sourcename.isEmpty()) { + QFileInfo microscopyfilecheck(microscopylayers[i].sourcename); + if (microscopyfilecheck.exists() && microscopyfilecheck.isFile()) { + + if ((microscopylayers[i].sourcename.toStdString().size() > 4) && (microscopylayers[i].sourcename.toStdString().substr(microscopylayers[i].sourcename.toStdString().size() - 4).compare(".lif") == 0)) { + vector parsedmetadata; + readLifMetadata(microscopylayers[i].sourcename.toStdString(), parsedmetadata); + + for (auto& it : parsedmetadata) { + if (it.imagename.compare(microscopylayers[i].imagename.toStdString()) == 0) { + if (i == 3) { + openLifImage(microscopylayers[i].sourcename.toStdString(), i, it, true); + } + else { + openLifImage(microscopylayers[i].sourcename.toStdString(), i, it, false); + } + break; + } + } + } + else { + reopenMicroscopyImage(i, microscopylayers[i].sourcename, true); + } + + qloadstring = qlayername + "type"; + microscopylayers[i].type = settings.value(qloadstring, -1).toInt(); + + qloadstring = qlayername + "navigationlayer"; + setNavigationLayer(i, settings.value(qloadstring, 3).toInt()); + + qloadstring = qlayername + "flipx"; + microscopylayers[i].flipx = settings.value(qloadstring, 0).toBool(); + + qloadstring = qlayername + "flipy"; + microscopylayers[i].flipy = settings.value(qloadstring, 0).toBool(); + + qloadstring = qlayername + "x"; + microscopylayers[i].x = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "y"; + microscopylayers[i].y = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "width"; + microscopylayers[i].width = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "height"; + microscopylayers[i].height = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "angle"; + microscopylayers[i].angle = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "defaultwidth"; + microscopylayers[i].defaultwidth = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "defaultheight"; + microscopylayers[i].defaultheight = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "stagex"; + microscopylayers[i].stagex = settings.value(qloadstring, 0).toDouble(); + + qloadstring = qlayername + "stagey"; + microscopylayers[i].stagey = settings.value(qloadstring, 0).toDouble(); + + imagewindowwidget->setMicroscopyPosition(i, microscopylayers[i].flipx, microscopylayers[i].flipy, microscopylayers[i].x, microscopylayers[i].y, microscopylayers[i].width, microscopylayers[i].height, microscopylayers[i].angle); + } + else { + QMessageBox msgBox; + QString errstr = "The microscopy image does not exist. Cannot open the file '" + microscopylayers[i].sourcename + "'."; + msgBox.setText(errstr); + msgBox.exec(); + progress.setValue(max(5, (int)microscopylayers.size())); + return; + } + } + + progress.setValue(i); + } + + redrawenabled = false; + + for (int i = 0; i < size; i++) { + qlayername = "layer_info_" + QVariant(i).toString() + "_"; + + qloadstring = qlayername + "selected"; + settings.value(qloadstring, 0).toInt() == 0 ? ((QRadioButton *)layerslayout->itemAtPosition(i, 0)->widget())->setChecked(false) : ((QRadioButton *)layerslayout->itemAtPosition(i, 0)->widget())->setChecked(true); + + if (i >= 3) { + if (settings.value(qloadstring, 0).toInt() == 1) { + actionFlipMicroscopyHorizontal->blockSignals(true); + actionFlipMicroscopyVertical->blockSignals(true); + microscopyx->blockSignals(true); + microscopyy->blockSignals(true); + microscopywidth->blockSignals(true); + microscopyheight->blockSignals(true); + microscopyangle->blockSignals(true); + microscopynavigationcombobox->blockSignals(true); + + actionFlipMicroscopyHorizontal->setChecked(microscopylayers[i].flipx); + actionFlipMicroscopyVertical->setChecked(microscopylayers[i].flipy); + microscopyx->setValue(microscopylayers[i].x); + microscopyy->setValue(microscopylayers[i].y); + microscopywidth->setValue(microscopylayers[i].width); + microscopyheight->setValue(microscopylayers[i].height); + microscopyangle->setValue(microscopylayers[i].angle); + microscopynavigationcombobox->setCurrentIndex(max(0, microscopylayers[i].navigationlayer - 3)); + + actionFlipMicroscopyHorizontal->blockSignals(false); + actionFlipMicroscopyVertical->blockSignals(false); + microscopyx->blockSignals(false); + microscopyy->blockSignals(false); + microscopywidth->blockSignals(false); + microscopyheight->blockSignals(false); + microscopyangle->blockSignals(false); + microscopynavigationcombobox->blockSignals(false); + } + } + + qloadstring = qlayername + "checked"; + settings.value(qloadstring, 0).toInt() == 0 ? ((QCheckBox *)layerslayout->itemAtPosition(i, 1)->widget())->setChecked(false) : ((QCheckBox *)layerslayout->itemAtPosition(i, 1)->widget())->setChecked(true); + + qloadstring = qlayername + "label"; + ((QLabel *)layerslayout->itemAtPosition(i, 2)->widget())->setText(settings.value(qloadstring, "Unknown Layer").toString()); + + qloadstring = qlayername + "slider_alpha"; + ((QSlider *)layerslayout->itemAtPosition(i, 3)->widget())->setValue(settings.value(qloadstring, 100).toInt()); + + qloadstring = qlayername + "spinbox_alpha"; + ((QSpinBox *)layerslayout->itemAtPosition(i, 4)->widget())->setValue(settings.value(qloadstring, 100).toInt()); + + qloadstring = qlayername + "spinbox_zvalue"; + ((QSpinBox *)layerslayout->itemAtPosition(i, 5)->widget())->setValue(settings.value(qloadstring, 1).toInt()); + + qloadstring = qlayername + "description"; + ((QLabel *)layerslayout->itemAtPosition(i, 7)->widget())->setText(settings.value(qloadstring, "").toString()); + } + + redrawenabled = true; + + imagewindowwidget->redraw(); + + progress.setValue(max(5, (int)microscopylayers.size())); +} + + +void cImageWindow::saveLayers() { + if (!layersfileloaded || saveascalled) { + QString filename = QFileDialog::getSaveFileName(this, tr("Save Layers As..."), lastdirlayersfile, tr("Layers File (*.layers)")); + if (filename.isEmpty()) { + saveascalled = false; + return; + } + lastdirlayersfile = filename; + } + + if (layersfileloaded && !saveascalled) { + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, editorname, "Save changes ?", QMessageBox::Yes | QMessageBox::No); + if (reply == QMessageBox::No) { + return; + } + } + + layersfileloaded = true; + saveascalled = false; + + QString shortname; + if (lastdirlayersfile.toStdString().rfind('/') != string::npos) { + shortname = lastdirlayersfile.toStdString().substr(lastdirlayersfile.toStdString().rfind('/') + 1).c_str(); + } + if (!shortname.isEmpty()) { + setWindowTitle(editorname + QString(" - ") + shortname); + } + else { + setWindowTitle(editorname); + } + + QString qsavestring, qlayername; + QSettings settings(lastdirlayersfile, QSettings::IniFormat); + settings.clear(); + + //QProgressDialog progress("Saving layers...", /*"Cancel"*/0, 0, max(5, (int)microscopylayers.size()), this); + //progress.setMinimumWidth(250); + //cEventFilter filter; + //progress.installEventFilter(&filter); + //progress.setMinimumDuration(0); + //progress.setWindowModality(Qt::ApplicationModal); + //progress.setValue(0); + + settings.setValue("opticalimage_file", lastdiropticalimage); + settings.setValue("opticalimage_horizontal_shift", leftshift->value()); + settings.setValue("opticalimage_vertical_shift", topshift->value()); + settings.setValue("opticalimage_max_x", maxx->value()); + settings.setValue("opticalimage_max_y", maxy->value()); + settings.setValue("opticalimage_pixel_width", pixelsizexspinbox->value()); + settings.setValue("opticalimage_pixel_height", pixelsizeyspinbox->value()); + + //progress.setValue(1); + + qsavestring = "histologyimage_flip_horizontal"; + actionFlipHistologyHorizontal->isChecked() ? settings.setValue(qsavestring, 1) : settings.setValue(qsavestring, 0); + + qsavestring = "histologyimage_flip_vertical"; + actionFlipHistologyVertical->isChecked() ? settings.setValue(qsavestring, 1) : settings.setValue(qsavestring, 0); + + QFileInfo histologyfilecheck(lastdirhistologyimage); + if (histologyfilecheck.exists() && histologyfilecheck.isFile()) { + settings.setValue("histologyimage_file", lastdirhistologyimage); + } + else { + settings.setValue("histologyimage_file", ""); + } + + settings.setValue("histologyimage_x", histologyx->value()); + settings.setValue("histologyimage_y", histologyy->value()); + settings.setValue("histologyimage_width", histologywidth->value()); + settings.setValue("histologyimage_height", histologyheight->value()); + settings.setValue("histologyimage_angle", histologyangle->value()); + + //progress.setValue(2); + + int size = (int)microscopylayers.size(); + settings.setValue("microscopy_layers_count", size); + + for (int i = 3; i < size; i++) { + qlayername = "microscopy_layer_" + QVariant(i).toString() + "_"; + + qsavestring = qlayername + "type"; + settings.setValue(qsavestring, microscopylayers[i].type); + + qsavestring = qlayername + "navigationlayer"; + settings.setValue(qsavestring, microscopylayers[i].navigationlayer); + + qsavestring = qlayername + "sourcename"; + settings.setValue(qsavestring, microscopylayers[i].sourcename); + + qsavestring = qlayername + "imagename"; + settings.setValue(qsavestring, microscopylayers[i].imagename); + + qsavestring = qlayername + "flipx"; + settings.setValue(qsavestring, microscopylayers[i].flipx); + + qsavestring = qlayername + "flipy"; + settings.setValue(qsavestring, microscopylayers[i].flipy); + + qsavestring = qlayername + "x"; + settings.setValue(qsavestring, microscopylayers[i].x); + + qsavestring = qlayername + "y"; + settings.setValue(qsavestring, microscopylayers[i].y); + + qsavestring = qlayername + "width"; + settings.setValue(qsavestring, microscopylayers[i].width); + + qsavestring = qlayername + "height"; + settings.setValue(qsavestring, microscopylayers[i].height); + + qsavestring = qlayername + "angle"; + settings.setValue(qsavestring, microscopylayers[i].angle); + + qsavestring = qlayername + "defaultwidth"; + settings.setValue(qsavestring, microscopylayers[i].defaultwidth); + + qsavestring = qlayername + "defaultheight"; + settings.setValue(qsavestring, microscopylayers[i].defaultheight); + + qsavestring = qlayername + "stagex"; + settings.setValue(qsavestring, microscopylayers[i].stagex); + + qsavestring = qlayername + "stagey"; + settings.setValue(qsavestring, microscopylayers[i].stagey); + + qsavestring = qlayername + "thresholdmin"; + settings.setValue(qsavestring, microscopylayers[i].thresholdmin); + + qsavestring = qlayername + "thresholdmax"; + settings.setValue(qsavestring, microscopylayers[i].thresholdmax); + + //progress.setValue(i); + } + + for (int i = 0; i < size; i++) { + qlayername = "layer_info_" + QVariant(i).toString() + "_"; + + qsavestring = qlayername + "selected"; + ((QRadioButton *)layerslayout->itemAtPosition(i, 0)->widget())->isChecked() ? settings.setValue(qsavestring, 1) : settings.setValue(qsavestring, 0); + + qsavestring = qlayername + "checked"; + ((QCheckBox *)layerslayout->itemAtPosition(i, 1)->widget())->isChecked() ? settings.setValue(qsavestring, 1) : settings.setValue(qsavestring, 0); + + qsavestring = qlayername + "label"; + settings.setValue(qsavestring, ((QLabel *)layerslayout->itemAtPosition(i, 2)->widget())->text()); + + qsavestring = qlayername + "slider_alpha"; + settings.setValue(qsavestring, ((QSlider *)layerslayout->itemAtPosition(i, 3)->widget())->value()); + + qsavestring = qlayername + "spinbox_alpha"; + settings.setValue(qsavestring, ((QSpinBox *)layerslayout->itemAtPosition(i, 4)->widget())->value()); + + qsavestring = qlayername + "spinbox_zvalue"; + settings.setValue(qsavestring, ((QSpinBox *)layerslayout->itemAtPosition(i, 5)->widget())->value()); + + qsavestring = qlayername + "description"; + settings.setValue(qsavestring, ((QLabel *)layerslayout->itemAtPosition(i, 7)->widget())->text()); + } + + //progress.setValue(max(5, (int)microscopylayers.size())); +} + + +void cImageWindow::saveLayersAs() { + saveascalled = true; + saveLayers(); +} + + +void cImageWindow::clearAllLayersSlot() { + QMessageBox::StandardButton reply; + QString s = "Clear all layers ?"; + + reply = QMessageBox::question(this, "Are you sure ?", s, QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::No) { + return; + } + + clearLayers(); + + ((QCheckBox *)layerslayout->itemAtPosition(0, 1)->widget())->setChecked(true); + + QString shortname = getShortFileName(imzmlfilename).c_str(); + ((QLabel *)layerslayout->itemAtPosition(0, 7)->widget())->setText(shortname); +} + + +void cImageWindow::microscopyNavigationChanged(int index) { + if (activelayer < 3) { + return; + } + + setNavigationLayer(activelayer, index + 3); + microscopyDefaultButtonReleased(); +} + + +void cImageWindow::clearLayer() { + QPushButton* button = qobject_cast(sender()); + int index = layerslayout->indexOf(button); + + int row, column, rowspan, colspan; + layerslayout->getItemPosition(index, &row, &column, &rowspan, &colspan); + + if (row == 0) { + return; + } + + ((QLabel *)layerslayout->itemAtPosition(row, 7)->widget())->setText(""); + microscopylayers[row].clear(); + + imagewindowwidget->clearLayer(row); + + // optical image + if (row == 1) { + redrawenabled = false; + + leftshift->setValue(0); + topshift->setValue(0); + maxx->setValue(500); + maxy->setValue(500); + pixelsizexspinbox->setValue(100); + pixelsizeyspinbox->setValue(100); + + setMaxButtonReleased(); + + redrawenabled = true; + } + + // histology image + if (row == 2) { + redrawenabled = false; + + //actionFlipHistologyHorizontal->blockSignals(true); + //actionFlipHistologyVertical->blockSignals(true); + histologyx->blockSignals(true); + histologyy->blockSignals(true); + histologywidth->blockSignals(true); + histologyheight->blockSignals(true); + histologyangle->blockSignals(true); + + actionFlipHistologyHorizontal->setChecked(false); + actionFlipHistologyVertical->setChecked(false); + + histologyx->setValue(0); + histologyy->setValue(0); + histologywidth->setValue(0); + histologyheight->setValue(0); + histologyangle->setValue(0); + + //actionFlipHistologyHorizontal->blockSignals(false); + //actionFlipHistologyVertical->blockSignals(false); + histologyx->blockSignals(false); + histologyy->blockSignals(false); + histologywidth->blockSignals(false); + histologyheight->blockSignals(false); + histologyangle->blockSignals(false); + + histologyChanged(); + + redrawenabled = true; + } + + // microscopy images + if (row >= 3) { + if (row == activelayer) { + redrawenabled = false; + + actionFlipMicroscopyHorizontal->blockSignals(true); + actionFlipMicroscopyVertical->blockSignals(true); + microscopyx->blockSignals(true); + microscopyy->blockSignals(true); + microscopywidth->blockSignals(true); + microscopyheight->blockSignals(true); + microscopyangle->blockSignals(true); + microscopynavigationcombobox->blockSignals(true); + + actionFlipMicroscopyHorizontal->setChecked(false); + actionFlipMicroscopyVertical->setChecked(false); + + microscopyx->setValue(0); + microscopyy->setValue(0); + microscopywidth->setValue(0); + microscopyheight->setValue(0); + microscopyangle->setValue(0); + microscopynavigationcombobox->setCurrentIndex(0); + + actionFlipMicroscopyHorizontal->blockSignals(false); + actionFlipMicroscopyVertical->blockSignals(false); + microscopyx->blockSignals(false); + microscopyy->blockSignals(false); + microscopywidth->blockSignals(false); + microscopyheight->blockSignals(false); + microscopyangle->blockSignals(false); + microscopynavigationcombobox->blockSignals(false); + + redrawenabled = true; + } + } + + imagewindowwidget->redraw(); +} + diff --git a/CycloBranch/gui/cImageWindow.h b/CycloBranch/gui/cImageWindow.h index f27cc15..01ea066 100644 --- a/CycloBranch/gui/cImageWindow.h +++ b/CycloBranch/gui/cImageWindow.h @@ -20,9 +20,13 @@ #include #include #include +#include +#include #include "core/utilities.h" #include "core/cGlobalPreferences.h" #include "gui/cImageWindowWidget.h" +#include "gui/cImageWindowImportDialog.h" +#include "gui/cImageWindowTabOptical.h" // forward declaration @@ -41,6 +45,42 @@ class QMenu; \brief Paramaters of a microscopy layer. */ struct microscopyLayerInfo { + /** + \brief Type (0 = FEI SEM, 1 = LEICA LIF). + */ + int type; + + + /** + \brief Index of navigation layer. + */ + int navigationlayer; + + + /** + \brief Source file name. + */ + QString sourcename; + + + /** + \brief Image name. + */ + QString imagename; + + + /** + \brief Flip horizontally. + */ + bool flipx; + + + /** + \brief Flip vertically. + */ + bool flipy; + + /** \brief X position. */ @@ -101,20 +141,30 @@ struct microscopyLayerInfo { QImage* image; + /** + \brief True if the image size has been reduced. + */ + bool reduced; + + + /** + \brief Noise threshold. + */ + int thresholdmin; + + + /** + \brief Signal threshold. + */ + int thresholdmax; + + /** \brief The constructor. */ microscopyLayerInfo() { - x = 0; - y = 0; - width = 0; - height = 0; - angle = 0; - defaultwidth = 0; - defaultheight = 0; - stagex = 0; - stagey = 0; image = new QImage(); + clear(); } @@ -122,6 +172,12 @@ struct microscopyLayerInfo { \brief The copy constructor. */ microscopyLayerInfo(const microscopyLayerInfo& layer) { + type = layer.type; + navigationlayer = layer.navigationlayer; + sourcename = layer.sourcename; + imagename = layer.imagename; + flipx = layer.flipx; + flipy = layer.flipy; x = layer.x; y = layer.y; width = layer.width; @@ -133,6 +189,9 @@ struct microscopyLayerInfo { stagey = layer.stagey; image = new QImage(); *image = *layer.image; + reduced = layer.reduced; + thresholdmin = layer.thresholdmin; + thresholdmax = layer.thresholdmax; } @@ -142,6 +201,35 @@ struct microscopyLayerInfo { ~microscopyLayerInfo() { delete image; } + + + /** + \brief Clear the structure. + */ + void clear() { + type = -1; + navigationlayer = 3; + sourcename.clear(); + imagename.clear(); + flipx = false; + flipy = false; + x = 0; + y = 0; + width = 0; + height = 0; + angle = 0; + defaultwidth = 0; + defaultheight = 0; + stagex = 0; + stagey = 0; + + delete image; + image = new QImage(); + + reduced = false; + thresholdmin = 0; + thresholdmax = 255; + } }; @@ -177,14 +265,15 @@ class cImageWindow : public QMainWindow /** - \brief Set the default max count of pixel x/y values parsed from an imzML file. + \brief Set the filename and some default values parsed from the imzML file. + \param imzmlfilename name of imzML file \param defaultmaxx max count of pixel x - parsed from imzML file \param defaultmaxy max count of pixel y - parsed from imzML file \param defaultpixelsizex pixel size x - parsed from imzML file \param defaultpixelsizey pixel size y - parsed from imzML file \param vendor vendor type */ - void setDefaultMaxXY(int defaultmaxx, int defaultmaxy, int defaultpixelsizex, int defaultpixelsizey, eVendorType vendor); + void setDefaultValues(string imzmlfilename, int defaultmaxx, int defaultmaxy, int defaultpixelsizex, int defaultpixelsizey, eVendorType vendor); /** @@ -202,7 +291,11 @@ class cImageWindow : public QMainWindow private: + + QString editorname; + cImageWindowImportDialog importdialog; + cGlobalPreferences* globalpreferences; QWidget* parent; @@ -212,8 +305,13 @@ class cImageWindow : public QMainWindow QMenu* menuHelp; QToolBar* toolbarFile; + QAction* actionLoadLayers; + QAction* actionSaveLayers; + QAction* actionSaveLayersAs; QAction* actionOpenImage; - QAction* actionSaveImage; + QAction* actionImportDialog; + QAction* actionExportImage; + QAction* actionClearAll; QAction* actionCloseWindow; QToolBar* toolbarView; @@ -225,6 +323,8 @@ class cImageWindow : public QMainWindow QAction* actionZoomReset; QAction* actionFlipHistologyHorizontal; QAction* actionFlipHistologyVertical; + QAction* actionFlipMicroscopyHorizontal; + QAction* actionFlipMicroscopyVertical; QLabel* rulerLabel; QDoubleSpinBox* rulerValue; @@ -288,8 +388,12 @@ class cImageWindow : public QMainWindow QDoubleSpinBox* microscopyheight; QLabel* microscopyanglelabel; QDoubleSpinBox* microscopyangle; + QLabel* microscopynavigationlabel; + QComboBox* microscopynavigationcombobox; QPushButton* microscopydefaultbutton; QPushButton* microscopygobutton; + QPushButton* microscopyprevbutton; + QPushButton* microscopynextbutton; QToolBar* toolbarHelp; QAction* actionHTMLDocumentation; @@ -297,11 +401,17 @@ class cImageWindow : public QMainWindow QImage* image; QImage* histologyimage; + // layer == 0 - compounds + // layer == 1 - optical image + // layer == 2 - histology image + // layer == 3 - microscopy navigation image + // layer >= 4 - microscopy images vector microscopylayers; cImageWindowWidget* imagewindowwidget; QGridLayout* layerslayout; QWidget* layerswidget; + QScrollArea* layersscrollarea; QSplitter* mainwidget; int layerscount; @@ -311,6 +421,12 @@ class cImageWindow : public QMainWindow QString lastdirhistologyimage; QString lastdirmicroscopyimage; QString lastdirexportimage; + QString lastdirlayersfile; + + bool layersfileloaded; + bool saveascalled; + + string imzmlfilename; int defaultmaxx; int defaultmaxy; @@ -320,15 +436,38 @@ class cImageWindow : public QMainWindow eVendorType vendor; + bool redrawenabled; + void colorSpinBoxes(int layerid); void openOpticalImage(); + void reopenOpticalImage(QString filename); + void openHistologyImage(); - bool parseMicroscopyImage(QString& filename, double& pixelwidth, double& pixelheight, int& resolutionx, int& resolutiony, double& stagex, double& stagey); + void reopenHistologyImage(QString filename); + + bool parseMicroscopyImage(QString& filename, double& pixelwidth, double& pixelheight, int& resolutionx, int& resolutiony, double& realwidth, double& stagex, double& stagey); + + void openMicroscopyImage(int layer, const QString &layername); + + void reopenMicroscopyImage(int layer, QString filename, bool reopen); + + void clearLayers(); + + void updateMicroscopyNavigationCombobox(int numberofitems); + + bool checkLoadedImage(QImage* image); + + void readLifImageOptical(string filename, cLifMetadata& metadata, QImage& image, bool enableprogress); + + void readLifImageFluorescence(string filename, cLifMetadata& metadata, QImage& image, int minthreshold, int maxthreshold, bool enableprogress); + + void openLifImage(string liffilename, int layer, cLifMetadata& metadata, bool enableprogress); + + void setNavigationLayer(int layer, int navigation); - void openMicroscopyImage(eLayerType layer, const QString &layername); protected: @@ -340,6 +479,13 @@ class cImageWindow : public QMainWindow void keyPressEvent(QKeyEvent *event); + /** + \brief Handle a key release event. + \param event pointer to QKeyEvent + */ + void keyReleaseEvent(QKeyEvent *event); + + private slots: @@ -352,7 +498,10 @@ private slots: void imageTypeSelected(const QString &s); - void saveImage(); + void openImportDialog(); + + + void exportImage(); void setFilterOptionsSlot(vector coordinates, bool operatortype, string columnname1, string comparatorname1, string filterstring1, string columnname2, string comparatorname2, string filterstring2, bool casesensitive, bool wholeword); @@ -385,12 +534,21 @@ private slots: void microscopyGoButtonReleased(); + void microscopyPrevButtonReleased(); + + + void microscopyNextButtonReleased(); + + void microscopyPositionChanged(double value); void microscopyAngleChanged(double value); + void microscopyFlipStateChanged(bool state); + + void showHTMLDocumentation(); @@ -421,7 +579,7 @@ private slots: void updateHistologySlot(int x, int y, int width, int height, double angle); - void updateMicroscopySlot(double x, double y, double width, double height, double angle); + void updateMicroscopySlot(bool flipx, bool flipy, double x, double y, double width, double height, double angle); void updateRulerSlot(double value); @@ -430,6 +588,24 @@ private slots: void imageDoubleClickedSlot(int spectrumid); + void loadLayers(); + + + void saveLayers(); + + + void saveLayersAs(); + + + void clearAllLayersSlot(); + + + void microscopyNavigationChanged(int index); + + + void clearLayer(); + + signals: @@ -449,8 +625,9 @@ private slots: \param checked true if the layer was checked, false if the layer was unchecked \param alpha transparency of the layer \param zvalue z-value of the layer + \param redraw redraw scene */ - void layerChanged(int layerid, bool checked, int alpha, int zvalue); + void layerChanged(int layerid, bool checked, int alpha, int zvalue, bool redraw); /** diff --git a/CycloBranch/gui/cImageWindowImportDialog.cpp b/CycloBranch/gui/cImageWindowImportDialog.cpp new file mode 100644 index 0000000..3db4ba3 --- /dev/null +++ b/CycloBranch/gui/cImageWindowImportDialog.cpp @@ -0,0 +1,122 @@ +#include "gui/cImageWindowImportDialog.h" +#include "gui/cImageWindowTabElectron.h" +#include "gui/cImageWindowTabOptical.h" + +#include + + +cImageWindowImportDialog::cImageWindowImportDialog(QWidget *parent) : QDialog(parent) { + tabelectron = new cImageWindowTabElectron(); + taboptical = new cImageWindowTabOptical(); + + tabwidget = new QTabWidget(); + tabwidget->addTab(tabelectron, tr("Scanning Electron Microscope (FEI)")); + tabwidget->addTab(taboptical, tr("Light Microscope (Leica)")); + + buttonbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + buttonbox->button(QDialogButtonBox::Ok)->setText("Import"); + + connect(buttonbox, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(buttonbox, &QDialogButtonBox::rejected, this, &QDialog::reject); + + mainlayout = new QVBoxLayout(); + mainlayout->addWidget(tabwidget); + mainlayout->addWidget(buttonbox); + setLayout(mainlayout); + + resize(750, 600); + + setWindowTitle(tr("Import Images...")); + setWindowIcon(QIcon(":/images/icons/import.png")); +} + + +void cImageWindowImportDialog::setFormValues(QString& lastdirmicroscopyimage, int numberoflayers) { + tabelectron->setFormValues(lastdirmicroscopyimage, numberoflayers); + taboptical->setFormValues(lastdirmicroscopyimage, numberoflayers); +} + + +int cImageWindowImportDialog::getFormValues(int& startfromindex, QStringList& tiffilenames, int& navigationindex, QString& liffilename) { + int tabindex = tabwidget->currentIndex(); + + switch (tabindex) { + case 0: + tabelectron->getFormValues(startfromindex, tiffilenames); + break; + case 1: + taboptical->getFormValues(startfromindex, tiffilenames, navigationindex, liffilename); + break; + default: + startfromindex = 0; + tiffilenames.clear(); + navigationindex = 0; + liffilename.clear(); + break; + } + + return tabindex; +} + + +cImageWindowImportDialog::~cImageWindowImportDialog() { + delete tabelectron; + delete taboptical; + + delete tabwidget; + delete buttonbox; + + delete mainlayout; +} + + +//void cImageWindowImportDialog::keyPressEvent(QKeyEvent *event) { +// if (event->key() == Qt::Key_F1) { +// #if OS_TYPE == WIN +// QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/importimagesdialog.html").absoluteFilePath())); +// #else +// QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/importimagesdialog.html").absoluteFilePath())); +// #endif +// } +// +// event->accept(); +//} + + +void cImageWindowImportDialog::accept() { + int startfromindex; + QStringList tiffilenames; + int navigationindex; + QString liffilename; + + QMessageBox msgBox; + QString errstr; + + int tabindex = tabwidget->currentIndex(); + + switch (tabindex) { + case 0: + tabelectron->getFormValues(startfromindex, tiffilenames); + if (tiffilenames.isEmpty()) { + errstr = "At least one TIF file must be selected !"; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + break; + case 1: + taboptical->getFormValues(startfromindex, tiffilenames, navigationindex, liffilename); + if (liffilename.isEmpty()) { + errstr = "A LIF file must be selected !"; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + break; + default: + break; + } + + QDialog::accept(); +} + diff --git a/CycloBranch/gui/cImageWindowImportDialog.h b/CycloBranch/gui/cImageWindowImportDialog.h new file mode 100644 index 0000000..3f65e65 --- /dev/null +++ b/CycloBranch/gui/cImageWindowImportDialog.h @@ -0,0 +1,98 @@ +/** + \file cImageWindowImportDialog.h + \brief The implementation of import dialog in image window. +*/ + + +#ifndef _CIMAGEWINDOWIMPORTDIALOG_H +#define _CIMAGEWINDOWIMPORTDIALOG_H + +#include +#include +#include +#include +#include +#include +#include +#include + + +class cImageWindowTabElectron; +class cImageWindowTabOptical; + + +/** + \brief Import dialog in image window. +*/ +class cImageWindowImportDialog : public QDialog +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param parent pointer to a parent widget + */ + explicit cImageWindowImportDialog(QWidget *parent = 0); + + + /** + \brief Initialize values in the form. + \param lastdirmicroscopyimage a default directory with microscopy images + \param numberoflayers number of layers + */ + void setFormValues(QString& lastdirmicroscopyimage, int numberoflayers); + + + /** + \brief Get the values from the form. + \param startfromindex starting index to open microscopy images + \param tiffilenames a list of tif images to be opened + \param navigationindex index of navigation image + \param liffilename a lif file from which the metadata are read + \retval int tab index + */ + int getFormValues(int& startfromindex, QStringList& tiffilenames, int& navigationindex, QString& liffilename); + + + /** + \brief The destructor. + */ + ~cImageWindowImportDialog(); + + +protected: + + + /** + \brief Handle a key press event. + \param event pointer to QKeyEvent + */ + //void keyPressEvent(QKeyEvent *event); + + +private: + + cImageWindowTabElectron* tabelectron; + cImageWindowTabOptical* taboptical; + + QTabWidget *tabwidget; + QDialogButtonBox *buttonbox; + + QVBoxLayout *mainlayout; + + +public slots: + + /** + \brief Override the accept slot. + */ + void accept(); + +}; + + +#endif + diff --git a/CycloBranch/gui/cImageWindowTabElectron.cpp b/CycloBranch/gui/cImageWindowTabElectron.cpp new file mode 100644 index 0000000..6b6ccc9 --- /dev/null +++ b/CycloBranch/gui/cImageWindowTabElectron.cpp @@ -0,0 +1,75 @@ +#include "gui/cImageWindowTabElectron.h" + + +cImageWindowTabElectron::cImageWindowTabElectron(QWidget *parent) : QWidget(parent) { + gridlayout = new QGridLayout(); + + labelstartfrom = new QLabel("Begin import at : "); + + comboboxstartfrom = new QComboBox(); + + gridlayout->addWidget(labelstartfrom, 0, 0, 1, 1); + gridlayout->addWidget(comboboxstartfrom, 0, 1, 1, 9); + + labelfilenames = new QLabel("TIF Images : "); + + listwidgetfilenames = new QListWidget(); + listwidgetfilenames->setSelectionMode(QAbstractItemView::NoSelection); + + buttonfilenames = new QPushButton("Browse"); + + gridlayout->addWidget(labelfilenames, 1, 0, 1, 1); + gridlayout->addWidget(listwidgetfilenames, 1, 1, 1, 9); + gridlayout->addWidget(buttonfilenames, 2, 9, 1, 1); + + setLayout(gridlayout); + + connect(buttonfilenames, SIGNAL(released()), this, SLOT(browseButtonReleased())); +} + + +void cImageWindowTabElectron::setFormValues(QString& lastdirmicroscopyimage, int numberoflayers) { + this->lastdirmicroscopyimage = &lastdirmicroscopyimage; + + QString layername = "Microscopy Image "; + QString tmpname; + comboboxstartfrom->clear(); + for (int i = 0; i < numberoflayers - 4; i++) { + tmpname = layername + QVariant(i + 1).toString(); + comboboxstartfrom->insertItem(i, tmpname); + } + + listwidgetfilenames->clear(); + imagenames.clear(); +} + + +void cImageWindowTabElectron::getFormValues(int& index, QStringList& filenames) { + index = comboboxstartfrom->currentIndex(); + filenames = imagenames; +} + + +cImageWindowTabElectron::~cImageWindowTabElectron() { + delete labelstartfrom; + delete comboboxstartfrom; + + delete labelfilenames; + delete listwidgetfilenames; + delete buttonfilenames; + + delete gridlayout; +} + + +void cImageWindowTabElectron::browseButtonReleased() { + QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Select Images..."), *lastdirmicroscopyimage, tr("Images (*.tif *.tiff)")); + if (!filenames.isEmpty()) { + listwidgetfilenames->clear(); + for (auto& it : filenames) { + listwidgetfilenames->addItem(it); + } + imagenames = filenames; + } +} + diff --git a/CycloBranch/gui/cImageWindowTabElectron.h b/CycloBranch/gui/cImageWindowTabElectron.h new file mode 100644 index 0000000..a252ff4 --- /dev/null +++ b/CycloBranch/gui/cImageWindowTabElectron.h @@ -0,0 +1,84 @@ +/** + \file cImageWindowTabElectron.h + \brief The implementation of a tab used to import images from electron microscopy. +*/ + + +#ifndef _CIMAGEWINDOWTABELECTRON_H +#define _CIMAGEWINDOWTABELECTRON_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/** + \brief The class representing a tab used to import images from electron microscopy. +*/ +class cImageWindowTabElectron : public QWidget +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param parent pointer to a parent widget + */ + explicit cImageWindowTabElectron(QWidget *parent = 0); + + + /** + \brief Initialize values in the form. + \param lastdirmicroscopyimage a default directory with microscopy images + \param numberoflayers number of layers + */ + void setFormValues(QString& lastdirmicroscopyimage, int numberoflayers); + + + /** + \brief Get the values from the form. + \param index starting index to open microscopy images + \param filenames list of images to open + */ + void getFormValues(int& index, QStringList& filenames); + + + /** + \brief The destructor. + */ + ~cImageWindowTabElectron(); + + +private: + + QString* lastdirmicroscopyimage; + + QGridLayout* gridlayout; + + QLabel* labelstartfrom; + QComboBox* comboboxstartfrom; + + QLabel* labelfilenames; + QListWidget* listwidgetfilenames; + QPushButton* buttonfilenames; + QStringList imagenames; + + +private slots: + + void browseButtonReleased(); + +}; + + +#endif + diff --git a/CycloBranch/gui/cImageWindowTabOptical.cpp b/CycloBranch/gui/cImageWindowTabOptical.cpp new file mode 100644 index 0000000..142683b --- /dev/null +++ b/CycloBranch/gui/cImageWindowTabOptical.cpp @@ -0,0 +1,856 @@ +#include "gui/cImageWindowTabOptical.h" +#include "core/cMzML.h" + + +void readLifMetadata(string filename, vector& parsedmetadata) { + parsedmetadata.clear(); + + ifstream is; + is.open(filename, ifstream::binary); + + if (!is.good()) { + return; + } + + char c; + + is.get(c); + + // LIF magic byte + if (c != 0x70) { + return; + } + + is.seekg(7, ios::cur); + + if (!is.good()) { + return; + } + + is.get(c); + + // LIF memory byte + if (c != 0x2a) { + return; + } + + if (!is.good()) { + return; + } + + // length of xml metadata + unsigned unicodelenght; + is.read((char *)&unicodelenght, sizeof(unsigned)); + + // xml metadata + string xmlmetadata; + xmlmetadata.resize(unicodelenght); + for (unsigned i = 0; i < 2 * unicodelenght; i++) { + if (!is.good()) { + return; + } + + is.get(c); + + if (i % 2 == 0) { + if ((c >= 0x20) && (c <= 0x7e)) { + xmlmetadata[i / 2] = c; + } + else { + xmlmetadata[i / 2] = ' '; + } + } + } + + // print xml metadata + bool printxml = false; + if (printxml) { + for (auto& it : xmlmetadata) { + cout << it; + if (it == '>') { + cout << endl; + } + } + cout << endl; + } + + parseLifMetadata(xmlmetadata, parsedmetadata); + + unsigned long long datasize; + unsigned unicodeheadersize; + string headername; + + while (is.good()) { + datasize = 0; + unicodeheadersize = 0; + headername.clear(); + + is.get(c); + + if (c != 0x70) { + break; + } + + if (!is.good()) { + break; + } + + is.seekg(7, ios::cur); + + if (!is.good()) { + break; + } + + is.get(c); + + if (c != 0x2a) { + break; + } + + if (!is.good()) { + break; + } + + is.read((char*)&datasize, sizeof(unsigned long long)); + + is.get(c); + + if (c != 0x2a) { + break; + } + + if (!is.good()) { + break; + } + + is.read((char*)&unicodeheadersize, sizeof(unsigned)); + + if (!is.good()) { + break; + } + + headername.resize(unicodeheadersize); + for (unsigned i = 0; i < 2 * unicodeheadersize; i++) { + if (!is.good()) { + return; + } + + is.get(c); + + if (i % 2 == 0) { + if ((c >= 0x20) && (c <= 0x7e)) { + headername[i / 2] = c; + } + else { + headername[i / 2] = ' '; + } + } + } + + for (auto& it : parsedmetadata) { + if ((it.memoryblockid.compare(headername) == 0) && (it.memoryblocksize == datasize)) { + it.memoryblockoffsets.push_back((unsigned long long)is.tellg()); + break; + } + } + + is.seekg((streampos)datasize, ios::cur); + } + + // delete 3D images + bool delete3dimages = false; + if (delete3dimages) { + size_t pos = 0; + while (pos < parsedmetadata.size()) { + if ((parsedmetadata[pos].microscopytype == 1) && (parsedmetadata[pos].dimz > 1)) { + parsedmetadata.erase(parsedmetadata.begin() + pos); + } + else { + pos++; + } + } + } + + // delete empty images + bool deleteemptyimages = true; + if (deleteemptyimages) { + size_t pos = 0; + while (pos < parsedmetadata.size()) { + if (parsedmetadata[pos].memoryblocksize == 0) { + parsedmetadata.erase(parsedmetadata.begin() + pos); + } + else { + pos++; + } + } + } + + // delete tiles + bool deletetiles = true; + if (deletetiles) { + size_t pos = 0; + while (pos < parsedmetadata.size()) { + if (parsedmetadata[pos].tiles.size() > 1) { + cout << "deleting: " << endl; + parsedmetadata[pos].print(); + parsedmetadata.erase(parsedmetadata.begin() + pos); + } + else { + pos++; + } + } + } + + // expand z-layers (fluorescence) + bool expandzlayers = false; + if (expandzlayers) { + if (parsedmetadata.size() > 0) { + if (parsedmetadata[0].microscopytype == 1) { + + vector tmpmetadata; + + for (int i = 0; i < (int)parsedmetadata.size(); i++) { + + if (parsedmetadata[i].dimz > 1) { + + for (int j = 0; j < parsedmetadata[i].dimz; j++) { + tmpmetadata.push_back(parsedmetadata[i]); + + tmpmetadata.back().memoryblocksize = parsedmetadata[i].memoryblocksize / (unsigned long long)parsedmetadata[i].dimz; + + if (tmpmetadata.back().memoryblockoffsets.size() == 0) { + tmpmetadata.back().memoryblockoffsets.push_back(0); + } + + tmpmetadata.back().memoryblockoffsets.back() += (unsigned long long)j * tmpmetadata.back().memoryblocksize; + } + + } + else { + + tmpmetadata.push_back(parsedmetadata[i]); + + } + + } + + parsedmetadata = tmpmetadata; + } + } + } + + // expand color channels (fluorescence) + bool expandcolorchannels = false; + if (expandcolorchannels) { + if (parsedmetadata.size() > 0) { + if (parsedmetadata[0].microscopytype == 1) { + + vector tmpmetadata; + + for (int i = 0; i < (int)parsedmetadata.size(); i++) { + if (parsedmetadata[i].channels.size() == parsedmetadata[i].luts.size()) { + + for (int j = 0; j < (int)parsedmetadata[i].channels.size(); j++) { + + if (parsedmetadata[i].channels[j] == gray) { + tmpmetadata.push_back(parsedmetadata[i]); + + tmpmetadata.back().channels.clear(); + tmpmetadata.back().luts.clear(); + + tmpmetadata.back().channels.push_back(parsedmetadata[i].channels[j]); + tmpmetadata.back().luts.push_back(parsedmetadata[i].luts[j]); + + tmpmetadata.back().memoryblocksize = parsedmetadata[i].memoryblocksize / (unsigned long long)parsedmetadata[i].channels.size(); + + if (tmpmetadata.back().memoryblockoffsets.size() == 0) { + tmpmetadata.back().memoryblockoffsets.push_back(0); + } + + tmpmetadata.back().memoryblockoffsets.back() += (unsigned long long)j * tmpmetadata.back().memoryblocksize; + } + + } + + } + } + + parsedmetadata = tmpmetadata; + } + } + } + + // expand z-layers, color channels and group images with the same color channel (fluorescence) + bool expandfluorescence = true; + if (expandfluorescence) { + if (parsedmetadata.size() > 0) { + if (parsedmetadata[0].microscopytype == 1) { + + vector tmpmetadata; + unsigned long long memoryoffset; + int dimz; + + for (int i = 0; i < (int)parsedmetadata.size(); i++) { + + if (parsedmetadata[i].channels.size() == parsedmetadata[i].luts.size()) { + + for (int j = 0; j < (int)parsedmetadata[i].channels.size(); j++) { + + if (parsedmetadata[i].channels[j] == gray) { + + dimz = max(parsedmetadata[i].dimz, 1); + + tmpmetadata.push_back(parsedmetadata[i]); + + tmpmetadata.back().channels.clear(); + tmpmetadata.back().luts.clear(); + + tmpmetadata.back().channels.push_back(parsedmetadata[i].channels[j]); + tmpmetadata.back().luts.push_back(parsedmetadata[i].luts[j]); + + // fix image name for fluorescence images + if ((tmpmetadata.back().microscopytype == 1) && (tmpmetadata.back().luts.size() == 1) && (tmpmetadata.back().luts[0].size() > 0)) { + tmpmetadata.back().imagename += ", "; + tmpmetadata.back().imagename += tmpmetadata.back().luts[0].c_str(); + } + + //tmpmetadata.back().dimz = 1; + + tmpmetadata.back().memoryblocksize = parsedmetadata[i].memoryblocksize / ((unsigned long long)parsedmetadata[i].channels.size() * (unsigned long long)dimz); + + if (tmpmetadata.back().memoryblockoffsets.size() == 0) { + tmpmetadata.back().memoryblockoffsets.push_back(0); + } + + memoryoffset = tmpmetadata.back().memoryblockoffsets[0]; + tmpmetadata.back().memoryblockoffsets.clear(); + + for (int k = 0; k < dimz; k++) { + tmpmetadata.back().memoryblockoffsets.push_back(memoryoffset + (unsigned long long)k * parsedmetadata[i].memoryblocksize / (unsigned long long)dimz + (unsigned long long)j * tmpmetadata.back().memoryblocksize); + } + + } + + } + + } + + } + + parsedmetadata = tmpmetadata; + } + } + } + + // print parsed metadata + bool printparsedmetadata = false; + if (printparsedmetadata) { + for (auto& it : parsedmetadata) { + it.print(); + } + } +} + + +void parseLifMetadataSubTree(DOMElement* subtree, vector& parsedmetadata) { + DOMNode* currentNode3 = subtree->getFirstChild(); + while (currentNode3) { + + if (currentNode3->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement3 = dynamic_cast(currentNode3); + if (compareElementTagName(currentElement3, "Element")) { + + + cLifMetadata metadata; + metadata.imagename = getAttribute(currentElement3, "Name"); + parsedmetadata.push_back(metadata); + + vector subtreemetadata; + + + // childrens of Element + DOMNode* currentNode4 = currentElement3->getFirstChild(); + while (currentNode4) { + + if (currentNode4->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement4 = dynamic_cast(currentNode4); + if (compareElementTagName(currentElement4, "Memory")) { + + parsedmetadata.back().memoryblocksize = stoull(getAttribute(currentElement4, "Size")); + parsedmetadata.back().memoryblockid = getAttribute(currentElement4, "MemoryBlockID"); + + } + + if (compareElementTagName(currentElement4, "Data")) { + + + // childrens of Data + DOMNode* currentNode5 = currentElement4->getFirstChild(); + while (currentNode5) { + + if (currentNode5->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement5 = dynamic_cast(currentNode5); + if (compareElementTagName(currentElement5, "Image")) { + + + // childrens of Image + DOMNode* currentNode6 = currentElement5->getFirstChild(); + while (currentNode6) { + + if (currentNode6->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement6 = dynamic_cast(currentNode6); + if (compareElementTagName(currentElement6, "ImageDescription")) { + + + // childrens of ImageDescription + DOMNode* currentNode7 = currentElement6->getFirstChild(); + while (currentNode7) { + + if (currentNode7->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement7 = dynamic_cast(currentNode7); + if (compareElementTagName(currentElement7, "Dimensions")) { + + + // childrens of Dimensions + DOMNode* currentNode8 = currentElement7->getFirstChild(); + while (currentNode8) { + + if (currentNode8->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement8 = dynamic_cast(currentNode8); + if (compareElementTagName(currentElement8, "DimensionDescription")) { + + string dimid = getAttribute(currentElement8, "DimID"); + + if (dimid.compare("1") == 0) { + parsedmetadata.back().dimx = QVariant(getAttribute(currentElement8, "NumberOfElements").c_str()).toInt(); + parsedmetadata.back().width = QVariant(getAttribute(currentElement8, "Length").c_str()).toDouble(); + } + + if (dimid.compare("2") == 0) { + parsedmetadata.back().dimy = QVariant(getAttribute(currentElement8, "NumberOfElements").c_str()).toInt(); + parsedmetadata.back().height = QVariant(getAttribute(currentElement8, "Length").c_str()).toDouble(); + } + + if (dimid.compare("3") == 0) { + parsedmetadata.back().dimz = QVariant(getAttribute(currentElement8, "NumberOfElements").c_str()).toInt(); + } + + if (dimid.compare("10") == 0) { + parsedmetadata.back().dim10 = QVariant(getAttribute(currentElement8, "NumberOfElements").c_str()).toInt(); + } + + } + + } + + currentNode8 = currentNode8->getNextSibling(); + + } + + + } + + if (compareElementTagName(currentElement7, "Channels")) { + + + // childrens of Channels + DOMNode* currentNode8 = currentElement7->getFirstChild(); + while (currentNode8) { + + if (currentNode8->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement8 = dynamic_cast(currentNode8); + if (compareElementTagName(currentElement8, "ChannelDescription")) { + + eChannelType channeltype = (eChannelType)QVariant(getAttribute(currentElement8, "ChannelTag").c_str()).toInt(); + parsedmetadata.back().channels.push_back(channeltype); + + string lut = getAttribute(currentElement8, "LUTName"); + parsedmetadata.back().luts.push_back(lut); + + } + + } + + currentNode8 = currentNode8->getNextSibling(); + + } + + + } + + } + + currentNode7 = currentNode7->getNextSibling(); + + } + + + } + + + if (compareElementTagName(currentElement6, "Attachment")) { + + + if (getAttribute(currentElement6, "Name").compare("TileScanInfo") == 0) { + parsedmetadata.back().tilescaninfoflipx = QVariant(getAttribute(currentElement6, "FlipX").c_str()).toInt(); + parsedmetadata.back().tilescaninfoflipy = QVariant(getAttribute(currentElement6, "FlipY").c_str()).toInt(); + } + + // childrens of Attachment + DOMNode* currentNode7 = currentElement6->getFirstChild(); + while (currentNode7) { + + if (currentNode7->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement7 = dynamic_cast(currentNode7); + if (compareElementTagName(currentElement7, "ATLCameraSettingDefinition")) { + + parsedmetadata.back().flipx = QVariant(getAttribute(currentElement7, "FlipX").c_str()).toInt(); + parsedmetadata.back().flipy = QVariant(getAttribute(currentElement7, "FlipY").c_str()).toInt(); + parsedmetadata.back().magnification = QVariant(getAttribute(currentElement7, "Magnification").c_str()).toInt(); + parsedmetadata.back().stageposx = QVariant(getAttribute(currentElement7, "StagePosX").c_str()).toDouble(); + parsedmetadata.back().stageposy = QVariant(getAttribute(currentElement7, "StagePosY").c_str()).toDouble(); + parsedmetadata.back().microscopemodel = getAttribute(currentElement7, "MicroscopeModel"); + parsedmetadata.back().inversemicroscopemodel = QVariant(getAttribute(currentElement7, "IsInverseMicroscopeModel").c_str()).toInt(); + parsedmetadata.back().microscopytype = 0; + + } + + if (compareElementTagName(currentElement7, "ATLConfocalSettingDefinition")) { + + parsedmetadata.back().flipx = QVariant(getAttribute(currentElement7, "FlipX").c_str()).toInt(); + parsedmetadata.back().flipy = QVariant(getAttribute(currentElement7, "FlipY").c_str()).toInt(); + parsedmetadata.back().magnification = QVariant(getAttribute(currentElement7, "Magnification").c_str()).toInt(); + parsedmetadata.back().stageposx = QVariant(getAttribute(currentElement7, "StagePosX").c_str()).toDouble(); + parsedmetadata.back().stageposy = QVariant(getAttribute(currentElement7, "StagePosY").c_str()).toDouble(); + parsedmetadata.back().microscopemodel = getAttribute(currentElement7, "MicroscopeModel"); + parsedmetadata.back().inversemicroscopemodel = QVariant(getAttribute(currentElement7, "IsInverseMicroscopeModel").c_str()).toInt(); + parsedmetadata.back().microscopytype = 1; + + } + + if (compareElementTagName(currentElement7, "Tile")) { + + cTileInfo tileinfo; + tileinfo.fieldx = QVariant(getAttribute(currentElement7, "FieldX").c_str()).toInt(); + tileinfo.fieldy = QVariant(getAttribute(currentElement7, "FieldY").c_str()).toInt(); + tileinfo.posx = QVariant(getAttribute(currentElement7, "PosX").c_str()).toDouble(); + tileinfo.posy = QVariant(getAttribute(currentElement7, "PosY").c_str()).toDouble(); + parsedmetadata.back().tiles.push_back(tileinfo); + + } + + if (compareElementTagName(currentElement7, "HardwareSetting")) { + + + // childrens of HardwareSetting + DOMNode* currentNode8 = currentElement7->getFirstChild(); + while (currentNode8) { + + if (currentNode8->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement8 = dynamic_cast(currentNode8); + if (compareElementTagName(currentElement8, "LDM_Block_Sequential")) { + + + // childrens of LDM_Block_Sequential + DOMNode* currentNode9 = currentElement8->getFirstChild(); + while (currentNode9) { + + if (currentNode9->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement9 = dynamic_cast(currentNode9); + if (compareElementTagName(currentElement9, "LDM_Block_Sequential_Master")) { + + + // childrens of LDM_Block_Sequential_Master + DOMNode* currentNode10 = currentElement9->getFirstChild(); + while (currentNode10) { + + if (currentNode10->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement10 = dynamic_cast(currentNode10); + if (compareElementTagName(currentElement10, "ATLConfocalSettingDefinition")) { + + if (parsedmetadata.back().microscopytype == -1) { + parsedmetadata.back().magnification = QVariant(getAttribute(currentElement10, "Magnification").c_str()).toInt(); + parsedmetadata.back().stageposx = QVariant(getAttribute(currentElement10, "StagePosX").c_str()).toDouble(); + parsedmetadata.back().stageposy = QVariant(getAttribute(currentElement10, "StagePosY").c_str()).toDouble(); + parsedmetadata.back().microscopemodel = getAttribute(currentElement10, "MicroscopeModel"); + parsedmetadata.back().inversemicroscopemodel = QVariant(getAttribute(currentElement10, "IsInverseMicroscopeModel").c_str()).toInt(); + parsedmetadata.back().microscopytype = 1; + } + + } + + } + + currentNode10 = currentNode10->getNextSibling(); + + } + + + } + + } + + currentNode9 = currentNode9->getNextSibling(); + + } + + + } + + } + + currentNode8 = currentNode8->getNextSibling(); + + } + + + } + + } + + currentNode7 = currentNode7->getNextSibling(); + + } + + + } + + } + + currentNode6 = currentNode6->getNextSibling(); + + } + + + } + + } + + currentNode5 = currentNode5->getNextSibling(); + + } + + + } + + if (compareElementTagName(currentElement4, "Children")) { + + + parseLifMetadataSubTree(currentElement4, subtreemetadata); + + } + + } + + currentNode4 = currentNode4->getNextSibling(); + + } + + + for (auto& it : subtreemetadata) { + parsedmetadata.push_back(it); + } + + + } + + } + + currentNode3 = currentNode3->getNextSibling(); + + } + +} + + +void parseLifMetadata(string& metadata, vector& parsedmetadata) { + MemBufInputSource lifxml((const XMLByte*)metadata.c_str(), metadata.size(), "lif metadata"); + + XercesDOMParser* parser = new XercesDOMParser(); + parser->parse(lifxml); + + DOMDocument* document = parser->getDocument(); + DOMElement* root = document->getDocumentElement(); + + if (!root) { + delete parser; + return; + } + + if (compareElementTagName(root, "LMSDataContainerHeader")) { + + // childrens of LMSDataContainerHeader + DOMNode* currentNode1 = root->getFirstChild(); + while (currentNode1) { + + if (currentNode1->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement1 = dynamic_cast(currentNode1); + if (compareElementTagName(currentElement1, "Element")) { + + + // childrens of Element + DOMNode* currentNode2 = currentElement1->getFirstChild(); + while (currentNode2) { + + if (currentNode2->getNodeType() == DOMNode::ELEMENT_NODE) { + + DOMElement* currentElement2 = dynamic_cast(currentNode2); + if (compareElementTagName(currentElement2, "Children")) { + + + // childrens of Children + parseLifMetadataSubTree(currentElement2, parsedmetadata); + + + } + + } + + currentNode2 = currentNode2->getNextSibling(); + + } + + + } + + } + + currentNode1 = currentNode1->getNextSibling(); + + } + + } + + delete parser; +} + + +cImageWindowTabOptical::cImageWindowTabOptical(QWidget *parent) : QWidget(parent) { + gridlayout = new QGridLayout(); + + + labelstartfrom = new QLabel("Begin import at : "); + + comboboxstartfrom = new QComboBox(); + + gridlayout->addWidget(labelstartfrom, 0, 0, 1, 1); + gridlayout->addWidget(comboboxstartfrom, 0, 1, 1, 9); + + + labelusevaluesfrom = new QLabel("Navigation : "); + + comboboxusevaluesfrom = new QComboBox(); + + gridlayout->addWidget(labelusevaluesfrom, 1, 0, 1, 1); + gridlayout->addWidget(comboboxusevaluesfrom, 1, 1, 1, 9); + + + labellif = new QLabel("LIF File : "); + lineeditlif = new QLineEdit(); + buttonlif = new QPushButton("Browse"); + + gridlayout->addWidget(labellif, 2, 0, 1, 1); + gridlayout->addWidget(lineeditlif, 2, 1, 1, 8); + gridlayout->addWidget(buttonlif, 2, 9, 1, 1); + + + labelfilenames = new QLabel("TIF Images (optional) : "); + + listwidgetfilenames = new QListWidget(); + listwidgetfilenames->setSelectionMode(QAbstractItemView::NoSelection); + + buttonfilenames = new QPushButton("Browse"); + + gridlayout->addWidget(labelfilenames, 3, 0, 1, 1); + gridlayout->addWidget(listwidgetfilenames, 3, 1, 1, 9); + gridlayout->addWidget(buttonfilenames, 4, 9, 1, 1); + + + setLayout(gridlayout); + + connect(buttonfilenames, SIGNAL(released()), this, SLOT(browseButtonReleased())); + connect(buttonlif, SIGNAL(released()), this, SLOT(lifButtonReleased())); +} + + +void cImageWindowTabOptical::setFormValues(QString& lastdirmicroscopyimage, int numberoflayers) { + this->lastdirmicroscopyimage = &lastdirmicroscopyimage; + + QString layername = "Microscopy Image "; + QString tmpname; + comboboxstartfrom->clear(); + comboboxusevaluesfrom->clear(); + + tmpname = layername + "(nav.)"; + comboboxusevaluesfrom->insertItem(0, tmpname); + + for (int i = 0; i < numberoflayers - 4; i++) { + tmpname = layername + QVariant(i + 1).toString(); + comboboxstartfrom->insertItem(i, tmpname); + comboboxusevaluesfrom->insertItem(i + 1, tmpname); + } + + lineeditlif->clear(); + listwidgetfilenames->clear(); + imagenames.clear(); +} + + +void cImageWindowTabOptical::getFormValues(int& startfromindex, QStringList& tiffilenames, int& navigationindex, QString& liffilename) { + startfromindex = comboboxstartfrom->currentIndex(); + tiffilenames = imagenames; + navigationindex = comboboxusevaluesfrom->currentIndex(); + liffilename = lineeditlif->text(); +} + + +cImageWindowTabOptical::~cImageWindowTabOptical() { + delete labelstartfrom; + delete comboboxstartfrom; + + delete labelusevaluesfrom; + delete comboboxusevaluesfrom; + + delete labellif; + delete lineeditlif; + delete buttonlif; + + delete labelfilenames; + delete listwidgetfilenames; + delete buttonfilenames; + + delete gridlayout; +} + + +void cImageWindowTabOptical::browseButtonReleased() { + QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Select Images..."), *lastdirmicroscopyimage, tr("Images (*.tif *.tiff)")); + if (!filenames.isEmpty()) { + listwidgetfilenames->clear(); + for (auto& it : filenames) { + listwidgetfilenames->addItem(it); + } + imagenames = filenames; + } +} + + +void cImageWindowTabOptical::lifButtonReleased() { + QString filename = QFileDialog::getOpenFileName(this, tr("Select LIF file ..."), *lastdirmicroscopyimage, tr("LIF Files (*.lif)")); + if (!filename.isEmpty()) { + lineeditlif->setText(filename); + } +} + diff --git a/CycloBranch/gui/cImageWindowTabOptical.h b/CycloBranch/gui/cImageWindowTabOptical.h new file mode 100644 index 0000000..09dd740 --- /dev/null +++ b/CycloBranch/gui/cImageWindowTabOptical.h @@ -0,0 +1,425 @@ +/** + \file cImageWindowTabOptical.h + \brief The implementation of a tab used to import images from light microscopy. +*/ + + +#ifndef _CIMAGEWINDOWTABOPTICAL_H +#define _CIMAGEWINDOWTABOPTICAL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "core/utilities.h" + + +using namespace xercesc; + + +/** + \brief Color channels. +*/ +enum eChannelType { + gray = 0, + red = 1, + green = 2, + blue = 3 +}; + + +/** + \brief Description of an image tile. +*/ +struct cTileInfo { + + /** + \brief Tile logical x coordinate. + */ + int fieldx; + + + /** + \brief Tile logical y coordinate. + */ + int fieldy; + + + /** + \brief Tile position x [m]. + */ + double posx; + + + /** + \brief Tile position y [m]. + */ + double posy; + + + /** + \brief The constructor. + */ + cTileInfo() { + fieldx = 0; + fieldy = 0; + posx = 0; + posy = 0; + } + + + /** + \brief Print the metadata. + */ + void print() { + cout << "fieldx: " << fieldx << endl; + cout << "fieldy: " << fieldy << endl; + cout << "posx: " << posx << endl; + cout << "posy: " << posy << endl; + } + +}; + + +/** + \brief A structure to keep parsed lif metadata. +*/ +struct cLifMetadata { + + /** + \brief Image name. + */ + string imagename; + + + /** + \brief Type of microscopy technique (-1 = unknown, 0 = optical, 1 = fluorescence). + */ + int microscopytype; + + + /** + \brief Microscope model. + */ + string microscopemodel; + + + /** + \brief Inverse microscope model. + */ + int inversemicroscopemodel; + + + /** + \brief Magnification. + */ + int magnification; + + + /** + \brief Flip X. + */ + int flipx; + + + /** + \brief Flip Y. + */ + int flipy; + + + /** + \brief Width [pixels]. + */ + int dimx; + + + /** + \brief Height [pixels]. + */ + int dimy; + + + /** + \brief Depth [layers]. + */ + int dimz; + + + /** + \brief Number of tiles. + */ + int dim10; + + + /** + \brief Width [m]. + */ + double width; + + + /** + \brief Height [m]. + */ + double height; + + + /** + \brief Stage position x [m]. + */ + double stageposx; + + + /** + \brief Stage position y [m]. + */ + double stageposy; + + + /** + \brief Memory block size. + */ + long long unsigned memoryblocksize; + + + /** + \brief Memory block ID. + */ + string memoryblockid; + + + /** + \brief Offsets of memory blocks. + */ + vector memoryblockoffsets; + + + /** + \brief Color channels. + */ + vector channels; + + + /** + \brief LUTs. + */ + vector luts; + + + /** + \brief Flip X from TileScanInfo. + */ + int tilescaninfoflipx; + + + /** + \brief Flip Y from TileScanInfo. + */ + int tilescaninfoflipy; + + + /** + \brief Vector of tiles. + */ + vector tiles; + + + /** + \brief The constructor. + */ + cLifMetadata() { + imagename.clear(); + microscopytype = -1; + microscopemodel.clear(); + inversemicroscopemodel = 0; + magnification = 0; + flipx = 0; + flipy = 0; + dimx = 0; + dimy = 0; + dimz = 0; + dim10 = 0; + width = 0; + height = 0; + stageposx = 0; + stageposy = 0; + memoryblocksize = 0; + memoryblockid = ""; + memoryblockoffsets.clear(); + channels.clear(); + luts.clear(); + tilescaninfoflipx = -1; + tilescaninfoflipy = -1; + tiles.clear(); + } + + + /** + \brief Print metadata. + */ + void print() { + cout << "imagename: " << imagename << endl; + cout << "microscopytype: " << microscopytype << endl; + cout << "microscopemodel: " << microscopemodel << endl; + cout << "inversemicroscopemodel: " << inversemicroscopemodel << endl; + cout << "magnification: " << magnification << endl; + cout << "flipx: " << flipx << endl; + cout << "flipy: " << flipy << endl; + cout << "dimx: " << dimx << endl; + cout << "dimy: " << dimy << endl; + cout << "dimz: " << dimz << endl; + cout << "dim10: " << dim10 << endl; + cout << "width: " << width << endl; + cout << "height: " << height << endl; + cout << "stageposx: " << stageposx << endl; + cout << "stageposy: " << stageposy << endl; + cout << "memoryblocksize: " << memoryblocksize << endl; + cout << "memoryblockid: " << memoryblockid << endl; + + for (int i = 0; i < (int)memoryblockoffsets.size(); i++) { + cout << "memoryblockoffset " << i + 1 << ": " << memoryblockoffsets[i] << endl; + } + + for (int i = 0; i < (int)channels.size(); i++) { + cout << "channel " << i + 1 << ": " << channels[i] << endl; + } + + for (int i = 0; i < (int)luts.size(); i++) { + cout << "lut " << i + 1 << ": " << luts[i] << endl; + } + + cout << "tilescaninfoflipx: " << tilescaninfoflipx << endl; + cout << "tilescaninfoflipy: " << tilescaninfoflipy << endl; + + double avgposx = 0; + double avgposy = 0; + + for (auto& it : tiles) { + it.print(); + + avgposx += it.posx; + avgposy += it.posy; + } + + if (tiles.size() > 0) { + avgposx /= (double)tiles.size(); + avgposy /= (double)tiles.size(); + + cout << "avgposx: " << avgposx << endl; + cout << "avgpoxy: " << avgposy << endl; + } + + cout << endl; + } + +}; + + +/** + \brief Get metadata from a lif file. + \param filename input lif file + \param parsedmetadata output vector of parsed metadata +*/ +void readLifMetadata(string filename, vector& parsedmetadata); + + +/** + \brief Parse metadata from a subtree of a lif file. + \param subtree root of a subtree + \param parsedmetadata output vector of parsed metadata +*/ +void parseLifMetadataSubTree(DOMElement* subtree, vector& parsedmetadata); + + +/** + \brief Parse metadata from a lif file. + \param metadata input metadata + \param parsedmetadata output vector of parsed metadata +*/ +void parseLifMetadata(string& metadata, vector& parsedmetadata); + + +/** + \brief The class representing a tab used to import images from light microscopy. +*/ +class cImageWindowTabOptical : public QWidget +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param parent pointer to a parent widget + */ + explicit cImageWindowTabOptical(QWidget *parent = 0); + + + /** + \brief Initialize values in the form. + \param lastdirmicroscopyimage a default directory with microscopy images + \param numberoflayers number of layers + */ + void setFormValues(QString& lastdirmicroscopyimage, int numberoflayers); + + + /** + \brief Get the values from the form. + \param startfromindex starting index to open microscopy images + \param tiffilenames a list of tif images to be opened + \param navigationindex index of navigation image + \param liffilename a lif file from which the metadata are read + */ + void getFormValues(int& startfromindex, QStringList& tiffilenames, int& navigationindex, QString& liffilename); + + + /** + \brief The destructor. + */ + ~cImageWindowTabOptical(); + + +private: + + QString* lastdirmicroscopyimage; + + QGridLayout* gridlayout; + + QLabel* labelstartfrom; + QComboBox* comboboxstartfrom; + + QLabel* labelusevaluesfrom; + QComboBox* comboboxusevaluesfrom; + + QLabel* labellif; + QLineEdit* lineeditlif; + QPushButton* buttonlif; + + QLabel* labelfilenames; + QListWidget* listwidgetfilenames; + QPushButton* buttonfilenames; + QStringList imagenames; + + +private slots: + + void browseButtonReleased(); + + void lifButtonReleased(); + + +}; + + +#endif + diff --git a/CycloBranch/gui/cImageWindowWidget.cpp b/CycloBranch/gui/cImageWindowWidget.cpp index 2a6fc9a..7d82651 100644 --- a/CycloBranch/gui/cImageWindowWidget.cpp +++ b/CycloBranch/gui/cImageWindowWidget.cpp @@ -27,7 +27,7 @@ cImageWindowWidget::cImageWindowWidget() { absoluteintensity = false; layersvector.clear(); - activelayer = layer_compounds; + activelayer = 0; xfrom = 0; xto = 0; @@ -61,6 +61,7 @@ cImageWindowWidget::cImageWindowWidget() { currentheight = 1; showselection = false; + keepaspectratio = false; microscopynavigationcenterx = 0; microscopynavigationcentery = 0; @@ -92,26 +93,26 @@ cImageWindowWidget::~cImageWindowWidget() { void cImageWindowWidget::setOpticalImage(QImage* image) { - *layersvector[layer_optical_image].pixmap = QPixmap::fromImage(image->convertToFormat(QImage::Format_ARGB32_Premultiplied)); + *layersvector[1].pixmap = QPixmap::fromImage(image->convertToFormat(QImage::Format_ARGB32_Premultiplied)); currentscale = 1; rulervalue = recalculateRulerValue(currentscale); emit updateRuler(rulervalue); - layersvector[layer_optical_image].ispixmapdefined = true; + layersvector[1].ispixmapdefined = true; redrawScene(); } void cImageWindowWidget::setHistologyImage(QImage* histologyimage) { - *layersvector[layer_histology_image].pixmap = QPixmap::fromImage(histologyimage->convertToFormat(QImage::Format_ARGB32_Premultiplied)); - layersvector[layer_histology_image].ispixmapdefined = true; + *layersvector[2].pixmap = QPixmap::fromImage(histologyimage->convertToFormat(QImage::Format_ARGB32_Premultiplied)); + layersvector[2].ispixmapdefined = true; redrawScene(); } -void cImageWindowWidget::setMicroscopyImage(eLayerType layer, QImage* microscopyimage) { +void cImageWindowWidget::setMicroscopyImage(int layer, QImage* microscopyimage) { *layersvector[layer].pixmap = QPixmap::fromImage(microscopyimage->convertToFormat(QImage::Format_ARGB32_Premultiplied)); layersvector[layer].ispixmapdefined = true; redrawScene(); @@ -178,15 +179,17 @@ void cImageWindowWidget::setDefaultMaxXY(int defaultmaxx, int defaultmaxy, int d void cImageWindowWidget::setHistologyPosition(int x, int y, int width, int height, double angle) { - layersvector[layer_histology_image].x = x; - layersvector[layer_histology_image].y = y; - layersvector[layer_histology_image].width = width; - layersvector[layer_histology_image].height = height; - layersvector[layer_histology_image].angle = angle; + layersvector[2].x = x; + layersvector[2].y = y; + layersvector[2].width = width; + layersvector[2].height = height; + layersvector[2].angle = angle; } -void cImageWindowWidget::setMicroscopyPosition(eLayerType layer, double x, double y, double width, double height, double angle) { +void cImageWindowWidget::setMicroscopyPosition(int layer, bool flipx, bool flipy, double x, double y, double width, double height, double angle) { + layersvector[layer].fliphorizontally = flipx; + layersvector[layer].flipvertically = flipy; layersvector[layer].x = x; layersvector[layer].y = y; layersvector[layer].width = width; @@ -195,13 +198,13 @@ void cImageWindowWidget::setMicroscopyPosition(eLayerType layer, double x, doubl } -void cImageWindowWidget::goToMicroscopyPosition(eLayerType layer) { - if (!layersvector[layer_optical_image].ispixmapdefined || !layersvector[layer].ispixmapdefined) { +void cImageWindowWidget::goToMicroscopyPosition(int layer) { + if (!layersvector[1].ispixmapdefined || !layersvector[layer].ispixmapdefined) { return; } - horizontalScrollBar()->setValue(layersvector[layer].lastx); - verticalScrollBar()->setValue(layersvector[layer].lasty); + horizontalScrollBar()->setValue(max(0.0, layersvector[layer].lastx - 250.0)); + verticalScrollBar()->setValue(max(0.0, layersvector[layer].lasty - 100.0)); } @@ -218,6 +221,39 @@ void cImageWindowWidget::redraw() { } +void cImageWindowWidget::clearLayers() { + activelayer = 0; + + size_t size = layersvector.size(); + layersvector.clear(); + layersvector.resize(size); +} + + +void cImageWindowWidget::clearLayer(int layer) { + if ((layer >= 0) && (layer < layersvector.size())) { + layersvector[layer].clear(); + } +} + + +void cImageWindowWidget::setKeepAspectRatio(bool state) { + keepaspectratio = state; + + // simulate mouseMoveEvent + if ((pressedx != -1) && (pressedy != -1)) { + if (layersvector[1].ispixmapdefined) { + updateSelectionGroup(); + } + } +} + + +void cImageWindowWidget::setNavigationLayer(int layer, int navigation) { + layersvector[layer].navigationlayer = navigation; +} + + void cImageWindowWidget::wheelEvent(QWheelEvent *event) { if (event->delta() > 0) { zoomIn(); @@ -233,7 +269,7 @@ void cImageWindowWidget::wheelEvent(QWheelEvent *event) { void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { QGraphicsView::mousePressEvent(event); - if (layersvector[layer_optical_image].ispixmapdefined) { + if (layersvector[1].ispixmapdefined) { if (event->button() == Qt::LeftButton) { QPointF p = mapToScene(event->x(), event->y()); @@ -247,7 +283,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { int transformedy = currenty; double tmpangle; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { QTransform transform; tmpangle = prepareTransformation(selectionrect->rect(), transform, layersvector[activelayer].fliphorizontally, layersvector[activelayer].flipvertically, layersvector[activelayer].angle, true); transform.map(currentx, currenty, &transformedx, &transformedy); @@ -259,7 +295,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { if ((abs(transformedx - selectionrect->rect().x()) < 5) && (abs(transformedy - selectionrect->rect().y()) < 5)) { setCursor(Qt::SizeFDiagCursor); cursoractivity = cursoractivity_resize_top_left; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeBDiagCursor); } @@ -268,7 +304,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { else if ((abs(transformedx - selectionrect->rect().x() - selectionrect->rect().width()) < 5) && (abs(transformedy - selectionrect->rect().y()) < 5)) { setCursor(Qt::SizeBDiagCursor); cursoractivity = cursoractivity_resize_top_right; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeFDiagCursor); } @@ -277,7 +313,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { else if ((abs(transformedx - selectionrect->rect().x()) < 5) && (abs(transformedy - selectionrect->rect().y() - selectionrect->rect().height()) < 5)) { setCursor(Qt::SizeBDiagCursor); cursoractivity = cursoractivity_resize_bottom_left; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeFDiagCursor); } @@ -286,7 +322,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { else if ((abs(transformedx - selectionrect->rect().x() - selectionrect->rect().width()) < 5) && (abs(transformedy - selectionrect->rect().y() - selectionrect->rect().height()) < 5)) { setCursor(Qt::SizeFDiagCursor); cursoractivity = cursoractivity_resize_bottom_right; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeBDiagCursor); } @@ -295,7 +331,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { else if ((abs(transformedx - selectionrect->rect().x()) < 5) && (transformedy >= selectionrect->rect().y()) && (transformedy <= selectionrect->rect().y() + selectionrect->rect().height())) { setCursor(Qt::SizeHorCursor); cursoractivity = cursoractivity_resize_left; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeVerCursor); } @@ -304,7 +340,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { else if ((abs(transformedx - selectionrect->rect().x() - selectionrect->rect().width()) < 5) && (transformedy >= selectionrect->rect().y()) && (transformedy <= selectionrect->rect().y() + selectionrect->rect().height())) { setCursor(Qt::SizeHorCursor); cursoractivity = cursoractivity_resize_right; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeVerCursor); } @@ -313,7 +349,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { else if ((abs(transformedy - selectionrect->rect().y()) < 5) && (transformedx >= selectionrect->rect().x()) && (transformedx <= selectionrect->rect().x() + selectionrect->rect().width())) { setCursor(Qt::SizeVerCursor); cursoractivity = cursoractivity_resize_top; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeHorCursor); } @@ -322,7 +358,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { else if ((abs(transformedy - selectionrect->rect().y() - selectionrect->rect().height()) < 5) && (transformedx >= selectionrect->rect().x()) && (transformedx <= selectionrect->rect().x() + selectionrect->rect().width())) { setCursor(Qt::SizeVerCursor); cursoractivity = cursoractivity_resize_bottom; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeHorCursor); } @@ -377,7 +413,7 @@ void cImageWindowWidget::mousePressEvent(QMouseEvent *event) { void cImageWindowWidget::mouseMoveEvent(QMouseEvent *event) { QGraphicsView::mouseMoveEvent(event); - if (layersvector[layer_optical_image].ispixmapdefined) { + if (layersvector[1].ispixmapdefined) { QPointF p = mapToScene(event->x(), event->y()); currentx = (int)p.x(); @@ -394,13 +430,13 @@ void cImageWindowWidget::mouseMoveEvent(QMouseEvent *event) { void cImageWindowWidget::mouseReleaseEvent(QMouseEvent *event) { QGraphicsView::mouseReleaseEvent(event); - if (layersvector[layer_optical_image].ispixmapdefined) { + if (layersvector[1].ispixmapdefined) { int xmin, xmax, ymin, ymax; qreal rx1, ry1, rx2, ry2; // select region tool - if (activelayer == layer_compounds) { + if (activelayer == 0) { if (pressedx == currentx) { pressedx = -1; @@ -440,7 +476,7 @@ void cImageWindowWidget::mouseReleaseEvent(QMouseEvent *event) { } // correlate image - if (activelayer == layer_optical_image) { + if (activelayer == 1) { if (pressedx == currentx) { pressedx = -1; @@ -484,7 +520,7 @@ void cImageWindowWidget::mouseReleaseEvent(QMouseEvent *event) { } // set histology - if (activelayer == layer_histology_image) { + if (activelayer == 2) { if (pressedx == currentx) { pressedx = -1; @@ -510,12 +546,12 @@ void cImageWindowWidget::mouseReleaseEvent(QMouseEvent *event) { redrawScene(); - emit updateHistologyPosition(x, y, width, height, layersvector[layer_histology_image].angle); + emit updateHistologyPosition(x, y, width, height, layersvector[2].angle); } } // set microscopy - if ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end)) { + if (activelayer >= 3) { if (pressedx == currentx) { pressedx = -1; @@ -559,7 +595,7 @@ void cImageWindowWidget::mouseReleaseEvent(QMouseEvent *event) { redrawScene(); - emit updateMicroscopyPosition(layersvector[activelayer].x, layersvector[activelayer].y, layersvector[activelayer].width, layersvector[activelayer].height, layersvector[activelayer].angle); + emit updateMicroscopyPosition(layersvector[activelayer].fliphorizontally, layersvector[activelayer].flipvertically, layersvector[activelayer].x, layersvector[activelayer].y, layersvector[activelayer].width, layersvector[activelayer].height, layersvector[activelayer].angle); } } @@ -647,15 +683,15 @@ void cImageWindowWidget::redrawScene() { scene->addItem(selectionrect); scene->addItem(selectionsimpletextitem); - if (!((int)layersvector.size() >= layer_optical_image + 1) || !layersvector[layer_optical_image].ispixmapdefined) { - scene->addText("Please, open an optical image."); + if (!((int)layersvector.size() >= 2) || !layersvector[1].ispixmapdefined) { + scene->addText("Please, open an optical image ('File->Open Image', CTRL + O) or load a previously saved configuration ('File->Load Layers', CTRL + L)."); return; } QRect rect_viewport(0, 0, viewport()->width(), viewport()->height()); QRectF rect_scene = mapToScene(rect_viewport).boundingRect(); - QPixmap scaledpixmap = layersvector[layer_optical_image].pixmap->copy(rect_scene.x() / currentscale, rect_scene.y() / currentscale, rect_scene.width() / currentscale + 1, rect_scene.height() / currentscale + 1); + QPixmap scaledpixmap = layersvector[1].pixmap->copy(rect_scene.x() / currentscale, rect_scene.y() / currentscale, rect_scene.width() / currentscale + 1, rect_scene.height() / currentscale + 1); if (scaledpixmap.isNull()) { return; @@ -672,36 +708,36 @@ void cImageWindowWidget::redrawScene() { return; } - currentwidth = layersvector[layer_optical_image].pixmap->width()*currentscale; - currentheight = layersvector[layer_optical_image].pixmap->height()*currentscale; + currentwidth = layersvector[1].pixmap->width()*currentscale; + currentheight = layersvector[1].pixmap->height()*currentscale; - if (((int)layersvector.size() >= layer_optical_image + 1) && layersvector[layer_optical_image].checked) { + if (((int)layersvector.size() >= 2) && layersvector[1].checked) { QPixmap alphapixmap(scaledpixmap.size()); alphapixmap.fill(Qt::transparent); QPainter painter(&alphapixmap); - painter.setOpacity((double)layersvector[layer_optical_image].alpha / 100.0); + painter.setOpacity((double)layersvector[1].alpha / 100.0); painter.drawPixmap(0, 0, scaledpixmap); painter.end(); QGraphicsPixmapItem* pixmapitem = scene->addPixmap(alphapixmap); pixmapitem->setPos(rect_scene.x(), rect_scene.y()); - pixmapitem->setZValue(layersvector[layer_optical_image].zvalue); + pixmapitem->setZValue(layersvector[1].zvalue); } - if (((int)layersvector.size() >= layer_histology_image + 1) && layersvector[layer_histology_image].ispixmapdefined) { - if (layersvector[layer_histology_image].checked) { - if ((layersvector[layer_histology_image].width * currentscale > 1) && (layersvector[layer_histology_image].height * currentscale > 1)) { + if (((int)layersvector.size() >= 3) && layersvector[2].ispixmapdefined) { + if (layersvector[2].checked) { + if ((layersvector[2].width * currentscale > 1) && (layersvector[2].height * currentscale > 1)) { - QPixmap scaledhistologypixmap = layersvector[layer_histology_image].pixmap->scaled((int)layersvector[layer_histology_image].width, (int)layersvector[layer_histology_image].height); + QPixmap scaledhistologypixmap = layersvector[2].pixmap->scaled((int)layersvector[2].width, (int)layersvector[2].height); int historigcenterx = scaledhistologypixmap.rect().center().x(); int historigcentery = scaledhistologypixmap.rect().center().y(); QTransform transform; transform.translate((qreal)historigcenterx, (qreal)historigcentery); - transform.scale(layersvector[layer_histology_image].flipvertically ? -1 : 1, layersvector[layer_histology_image].fliphorizontally ? -1 : 1); - transform.rotate(layersvector[layer_histology_image].angle); + transform.scale(layersvector[2].flipvertically ? -1 : 1, layersvector[2].fliphorizontally ? -1 : 1); + transform.rotate(layersvector[2].angle); transform.translate(-(qreal)historigcenterx, -(qreal)historigcentery); scaledhistologypixmap = scaledhistologypixmap.transformed(transform); @@ -710,21 +746,21 @@ void cImageWindowWidget::redrawScene() { int histnewwidth = scaledhistologypixmap.width(); int histnewheight = scaledhistologypixmap.height(); - if (((qreal)(layersvector[layer_histology_image].x + histnewwidth + historigcenterx - histnewcenterx) * currentscale > rect_scene.x()) && ((qreal)(layersvector[layer_histology_image].y + histnewheight + historigcentery - histnewcentery) * currentscale > rect_scene.y())) { - scaledhistologypixmap = scaledhistologypixmap.copy(max(rect_scene.x() / currentscale - (qreal)(layersvector[layer_histology_image].x + historigcenterx - histnewcenterx), 0.0), max(rect_scene.y() / currentscale - (qreal)(layersvector[layer_histology_image].y + historigcentery - histnewcentery), 0.0), rect_scene.width() / currentscale + 1, rect_scene.height() / currentscale + 1); + if (((qreal)(layersvector[2].x + histnewwidth + historigcenterx - histnewcenterx) * currentscale > rect_scene.x()) && ((qreal)(layersvector[2].y + histnewheight + historigcentery - histnewcentery) * currentscale > rect_scene.y())) { + scaledhistologypixmap = scaledhistologypixmap.copy(max(rect_scene.x() / currentscale - (qreal)(layersvector[2].x + historigcenterx - histnewcenterx), 0.0), max(rect_scene.y() / currentscale - (qreal)(layersvector[2].y + historigcentery - histnewcentery), 0.0), rect_scene.width() / currentscale + 1, rect_scene.height() / currentscale + 1); scaledhistologypixmap = scaledhistologypixmap.scaled(scaledhistologypixmap.width()*currentscale, scaledhistologypixmap.height()*currentscale); QPixmap alphapixmap(scaledhistologypixmap.size()); alphapixmap.fill(Qt::transparent); QPainter painter(&alphapixmap); - painter.setOpacity((double)layersvector[layer_histology_image].alpha / 100.0); + painter.setOpacity((double)layersvector[2].alpha / 100.0); painter.drawPixmap(0, 0, scaledhistologypixmap); painter.end(); QGraphicsPixmapItem* pixmapitem = scene->addPixmap(alphapixmap); - pixmapitem->setPos(max(rect_scene.x(), (qreal)(layersvector[layer_histology_image].x + historigcenterx - histnewcenterx) * currentscale), max(rect_scene.y(), (qreal)(layersvector[layer_histology_image].y + historigcentery - histnewcentery) * currentscale)); - pixmapitem->setZValue(layersvector[layer_histology_image].zvalue); + pixmapitem->setPos(max(rect_scene.x(), (qreal)(layersvector[2].x + historigcenterx - histnewcenterx) * currentscale), max(rect_scene.y(), (qreal)(layersvector[2].y + historigcentery - histnewcentery) * currentscale)); + pixmapitem->setZValue(layersvector[2].zvalue); } } @@ -734,10 +770,11 @@ void cImageWindowWidget::redrawScene() { microscopynavigationcenterx = 0; microscopynavigationcentery = 0; - for (int i = layer_microscopy_navigation_image; i < layer_end; i++) { + int size = (int)layersvector.size(); + for (int i = 3; i < size; i++) { if (((int)layersvector.size() >= i + 1) && layersvector[i].ispixmapdefined) { - if ((i == layer_microscopy_navigation_image) || (layersvector[i].checked)) { - drawMicroscopyImage((eLayerType)i, rect_scene, currentwidth, currentheight); + if ((i == 3) || (layersvector[i].checked)) { + drawMicroscopyImage(i, rect_scene, currentwidth, currentheight); } } } @@ -777,7 +814,7 @@ void cImageWindowWidget::redrawScene() { stringstream scalemin; stringstream scalemax; - if (((int)layersvector.size() >= layer_compounds + 1) && layersvector[layer_compounds].checked) { + if (((int)layersvector.size() >= 1) && layersvector[0].checked) { if (maximumintensity > 0) { @@ -833,7 +870,7 @@ void cImageWindowWidget::redrawScene() { rectitem->setPen(Qt::NoPen); QColor color; - double alpha = (double)layersvector[layer_compounds].alpha / 100.0; + double alpha = (double)layersvector[0].alpha / 100.0; if (!absoluteintensity) { color.setHslF(min(max((double)1 - (it->relativeintensity*(hue_max - hue_min) / maximumintensity + hue_min), 0.0), 1.0), 0.5, 0.5, alpha); @@ -846,7 +883,7 @@ void cImageWindowWidget::redrawScene() { string tooltip = it->description + "\nID: " + to_string(it->id) + "\nX: " + to_string(it->x) + "\nY: " + to_string(it->y) + "\nsum of rel. intensities: " + to_string(it->relativeintensity) + "%\nsum of abs. intensities: " + QVariant(cropDecimalsByteArray(it->absoluteintensity)).toString().toStdString(); rectitem->setToolTip(tooltip.c_str()); - rectitem->setZValue(layersvector[layer_compounds].zvalue); + rectitem->setZValue(layersvector[0].zvalue); scene->addItem(rectitem); } @@ -1007,8 +1044,11 @@ void cImageWindowWidget::redrawScene() { rulerend->setZValue(1001); scene->addItem(rulerend); + stringstream rulerstream; + rulerstream << std::fixed << std::setprecision(3) << rulervalue; + QString rulerhtml = ""; - rulerhtml += to_string(rulervalue).c_str(); + rulerhtml += rulerstream.str().c_str(); rulerhtml += " um"; QGraphicsTextItem *rulertext = scene->addText(""); @@ -1024,7 +1064,7 @@ void cImageWindowWidget::redrawScene() { } -void cImageWindowWidget::drawMicroscopyImage(eLayerType layer, QRectF& rect_scene, int currentwidth, int currentheight) { +void cImageWindowWidget::drawMicroscopyImage(int layer, QRectF& rect_scene, int currentwidth, int currentheight) { int micrometerswidth, micrometersheight; switch (vendor) { @@ -1051,7 +1091,7 @@ void cImageWindowWidget::drawMicroscopyImage(eLayerType layer, QRectF& rect_scen QTransform transform; transform.translate((qreal)microscopyorigcenterx, (qreal)microscopyorigcentery); - transform.scale(layersvector[layer].fliphorizontally ? -1 : 1, layersvector[layer].flipvertically ? -1 : 1); + transform.scale(layersvector[layer].flipvertically ? -1 : 1, layersvector[layer].fliphorizontally ? -1 : 1); transform.rotate(layersvector[layer].angle); transform.translate(-(qreal)microscopyorigcenterx, -(qreal)microscopyorigcentery); @@ -1079,7 +1119,7 @@ void cImageWindowWidget::drawMicroscopyImage(eLayerType layer, QRectF& rect_scen qreal scaledmicroscopycenterx = ((qreal)scaledmicroscopyx / microscopywidthratio + (qreal)microscopynewwidth / 2.0 + centershiftx) * microscopywidthratio; qreal scaledmicroscopycentery = ((qreal)scaledmicroscopyy / microscopyheightratio + (qreal)microscopynewheight / 2.0 + centershifty) * microscopyheightratio; - if (layer == layer_microscopy_navigation_image) { + if (layer == 3) { microscopynavigationcenterx = scaledmicroscopycenterx; microscopynavigationcentery = scaledmicroscopycentery; @@ -1095,6 +1135,9 @@ void cImageWindowWidget::drawMicroscopyImage(eLayerType layer, QRectF& rect_scen QPointF oldcenterpoint(scaledmicroscopycenterx, scaledmicroscopycentery); QPointF newcenterpoint = transformcenter.map(oldcenterpoint); + if (layersvector[layer].navigationlayer != 3) { + newcenterpoint = oldcenterpoint; + } centershiftx += (newcenterpoint.x() - scaledmicroscopycenterx) / microscopywidthratio; centershifty += (newcenterpoint.y() - scaledmicroscopycentery) / microscopyheightratio; @@ -1156,7 +1199,7 @@ void cImageWindowWidget::updateSelectionGroup() { getRectanglePoints(rx1, ry1, rx2, ry2); - if (activelayer == layer_compounds) { + if (activelayer == 0) { selectionrect->resetTransform(); selectionrect->setPen(QPen(Qt::green, 1, Qt::DashLine)); @@ -1179,7 +1222,7 @@ void cImageWindowWidget::updateSelectionGroup() { } - if (activelayer == layer_optical_image) { + if (activelayer == 1) { selectionrect->resetTransform(); selectionrect->setPen(QPen(Qt::green, 1, Qt::DashLine)); @@ -1204,7 +1247,7 @@ void cImageWindowWidget::updateSelectionGroup() { } - if (activelayer == layer_histology_image) { + if (activelayer == 2) { selectionrect->resetTransform(); selectionrect->setPen(QPen(Qt::green, 1, Qt::DashLine)); @@ -1226,20 +1269,24 @@ void cImageWindowWidget::updateSelectionGroup() { } - if ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end)) { + if (activelayer >= 3) { selectionrect->resetTransform(); selectionrect->setPen(QPen(Qt::green, 1, Qt::DashLine)); selectionrect->setRect(QRectF(QPointF(rx1, ry1), QPointF(rx2, ry2))); QTransform transform; - if ((activelayer > layer_microscopy_navigation_image) && (activelayer < layer_end)) { + if (activelayer > 3) { QTransform transformcenter; transformcenter.translate((qreal)microscopynavigationcenterx, (qreal)microscopynavigationcentery); transformcenter.rotate(layersvector[activelayer].angle); transformcenter.translate(-(qreal)microscopynavigationcenterx, -(qreal)microscopynavigationcentery); QPointF newcenterpoint = transformcenter.map(selectionrect->rect().center()); + if (layersvector[activelayer].navigationlayer != 3) { + newcenterpoint = selectionrect->rect().center(); + } + transform.translate(newcenterpoint.x() - selectionrect->rect().center().x(), newcenterpoint.y() - selectionrect->rect().center().y()); } transform.translate(selectionrect->rect().center().x(), selectionrect->rect().center().y()); @@ -1274,7 +1321,7 @@ void cImageWindowWidget::updateSelectionGroup() { int transformedy = currenty; double tmpangle; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { QTransform transform; tmpangle = prepareTransformation(selectionrect->rect(), transform, testedfliphorizontally, testedflipvertically, testedangle, true); transform.map(currentx, currenty, &transformedx, &transformedy); @@ -1285,7 +1332,7 @@ void cImageWindowWidget::updateSelectionGroup() { if ((abs(transformedx - selectionrect->rect().x()) < 5) && (abs(transformedy - selectionrect->rect().y()) < 5)) { setCursor(Qt::SizeFDiagCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeBDiagCursor); } @@ -1293,7 +1340,7 @@ void cImageWindowWidget::updateSelectionGroup() { } else if ((abs(transformedx - selectionrect->rect().x() - selectionrect->rect().width()) < 5) && (abs(transformedy - selectionrect->rect().y()) < 5)) { setCursor(Qt::SizeBDiagCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeFDiagCursor); } @@ -1301,7 +1348,7 @@ void cImageWindowWidget::updateSelectionGroup() { } else if ((abs(transformedx - selectionrect->rect().x()) < 5) && (abs(transformedy - selectionrect->rect().y() - selectionrect->rect().height()) < 5)) { setCursor(Qt::SizeBDiagCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeFDiagCursor); } @@ -1309,7 +1356,7 @@ void cImageWindowWidget::updateSelectionGroup() { } else if ((abs(transformedx - selectionrect->rect().x() - selectionrect->rect().width()) < 5) && (abs(transformedy - selectionrect->rect().y() - selectionrect->rect().height()) < 5)) { setCursor(Qt::SizeFDiagCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeBDiagCursor); } @@ -1317,7 +1364,7 @@ void cImageWindowWidget::updateSelectionGroup() { } else if ((abs(transformedx - selectionrect->rect().x()) < 5) && (transformedy >= selectionrect->rect().y()) && (transformedy <= selectionrect->rect().y() + selectionrect->rect().height())) { setCursor(Qt::SizeHorCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeVerCursor); } @@ -1325,7 +1372,7 @@ void cImageWindowWidget::updateSelectionGroup() { } else if ((abs(transformedx - selectionrect->rect().x() - selectionrect->rect().width()) < 5) && (transformedy >= selectionrect->rect().y()) && (transformedy <= selectionrect->rect().y() + selectionrect->rect().height())) { setCursor(Qt::SizeHorCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeVerCursor); } @@ -1333,7 +1380,7 @@ void cImageWindowWidget::updateSelectionGroup() { } else if ((abs(transformedy - selectionrect->rect().y()) < 5) && (transformedx >= selectionrect->rect().x()) && (transformedx <= selectionrect->rect().x() + selectionrect->rect().width())) { setCursor(Qt::SizeVerCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeHorCursor); } @@ -1341,7 +1388,7 @@ void cImageWindowWidget::updateSelectionGroup() { } else if ((abs(transformedy - selectionrect->rect().y() - selectionrect->rect().height()) < 5) && (transformedx >= selectionrect->rect().x()) && (transformedx <= selectionrect->rect().x() + selectionrect->rect().width())) { setCursor(Qt::SizeVerCursor); - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { if (rotatedimage) { setCursor(Qt::SizeHorCursor); } @@ -1359,7 +1406,7 @@ void cImageWindowWidget::updateSelectionGroup() { setCursor(Qt::ArrowCursor); } - if (activelayer == layer_compounds) { + if (activelayer == 0) { if (vendor == bruker) { xmin = currentx*(maxx + 1) / max(1, currentwidth) - leftshift; @@ -1416,7 +1463,7 @@ void cImageWindowWidget::updateSelectionGroup() { } - if (activelayer == layer_optical_image) { + if (activelayer == 1) { if (vendor == bruker) { rx1 = (double)leftshift * (double)currentwidth / (double)(maxx + 1); @@ -1473,15 +1520,15 @@ void cImageWindowWidget::updateSelectionGroup() { } - if (activelayer == layer_histology_image) { + if (activelayer == 2) { int x = (double)currentx / currentscale; int y = (double)currenty / currentscale; - rx1 = layersvector[layer_histology_image].x * currentscale; - ry1 = layersvector[layer_histology_image].y * currentscale; - rx2 = (layersvector[layer_histology_image].x + layersvector[layer_histology_image].width) * currentscale; - ry2 = (layersvector[layer_histology_image].y + layersvector[layer_histology_image].height) * currentscale; + rx1 = layersvector[2].x * currentscale; + ry1 = layersvector[2].y * currentscale; + rx2 = (layersvector[2].x + layersvector[2].width) * currentscale; + ry2 = (layersvector[2].y + layersvector[2].height) * currentscale; //rx2 = min(rx2, (qreal)currentwidth); //ry2 = min(ry2, (qreal)currentheight); @@ -1518,7 +1565,7 @@ void cImageWindowWidget::updateSelectionGroup() { } - if ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end)) { + if (activelayer >= 3) { double x = (double)currentx * (double)micrometerswidth / (double)currentwidth; double y = (double)currenty * (double)micrometersheight / (double)currentheight; @@ -1534,13 +1581,17 @@ void cImageWindowWidget::updateSelectionGroup() { selectionrect->setRect(QRectF(QPointF(rx1, ry1), QPointF(rx2, ry2))); QTransform transform; - if ((activelayer > layer_microscopy_navigation_image) && (activelayer < layer_end)) { + if (activelayer > 3) { QTransform transformcenter; transformcenter.translate((qreal)microscopynavigationcenterx, (qreal)microscopynavigationcentery); transformcenter.rotate(layersvector[activelayer].angle); transformcenter.translate(-(qreal)microscopynavigationcenterx, -(qreal)microscopynavigationcentery); QPointF newcenterpoint = transformcenter.map(selectionrect->rect().center()); + if (layersvector[activelayer].navigationlayer != 3) { + newcenterpoint = selectionrect->rect().center(); + } + transform.translate(newcenterpoint.x() - selectionrect->rect().center().x(), newcenterpoint.y() - selectionrect->rect().center().y()); } transform.translate(selectionrect->rect().center().x(), selectionrect->rect().center().y()); @@ -1622,7 +1673,7 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, bool testedfliphorizontally = layersvector[activelayer].fliphorizontally; bool testedflipvertically = layersvector[activelayer].flipvertically; - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { QTransform transform; prepareTransformation(currentrect->rect(), transform, testedfliphorizontally, testedflipvertically, testedangle, true); transform.map((qreal)currentx, (qreal)currenty, &untransformedcurrentx, &untransformedcurrenty); @@ -1648,12 +1699,12 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, ry2 = untransformedcurrenty; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; case cursoractivity_move: - if ((activelayer > layer_microscopy_navigation_image) && (activelayer < layer_end)) { + if (activelayer > 3) { if (((testedangle >= 90.0) && (testedangle <= 270.0)) || ((testedangle <= -90.0) && (testedangle >= -270.0))) { rx1 = tmprx1 - untransformedcurrentx + untransformedpressedx; ry1 = tmpry1 - untransformedcurrenty + untransformedpressedy; @@ -1695,6 +1746,16 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, ry1 = tmpry1; rx2 = tmprx2; ry2 = tmpry2; + + if (keepaspectratio && (activelayer >= 2) && (tmprx1 != tmprx2)) { + ry2 = tmpry2 - (untransformedcurrentx - tmprx1) * (tmpry2 - tmpry1) / (tmprx2 - tmprx1); + + if (ry2 < ry1) { + tmp = ry1; + ry1 = ry2; + ry2 = tmp; + } + } if (rx2 < rx1) { tmp = rx1; @@ -1702,7 +1763,7 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1712,13 +1773,23 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = untransformedcurrentx; ry2 = tmpry2; + if (keepaspectratio && (activelayer >= 2) && (tmprx1 != tmprx2)) { + ry2 = tmpry2 + (untransformedcurrentx - tmprx2) * (tmpry2 - tmpry1) / (tmprx2 - tmprx1); + + if (ry2 < ry1) { + tmp = ry1; + ry1 = ry2; + ry2 = tmp; + } + } + if (rx2 < rx1) { tmp = rx1; rx1 = rx2; rx2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1728,13 +1799,23 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = tmprx2; ry2 = tmpry2; + if (keepaspectratio && (activelayer >= 2) && (tmpry1 != tmpry2)) { + rx2 = tmprx2 - (untransformedcurrenty - tmpry1) * (tmprx2 - tmprx1) / (tmpry2 - tmpry1); + + if (rx2 < rx1) { + tmp = rx1; + rx1 = rx2; + rx2 = tmp; + } + } + if (ry2 < ry1) { tmp = ry1; ry1 = ry2; ry2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1744,13 +1825,23 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = tmprx2; ry2 = untransformedcurrenty; + if (keepaspectratio && (activelayer >= 2) && (tmpry1 != tmpry2)) { + rx2 = tmprx2 + (untransformedcurrenty - tmpry2) * (tmprx2 - tmprx1) / (tmpry2 - tmpry1); + + if (rx2 < rx1) { + tmp = rx1; + rx1 = rx2; + rx2 = tmp; + } + } + if (ry2 < ry1) { tmp = ry1; ry1 = ry2; ry2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1760,6 +1851,10 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = tmprx2; ry2 = tmpry2; + if (keepaspectratio && (activelayer >= 2) && (tmprx1 != tmprx2)) { + ry1 = tmpry1 + (untransformedcurrentx - tmprx1) * (tmpry2 - tmpry1) / (tmprx2 - tmprx1); + } + if (rx2 < rx1) { tmp = rx1; rx1 = rx2; @@ -1772,7 +1867,7 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, ry2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1782,6 +1877,10 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = untransformedcurrentx; ry2 = tmpry2; + if (keepaspectratio && (activelayer >= 2) && (tmprx1 != tmprx2)) { + ry1 = tmpry1 - (untransformedcurrentx - tmprx2) * (tmpry2 - tmpry1) / (tmprx2 - tmprx1); + } + if (rx2 < rx1) { tmp = rx1; rx1 = rx2; @@ -1794,7 +1893,7 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, ry2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1804,6 +1903,10 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = tmprx2; ry2 = untransformedcurrenty; + if (keepaspectratio && (activelayer >= 2) && (tmprx1 != tmprx2)) { + ry2 = tmpry2 - (untransformedcurrentx - tmprx1) * (tmpry2 - tmpry1) / (tmprx2 - tmprx1); + } + if (rx2 < rx1) { tmp = rx1; rx1 = rx2; @@ -1816,7 +1919,7 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, ry2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1826,6 +1929,10 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, rx2 = untransformedcurrentx; ry2 = untransformedcurrenty; + if (keepaspectratio && (activelayer >= 2) && (tmprx1 != tmprx2)) { + ry2 = tmpry2 + (untransformedcurrentx - tmprx2) * (tmpry2 - tmpry1) / (tmprx2 - tmprx1); + } + if (rx2 < rx1) { tmp = rx1; rx1 = rx2; @@ -1838,7 +1945,7 @@ void cImageWindowWidget::getRectanglePoints(qreal& rx1, qreal& ry1, qreal& rx2, ry2 = tmp; } - if ((activelayer == layer_histology_image) || ((activelayer >= layer_microscopy_navigation_image) && (activelayer < layer_end))) { + if (activelayer >= 2) { fixRectCenter(rx1, ry1, rx2, ry2, testedfliphorizontally, testedflipvertically, testedangle); } break; @@ -1872,13 +1979,17 @@ double cImageWindowWidget::prepareTransformation(QRectF rect, QTransform& transf transform.reset(); - if ((activelayer > layer_microscopy_navigation_image) && (activelayer < layer_end)) { + if (activelayer > 3) { QTransform transformcenter; transformcenter.translate((qreal)microscopynavigationcenterx, (qreal)microscopynavigationcentery); transformcenter.rotate(-testedangle); transformcenter.translate(-(qreal)microscopynavigationcenterx, -(qreal)microscopynavigationcentery); QPointF newcenterpoint = transformcenter.map(rect.center()); + if (layersvector[activelayer].navigationlayer != 3) { + newcenterpoint = rect.center(); + } + if (flipaxes && (((testedangle >= 90.0) && (testedangle <= 270.0)) || ((testedangle <= -90.0) && (testedangle >= -270.0)))) { transform.translate(rect.center().x() - newcenterpoint.x(), rect.center().y() - newcenterpoint.y()); } @@ -1918,13 +2029,13 @@ double cImageWindowWidget::recalculateRulerValue(qreal currentscale) { switch (vendor) { case unknownvendor: - value = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[layer_optical_image].pixmap->width()*currentscale); + value = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[1].pixmap->width()*currentscale); break; case bruker: - value = ((double)(maxx + 1)*(double)pixelsizex) * (double)rulersize / ((double)layersvector[layer_optical_image].pixmap->width()*currentscale); + value = ((double)(maxx + 1)*(double)pixelsizex) * (double)rulersize / ((double)layersvector[1].pixmap->width()*currentscale); break; case waters: - value = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[layer_optical_image].pixmap->width()*currentscale); + value = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[1].pixmap->width()*currentscale); break; default: break; @@ -1955,13 +2066,13 @@ void cImageWindowWidget::setRulerValue(double value) { rulervalue = value; switch (vendor) { case unknownvendor: - currentscale = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[layer_optical_image].pixmap->width()*rulervalue); + currentscale = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[1].pixmap->width()*rulervalue); break; case bruker: - currentscale = ((double)(maxx + 1)*(double)pixelsizex) * (double)rulersize / ((double)layersvector[layer_optical_image].pixmap->width()*rulervalue); + currentscale = ((double)(maxx + 1)*(double)pixelsizex) * (double)rulersize / ((double)layersvector[1].pixmap->width()*rulervalue); break; case waters: - currentscale = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[layer_optical_image].pixmap->width()*rulervalue); + currentscale = ((double)maxx*(double)pixelsizex) * (double)rulersize / ((double)layersvector[1].pixmap->width()*rulervalue); break; default: break; @@ -2005,7 +2116,7 @@ void cImageWindowWidget::colorScaleStateChanged(bool state) { } -void cImageWindowWidget::changeLayer(int layerid, bool checked, int alpha, int zvalue) { +void cImageWindowWidget::changeLayer(int layerid, bool checked, int alpha, int zvalue, bool redraw) { if (layerid == (int)layersvector.size()) { layerInfo layer; layer.checked = checked; @@ -2020,7 +2131,9 @@ void cImageWindowWidget::changeLayer(int layerid, bool checked, int alpha, int z layersvector[layerid].zvalue = zvalue; } - redrawScene(); + if (redraw) { + redrawScene(); + } } @@ -2031,13 +2144,13 @@ void cImageWindowWidget::changeActiveLayer(int layerid) { void cImageWindowWidget::flipHistologyHorizontallyStateChanged(bool state) { - layersvector[layer_histology_image].fliphorizontally = state; + layersvector[2].fliphorizontally = state; redrawScene(); } void cImageWindowWidget::flipHistologyVerticallyStateChanged(bool state) { - layersvector[layer_histology_image].flipvertically = state; + layersvector[2].flipvertically = state; redrawScene(); } diff --git a/CycloBranch/gui/cImageWindowWidget.h b/CycloBranch/gui/cImageWindowWidget.h index 3c0c9bb..814505d 100644 --- a/CycloBranch/gui/cImageWindowWidget.h +++ b/CycloBranch/gui/cImageWindowWidget.h @@ -16,25 +16,9 @@ /** - \brief Layer types. + \brief The number of layers. */ -enum eLayerType { - layer_compounds = 0, - layer_optical_image, - layer_histology_image, - layer_microscopy_navigation_image, - layer_microscopy_image_1, - layer_microscopy_image_2, - layer_microscopy_image_3, - layer_microscopy_image_4, - layer_microscopy_image_5, - layer_microscopy_image_6, - layer_microscopy_image_7, - layer_microscopy_image_8, - layer_microscopy_image_9, - layer_microscopy_image_10, - layer_end -}; +const int numberoflayers = 204; /** @@ -136,6 +120,12 @@ struct layerInfo { qreal lasty; + /** + \brief Navigation layer. + */ + int navigationlayer; + + /** \brief Pixmap. */ @@ -146,20 +136,8 @@ struct layerInfo { \brief The constructor. */ layerInfo() { - checked = true; - alpha = 100; - zvalue = 0; - ispixmapdefined = false; - fliphorizontally = false; - flipvertically = false; - x = 0; - y = 0; - width = 0; - height = 0; - angle = 0; - lastx = 0; - lasty = 0; pixmap = new QPixmap(); + clear(); } @@ -180,11 +158,36 @@ struct layerInfo { angle = layer.angle; lastx = layer.lastx; lasty = layer.lasty; + navigationlayer = layer.navigationlayer; pixmap = new QPixmap(); *pixmap = *layer.pixmap; } + /** + \brief Clear the structure. + */ + void clear() { + checked = true; + alpha = 100; + zvalue = 0; + ispixmapdefined = false; + fliphorizontally = false; + flipvertically = false; + x = 0; + y = 0; + width = 0; + height = 0; + angle = 0; + lastx = 0; + lasty = 0; + navigationlayer = 3; + + delete pixmap; + pixmap = new QPixmap(); + } + + /** \brief The destructor. */ @@ -236,7 +239,7 @@ class cImageWindowWidget : public QGraphicsView \param layer a microscopy layer \param microscopyimage a microscopy image */ - void setMicroscopyImage(eLayerType layer, QImage* microscopyimage); + void setMicroscopyImage(int layer, QImage* microscopyimage); /** @@ -299,20 +302,22 @@ class cImageWindowWidget : public QGraphicsView /** \brief Set the position of a microscopy image. \param layer a microscopy layer + \param flipx flip horizontally + \param flipy flip vertically \param x x offset [um] \param y y offset [um] \param width width [um] \param height height [um] \param angle angle */ - void setMicroscopyPosition(eLayerType layer, double x, double y, double width, double height, double angle); + void setMicroscopyPosition(int layer, bool flipx, bool flipy, double x, double y, double width, double height, double angle); /** \brief Go to the position of a microscopy image. \param layer a microscopy layer */ - void goToMicroscopyPosition(eLayerType layer); + void goToMicroscopyPosition(int layer); /** @@ -331,6 +336,33 @@ class cImageWindowWidget : public QGraphicsView void redraw(); + /** + \brief Clear the vector of layers. + */ + void clearLayers(); + + + /** + \brief Clear a layer. + */ + void clearLayer(int layer); + + + /** + \brief Set the flag to keep aspect ratio. + \param state if true, the aspect ratio is kept + */ + void setKeepAspectRatio(bool state); + + + /** + \brief Set navigation layer. + \param layer current layer + \param navigation navigation layer + */ + void setNavigationLayer(int layer, int navigation); + + protected: @@ -412,13 +444,15 @@ class cImageWindowWidget : public QGraphicsView /** \brief The signal is emitted when the microscopy position was changed. + \param flipx flip horizontally + \param flipy flip vertically \param x x coordinate [um] \param y y coordinate [um] \param width width [um] \param height height [um] \param angle angle */ - void updateMicroscopyPosition(double x, double y, double width, double height, double angle); + void updateMicroscopyPosition(bool flipx, bool flipy, double x, double y, double width, double height, double angle); /** @@ -489,6 +523,7 @@ class cImageWindowWidget : public QGraphicsView int currentheight; bool showselection; + bool keepaspectratio; qreal microscopynavigationcenterx; qreal microscopynavigationcentery; @@ -501,7 +536,7 @@ class cImageWindowWidget : public QGraphicsView void redrawScene(); - void drawMicroscopyImage(eLayerType layer, QRectF& rect_scene, int currentwidth, int currentheight); + void drawMicroscopyImage(int layer, QRectF& rect_scene, int currentwidth, int currentheight); void updateSelectionGroup(); @@ -538,7 +573,7 @@ private slots: void colorScaleStateChanged(bool state); - void changeLayer(int layerid, bool checked, int alpha, int zvalue); + void changeLayer(int layerid, bool checked, int alpha, int zvalue, bool redraw); void changeActiveLayer(int layerid); diff --git a/CycloBranch/gui/cMainThread.cpp b/CycloBranch/gui/cMainThread.cpp index 93db270..215df3a 100644 --- a/CycloBranch/gui/cMainThread.cpp +++ b/CycloBranch/gui/cMainThread.cpp @@ -4,9 +4,916 @@ cIsotopePatternCache isotopepatterncache; -cMainThread::cMainThread(cParameters& parameters, cTheoreticalSpectrumList& theoreticalspectrumlist, bool enablelogwindow, bool enablestdout) { +string cMainThread::getCurrentTime(QTime& time) { + int secs = time.elapsed() / 1000; + int mins = (secs / 60) % 60; + int hrs = (secs / 3600); + secs = secs % 60; + + return to_string(hrs) + " hrs, " + to_string(mins) + " min, " + to_string(secs) + " sec"; +} + + +void cMainThread::singleThreadMS1(cMainThread* os, QTime& time, cTheoreticalSpectrum* testspectrum, vector< vector< vector > >* testhintsindexvector, cTheoreticalSpectrumList* testlistoftheoreticalspectra, vector< vector >* testunmatchedpeaksvector) { + if (testspectrum) { + *os << "===== running test - singleThreadMS1 =====" << endl; + } + + *os << "Time elapsed: " << getCurrentTime(time) << "." << endl << endl; + + *os << "Generating theoretical peaks... "; + + listoftheoreticalspectra->clear(); + listoftheoreticalspectra->resize((int)parameters.peaklistseriesvector.size()); + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + listoftheoreticalspectra->clear(h); + } + + if (testspectrum && testunmatchedpeaksvector && testlistoftheoreticalspectra) { + testlistoftheoreticalspectra->clear(); + testlistoftheoreticalspectra->resize((int)parameters.peaklistseriesvector.size()); + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + testlistoftheoreticalspectra->clear(h); + } + + testunmatchedpeaksvector->resize((int)parameters.peaklistseriesvector.size()); + } + + cTheoreticalSpectrum ts; + ts.setParameters(¶meters); + + if (parameters.generateisotopepattern) { + if (parameters.calculatefdrs) { + parameters.sequencedatabase.attachDecoys(terminatecomputation); + } + + if (terminatecomputation) { + emitEndSignals(); + return; + } + + ts.generateFineMSSpectrum(0, (int)parameters.sequencedatabase.size(), terminatecomputation); + } + else { + ts.generateMSSpectrum(0, (int)parameters.sequencedatabase.size(), terminatecomputation, true); + } + + if (terminatecomputation) { + emitEndSignals(); + return; + } + + unordered_map tempmap; + parameters.peakidtodesc.clear(); + parameters.isotopeformulaidtodesc.clear(); + + tempmap.clear(); + ts.getTheoreticalPeaks()->reducePeakDescriptions(tempmap); + convertStringIntUnorderedMapToStringVector(tempmap, parameters.peakidtodesc); + + //tempmap.clear(); + //ts.getTheoreticalPeaks()->reduceIsotopeFormulaDescriptions(tempmap); + //convertStringIntUnorderedMapToStringVector(tempmap, parameters.isotopeformulaidtodesc); + + *os << "ok" << endl; + *os << "Comparing theoretical peaks with the experimental peaklist(s)... " << endl; + *os << "Number of input files: " << parameters.peaklistseriesvector.size() << endl; + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + *os << "Number of experimental peaklists in the file no. " << h + 1 << " : " << parameters.peaklistseriesvector[h].size() << endl; + for (int i = 0; i < parameters.peaklistseriesvector[h].size(); i++) { + if (terminatecomputation) { + emitEndSignals(); + return; + } + parameters.peaklistseriesvector[h][i].sortbyMass(); + } + } + + *os << endl << "Time elapsed: " << getCurrentTime(time) << "." << endl << endl; + + bool lcms; + bool rtavailable; + bool skipcomparison; + + vector< vector< vector > > hintsindexvector; + hintsindexvector.resize(parameters.peaklistseriesvector.size()); + + vector< vector > unmatchedpeaksvector; + unmatchedpeaksvector.resize(parameters.peaklistseriesvector.size()); + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + + unmatchedpeaksvector[h].resize(parameters.peaklistseriesvector[h].size()); + + lcms = (parameters.peaklistseriesvector[h].size() > 1) && !((parameters.peaklistfileformats[h] == mis) || (parameters.peaklistfileformats[h] == imzML)); + rtavailable = (parameters.peaklistseriesvector[h].size() > 1) && (parameters.peaklistseriesvector[h][parameters.peaklistseriesvector[h].size() - 1].getRetentionTime() > 0); + + if (lcms || (parameters.peaklistfileformats[h] == mis) || (parameters.peaklistfileformats[h] == imzML)) { + *os << "Analyzing spectra in the file no. " << h + 1 << " : " << endl; + + hintsindexvector[h].resize(ts.getNumberOfPeaks()); + + for (int i = 0; i < parameters.peaklistseriesvector[h].size(); i++) { + if ((i + 1) % 100 == 0) { + *os << i + 1 << " "; + } + if ((i + 1) % 2500 == 0) { + *os << endl; + } + + if (terminatecomputation) { + emitEndSignals(); + return; + } + + skipcomparison = false; + if (lcms && rtavailable) { + if (parameters.minimumrt != 0) { + if (parameters.peaklistseriesvector[h][i].getRetentionTime() < parameters.minimumrt) { + skipcomparison = true; + } + } + if (parameters.maximumrt != 0) { + if (parameters.peaklistseriesvector[h][i].getRetentionTime() > parameters.maximumrt) { + skipcomparison = true; + } + } + } + + cTheoreticalSpectrum tstmp; + tstmp.setParameters(¶meters); + tstmp.getHintsIndex(i, h, ts, unmatchedpeaksvector[h][i], hintsindexvector[h], lcms && rtavailable, skipcomparison); + } + + for (auto& it : hintsindexvector[h]) { + sort(it.begin(), it.end()); + } + + *os << " ok" << endl; + } + + *os << endl << "Time elapsed: " << getCurrentTime(time) << "." << endl << endl; + + *os << "Processing the file no. " << h + 1 << " peaklist no. : " << endl; + + for (int i = 0; i < parameters.peaklistseriesvector[h].size(); i++) { + if ((i + 1) % 100 == 0) { + *os << i + 1 << " "; + } + if ((i + 1) % 2500 == 0) { + *os << endl; + } + + if (terminatecomputation) { + emitEndSignals(); + return; + } + + cTheoreticalSpectrum tstmp; + tstmp.setParameters(¶meters); + + skipcomparison = false; + if (lcms && rtavailable) { + if (parameters.minimumrt != 0) { + if (parameters.peaklistseriesvector[h][i].getRetentionTime() < parameters.minimumrt) { + skipcomparison = true; + } + } + if (parameters.maximumrt != 0) { + if (parameters.peaklistseriesvector[h][i].getRetentionTime() > parameters.maximumrt) { + skipcomparison = true; + } + } + } + + tstmp.compareMSSpectrum(i, h, ts, unmatchedpeaksvector[h][i], hintsindexvector[h], lcms && rtavailable, skipcomparison); + if ((parameters.peaklistfileformats[h] == mis) || (parameters.peaklistfileformats[h] == imzML)) { + if (!testspectrum) { + parameters.peaklistseriesvector[h][i].clear(); + } + } + + listoftheoreticalspectra->add(h, tstmp); + } + + if (testspectrum && testunmatchedpeaksvector && testlistoftheoreticalspectra) { + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + testlistoftheoreticalspectra->add(h, listoftheoreticalspectra->get(h, i)); + } + (*testunmatchedpeaksvector)[h] = unmatchedpeaksvector[h]; + } + + if (!((parameters.peaklistfileformats[h] == mis) || (parameters.peaklistfileformats[h] == imzML))) { + for (int i = 0; i < parameters.peaklistseriesvector[h].size(); i++) { + if (terminatecomputation) { + emitEndSignals(); + return; + } + + if (!testspectrum) { + parameters.peaklistseriesvector[h][i].clear(); + } + } + } + + *os << " ok" << endl << "Total number of spectra in the file no. " << h + 1 << " : " << parameters.peaklistseriesvector[h].size() << endl; + + if (parameters.calculatefdrs && parameters.generateisotopepattern) { + + *os << endl << "Calculating FDRs... "; + + vector targetscoresvector; + vector decoyscoresvector; + vector allscoresvector; + vector fdrs; + map *targetscores; + map *decoyscores; + map numbersofmatchedenvelopes; + double minfdr; + int targetscoresvectorsize; + + // calculate numbers of matched envelopes in single-pixel spectra + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + targetscores = &(listoftheoreticalspectra->get(h, i).getTargetScores()); + decoyscores = &(listoftheoreticalspectra->get(h, i).getDecoyScores()); + + for (auto& it : *targetscores) { + if (numbersofmatchedenvelopes.count(it.first) == 0) { + numbersofmatchedenvelopes.insert(make_pair(it.first, 1)); + } + else { + numbersofmatchedenvelopes[it.first]++; + } + } + + for (auto& it : *decoyscores) { + if (numbersofmatchedenvelopes.count(it.first) == 0) { + numbersofmatchedenvelopes.insert(make_pair(it.first, 1)); + } + else { + numbersofmatchedenvelopes[it.first]++; + } + } + } + + // divide scores by numbers of matched envelopes in all single-pixel spectra + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + targetscores = &(listoftheoreticalspectra->get(h, i).getTargetScores()); + decoyscores = &(listoftheoreticalspectra->get(h, i).getDecoyScores()); + + for (auto& it : *targetscores) { + //it.second /= sqrt((double)numbersofmatchedenvelopes[it.first]); + targetscoresvector.push_back(it.second); + } + + for (auto& it : *decoyscores) { + //it.second /= sqrt((double)numbersofmatchedenvelopes[it.first]); + decoyscoresvector.push_back(it.second); + } + } + + // calculate FDRs + sort(targetscoresvector.begin(), targetscoresvector.end()); + sort(decoyscoresvector.begin(), decoyscoresvector.end()); + + allscoresvector = targetscoresvector; + allscoresvector.insert(allscoresvector.end(), decoyscoresvector.begin(), decoyscoresvector.end()); + sort(allscoresvector.begin(), allscoresvector.end()); + + targetscoresvectorsize = (int)targetscoresvector.size(); + fdrs.resize(targetscoresvectorsize); + for (int i = 0; i < targetscoresvectorsize; i++) { + fdrs[i] = (double)getNumberOfScoreHits(decoyscoresvector, targetscoresvector[i]) / (double)max(getNumberOfScoreHits(allscoresvector, targetscoresvector[i]), 1); + } + + // calculate q-values + /*for (int i = targetscoresvectorsize - 1; i >= 0; i--) { + if ((i == targetscoresvectorsize - 1) || (fdrs[i] < minfdr)) { + minfdr = fdrs[i]; + } + if (fdrs[i] > minfdr) { + fdrs[i] = minfdr; + } + }*/ + + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + listoftheoreticalspectra->get(h, i).setFDRs(targetscoresvector, fdrs, unmatchedpeaksvector[h][i]); + } + + *os << "ok" << endl; + + } + + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + listoftheoreticalspectra->get(h, i).finalizeMSSpectrum(unmatchedpeaksvector[h][i], true); + } + + } + + if (testspectrum && testhintsindexvector && testlistoftheoreticalspectra && testunmatchedpeaksvector) { + *testspectrum = ts; + *testhintsindexvector = hintsindexvector; + + //for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + // for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + // testlistoftheoreticalspectra->add(h, listoftheoreticalspectra->get(h, i)); + // } + //} + + //*testunmatchedpeaksvector = unmatchedpeaksvector; + + *os << "===== test ended =====" << endl << endl; + } + +} + + +void cMainThread::multiThreadMS1(cMainThread* os, QTime& time, cTheoreticalSpectrum* testspectrum, vector< vector< vector > >* testhintsindexvector, cTheoreticalSpectrumList* testlistoftheoreticalspectra, vector< vector >* testunmatchedpeaksvector) { + if (testspectrum) { + *os << "===== running test - multiThreadMS1 =====" << endl; + } + + *os << "Time elapsed: " << getCurrentTime(time) << "." << endl << endl; + + *os << "Generating theoretical peaks... "; + + listoftheoreticalspectra->clear(); + listoftheoreticalspectra->resize((int)parameters.peaklistseriesvector.size()); + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + listoftheoreticalspectra->clear(h); + } + + if (testspectrum && testunmatchedpeaksvector && testlistoftheoreticalspectra) { + testlistoftheoreticalspectra->clear(); + testlistoftheoreticalspectra->resize((int)parameters.peaklistseriesvector.size()); + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + testlistoftheoreticalspectra->clear(h); + } + + testunmatchedpeaksvector->resize((int)parameters.peaklistseriesvector.size()); + } + + if (parameters.generateisotopepattern && parameters.calculatefdrs) { + parameters.sequencedatabase.attachDecoys(terminatecomputation); + } + + vector spectrumpool; + + QThreadPool::globalInstance()->setMaxThreadCount(parameters.maximumnumberofthreads); + + int sequencestart = 0; + int sequencestop = max(100, parameters.sequencedatabase.size() / (2 * parameters.maximumnumberofthreads)); + + int poolreserve = parameters.sequencedatabase.size() / sequencestop; + if (parameters.sequencedatabase.size() % sequencestop > 0) { + poolreserve++; + } + + spectrumpool.reserve(poolreserve); + + initParallelOutputState(poolreserve); + + while (sequencestart < parameters.sequencedatabase.size()) { + if (terminatecomputation) { + break; + } + + cSpectrumGeneratorThreadMS1* generatorthread = new cSpectrumGeneratorThreadMS1(); + cTheoreticalSpectrum* poolitem = new cTheoreticalSpectrum(); + + generatorthread->initialize(this, ¶meters, sequencestart, min(sequencestart + sequencestop, (int)parameters.sequencedatabase.size()), poolitem, &terminatecomputation); + spectrumpool.push_back(poolitem); + + QThreadPool::globalInstance()->start(generatorthread); + + sequencestart += sequencestop; + } + + QThreadPool::globalInstance()->waitForDone(); + + if (terminatecomputation) { + for (auto& it : spectrumpool) { + delete it; + } + emitEndSignals(); + return; + } + + unordered_map tempmap; + parameters.peakidtodesc.clear(); + parameters.isotopeformulaidtodesc.clear(); + + tempmap.clear(); + + size_t spectrumpoolsize = spectrumpool.size(); + int numberoftheoreticalpeaks = 0; + int lastgroupid = 0; + int thpeaksize; + + for (size_t i = 0; i < spectrumpoolsize; i++) { + thpeaksize = spectrumpool[i]->getTheoreticalPeaks()->size(); + + spectrumpool[i]->getTheoreticalPeaks()->reducePeakDescriptions(tempmap); + numberoftheoreticalpeaks += thpeaksize; + + for (int j = 0; j < thpeaksize; j++) { + (*spectrumpool[i]->getTheoreticalPeaks())[j].groupid += lastgroupid; + } + + if (thpeaksize > 0) { + lastgroupid = (*spectrumpool[i]->getTheoreticalPeaks())[thpeaksize - 1].groupid + 1; + } + } + convertStringIntUnorderedMapToStringVector(tempmap, parameters.peakidtodesc); + + //tempmap.clear(); + + //for (size_t i = 0; i < spectrumpoolsize; i++) { + // spectrumpool[i]->getTheoreticalPeaks()->reduceIsotopeFormulaDescriptions(tempmap); + //} + //convertStringIntUnorderedMapToStringVector(tempmap, parameters.isotopeformulaidtodesc); + + *os << "ok" << endl; + *os << "Comparing theoretical peaks with the experimental peaklist(s)... " << endl; + *os << "Number of input files: " << parameters.peaklistseriesvector.size() << endl; + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + *os << "Number of experimental peaklists in the file no. " << h + 1 << " : " << parameters.peaklistseriesvector[h].size() << endl; + for (int i = 0; i < parameters.peaklistseriesvector[h].size(); i++) { + if (terminatecomputation) { + for (auto& it : spectrumpool) { + delete it; + } + emitEndSignals(); + return; + } + + parameters.peaklistseriesvector[h][i].sortbyMass(); + } + } + + *os << endl << "Time elapsed: " << getCurrentTime(time) << "." << endl << endl; + + bool lcms; + + vector< vector< vector< vector > > > hintsindexpoolvector; + hintsindexpoolvector.resize(parameters.peaklistseriesvector.size()); + + vector< vector< vector > > hintsindexvector; + hintsindexvector.resize(parameters.peaklistseriesvector.size()); + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + + hintsindexpoolvector[h].resize(spectrumpoolsize); + + lcms = (parameters.peaklistseriesvector[h].size() > 1) && !((parameters.peaklistfileformats[h] == mis) || (parameters.peaklistfileformats[h] == imzML)); + + if (lcms || (parameters.peaklistfileformats[h] == mis) || (parameters.peaklistfileformats[h] == imzML)) { + *os << "Analyzing spectra in the file no. " << h + 1 << " ... "; + + if (testspectrum && testhintsindexvector) { + hintsindexvector[h].resize(numberoftheoreticalpeaks); + } + + initParallelOutputState((int)spectrumpoolsize); + + for (size_t i = 0; i < spectrumpoolsize; i++) { + if (terminatecomputation) { + break; + } + + cSpectrumAnalyzerThreadMS1* analyzerthread = new cSpectrumAnalyzerThreadMS1(); + analyzerthread->initialize(this, ¶meters, h, spectrumpool[i], &hintsindexpoolvector[h][i], &terminatecomputation); + + QThreadPool::globalInstance()->start(analyzerthread); + } + + QThreadPool::globalInstance()->waitForDone(); + + if (testspectrum && testhintsindexvector) { + serializeHintsIndexPool(hintsindexpoolvector[h], hintsindexvector[h]); + } + + *os << "ok" << endl; + } + + } + + *os << endl << "Time elapsed: " << getCurrentTime(time) << "." << endl << endl; + + if (terminatecomputation) { + for (auto& it : spectrumpool) { + delete it; + } + emitEndSignals(); + return; + } + + *os << "Processing the peaklist(s)... "; + + vector< vector > unmatchedpeaksvector; + unmatchedpeaksvector.resize(parameters.peaklistseriesvector.size()); + + vector theoreticalspectrumlistpool; + vector< vector > unmatchedpeakspool; + + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + unmatchedpeaksvector[h].resize(parameters.peaklistseriesvector[h].size()); + + theoreticalspectrumlistpool.resize(spectrumpoolsize); + unmatchedpeakspool.resize(spectrumpoolsize); + + initParallelOutputState((int)spectrumpoolsize); + + for (size_t i = 0; i < spectrumpoolsize; i++) { + if (terminatecomputation) { + break; + } + + theoreticalspectrumlistpool[i] = new cTheoreticalSpectrumList(); + + theoreticalspectrumlistpool[i]->clear(); + theoreticalspectrumlistpool[i]->resize((int)parameters.peaklistseriesvector.size()); + + for (int j = 0; j < (int)parameters.peaklistseriesvector.size(); j++) { + theoreticalspectrumlistpool[i]->clear(j); + } + + cSpectrumComparatorThreadMS1* comparatorthread = new cSpectrumComparatorThreadMS1(); + comparatorthread->initialize(this, ¶meters, h, spectrumpool[i], &hintsindexpoolvector[h][i], theoreticalspectrumlistpool[i], &unmatchedpeakspool[i], &terminatecomputation); + + QThreadPool::globalInstance()->start(comparatorthread); + } + + QThreadPool::globalInstance()->waitForDone(); + + serializeTheoreticalSpectrumListPool(h, theoreticalspectrumlistpool, *listoftheoreticalspectra); + + for (auto& it : theoreticalspectrumlistpool) { + delete it; + } + + serializeUnmatchedPeaksPool(h, unmatchedpeakspool, unmatchedpeaksvector); + + unmatchedpeakspool.clear(); + + if (testspectrum && testunmatchedpeaksvector && testlistoftheoreticalspectra) { + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + testlistoftheoreticalspectra->add(h, listoftheoreticalspectra->get(h, i)); + } + (*testunmatchedpeaksvector)[h] = unmatchedpeaksvector[h]; + } + + for (int i = 0; i < parameters.peaklistseriesvector[h].size(); i++) { + if (terminatecomputation) { + for (auto& it : spectrumpool) { + delete it; + } + emitEndSignals(); + return; + } + + if (!testspectrum) { + parameters.peaklistseriesvector[h][i].clear(); + } + } + + *os << " ok" << endl << "Total number of spectra in the file no. " << h + 1 << " : " << parameters.peaklistseriesvector[h].size() << endl; + + if (parameters.calculatefdrs && parameters.generateisotopepattern) { + + *os << endl << "Calculating FDRs... "; + + vector targetscoresvector; + vector decoyscoresvector; + vector allscoresvector; + vector fdrs; + map *targetscores; + map *decoyscores; + map numbersofmatchedenvelopes; + double minfdr; + int targetscoresvectorsize; + + // calculate numbers of matched envelopes in single-pixel spectra + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + targetscores = &(listoftheoreticalspectra->get(h, i).getTargetScores()); + decoyscores = &(listoftheoreticalspectra->get(h, i).getDecoyScores()); + + for (auto& it : *targetscores) { + if (numbersofmatchedenvelopes.count(it.first) == 0) { + numbersofmatchedenvelopes.insert(make_pair(it.first, 1)); + } + else { + numbersofmatchedenvelopes[it.first]++; + } + } + + for (auto& it : *decoyscores) { + if (numbersofmatchedenvelopes.count(it.first) == 0) { + numbersofmatchedenvelopes.insert(make_pair(it.first, 1)); + } + else { + numbersofmatchedenvelopes[it.first]++; + } + } + } + + // divide scores by numbers of matched envelopes in all single-pixel spectra + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + targetscores = &(listoftheoreticalspectra->get(h, i).getTargetScores()); + decoyscores = &(listoftheoreticalspectra->get(h, i).getDecoyScores()); + + for (auto& it : *targetscores) { + //it.second /= sqrt((double)numbersofmatchedenvelopes[it.first]); + targetscoresvector.push_back(it.second); + } + + for (auto& it : *decoyscores) { + //it.second /= sqrt((double)numbersofmatchedenvelopes[it.first]); + decoyscoresvector.push_back(it.second); + } + } + + // calculate FDRs + sort(targetscoresvector.begin(), targetscoresvector.end()); + sort(decoyscoresvector.begin(), decoyscoresvector.end()); + + allscoresvector = targetscoresvector; + allscoresvector.insert(allscoresvector.end(), decoyscoresvector.begin(), decoyscoresvector.end()); + sort(allscoresvector.begin(), allscoresvector.end()); + + targetscoresvectorsize = (int)targetscoresvector.size(); + fdrs.resize(targetscoresvectorsize); + for (int i = 0; i < targetscoresvectorsize; i++) { + fdrs[i] = (double)getNumberOfScoreHits(decoyscoresvector, targetscoresvector[i]) / (double)max(getNumberOfScoreHits(allscoresvector, targetscoresvector[i]), 1); + } + + // calculate q-values + /*for (int i = targetscoresvectorsize - 1; i >= 0; i--) { + if ((i == targetscoresvectorsize - 1) || (fdrs[i] < minfdr)) { + minfdr = fdrs[i]; + } + if (fdrs[i] > minfdr) { + fdrs[i] = minfdr; + } + }*/ + + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + listoftheoreticalspectra->get(h, i).setFDRs(targetscoresvector, fdrs, unmatchedpeaksvector[h][i]); + } + + *os << "ok" << endl; + + } + + for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + listoftheoreticalspectra->get(h, i).finalizeMSSpectrum(unmatchedpeaksvector[h][i], true); + } + + } + + cTheoreticalSpectrum ts; + + if (testspectrum) { + ts.setParameters(¶meters); + serializeSpectrumPool(spectrumpool, ts); + } + + for (auto& it : spectrumpool) { + delete it; + } + + if (testspectrum && testhintsindexvector && testlistoftheoreticalspectra && testunmatchedpeaksvector) { + *testspectrum = ts; + *testhintsindexvector = hintsindexvector; + + //for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + // for (int i = 0; i < listoftheoreticalspectra->size(h); i++) { + // testlistoftheoreticalspectra->add(h, listoftheoreticalspectra->get(h, i)); + // } + //} + + //*testunmatchedpeaksvector = unmatchedpeaksvector; + + *os << "===== test ended =====" << endl << endl; + } +} + + +void cMainThread::initParallelOutputState(int size) { + paralleloutputstate = 0; + paralleloutputsize = size; +} + + +void cMainThread::serializeSpectrumPool(vector& spectrumpool, cTheoreticalSpectrum& ts) { + size_t poolsize = spectrumpool.size(); + for (size_t i = 0; i < poolsize; i++) { + ts.getTheoreticalPeaks()->attach(*spectrumpool[i]->getTheoreticalPeaks()); + } + + if (parameters.generateisotopepattern) { + int lastgroupid = 0; + int currentgroupid = 0; + + for (int i = 0; i < ts.getTheoreticalPeaks()->size(); i++) { + if (lastgroupid != (*ts.getTheoreticalPeaks())[i].groupid) { + currentgroupid++; + } + + lastgroupid = (*ts.getTheoreticalPeaks())[i].groupid; + (*ts.getTheoreticalPeaks())[i].groupid = currentgroupid; + } + } +} + + +void cMainThread::serializeHintsIndexPool(vector< vector< vector > >& hintsindexpool, vector< vector >& hintsindex) { + hintsindex.clear(); + size_t hintsindexpoolsize = hintsindexpool.size(); + for (size_t i = 0; i < hintsindexpoolsize; i++) { + hintsindex.reserve(hintsindex.size() + hintsindexpool[i].size()); + hintsindex.insert(hintsindex.end(), hintsindexpool[i].begin(), hintsindexpool[i].end()); + } +} + + +void cMainThread::serializeUnmatchedPeaksPool(int peaklistseriesvectorid, vector< vector >& unmatchedpeakspool, vector< vector >& unmatchedpeaks) { + size_t unmatchedpeakspoolsize = unmatchedpeakspool.size(); + for (size_t i = 0; i < unmatchedpeakspoolsize; i++) { + if (unmatchedpeaks[peaklistseriesvectorid].size() != unmatchedpeakspool[i].size()) { + unmatchedpeaks[peaklistseriesvectorid].clear(); + unmatchedpeaks[peaklistseriesvectorid].resize(parameters.peaklistseriesvector[peaklistseriesvectorid].size()); + return; + } + for (size_t j = 0; j < unmatchedpeakspool[i].size(); j++) { + unmatchedpeaks[peaklistseriesvectorid][j].attach(unmatchedpeakspool[i][j]); + } + } +} + + +void cMainThread::serializeTheoreticalSpectrumListPool(int peaklistseriesvectorid, vector& theoreticalspectrumlistpool, cTheoreticalSpectrumList& theoreticalspectrumlist) { + if (theoreticalspectrumlistpool.size() == 0) { + return; + } + + for (int i = 0; i < theoreticalspectrumlistpool[0]->size(peaklistseriesvectorid); i++) { + theoreticalspectrumlist.add(peaklistseriesvectorid, theoreticalspectrumlistpool[0]->get(peaklistseriesvectorid, i)); + } + + for (int i = 1; i < theoreticalspectrumlistpool.size(); i++) { + for (int j = 0; j < theoreticalspectrumlistpool[i]->size(peaklistseriesvectorid); j++) { + theoreticalspectrumlist.get(peaklistseriesvectorid, j).attach(theoreticalspectrumlistpool[i]->get(peaklistseriesvectorid, j)); + } + } +} + + +void cMainThread::printMatrix(cPeaksList& peaklist) { + unsigned roundedmz; + map blocksmap; + multimap blocksmultimap; + + double precisionvalue = 1000.0; + int size = (int)peaklist.size(); + + string htmlfilename = parameters.peaklistfilenames[0]; + if (htmlfilename.rfind('/') != string::npos) { + htmlfilename = htmlfilename.substr(0, htmlfilename.rfind('/')) + "_matrix.html"; + } + + ofstream html(htmlfilename); + html << "

"; + + html << ""; + for (int i = 0; i < size; i++) { + html << ""; + } + html << ""; + + for (int i = 0; i < size; i++) { + html << ""; + + html << ""; + + for (int j = 0; j < size; j++) { + html << ""; + } + html << ""; + } + + html << "
" << peaklist[i].mzratio << "
" << peaklist[i].mzratio << ""; + + if (i > j) { + roundedmz = round(fabs(peaklist[i].mzratio - peaklist[j].mzratio) * precisionvalue); + html << (double)roundedmz / precisionvalue; + + if (blocksmap.count(roundedmz) == 0) { + blocksmap[roundedmz] = 1; + } + else { + blocksmap[roundedmz]++; + } + } + + html << "

"; + + html << "

"; + + for (auto& it : blocksmap) { + blocksmultimap.insert(make_pair(it.second, it.first)); + } + + html << ""; + + cBricksDatabase blockdb; + ifstream blocksstream(parameters.bricksdatabasefilename); + string error; + blockdb.loadFromPlainTextStream(blocksstream, error, true, true); + + for (auto it = blocksmultimap.rbegin(); it != blocksmultimap.rend(); ++it) { + html << ""; + html << ""; + html << ""; + html << ""; + html << ""; + } + + html << "
countm/z differenceblock
" << it->first << "" << (double)it->second / precisionvalue << ""; + + for (int j = 0; j < blockdb.size(); j++) { + if (round(blockdb[j].getMass() * precisionvalue) == it->second) { + html << blockdb[j].getAcronymsAsString() << ", " << blockdb[j].getSummary() << "; "; + } + } + + html << "

"; + + html << ""; +} + + +void cMainThread::printIonEstimations(cPeaksList& peaklist) { + vector testedions; + //testedions.push_back("deamidated b-ion"); + testedions.push_back("dehydrated b-ion"); + testedions.push_back("a-ion"); + //testedions.push_back("deamidated a-ion"); + //testedions.push_back("dehydrated a-ion"); + + vector massshifts; + //massshifts.push_back(17.026549); + massshifts.push_back(18.01057); + massshifts.push_back(27.99492); + //massshifts.push_back(45.021464); + //massshifts.push_back(46.005479); + + double adduct = 0; + adduct = 21.981946; + + string htmlfilename = parameters.peaklistfilenames[0]; + if (htmlfilename.rfind('/') != string::npos) { + htmlfilename = htmlfilename.substr(0, htmlfilename.rfind('/')) + "_estimations.html"; + } + + ofstream html(htmlfilename); + html << "

"; + + html << ""; + for (int i = 0; i < (int)testedions.size(); i++) { + html << ""; + } + html << ""; + + for (int i = 0; i < peaklist.size(); i++) { + html << ""; + for (int j = 0; j < (int)massshifts.size(); j++) { + html << ""; + } + html << ""; + } + + html << "
" << testedions[i] << " (-" << massshifts[i] << ")
"; + html << peaklist[i].mzratio - adduct; + html << " "; + if (searchHint(peaklist[i].mzratio - massshifts[j], peaklist, parameters.fragmentmasserrortolerance)) { + html << peaklist[i].mzratio - massshifts[j] - adduct; + } + html << "

"; + + html << ""; +} + + +cMainThread::cMainThread(cParameters& parameters, cTheoreticalSpectrumList& listoftheoreticalspectra, bool enablelogwindow, bool enablestdout) { this->parameters = parameters; - this->theoreticalspectrumlist = &theoreticalspectrumlist; + this->listoftheoreticalspectra = &listoftheoreticalspectra; this->enablelogwindow = enablelogwindow; this->enablestdout = enablestdout; @@ -69,6 +976,19 @@ cMainThread& cMainThread::operator<<(StandardEndLine manip) { } +void cMainThread::addToParallelOutputState(int value) { + QMutexLocker ml(&mutex); + paralleloutputstate += value; + + if (paralleloutputsize > 0) { + *this << endl << int((double)paralleloutputstate / (double)paralleloutputsize * 100.0) << "%"; + if (paralleloutputsize == paralleloutputstate) { + *this << endl; + } + } +} + + void cMainThread::run() { if (parameters.mode != denovoengine) { @@ -77,18 +997,19 @@ void cMainThread::run() { cMainThread* os = this; string errormessage; + + int startscanno; + int endscanno; cCandidateSet candidates; candidates.getSet().clear(); - theoreticalspectrumlist->clear(); + listoftheoreticalspectra->clear(); isotopepatterncache.lock(); isotopepatterncache.clear(); isotopepatterncache.unlock(); - int hrs, mins, secs; - QTime time; time.start(); @@ -134,59 +1055,78 @@ void cMainThread::run() { } } - if (parameters.peaklistseries.size() == 0) { - *os << "Error: no peaklist found. The format of peaklist is likely incorrect." << endl; + if (parameters.peaklistseriesvector.size() == 0) { + *os << "Error: no peaklist found. The format of a peaklist is likely incorrect." << endl; emitEndSignals(); return; } - if (((parameters.mode == denovoengine) || (parameters.mode == databasesearch)) && (parameters.scannumber > parameters.peaklistseries.size())) { - *os << "Number of spectra in the file: " << parameters.peaklistseries.size() << endl; + if ((parameters.mode == denovoengine) || (parameters.mode == singlecomparison) || (parameters.mode == databasesearch)) { + if (parameters.peaklistseriesvector.size() > 1) { + *os << "Error: multiple files cannot be processed in MS/MS mode." << endl; + emitEndSignals(); + return; + } + } + + for (auto& it : parameters.peaklistseriesvector) { + if (it.size() == 0) { + *os << "Error: no peaklist found. The format of a peaklist is likely incorrect." << endl; + emitEndSignals(); + return; + } + } + + if (((parameters.mode == denovoengine) || (parameters.mode == databasesearch)) && (parameters.scannumber > parameters.peaklistseriesvector[0].size())) { + *os << "Number of spectra in the file: " << parameters.peaklistseriesvector[0].size() << endl; *os << "Error: no peaklist found (scan no. " << parameters.scannumber << ")." << endl; emitEndSignals(); return; } - int startscanno = ((parameters.mode == dereplication) || (parameters.mode == compoundsearch) || (parameters.mode == singlecomparison)) ? 0 : parameters.scannumber - 1; - int endscanno = ((parameters.mode == dereplication) || (parameters.mode == compoundsearch) || (parameters.mode == singlecomparison)) ? parameters.peaklistseries.size() : parameters.scannumber; - for (int i = startscanno; i < endscanno; i++) { - parameters.peaklistseries[i].sortbyMass(); + for (int h = 0; h < (int)parameters.peaklistseriesvector.size(); h++) { + startscanno = ((parameters.mode == dereplication) || (parameters.mode == compoundsearch) || (parameters.mode == singlecomparison)) ? 0 : parameters.scannumber - 1; + endscanno = ((parameters.mode == dereplication) || (parameters.mode == compoundsearch) || (parameters.mode == singlecomparison)) ? parameters.peaklistseriesvector[h].size() : parameters.scannumber; - if (parameters.peaklistseries[i].normalizeIntenzity() == -1) { - if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch) || (parameters.mode == singlecomparison)) { - *os << "Warning: the spectrum no. " << i + 1 << " is empty or the format of peaklist is incorrect." << endl; - } - else { - *os << "Number of spectra in the file: " << parameters.peaklistseries.size() << endl; - *os << "Error: the spectrum no. " << i + 1 << " is empty or the format of peaklist is incorrect." << endl; - emitEndSignals(); - return; + for (int i = startscanno; i < endscanno; i++) { + parameters.peaklistseriesvector[h][i].sortbyMass(); + + if (parameters.peaklistseriesvector[h][i].normalizeIntenzity() == -1) { + if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch) || (parameters.mode == singlecomparison)) { + *os << "Warning: the spectrum no. " << i + 1 << " in the file no. " << h + 1 << " is empty or the format of peaklist is incorrect." << endl; + } + else { + *os << "Number of spectra in the file: " << parameters.peaklistseriesvector[h].size() << endl; + *os << "Error: the spectrum no. " << i + 1 << " in the file no. " << h + 1 << " is empty or the format of peaklist is incorrect." << endl; + emitEndSignals(); + return; + } } - } - parameters.peaklistseries[i].cropMinimumMZRatio(parameters.minimummz, parameters.fragmentmasserrortolerance); + parameters.peaklistseriesvector[h][i].cropMinimumMZRatio(parameters.minimummz, parameters.fragmentmasserrortolerance); - if ((parameters.mode == denovoengine) || (parameters.mode == singlecomparison) || (parameters.mode == databasesearch)) { - parameters.peaklistseries[i].cropMaximumMZRatio(charge(uncharge(parameters.precursormass, parameters.precursorcharge), (parameters.precursorcharge > 0)?1:-1), parameters.precursormasserrortolerance); - } + if ((parameters.mode == denovoengine) || (parameters.mode == singlecomparison) || (parameters.mode == databasesearch)) { + parameters.peaklistseriesvector[h][i].cropMaximumMZRatio(charge(uncharge(parameters.precursormass, parameters.precursorcharge), (parameters.precursorcharge > 0) ? 1 : -1), parameters.precursormasserrortolerance); + } - if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { - if (parameters.maximummz > 0) { - parameters.peaklistseries[i].cropMaximumMZRatio(parameters.maximummz, parameters.fragmentmasserrortolerance); + if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { + if (parameters.maximummz > 0) { + parameters.peaklistseriesvector[h][i].cropMaximumMZRatio(parameters.maximummz, parameters.fragmentmasserrortolerance); + } } - } - parameters.peaklistseries[i].cropAbsoluteIntenzity(parameters.minimumabsoluteintensitythreshold); - parameters.peaklistseries[i].cropRelativeIntenzity(parameters.minimumrelativeintensitythreshold); + parameters.peaklistseriesvector[h][i].cropAbsoluteIntenzity(parameters.minimumabsoluteintensitythreshold); + parameters.peaklistseriesvector[h][i].cropRelativeIntenzity(parameters.minimumrelativeintensitythreshold); - if ((parameters.mode == denovoengine) || (parameters.mode == databasesearch) || ((parameters.mode == singlecomparison) && (parameters.peaklistseries.size() == 1))) { - *os << "Number of spectra in the file: " << parameters.peaklistseries.size() << endl; - *os << "Processing spectrum no.: " << i + 1; - if (parameters.peaklistseries[i].getTitle().size() > 0) { - *os << " (" << parameters.peaklistseries[i].getTitle() << "):"; + if ((parameters.mode == denovoengine) || (parameters.mode == databasesearch) || ((parameters.mode == singlecomparison) && (parameters.peaklistseriesvector[h].size() == 1))) { + *os << "Number of spectra in the file: " << parameters.peaklistseriesvector[h].size() << endl; + *os << "Processing spectrum no.: " << i + 1; + if (parameters.peaklistseriesvector[h][i].getTitle().size() > 0) { + *os << " (" << parameters.peaklistseriesvector[h][i].getTitle() << "):"; + } + *os << endl; + *os << parameters.peaklistseriesvector[h][i].print(); } - *os << endl; - *os << parameters.peaklistseries[i].print(); } } @@ -203,20 +1143,16 @@ void cMainThread::run() { if (parameters.sequencedatabase.size() > compoundslimit) { parameters.sequencedatabase.clear(); *os << "Error: The number of generated compounds exceeded the limit " + to_string(compoundslimit) + ". Please, adjust the settings to limit the number of compounds." << endl; - - secs = time.elapsed() / 1000; - mins = (secs / 60) % 60; - hrs = (secs / 3600); - secs = secs % 60; - - *os << "Execution time: " << to_string(hrs) << " hrs, " << to_string(mins) << " min, " << to_string(secs) << " sec." << endl << endl; - + *os << "Execution time: " << getCurrentTime(time) << "." << endl << endl; emitEndSignals(); return; } } if ((parameters.mode == denovoengine) || (parameters.mode == singlecomparison) || (parameters.mode == databasesearch)) { + //printMatrix(parameters.peaklistseries[parameters.scannumber - 1]); + //printIonEstimations(parameters.peaklistseries[parameters.scannumber - 1]); + int startmodifid, endmodifid, middlemodifid; cSequence sequence; @@ -482,233 +1418,169 @@ void cMainThread::run() { // database search - MS mode if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { - *os << "Generating theoretical peaks... "; - - theoreticalspectrumlist->initialize(*os, parameters, &graph); - - cTheoreticalSpectrum ts; - ts.setParameters(¶meters); + bool runtest = false; - if (parameters.generateisotopepattern) { - ts.generateFineMSSpectrum(terminatecomputation); + if (!runtest) { + if (parameters.maximumnumberofthreads > 1) { + multiThreadMS1(os, time); + } + else { + singleThreadMS1(os, time); + } } else { - ts.generateMSSpectrum(terminatecomputation, true); - } - - if (terminatecomputation) { - emitEndSignals(); - return; - } + cTheoreticalSpectrum* singletest = new cTheoreticalSpectrum(); + cTheoreticalSpectrum* multitest = new cTheoreticalSpectrum(); - unordered_map tempmap; - parameters.peakidtodesc.clear(); - parameters.isotopeformulaidtodesc.clear(); + vector > > singlehintsindex; + vector > > multihintsindex; - tempmap.clear(); - ts.getTheoreticalPeaks()->reducePeakDescriptions(tempmap); - convertStringIntUnorderedMapToStringVector(tempmap, parameters.peakidtodesc); + cTheoreticalSpectrumList* singlelistoftheoreticalspectra = new cTheoreticalSpectrumList(); + cTheoreticalSpectrumList* multilistoftheoreticalspectra = new cTheoreticalSpectrumList(); - //tempmap.clear(); - //ts.getTheoreticalPeaks()->reduceIsotopeFormulaDescriptions(tempmap); - //convertStringIntUnorderedMapToStringVector(tempmap, parameters.isotopeformulaidtodesc); + vector > singleunmatchedpeaks; + vector > multiunmatchedpeaks; - *os << "ok" << endl; - *os << "Comparing theoretical peaks with the experimental peaklist(s)... " << endl; - *os << "Number of experimental peaklists: " << parameters.peaklistseries.size() << endl; + cSequenceDatabase dbbackup = parameters.sequencedatabase; + singleThreadMS1(os, time, singletest, &singlehintsindex, singlelistoftheoreticalspectra, &singleunmatchedpeaks); - vector unmatchedpeaks; - unmatchedpeaks.resize(parameters.peaklistseries.size()); + parameters.sequencedatabase = dbbackup; + multiThreadMS1(os, time, multitest, &multihintsindex, multilistoftheoreticalspectra, &multiunmatchedpeaks); - for (int i = 0; i < parameters.peaklistseries.size(); i++) { - if (terminatecomputation) { - emitEndSignals(); - return; + if (singletest->getTheoreticalPeaks()->equals(*multitest->getTheoreticalPeaks())) { + *os << endl << "theoretical peaks test ok - singleThreadMS1 vs. multiThreadMS1" << endl; } - - parameters.peaklistseries[i].sortbyMass(); - } - - vector< vector > hintsindex; - hintsindex.resize(ts.getNumberOfPeaks()); - - bool lcms = (parameters.peaklistseries.size() > 1) && !((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)); - - if (lcms || (parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { - *os << "Analyzing spectra : " << endl; - - for (int i = 0; i < parameters.peaklistseries.size(); i++) { - if ((i + 1) % 100 == 0) { - *os << i + 1 << " "; - } - if ((i + 1) % 2500 == 0) { - *os << endl; - } - - if (terminatecomputation) { - emitEndSignals(); - return; - } - - cTheoreticalSpectrum tstmp; - tstmp.setParameters(¶meters); - tstmp.getHintsIndex(i, ts, unmatchedpeaks[i], hintsindex); - - for (auto& it : hintsindex) { - sort(it.begin(), it.end()); - } + else { + *os << endl << "theoretical peakstest failed - singleThreadMS1 vs. multiThreadMS1" << endl; } - *os << " ok" << endl; - } - - *os << "Processing the peaklist no. : " << endl; - - for (int i = 0; i < parameters.peaklistseries.size(); i++) { - if ((i + 1) % 100 == 0) { - *os << i + 1 << " "; - } - if ((i + 1) % 2500 == 0) { - *os << endl; + bool hintsindextest = true; + if (singlehintsindex.size() == multihintsindex.size()) { + for (int i = 0; i < singlehintsindex.size(); i++) { + if (singlehintsindex[i].size() == multihintsindex[i].size()) { + for (int j = 0; j < singlehintsindex[i].size(); j++) { + if (singlehintsindex[i][j].size() == multihintsindex[i][j].size()) { + for (int k = 0; k < singlehintsindex[i][j].size(); k++) { + if (singlehintsindex[i][j][k] != multihintsindex[i][j][k]) { + *os << "hintsindex " << i << " " << j << " " << k << " failed" << endl; + hintsindextest = false; + break; + } + } + if (!hintsindextest) { + break; + } + } + else { + *os << "singlehintsindex[i][j].size() == multihintsindex[i][j].size()" << " failed"; + hintsindextest = false; + break; + } + } + } + else { + *os << "singlehintsindex[i].size() == multihintsindex[i].size()" << " failed"; + hintsindextest = false; + break; + } + } } - - if (terminatecomputation) { - emitEndSignals(); - return; + else { + *os << "singlehintsindex.size() == multihintsindex.size()" << " failed"; + hintsindextest = false; } - cTheoreticalSpectrum tstmp; - tstmp.setParameters(¶meters); - tstmp.compareMSSpectrum(i, ts, unmatchedpeaks[i], hintsindex); - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { - parameters.peaklistseries[i].clear(); + if (hintsindextest) { + *os << endl << "hintsindex test ok - singleThreadMS1 vs. multiThreadMS1" << endl; } - theoreticalspectrumlist->add(tstmp); - } - - if (!((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML))) { - for (int i = 0; i < parameters.peaklistseries.size(); i++) { - if (terminatecomputation) { - emitEndSignals(); - return; - } - - parameters.peaklistseries[i].clear(); + else { + *os << endl << "hintsindex test failed - singleThreadMS1 vs. multiThreadMS1" << endl; } - } - - *os << " ok" << endl << "Total number of spectra: " << parameters.peaklistseries.size() << endl; - - if (parameters.generateisotopepattern) { - *os << endl << "Calculating FDRs... "; - - vector targetscoresvector; - vector decoyscoresvector; - vector allscoresvector; - vector fdrs; - map *targetscores; - map *decoyscores; - map numbersofmatchedenvelopes; - double minfdr; - int targetscoresvectorsize; + bool theoreticalspectrumlisttest = true; + if (singlelistoftheoreticalspectra->size() == multilistoftheoreticalspectra->size()) { + for (int i = 0; i < singlelistoftheoreticalspectra->size(); i++) { + if (singlelistoftheoreticalspectra->size(i) == multilistoftheoreticalspectra->size(i)) { + for (int j = 0; j < singlelistoftheoreticalspectra->size(i); j++) { + if (!singlelistoftheoreticalspectra->get(i, j).equals(multilistoftheoreticalspectra->get(i, j))) { + cout << "(theoreticalspectrumlist in " << i + 1 << " " << j + 1 << ")" << endl << endl; + theoreticalspectrumlisttest = false; - // calculate numbers of matched envelopes in single-pixel spectra - for (int i = 0; i < (int)theoreticalspectrumlist->size(); i++) { - targetscores = &((*theoreticalspectrumlist)[i].getTargetScores()); - decoyscores = &((*theoreticalspectrumlist)[i].getDecoyScores()); + cout << singlelistoftheoreticalspectra->get(i, j).getTheoreticalPeaks()->print(false, true); + cout << multilistoftheoreticalspectra->get(i, j).getTheoreticalPeaks()->print(false, true); - for (auto& it : *targetscores) { - if (numbersofmatchedenvelopes.count(it.first) == 0) { - numbersofmatchedenvelopes.insert(make_pair(it.first, 1)); + break; + } + } } else { - numbersofmatchedenvelopes[it.first]++; + theoreticalspectrumlisttest = false; + break; } } + } + else { + theoreticalspectrumlisttest = false; + } - for (auto& it : *decoyscores) { - if (numbersofmatchedenvelopes.count(it.first) == 0) { - numbersofmatchedenvelopes.insert(make_pair(it.first, 1)); + if (theoreticalspectrumlisttest) { + *os << endl << "theoreticalspectrumlisttest test ok - singleThreadMS1 vs. multiThreadMS1" << endl; + } + else { + *os << endl << "theoreticalspectrumlisttest test failed - singleThreadMS1 vs. multiThreadMS1" << endl; + } + + bool unmatchedpeakstest = true; + if (singleunmatchedpeaks.size() == multiunmatchedpeaks.size()) { + for (int i = 0; i < singleunmatchedpeaks.size(); i++) { + if (singleunmatchedpeaks[i].size() == multiunmatchedpeaks[i].size()) { + for (int j = 0; j < singleunmatchedpeaks[i].size(); j++) { + if (!singleunmatchedpeaks[i][j].equals(multiunmatchedpeaks[i][j])) { + cout << "(unmatchedpeaks in " << i + 1 << " " << j + 1 << ")" << endl << endl; + unmatchedpeakstest = false; + break; + } + } } else { - numbersofmatchedenvelopes[it.first]++; + unmatchedpeakstest = false; + break; } } } - - // divide scores by numbers of matched envelopes in all single-pixel spectra - for (int i = 0; i < (int)theoreticalspectrumlist->size(); i++) { - targetscores = &((*theoreticalspectrumlist)[i].getTargetScores()); - decoyscores = &((*theoreticalspectrumlist)[i].getDecoyScores()); - - for (auto& it : *targetscores) { - //it.second /= sqrt((double)numbersofmatchedenvelopes[it.first]); - targetscoresvector.push_back(it.second); - } - - for (auto& it : *decoyscores) { - //it.second /= sqrt((double)numbersofmatchedenvelopes[it.first]); - decoyscoresvector.push_back(it.second); - } + else { + unmatchedpeakstest = false; } - // calculate FDRs - sort(targetscoresvector.begin(), targetscoresvector.end()); - sort(decoyscoresvector.begin(), decoyscoresvector.end()); - - allscoresvector = targetscoresvector; - allscoresvector.insert(allscoresvector.end(), decoyscoresvector.begin(), decoyscoresvector.end()); - sort(allscoresvector.begin(), allscoresvector.end()); - - targetscoresvectorsize = (int)targetscoresvector.size(); - fdrs.resize(targetscoresvectorsize); - for (int i = 0; i < targetscoresvectorsize; i++) { - fdrs[i] = (double)getNumberOfScoreHits(decoyscoresvector, targetscoresvector[i]) / (double)max(getNumberOfScoreHits(allscoresvector, targetscoresvector[i]), 1); + if (unmatchedpeakstest) { + *os << endl << "unmatchedpeaks test ok - singleThreadMS1 vs. multiThreadMS1" << endl; } - - // calculate q-values - /*for (int i = targetscoresvectorsize - 1; i >= 0; i--) { - if ((i == targetscoresvectorsize - 1) || (fdrs[i] < minfdr)) { - minfdr = fdrs[i]; - } - if (fdrs[i] > minfdr) { - fdrs[i] = minfdr; - } - }*/ - - for (int i = 0; i < (int)theoreticalspectrumlist->size(); i++) { - (*theoreticalspectrumlist)[i].setFDRs(targetscoresvector, fdrs, unmatchedpeaks[i]); + else { + *os << endl << "unmatchedpeaks test failed - singleThreadMS1 vs. multiThreadMS1" << endl; } - *os << "ok" << endl; - - } + delete singletest; + delete multitest; - for (int i = 0; i < (int)theoreticalspectrumlist->size(); i++) { - (*theoreticalspectrumlist)[i].finalizeMSSpectrum(unmatchedpeaks[i], true); + delete singlelistoftheoreticalspectra; + delete multilistoftheoreticalspectra; } - } if ((parameters.mode == denovoengine) || (parameters.mode == singlecomparison) || (parameters.mode == databasesearch)) { *os << "Comparing theoretical spectra of candidates with the peak list... " << endl; - theoreticalspectrumlist->initialize(*os, parameters, &graph); - if (theoreticalspectrumlist->parallelCompareAndStore(candidates, terminatecomputation) == -1) { + listoftheoreticalspectra->initialize(*os, parameters, &graph); + listoftheoreticalspectra->resize(1); + if (listoftheoreticalspectra->parallelCompareAndStore(0, candidates, terminatecomputation) == -1) { emitEndSignals(); return; } *os << " ok" << endl; } - secs = time.elapsed() / 1000; - mins = (secs / 60) % 60; - hrs = (secs / 3600); - secs = secs % 60; - *os << endl << appname.toStdString() << " successfully finished at " << time.currentTime().toString().toStdString(); - *os << " (time elapsed: " << to_string(hrs) << " hrs, " << to_string(mins) << " min, " << to_string(secs) << " sec)." << endl; + *os << " (time elapsed: " << getCurrentTime(time) << ")." << endl; *os << "====================================================================================================" << endl; diff --git a/CycloBranch/gui/cMainThread.h b/CycloBranch/gui/cMainThread.h index ba2e26d..a282aa1 100644 --- a/CycloBranch/gui/cMainThread.h +++ b/CycloBranch/gui/cMainThread.h @@ -11,6 +11,7 @@ #include #include #include +#include #include "core/utilities.h" #include "core/cParameters.h" @@ -42,9 +43,34 @@ class cMainThread : public QThread { bool graphreaderisworking; cDeNovoGraph graph; - cTheoreticalSpectrumList* theoreticalspectrumlist; + cTheoreticalSpectrumList* listoftheoreticalspectra; cParameters parameters; + QMutex mutex; + + int paralleloutputstate; + int paralleloutputsize; + + string getCurrentTime(QTime& time); + + void singleThreadMS1(cMainThread* os, QTime& time, cTheoreticalSpectrum* testspectrum = 0, vector< vector< vector > >* testhintsindexvector = 0, cTheoreticalSpectrumList* testlistoftheoreticalspectra = 0, vector< vector >* testunmatchedpeaksvector = 0); + + void multiThreadMS1(cMainThread* os, QTime& time, cTheoreticalSpectrum* testspectrum = 0, vector< vector< vector > >* testhintsindexvector = 0, cTheoreticalSpectrumList* testlistoftheoreticalspectra = 0, vector< vector >* testunmatchedpeaksvector = 0); + + void initParallelOutputState(int size); + + void serializeSpectrumPool(vector& spectrumpool, cTheoreticalSpectrum& ts); + + void serializeHintsIndexPool(vector< vector< vector > >& hintsindexpool, vector< vector >& hintsindex); + + void serializeUnmatchedPeaksPool(int peaklistseriesvectorid, vector< vector >& unmatchedpeakspool, vector< vector >& unmatchedpeaks); + + void serializeTheoreticalSpectrumListPool(int peaklistseriesvectorid, vector& theoreticalspectrumlistpool, cTheoreticalSpectrumList& theoreticalspectrumlist); + + void printMatrix(cPeaksList& peaklist); + + void printIonEstimations(cPeaksList& peaklist); + public: @@ -52,11 +78,11 @@ class cMainThread : public QThread { /** \brief The constructor. \param parameters reference to input paramaters - \param theoreticalspectrumlist a list of theoretical spectra + \param listoftheoreticalspectra lists of theoretical spectra \param enablelogwindow if true then messages are logged into the log window \param enablestdout if true then messages are logged into the standard output */ - cMainThread(cParameters& parameters, cTheoreticalSpectrumList& theoreticalspectrumlist, bool enablelogwindow = true, bool enablestdout = true); + cMainThread(cParameters& parameters, cTheoreticalSpectrumList& listoftheoreticalspectra, bool enablelogwindow = true, bool enablestdout = true); /** @@ -119,6 +145,13 @@ class cMainThread : public QThread { cMainThread& operator<<(StandardEndLine manip); + /** + \brief Add a value to the output state (for internal threads). + \param value value + */ + void addToParallelOutputState(int value); + + protected: diff --git a/CycloBranch/gui/cMainWindow.cpp b/CycloBranch/gui/cMainWindow.cpp index 6c55604..1cb1814 100644 --- a/CycloBranch/gui/cMainWindow.cpp +++ b/CycloBranch/gui/cMainWindow.cpp @@ -29,6 +29,7 @@ cMainWindow::cMainWindow() { menuFile = new QMenu(tr("&File"), this); menuSearch = new QMenu(tr("&Search"), this); menuTools = new QMenu(tr("&Tools"), this); + menuBookmarks = new QMenu(tr("&Bookmarks"), this); menuView = new QMenu(tr("&View"), this); menuHelp = new QMenu(tr("&Help"), this); @@ -73,22 +74,55 @@ cMainWindow::cMainWindow() { actionDrawPeptide->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P)); actionSummaryTableOfMatchedPeaks = new QAction(QIcon(":/images/icons/table.png"), tr("S&ummary Table of Matched Peaks"), this); - actionSummaryTableOfMatchedPeaks->setShortcut(QKeySequence(Qt::Key_F9)); + actionSummaryTableOfMatchedPeaks->setShortcut(QKeySequence(Qt::Key_F8)); + + actionMultipleDatasets = new QAction(QIcon(":/images/icons/features.png"), tr("&Annotated Features Overview"), this); + actionMultipleDatasets->setShortcut(QKeySequence(Qt::SHIFT + Qt::Key_F8)); actionChromatogramWindow = new QAction(QIcon(":/images/icons/chromatography.png"), tr("C&hromatogram"), this); - actionChromatogramWindow->setShortcut(QKeySequence(Qt::Key_F10)); + actionChromatogramWindow->setShortcut(QKeySequence(Qt::Key_F9)); actionChromatogramWindow->setDisabled(true); - actionImageWindow = new QAction(QIcon(":/images/icons/image.png"), tr("&CrossVis"), this); - actionImageWindow->setShortcut(QKeySequence(Qt::Key_F11)); + actionImageWindow = new QAction(QIcon(":/images/icons/image_edit.png"), tr("Image &Fusion"), this); + actionImageWindow->setShortcut(QKeySequence(Qt::Key_F10)); actionImageWindow->setDisabled(true); - actionBookMark1 = new QAction(QIcon(":/images/icons/25.png"), tr("&Norine"), this); + actionPatternSimulatorWindow = new QAction(QIcon(":/images/icons/pattern.png"), tr("&Simulate Isotopic Pattern"), this); + actionPatternSimulatorWindow->setShortcut(QKeySequence(Qt::Key_F11)); + + actionFormulaPredictor = new QAction(QIcon(":/images/icons/formula.png"), tr("Calculate Molecula&r Formula"), this); + actionFormulaPredictor->setShortcut(QKeySequence(Qt::Key_F12)); + + actionBookMark1 = new QAction("", this); actionBookMark1->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_1)); - actionBookMark2 = new QAction(QIcon(":/images/icons/5.png"), tr("Gene&rate Blocks and Sequences using BBDGNC"), this); + actionBookMark2 = new QAction("", this); actionBookMark2->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_2)); + actionBookMark3 = new QAction("", this); + actionBookMark3->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_3)); + + actionBookMark4 = new QAction("", this); + actionBookMark4->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_4)); + + actionBookMark5 = new QAction("", this); + actionBookMark5->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_5)); + + actionBookMark6 = new QAction("", this); + actionBookMark6->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_6)); + + actionBookMark7 = new QAction("", this); + actionBookMark7->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_7)); + + actionBookMark8 = new QAction("", this); + actionBookMark8->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_8)); + + actionBookMark9 = new QAction("", this); + actionBookMark9->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_9)); + + actionBookMark10 = new QAction("", this); + actionBookMark10->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_0)); + actionShowIsomers = new QAction(QIcon(":/images/icons/95.png"), tr("Show &Isomers"), this); actionShowIsomers->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_I)); actionShowIsomers->setCheckable(true); @@ -129,11 +163,11 @@ cMainWindow::cMainWindow() { toolbarTools->addAction(actionModifications); toolbarTools->addAction(actionDrawPeptide); toolbarTools->addAction(actionSummaryTableOfMatchedPeaks); + toolbarTools->addAction(actionMultipleDatasets); toolbarTools->addAction(actionChromatogramWindow); toolbarTools->addAction(actionImageWindow); - toolbarTools->addSeparator(); - toolbarTools->addAction(actionBookMark1); - toolbarTools->addAction(actionBookMark2); + toolbarTools->addAction(actionPatternSimulatorWindow); + toolbarTools->addAction(actionFormulaPredictor); toolbarView = addToolBar(tr("View")); toolbarView->addAction(actionShowIsomers); @@ -145,6 +179,42 @@ cMainWindow::cMainWindow() { toolbarHelp->addAction(actionPDFManual); toolbarHelp->addAction(actionAbout); + addToolBarBreak(); + + toolbarBookmarks = addToolBar(tr("Bookmarks")); + toolbarBookmarks->addAction(actionBookMark1); + toolbarBookmarks->addAction(actionBookMark2); + toolbarBookmarks->addAction(actionBookMark3); + toolbarBookmarks->addAction(actionBookMark4); + toolbarBookmarks->addAction(actionBookMark5); + toolbarBookmarks->addAction(actionBookMark6); + toolbarBookmarks->addAction(actionBookMark7); + toolbarBookmarks->addAction(actionBookMark8); + toolbarBookmarks->addAction(actionBookMark9); + toolbarBookmarks->addAction(actionBookMark10); + + inputfiltercombobox = new QComboBox(); + inputfiltercombobox->setToolTip("Select the input file."); + inputfiltercombobox->setSizeAdjustPolicy(QComboBox::AdjustToContents); + + inputfilterbutton = new QPushButton("Select"); + inputfilterbutton->setToolTip("Select the input file."); + inputfilterbutton->setMinimumWidth(75); + + inputfilterhbox = new QHBoxLayout(); + inputfilterhbox->addWidget(inputfiltercombobox); + inputfilterhbox->addSpacing(10); + inputfilterhbox->addWidget(inputfilterbutton); + + inputfilterwidget = new QWidget(); + inputfilterwidget->setLayout(inputfilterhbox); + + addToolBarBreak(); + + toolbarInputFilter = addToolBar(tr("Input")); + toolbarInputFilter->addWidget(inputfilterwidget); + toolbarInputFilter->setVisible(false); + rowsfilteroperator = new QComboBox(); rowsfilteroperator->setToolTip("OR = any condition must be met; AND = all conditions must be met."); rowsfilteroperator->addItem("OR"); @@ -227,8 +297,9 @@ cMainWindow::cMainWindow() { rowsfilterwidget->setLayout(rowsfilterhbox); addToolBarBreak(); - toolbarFilter = addToolBar(tr("Filter")); - toolbarFilter->addWidget(rowsfilterwidget); + + toolbarRowsFilter = addToolBar(tr("Filter")); + toolbarRowsFilter->addWidget(rowsfilterwidget); results = new QTableView(this); resultsmodel = new QStandardItemModel(0, 0, this); @@ -250,10 +321,13 @@ cMainWindow::cMainWindow() { drawpeptidewidget = new cDrawPeptideWidget(this); summarytableofmatchedpeaks = new cSummaryPeaksTableWidget(&globalpreferences, this); imagewindow = new cImageWindow(&globalpreferences, this); - chromatogramwindow = new cChromatogramWindow(&globalpreferences, theoreticalspectrumlist, this); + chromatogramwindow = new cChromatogramWindow(&globalpreferences, listoftheoreticalspectra, this); parameterswidget = new cParametersWidget(&globalpreferences, this); htmlexportdialog = new cHTMLExportDialog(this); preferencesdialog = new cPreferencesDialog(globalpreferences, this); + multipledatasetswidget = new cMultipleDatasetsTableWidget(&globalpreferences, this); + patternsimulatorwidget = new cPatternSimulatorWidget(&globalpreferences, this); + formulapredictor = new cFormulaPredictor(&globalpreferences, this); connect(actionOpenResults, SIGNAL(triggered()), this, SLOT(openResultsFile())); connect(actionSaveResults, SIGNAL(triggered()), this, SLOT(saveResultsFile())); @@ -270,25 +344,42 @@ cMainWindow::cMainWindow() { connect(actionDrawPeptide, SIGNAL(triggered()), this, SLOT(showDrawPeptideWidget())); connect(actionBookMark1, SIGNAL(triggered()), this, SLOT(gotoBookMark1())); connect(actionBookMark2, SIGNAL(triggered()), this, SLOT(gotoBookMark2())); + connect(actionBookMark3, SIGNAL(triggered()), this, SLOT(gotoBookMark3())); + connect(actionBookMark4, SIGNAL(triggered()), this, SLOT(gotoBookMark4())); + connect(actionBookMark5, SIGNAL(triggered()), this, SLOT(gotoBookMark5())); + connect(actionBookMark6, SIGNAL(triggered()), this, SLOT(gotoBookMark6())); + connect(actionBookMark7, SIGNAL(triggered()), this, SLOT(gotoBookMark7())); + connect(actionBookMark8, SIGNAL(triggered()), this, SLOT(gotoBookMark8())); + connect(actionBookMark9, SIGNAL(triggered()), this, SLOT(gotoBookMark9())); + connect(actionBookMark10, SIGNAL(triggered()), this, SLOT(gotoBookMark10())); connect(actionShowIsomers, SIGNAL(triggered()), this, SLOT(showIsomersStateChanged())); connect(actionGraph, SIGNAL(triggered()), this, SLOT(showGraph())); connect(actionSummaryTableOfMatchedPeaks, SIGNAL(triggered()), this, SLOT(showSummaryTableOfMatchedPeaks())); - connect(actionImageWindow, SIGNAL(triggered()), this, SLOT(showImageWindow())); + connect(actionMultipleDatasets, SIGNAL(triggered()), this, SLOT(showMultipleDatasetsOverview())); connect(actionChromatogramWindow, SIGNAL(triggered()), this, SLOT(showChromatogramWindow())); + connect(actionImageWindow, SIGNAL(triggered()), this, SLOT(showImageWindow())); + connect(actionPatternSimulatorWindow, SIGNAL(triggered()), this, SLOT(showPatternSimulatorWindow())); + connect(actionFormulaPredictor, SIGNAL(triggered()), this, SLOT(showFormulaPredictor())); connect(actionLog, SIGNAL(triggered()), this, SLOT(showHideLog())); connect(actionHTMLDocumentation, SIGNAL(triggered()), this, SLOT(showHTMLDocumentation())); connect(actionPDFManual, SIGNAL(triggered()), this, SLOT(showPDFManual())); connect(actionAbout, SIGNAL(triggered()), this, SLOT(showAbout())); + connect(inputfilterbutton, SIGNAL(released()), this, SLOT(inputFilterButtonReleased())); + connect(rowsfilterbutton, SIGNAL(released()), this, SLOT(filterResults())); connect(rowsfilterclearbutton, SIGNAL(released()), this, SLOT(resetFilter())); connect(summarytableofmatchedpeaks, SIGNAL(tableCancelled()), this, SLOT(summaryPeaksTableCancelled())); connect(summarytableofmatchedpeaks, SIGNAL(summaryPeaksTableRowDoubleClicked(int, double)), this, SLOT(summaryPeaksTableRowDoubleClicked(int, double))); + connect(multipledatasetswidget, SIGNAL(tableCancelled()), this, SLOT(multipleDatasetsTableCancelled())); + connect(multipledatasetswidget, SIGNAL(multipleDatasetsTableRowClicked(int, int, int, int, int, string, string, string)), this, SLOT(multipleDatasetsTableRowClicked(int, int, int, int, int, string, string, string))); connect(summarytableofmatchedpeaks, SIGNAL(sendFilterOptionsToImageWindow(vector, bool, string, string, string, string, string, string, bool, bool)), imagewindow, SLOT(setFilterOptionsSlot(vector, bool, string, string, string, string, string, string, bool, bool))); connect(summarytableofmatchedpeaks, SIGNAL(sendFilterOptionsToChromatogram(cPeaksList)), chromatogramwindow, SLOT(setFilterOptionsSlot(cPeaksList))); connect(summarytableofmatchedpeaks, SIGNAL(resetRegion()), imagewindow, SLOT(clearSelection())); + connect(multipledatasetswidget, SIGNAL(filterSummaryTable()), this, SLOT(filterSummaryTableIfPrepared())); + connect(chromatogramwindow, SIGNAL(doubleClickedScanIDSignal(int)), this, SLOT(chromatogramDoubleClicked(int))); connect(imagewindow, SIGNAL(doubleClickedSpectrumIDSignal(int)), this, SLOT(imageWindowDoubleClicked(int))); @@ -314,11 +405,23 @@ cMainWindow::cMainWindow() { menuTools->addAction(actionDrawPeptide); menuTools->addSeparator(); menuTools->addAction(actionSummaryTableOfMatchedPeaks); + menuTools->addAction(actionMultipleDatasets); menuTools->addAction(actionChromatogramWindow); menuTools->addAction(actionImageWindow); menuTools->addSeparator(); - menuTools->addAction(actionBookMark1); - menuTools->addAction(actionBookMark2); + menuTools->addAction(actionPatternSimulatorWindow); + menuTools->addAction(actionFormulaPredictor); + + menuBookmarks->addAction(actionBookMark1); + menuBookmarks->addAction(actionBookMark2); + menuBookmarks->addAction(actionBookMark3); + menuBookmarks->addAction(actionBookMark4); + menuBookmarks->addAction(actionBookMark5); + menuBookmarks->addAction(actionBookMark6); + menuBookmarks->addAction(actionBookMark7); + menuBookmarks->addAction(actionBookMark8); + menuBookmarks->addAction(actionBookMark9); + menuBookmarks->addAction(actionBookMark10); menuView->addAction(actionShowIsomers); menuView->addSeparator(); @@ -333,6 +436,7 @@ cMainWindow::cMainWindow() { menuBar->addMenu(menuFile); menuBar->addMenu(menuSearch); menuBar->addMenu(menuTools); + menuBar->addMenu(menuBookmarks); menuBar->addMenu(menuView); menuBar->addMenu(menuHelp); @@ -362,6 +466,15 @@ cMainWindow::cMainWindow() { chromatogramwindow->hide(); parameterswidget->hide(); + multipledatasetswidget->hide(); + multipledatasetswidget->getPubChemSearchWidget()->hide(); + multipledatasetswidget->getPubChemSearchWidget()->setHTML(""); + multipledatasetswidget->getDefineCalibrationWidget()->hide(); + multipledatasetswidget->getCalibrationChartWidget()->hide(); + + patternsimulatorwidget->hide(); + formulapredictor->hide(); + splitter->setOrientation(Qt::Vertical); splitter->addWidget(results); splitter->addWidget(logWindow); @@ -371,7 +484,8 @@ cMainWindow::cMainWindow() { resize(defaultwinsizex, defaultwinsizey); - theoreticalspectrumlist.clear(); + listoftheoreticalspectra.clear(); + eicchromatograms.clear(); spectradetails.clear(); parameters.clear(); @@ -388,6 +502,21 @@ cMainWindow::cMainWindow() { applyGlobalPreferences(); summarytableisprepared = false; + multipledatasetsisprepared = false; + + lastactivedetail = -1; + + othernormalgeometry = QRect(); + otherismaximized = false; + otherprofilespectrum = false; + otherabsoluteintensity = false; + othermatchedpeaks = false; + otherunmatchedpeaks = false; + otherscrambledpeaks = false; + otherlabelspeaks = false; + othermzselection = true; + + activefileid = 0; quitapp = false; } @@ -396,6 +525,11 @@ cMainWindow::cMainWindow() { cMainWindow::~cMainWindow() { deleteResults(); + delete inputfiltercombobox; + delete inputfilterbutton; + delete inputfilterhbox; + delete inputfilterwidget; + delete rowsfilteroperator; delete rowsfiltercombobox1; delete rowsfiltercomparatorcombobox1; @@ -424,11 +558,14 @@ cMainWindow::~cMainWindow() { delete modificationswidget; delete drawpeptidewidget; delete summarytableofmatchedpeaks; - delete imagewindow; delete chromatogramwindow; + delete imagewindow; delete parameterswidget; delete htmlexportdialog; delete preferencesdialog; + delete multipledatasetswidget; + delete patternsimulatorwidget; + delete formulapredictor; delete actionOpenResults; delete actionSaveResults; @@ -444,11 +581,22 @@ cMainWindow::~cMainWindow() { delete actionDrawPeptide; delete actionBookMark1; delete actionBookMark2; + delete actionBookMark3; + delete actionBookMark4; + delete actionBookMark5; + delete actionBookMark6; + delete actionBookMark7; + delete actionBookMark8; + delete actionBookMark9; + delete actionBookMark10; delete actionShowIsomers; delete actionGraph; delete actionSummaryTableOfMatchedPeaks; - delete actionImageWindow; + delete actionMultipleDatasets; delete actionChromatogramWindow; + delete actionImageWindow; + delete actionPatternSimulatorWindow; + delete actionFormulaPredictor; delete actionLog; delete actionHTMLDocumentation; delete actionPDFManual; @@ -457,6 +605,7 @@ cMainWindow::~cMainWindow() { delete menuFile; delete menuSearch; delete menuTools; + delete menuBookmarks; delete menuView; delete menuHelp; @@ -528,7 +677,7 @@ void cMainWindow::closeEvent(QCloseEvent *event) { void cMainWindow::preparePeptideSequence(int row, string& peptidesequence, bool reportisomers) { int spectrumindex = resultsmodel->item(row, 1)->data(Qt::DisplayRole).toInt() - 1; - peptidesequence = theoreticalspectrumlist[spectrumindex].getCandidate().getAcronymPeptideNameWithHTMLReferences(); + peptidesequence = listoftheoreticalspectra.get(activefileid, spectrumindex).getCandidate().getAcronymPeptideNameWithHTMLReferences(); peptidesequence = stripHTML(peptidesequence); if (!reportisomers) { @@ -648,7 +797,7 @@ void cMainWindow::reportSpectrum(int row, cTheoreticalSpectrum& theoreticalspect if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { int mscol = 2; - if ((parameters.peaklistfileformat != mis) && (parameters.peaklistfileformat != imzML)) { + if ((parameters.peaklistfileformats[activefileid] != mis) && (parameters.peaklistfileformats[activefileid] != imzML)) { resultsmodel->setItem(row, mscol, new QStandardItem()); resultsmodel->item(row, mscol)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(theoreticalspectrum.getExperimentalSpectrum().getRetentionTime())), Qt::DisplayRole); mscol++; @@ -674,7 +823,7 @@ void cMainWindow::reportSpectrum(int row, cTheoreticalSpectrum& theoreticalspect resultsmodel->item(row, mscol)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(theoreticalspectrum.getWeightedRatioOfMatchedPeaks() * 100)), Qt::DisplayRole); mscol++; - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { + if ((parameters.peaklistfileformats[activefileid] == mis) || (parameters.peaklistfileformats[activefileid] == imzML)) { resultsmodel->setItem(row, mscol, new QStandardItem()); resultsmodel->item(row, mscol)->setData(QVariant::fromValue(theoreticalspectrum.getExperimentalSpectrum().getCoordinateX()), Qt::DisplayRole); mscol++; @@ -685,7 +834,9 @@ void cMainWindow::reportSpectrum(int row, cTheoreticalSpectrum& theoreticalspect } - spectradetails[row].initialize(row + 1, &globalpreferences, ¶meters, theoreticalspectrum, this); + spectradetails[row].initialize(row + 1, activefileid, &globalpreferences, ¶meters, theoreticalspectrum, this); + + connect(&spectradetails[row], SIGNAL(lastActiveDetail(int)), this, SLOT(lastActiveDetailSlot(int))); } @@ -759,7 +910,7 @@ bool cMainWindow::prepareSummaryTableOfMatchedPeaks() { if (!summarytableisprepared) { rowsfilterwidget->setEnabled(false); - summarytableisprepared = summarytableofmatchedpeaks->prepareToShow(resultsmodel, resultsproxymodel, ¶meters, &theoreticalspectrumlist, actionShowIsomers->isChecked()); + summarytableisprepared = summarytableofmatchedpeaks->prepareToShow(resultsmodel, resultsproxymodel, ¶meters, &listoftheoreticalspectra, activefileid, actionShowIsomers->isChecked()); rowsfilterwidget->setEnabled(true); } @@ -783,7 +934,7 @@ void cMainWindow::showSummaryTableOfMatchedPeaks() { void cMainWindow::showImageWindow() { if (prepareSummaryTableOfMatchedPeaks()) { - imagewindow->setDefaultMaxXY(parameters.defaultmaxx, parameters.defaultmaxy, parameters.defaultpixelsizex, parameters.defaultpixelsizey, parameters.vendor); + imagewindow->setDefaultValues(parameters.peaklistfilenames[activefileid], parameters.defaultmaxx, parameters.defaultmaxy, parameters.defaultpixelsizex, parameters.defaultpixelsizey, parameters.vendor); imagewindow->show(); imagewindow->activateWindow(); if (imagewindow->isMinimized()) { @@ -795,7 +946,7 @@ void cMainWindow::showImageWindow() { void cMainWindow::showChromatogramWindow() { if (prepareSummaryTableOfMatchedPeaks()) { - chromatogramwindow->recalculateTICChromatogram(); + chromatogramwindow->recalculateTICChromatogram(activefileid); chromatogramwindow->show(); chromatogramwindow->activateWindow(); if (chromatogramwindow->isMinimized()) { @@ -823,6 +974,40 @@ void cMainWindow::showProperties() { } +void cMainWindow::showMultipleDatasetsOverview() { + if (!multipledatasetsisprepared) { + multipledatasetswidget->resetStandard(); + multipledatasetsisprepared = multipledatasetswidget->prepareToShow(¶meters, &listoftheoreticalspectra, activefileid); + multipledatasetswidget->updateListofStandards(); + } + if (multipledatasetsisprepared) { + multipledatasetswidget->show(); + multipledatasetswidget->activateWindow(); + if (multipledatasetswidget->isMinimized()) { + multipledatasetswidget->showNormal(); + } + } +} + + +void cMainWindow::showPatternSimulatorWindow() { + patternsimulatorwidget->show(); + patternsimulatorwidget->activateWindow(); + if (patternsimulatorwidget->isMinimized()) { + patternsimulatorwidget->showNormal(); + } +} + + +void cMainWindow::showFormulaPredictor() { + formulapredictor->show(); + formulapredictor->activateWindow(); + if (formulapredictor->isMinimized()) { + formulapredictor->showNormal(); + } +} + + void cMainWindow::run() { enableRunButtonAndSettings(false); enableStopButton(true); @@ -834,7 +1019,8 @@ void cMainWindow::run() { deleteResults(); - theoreticalspectrumlist.clear(); + listoftheoreticalspectra.clear(); + eicchromatograms.clear(); spectradetails.clear(); parameters.clear(); @@ -849,10 +1035,10 @@ void cMainWindow::run() { regex rx; rx = "\\.[iI][mM][zZ][mM][lL]$"; localparameters.profiledatafilename = ""; - if (regex_search(localparameters.peaklistfilename, rx)) { - localparameters.profiledatafilename = localparameters.peaklistfilename; + if (regex_search(localparameters.peaklistfilenames[0], rx)) { + localparameters.profiledatafilename = localparameters.peaklistfilenames[0]; - string convertedimzml = localparameters.peaklistfilename.substr(0, (int)localparameters.peaklistfilename.size() - 6); + string convertedimzml = localparameters.peaklistfilenames[0].substr(0, (int)localparameters.peaklistfilenames[0].size() - 6); string convertedibd = convertedimzml; convertedimzml += "_converted_fwhm_"; convertedimzml += to_string(localparameters.fwhm); @@ -864,13 +1050,13 @@ void cMainWindow::run() { if (QFile::exists(convertedimzml.c_str()) && QFile::exists(convertedibd.c_str())) { QMessageBox::StandardButton reply; string s = "The converted imzML file '" + convertedimzml.substr(convertedimzml.rfind('/') + 1) + "' has been found.\n\nDo you want to proceed with this file instead of the original imzML file '"; - s += localparameters.peaklistfilename.substr(localparameters.peaklistfilename.rfind('/') + 1) + "' ?"; + s += localparameters.peaklistfilenames[0].substr(localparameters.peaklistfilenames[0].rfind('/') + 1) + "' ?"; s += "\n\nClick 'Yes' to proceed the converted file.\nClick 'No' to convert the original file again. Note: The conversion may be time-consuming."; reply = QMessageBox::question(this, "Do you want to proceed the converted file ?", s.c_str(), QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { - localparameters.peaklistfilename = convertedimzml; + localparameters.peaklistfilenames[0] = convertedimzml; } } } @@ -900,41 +1086,65 @@ void cMainWindow::run() { #if OS_TYPE == WIN if (localparameters.useprofiledata) { + rx = "\\.[bB][aA][fF]$"; - if (regex_search(localparameters.peaklistfilename, rx)) { - int i = 1; - string profiledata = localparameters.peaklistfilename + ".profile.1.csv"; - while (QFile::exists(profiledata.c_str())) { - i++; - profiledata = localparameters.peaklistfilename + ".profile." + to_string(i) + ".csv"; - } - i--; - - localparameters.convertprofiledata = true; - if (i > 0) { - QMessageBox::StandardButton reply; - string s = "The file '" + localparameters.peaklistfilename.substr(localparameters.peaklistfilename.rfind('/') + 1) + ".profile.1.csv'"; - if (i > 1) { - s += " and " + to_string(i - 1) + " other files containing profile spectra have been found."; + if (regex_search(localparameters.peaklistfilenames[0], rx)) { + + if (globalpreferences.profilebafprocessingmethod == 0) { + if (localparameters.peaklistfilenames.size() == 1) { + int i = 1; + string profiledata = localparameters.peaklistfilenames[0] + ".profile.1.csv"; + while (QFile::exists(profiledata.c_str())) { + i++; + profiledata = localparameters.peaklistfilenames[0] + ".profile." + to_string(i) + ".csv"; + } + i--; + + localparameters.convertprofiledata = true; + if (i > 0) { + QMessageBox::StandardButton reply; + string s = "The file '" + localparameters.peaklistfilenames[0].substr(localparameters.peaklistfilenames[0].rfind('/') + 1) + ".profile.1.csv'"; + if (i > 1) { + s += " and " + to_string(i - 1) + " other files containing profile spectra have been found."; + } + else { + s += " containing a profile spectrum has been found."; + } + + s += "\n\nDo you want to proceed the existing file(s) ?"; + s += "\n\nClick 'Yes' to proceed the existing file(s).\nClick 'No' to convert the profile data again. Note: The conversion of many profile spectra may be time-consuming."; + + reply = QMessageBox::question(this, "Do you want to proceed the existing file(s) ?", s.c_str(), QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::Yes) { + localparameters.convertprofiledata = false; + } + } } else { - s += " containing a profile spectrum has been found."; - } - - s += "\n\nDo you want to proceed the existing file(s) ?"; - s += "\n\nClick 'Yes' to proceed the existing file(s).\nClick 'No' to convert the profile data again. Note: The conversion of many profile spectra may be time-consuming."; - - reply = QMessageBox::question(this, "Do you want to proceed the existing file(s) ?", s.c_str(), QMessageBox::Yes | QMessageBox::No); - - if (reply == QMessageBox::Yes) { localparameters.convertprofiledata = false; + + QMessageBox msgBox; + QString errstr = "You tried to convert the profile spectra from multiple *.baf files using CompassXport. "; + errstr += "This feature may be time-consuming and it will be disabled. "; + errstr += "If you would like to see the profile spectra, go to 'Preferences->Data Processing' and select CompassXtract as a profile data converter or use only one input *.baf file."; + msgBox.setText(errstr); + msgBox.exec(); } } + + if (globalpreferences.profilebafprocessingmethod == 1) { + localparameters.convertprofiledata = false; + } + } + } + + localparameters.linebafprocessing = globalpreferences.linebafprocessingmethod; #endif - cMainThread* thread = new cMainThread(localparameters, theoreticalspectrumlist, true, false); + cMainThread* thread = new cMainThread(localparameters, listoftheoreticalspectra, true, false); connect(thread, SIGNAL(message(QString)), this, SLOT(updateLog(QString))); connect(thread, SIGNAL(enableRunButtonAndSettings(bool)), this, SLOT(enableRunButtonAndSettings(bool))); connect(thread, SIGNAL(enableStopButton(bool)), this, SLOT(enableStopButton(bool))); @@ -946,10 +1156,34 @@ void cMainWindow::run() { summarytableofmatchedpeaks->deleteTable(); summarytableofmatchedpeaks->hide(); + summarytableofmatchedpeaks->getPubChemSearchWidget()->setHTML(""); summarytableisprepared = false; + + lastactivedetail = -1; + + othernormalgeometry = QRect(); + otherismaximized = false; + otherprofilespectrum = false; + otherabsoluteintensity = false; + othermatchedpeaks = false; + otherunmatchedpeaks = false; + otherscrambledpeaks = false; + otherlabelspeaks = false; + othermzselection = true; + + activefileid = 0; + imagewindow->hide(); chromatogramwindow->hide(); + multipledatasetswidget->deleteTable(); + multipledatasetswidget->hide(); + multipledatasetswidget->getPubChemSearchWidget()->hide(); + multipledatasetswidget->getPubChemSearchWidget()->setHTML(""); + multipledatasetswidget->getDefineCalibrationWidget()->hide(); + multipledatasetswidget->getCalibrationChartWidget()->hide(); + multipledatasetsisprepared = false; + thread->start(); } @@ -995,11 +1229,12 @@ void cMainWindow::enableButtonsHandlingResults(bool enable) { actionPreferences->setEnabled(enable); rowsfilterwidget->setEnabled(enable); actionSummaryTableOfMatchedPeaks->setEnabled(enable); + actionMultipleDatasets->setEnabled(enable); if (enable) { if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { actionShowIsomers->setEnabled(false); - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { + if ((parameters.peaklistfileformats[0] == mis) || (parameters.peaklistfileformats[0] == imzML)) { actionImageWindow->setEnabled(true); actionChromatogramWindow->setEnabled(false); } @@ -1208,7 +1443,7 @@ void cMainWindow::reportSpectra() { if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { + if ((parameters.peaklistfileformats[activefileid] == mis) || (parameters.peaklistfileformats[activefileid] == imzML)) { resultsmodel->setColumnCount(9); } else { @@ -1227,7 +1462,7 @@ void cMainWindow::reportSpectra() { results->setItemDelegateForColumn(mscol, new QItemDelegate()); mscol++; - if ((parameters.peaklistfileformat != mis) && (parameters.peaklistfileformat != imzML)) { + if ((parameters.peaklistfileformats[activefileid] != mis) && (parameters.peaklistfileformats[activefileid] != imzML)) { resultsmodel->setHorizontalHeaderItem(mscol, new QStandardItem()); resultsmodel->horizontalHeaderItem(mscol)->setText("Time"); results->setItemDelegateForColumn(mscol, new QItemDelegate()); @@ -1259,7 +1494,7 @@ void cMainWindow::reportSpectra() { results->setItemDelegateForColumn(mscol, new QItemDelegate()); mscol++; - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { + if ((parameters.peaklistfileformats[activefileid] == mis) || (parameters.peaklistfileformats[activefileid] == imzML)) { resultsmodel->setHorizontalHeaderItem(mscol, new QStandardItem()); resultsmodel->horizontalHeaderItem(mscol)->setText("Coordinate X"); results->setItemDelegateForColumn(mscol, new QItemDelegate()); @@ -1280,22 +1515,28 @@ void cMainWindow::reportSpectra() { results->resizeColumnsToContents(); + if (listoftheoreticalspectra.size() == 0) { + listoftheoreticalspectra.resize(1); + listoftheoreticalspectra.clear(0); + activefileid = 0; + } + if (parameters.useprofiledata) { - if (parameters.peaklistfileformat == baf) { - rawdata.resize(theoreticalspectrumlist.size()); + if (parameters.peaklistfileformats[activefileid] == baf) { + rawdata.resize(listoftheoreticalspectra.size(activefileid)); } - if (parameters.peaklistfileformat == dat) { - rawdata.resize(theoreticalspectrumlist.size()); + if (parameters.peaklistfileformats[activefileid] == dat) { + rawdata.resize(listoftheoreticalspectra.size(activefileid)); } - if ((parameters.peaklistfileformat == mzML) || (parameters.peaklistfileformat == raw)) { - rawdata.resize(theoreticalspectrumlist.size()); + if ((parameters.peaklistfileformats[activefileid] == mzML) || (parameters.peaklistfileformats[activefileid] == raw)) { + rawdata.resize(listoftheoreticalspectra.size(activefileid)); } - if ((parameters.peaklistfileformat == imzML) && ((parameters.mode == dereplication) || (parameters.mode == compoundsearch))) { - rawdata.resize(theoreticalspectrumlist.size()); + if ((parameters.peaklistfileformats[activefileid] == imzML) && ((parameters.mode == dereplication) || (parameters.mode == compoundsearch))) { + rawdata.resize(listoftheoreticalspectra.size(activefileid)); imzmlprofilemetadata.clear(); profilemz64precision = false; profileintensity64precision = false; @@ -1317,24 +1558,25 @@ void cMainWindow::reportSpectra() { } } - - QProgressDialog progress("Preparing the report...", /*"Cancel"*/0, 0, theoreticalspectrumlist.size(), this); + + QProgressDialog progress("Preparing the report...", /*"Cancel"*/0, 0, listoftheoreticalspectra.size(activefileid), this); progress.setMinimumWidth(250); cEventFilter filter; progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); results->setModel(0); resultsproxymodel->setSourceModel(0); results->setSortingEnabled(false); spectradetails.clear(); - spectradetails.resize(theoreticalspectrumlist.size()); - resultsmodel->setRowCount(theoreticalspectrumlist.size()); + spectradetails.resize(listoftheoreticalspectra.size(activefileid)); + resultsmodel->setRowCount(listoftheoreticalspectra.size(activefileid)); bool reportisomers = actionShowIsomers->isChecked(); - for (int i = 0; i < theoreticalspectrumlist.size(); i++) { - reportSpectrum(i, theoreticalspectrumlist[i], reportisomers); + for (int i = 0; i < listoftheoreticalspectra.size(activefileid); i++) { + reportSpectrum(i, listoftheoreticalspectra.get(activefileid, i), reportisomers); progress.setValue(i); //if (progress.wasCanceled()) { // break; @@ -1350,8 +1592,37 @@ void cMainWindow::reportSpectra() { results->resizeColumnToContents(i); } - progress.setValue(theoreticalspectrumlist.size()); + if (parameters.peaklistseriesvector.size() > 1) { + toolbarInputFilter->setVisible(true); + } + else { + toolbarInputFilter->setVisible(false); + } + inputfiltercombobox->clear(); + for (int i = 0; i < parameters.peaklistseriesvector.size(); i++) { + inputfiltercombobox->addItem(parameters.peaklistfilenames[i].c_str()); + } + inputfiltercombobox->setCurrentIndex(activefileid); + + //eicchromatograms.clear(); + //if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { + // if ((parameters.peaklistfileformats[activefileid] != mis) && (parameters.peaklistfileformats[activefileid] != imzML)) { + // int sizei = listoftheoreticalspectra.size(); + // int sizej; + // eicchromatograms.resize(sizei); + // for (int i = 0; i < sizei; i++) { + // eicchromatograms[i].clear(); + // sizej = listoftheoreticalspectra.size(i); + // for (int j = 0; j < sizej; j++) { + // addEICPeak(¶meters, eicchromatograms[i], listoftheoreticalspectra.get(i, j), listoftheoreticalspectra.get(i, j).getExperimentalSpectrum()); + // } + // eicchromatograms[i].normalizeIntenzity(); + // } + // } + //} + + progress.setValue(listoftheoreticalspectra.size(activefileid)); } @@ -1373,12 +1644,13 @@ void cMainWindow::showIsomersStateChanged() { bool reportisomers = actionShowIsomers->isChecked(); string peptidesequence; - QProgressDialog progress("Updating the report...", 0, 0, theoreticalspectrumlist.size(), this); + QProgressDialog progress("Updating the report...", 0, 0, listoftheoreticalspectra.size(activefileid), this); progress.setMinimumWidth(250); cEventFilter filter; progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); for (int i = 0; i < resultsmodel->rowCount(); i++) { preparePeptideSequence(i, peptidesequence, reportisomers); @@ -1393,7 +1665,7 @@ void cMainWindow::showIsomersStateChanged() { graph->updateView(reportisomers); - progress.setValue(theoreticalspectrumlist.size()); + progress.setValue(listoftheoreticalspectra.size(activefileid)); } @@ -1416,28 +1688,202 @@ void cMainWindow::applyGlobalPreferences() { if (lastdirexporttocsv.right(4).compare(".csv", Qt::CaseInsensitive) != 0) { lastdirexporttocsv = globalpreferences.exportcsvdefaultdir; } + if ((lastdirexporttohtml.right(4).compare(".htm", Qt::CaseInsensitive) != 0) && (lastdirexporttohtml.right(5).compare(".html", Qt::CaseInsensitive) != 0)) { lastdirexporttohtml = globalpreferences.exporthtmldefaultdir; } + if (lastdiropenresults.right(4).compare(".res", Qt::CaseInsensitive) != 0) { lastdiropenresults = globalpreferences.resultsdefaultdir; } + if (lastdirsaveresults.right(4).compare(".res", Qt::CaseInsensitive) != 0) { lastdirsaveresults = globalpreferences.resultsdefaultdir; } + + actionBookMark1->setText(globalpreferences.bookmarkname1); + if (globalpreferences.bookmarkname1.isEmpty() || globalpreferences.bookmarkurl1.isEmpty()) { + actionBookMark1->setEnabled(false); + actionBookMark1->setVisible(false); + } + else { + actionBookMark1->setEnabled(true); + actionBookMark1->setVisible(true); + } + + actionBookMark2->setText(globalpreferences.bookmarkname2); + if (globalpreferences.bookmarkname2.isEmpty() || globalpreferences.bookmarkurl2.isEmpty()) { + actionBookMark2->setEnabled(false); + actionBookMark2->setVisible(false); + } + else { + actionBookMark2->setEnabled(true); + actionBookMark2->setVisible(true); + } + + actionBookMark3->setText(globalpreferences.bookmarkname3); + if (globalpreferences.bookmarkname3.isEmpty() || globalpreferences.bookmarkurl3.isEmpty()) { + actionBookMark3->setEnabled(false); + actionBookMark3->setVisible(false); + } + else { + actionBookMark3->setEnabled(true); + actionBookMark3->setVisible(true); + } + + actionBookMark4->setText(globalpreferences.bookmarkname4); + if (globalpreferences.bookmarkname4.isEmpty() || globalpreferences.bookmarkurl4.isEmpty()) { + actionBookMark4->setEnabled(false); + actionBookMark4->setVisible(false); + } + else { + actionBookMark4->setEnabled(true); + actionBookMark4->setVisible(true); + } + + actionBookMark5->setText(globalpreferences.bookmarkname5); + if (globalpreferences.bookmarkname5.isEmpty() || globalpreferences.bookmarkurl5.isEmpty()) { + actionBookMark5->setEnabled(false); + actionBookMark5->setVisible(false); + } + else { + actionBookMark5->setEnabled(true); + actionBookMark5->setVisible(true); + } + + actionBookMark6->setText(globalpreferences.bookmarkname6); + if (globalpreferences.bookmarkname6.isEmpty() || globalpreferences.bookmarkurl6.isEmpty()) { + actionBookMark6->setEnabled(false); + actionBookMark6->setVisible(false); + } + else { + actionBookMark6->setEnabled(true); + actionBookMark6->setVisible(true); + } + + actionBookMark7->setText(globalpreferences.bookmarkname7); + if (globalpreferences.bookmarkname7.isEmpty() || globalpreferences.bookmarkurl7.isEmpty()) { + actionBookMark7->setEnabled(false); + actionBookMark7->setVisible(false); + } + else { + actionBookMark7->setEnabled(true); + actionBookMark7->setVisible(true); + } + + actionBookMark8->setText(globalpreferences.bookmarkname8); + if (globalpreferences.bookmarkname8.isEmpty() || globalpreferences.bookmarkurl8.isEmpty()) { + actionBookMark8->setEnabled(false); + actionBookMark8->setVisible(false); + } + else { + actionBookMark8->setEnabled(true); + actionBookMark8->setVisible(true); + } + + actionBookMark9->setText(globalpreferences.bookmarkname9); + if (globalpreferences.bookmarkname9.isEmpty() || globalpreferences.bookmarkurl9.isEmpty()) { + actionBookMark9->setEnabled(false); + actionBookMark9->setVisible(false); + } + else { + actionBookMark9->setEnabled(true); + actionBookMark9->setVisible(true); + } + + actionBookMark10->setText(globalpreferences.bookmarkname10); + if (globalpreferences.bookmarkname10.isEmpty() || globalpreferences.bookmarkurl10.isEmpty()) { + actionBookMark10->setEnabled(false); + actionBookMark10->setVisible(false); + } + else { + actionBookMark10->setEnabled(true); + actionBookMark10->setVisible(true); + } + + if (globalpreferences.viewbookmarks) { + toolbarBookmarks->setVisible(true); + } + else { + toolbarBookmarks->setVisible(false); + } } -void cMainWindow::rowDoubleClicked(const QModelIndex& item) { - int row = resultsproxymodel->mapToSource(item).row(); - int rowid = resultsmodel->item(row, 1)->data(Qt::DisplayRole).toInt() - 1; +void cMainWindow::openDetail(int rowid) { + int last = lastactivedetail; + + QRect geometry; + bool usedefaultsize = true; + bool ishidden = spectradetails[rowid].isHidden(); + + if ((last != -1) /*&& (last != rowid)*/) { + if (last == -2) { + geometry = othernormalgeometry; + } + else { + geometry = spectradetails[last].normalGeometry(); + } + + if (ishidden) { + spectradetails[rowid].move(geometry.x(), geometry.y()); + spectradetails[rowid].setGeometry(geometry); + } + + usedefaultsize = false; + } + + spectradetails[rowid].prepareToShow(actionShowIsomers, &rawdata, &imzmlprofilemetadata, profilemz64precision, profileintensity64precision, usedefaultsize); - spectradetails[rowid].prepareToShow(actionShowIsomers, &rawdata, &imzmlprofilemetadata, profilemz64precision, profileintensity64precision); spectradetails[rowid].show(); spectradetails[rowid].activateWindow(); if (spectradetails[rowid].isMinimized()) { spectradetails[rowid].showNormal(); } + + if ((last != -1) /*&& (last != rowid)*/) { + if (ishidden) { + spectradetails[rowid].setGeometry(geometry); + } + + if (last == -2) { + if (otherismaximized) { + spectradetails[rowid].showMaximized(); + } + else { + spectradetails[rowid].showNormal(); + } + spectradetails[rowid].setProfileSpectrumEnabled(otherprofilespectrum); + spectradetails[rowid].setAbsoluteIntensityEnabled(otherabsoluteintensity); + spectradetails[rowid].setHideMatchedPeaksEnabled(othermatchedpeaks); + spectradetails[rowid].setHideUnmatchedPeaksEnabled(otherunmatchedpeaks); + spectradetails[rowid].setHideScrambledPeaksEnabled(otherscrambledpeaks); + spectradetails[rowid].setHidePeakLabelsEnabled(otherlabelspeaks); + spectradetails[rowid].setMouseMzSelectionEnabled(othermzselection); + } + else { + if (spectradetails[last].isMaximized()) { + spectradetails[rowid].showMaximized(); + } + else { + spectradetails[rowid].showNormal(); + } + spectradetails[rowid].setProfileSpectrumEnabled(spectradetails[last].hasProfileSpectrumEnabled()); + spectradetails[rowid].setAbsoluteIntensityEnabled(spectradetails[last].hasAbsoluteIntensityEnabled()); + spectradetails[rowid].setHideMatchedPeaksEnabled(spectradetails[last].hasHideMatchedPeaksEnabled()); + spectradetails[rowid].setHideUnmatchedPeaksEnabled(spectradetails[last].hasHideUnmatchedPeaksEnabled()); + spectradetails[rowid].setHideScrambledPeaksEnabled(spectradetails[last].hasHideScrambledPeaksEnabled()); + spectradetails[rowid].setHidePeakLabelsEnabled(spectradetails[last].hasHidePeakLabelsEnabled()); + spectradetails[rowid].setMouseMzSelectionEnabled(spectradetails[last].hasMouseMzSelectionEnabled()); + } + } +} + + +void cMainWindow::rowDoubleClicked(const QModelIndex& item) { + int row = resultsproxymodel->mapToSource(item).row(); + int rowid = resultsmodel->item(row, 1)->data(Qt::DisplayRole).toInt() - 1; + openDetail(rowid); } @@ -1458,6 +1904,7 @@ void cMainWindow::exportToCsv() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); bool removefile = false; QFile file(filename); @@ -1522,6 +1969,7 @@ void cMainWindow::exportToHTML() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); bool removefile = false; QFile file(filename); @@ -1619,9 +2067,14 @@ void cMainWindow::exportToHTML() { int columncount; string tdwidth; if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { + if ((parameters.peaklistfileformats[activefileid] == mis) || (parameters.peaklistfileformats[activefileid] == imzML)) { if (parameters.generateisotopepattern) { - columncount = 15; + if (parameters.calculatefdrs) { + columncount = 15; + } + else { + columncount = 13; + } } else { columncount = 12; @@ -1629,7 +2082,12 @@ void cMainWindow::exportToHTML() { } else { if (parameters.generateisotopepattern) { - columncount = 14; + if (parameters.calculatefdrs) { + columncount = 14; + } + else { + columncount = 12; + } } else { columncount = 11; @@ -1658,7 +2116,7 @@ void cMainWindow::exportToHTML() { out << "ID"; if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { + if ((parameters.peaklistfileformats[activefileid] == mis) || (parameters.peaklistfileformats[activefileid] == imzML)) { out << "Coordinate X"; out << "Coordinate Y"; } @@ -1693,7 +2151,7 @@ void cMainWindow::exportToHTML() { out << "Error [ppm]"; if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { - if (parameters.generateisotopepattern) { + if (parameters.generateisotopepattern && parameters.calculatefdrs) { out << "Score"; out << "FDR"; } @@ -1804,6 +2262,9 @@ void cMainWindow::showPreferences() { bricksdatabasewidget->applyGlobalPreferences(&globalpreferences); sequencedatabasewidget->applyGlobalPreferences(&globalpreferences); modificationswidget->applyGlobalPreferences(&globalpreferences); + multipledatasetswidget->applyGlobalPreferences(&globalpreferences); + patternsimulatorwidget->applyGlobalPreferences(&globalpreferences); + formulapredictor->applyGlobalPreferences(); applyGlobalPreferences(); @@ -1842,12 +2303,18 @@ void cMainWindow::saveResultsFile() { if (!filename.isEmpty()) { lastdirsaveresults = filename; - QProgressDialog progress("Saving the report...", "Cancel", 0, theoreticalspectrumlist.size(), this); + int savesize = 0; + for (int h = 0; h < listoftheoreticalspectra.size(); h++) { + savesize += listoftheoreticalspectra.size(h); + } + + QProgressDialog progress("Saving the report...", "Cancel", 0, savesize, this); progress.setMinimumWidth(250); cEventFilter filter; progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); bool removefile = false; ofstream outfile; @@ -1873,18 +2340,34 @@ void cMainWindow::saveResultsFile() { // store parameters parameters.store(outfile); + // store an auxiliary value for progress dialog + outfile.write((char *)&savesize, sizeof(int)); + // store theoretical spectra - size = theoreticalspectrumlist.size(); + int progresscount = 0; + size = listoftheoreticalspectra.size(); outfile.write((char *)&size, sizeof(int)); - for (int i = 0; i < theoreticalspectrumlist.size(); i++) { - theoreticalspectrumlist[i].store(outfile); - progress.setValue(i); - if (progress.wasCanceled()) { - removefile = true; - break; + for (int h = 0; h < listoftheoreticalspectra.size(); h++) { + size = listoftheoreticalspectra.size(h); + outfile.write((char *)&size, sizeof(int)); + for (int i = 0; i < listoftheoreticalspectra.size(h); i++) { + listoftheoreticalspectra.get(h, i).store(outfile); + progress.setValue(progresscount); + progresscount++; + if (progress.wasCanceled()) { + removefile = true; + break; + } } } + // store results from PubChem + summarytableofmatchedpeaks->getPubChemSearchWidget()->store(outfile); + multipledatasetswidget->getPubChemSearchWidget()->store(outfile); + + // store calibration data + multipledatasetswidget->getDefineCalibrationWidget()->store(outfile); + // close file outfile.close(); @@ -1893,7 +2376,7 @@ void cMainWindow::saveResultsFile() { } } - progress.setValue(theoreticalspectrumlist.size()); + progress.setValue(savesize); } @@ -1901,13 +2384,8 @@ void cMainWindow::saveResultsFile() { void cMainWindow::openResultsFile() { - - #if OS_TYPE == WIN - string filetypes = appname.toStdString() + " " + appversion.toStdString() + " Results Files (*.res)"; - #else - string filetypes = "Results Files (*.res)"; - #endif - + string filetypes = "Results Files (*.res)"; + QString filename = QFileDialog::getOpenFileName(this, tr("Open Results..."), lastdiropenresults, tr(filetypes.c_str())); if (!filename.isEmpty()) { @@ -1925,12 +2403,85 @@ void cMainWindow::openResultsFile() { infile.read((char *)&size, sizeof(int)); s.resize(size); infile.read(&s[0], s.size()); - QString appinfo = appname + " " + appversion; - if (appinfo.toStdString().compare(s) != 0) { + + + string fileversion = s; + fileversion = fileversion.substr(fileversion.find('.') + 2); + fileversion = fileversion.substr(0, fileversion.rfind('(') - 1); + + int fileversionpart1 = QString(fileversion.substr(0, fileversion.find('.')).c_str()).toInt(); + + fileversion = fileversion.substr(fileversion.find('.') + 1); + int fileversionpart2 = QString(fileversion.substr(0, fileversion.find('.')).c_str()).toInt(); + + fileversion = fileversion.substr(fileversion.find('.') + 1); + int fileversionpart3 = QString(fileversion.c_str()).toInt(); + + + string lastcompatible = lastcompatibleappversion.toStdString(); + lastcompatible = lastcompatible.substr(lastcompatible.find('.') + 2); + lastcompatible = lastcompatible.substr(0, lastcompatible.rfind('(') - 1); + + int lastcompatiblepart1 = QString(lastcompatible.substr(0, lastcompatible.find('.')).c_str()).toInt(); + + lastcompatible = lastcompatible.substr(lastcompatible.find('.') + 1); + int lastcompatiblepart2 = QString(lastcompatible.substr(0, lastcompatible.find('.')).c_str()).toInt(); + + lastcompatible = lastcompatible.substr(lastcompatible.find('.') + 1); + int lastcompatiblepart3 = QString(lastcompatible.c_str()).toInt(); + + + string currentversion = appversion.toStdString(); + currentversion = currentversion.substr(currentversion.find('.') + 2); + currentversion = currentversion.substr(0, currentversion.rfind('(') - 1); + + int currentversionpart1 = QString(currentversion.substr(0, currentversion.find('.')).c_str()).toInt(); + + currentversion = currentversion.substr(currentversion.find('.') + 1); + int currentversionpart2 = QString(currentversion.substr(0, currentversion.find('.')).c_str()).toInt(); + + currentversion = currentversion.substr(currentversion.find('.') + 1); + int currentversionpart3 = QString(currentversion.c_str()).toInt(); + + + if (!isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, lastcompatiblepart1, lastcompatiblepart2, lastcompatiblepart3)) { QMessageBox msgBox; - QString errstr = "The results file cannot be opened because it was created in the different version of " + appname + " ("; + QString errstr = "The results file cannot be opened. The file was created in "; errstr += s.c_str(); - errstr += ")."; + errstr += " but the minimum required version is " + appname + " " + lastcompatibleappversion + "."; + msgBox.setText(errstr); + msgBox.exec(); + + infile.close(); + return; + } + + + bool oldversion = false; + if (currentversionpart3 < fileversionpart3) { + oldversion = true; + } + if (currentversionpart3 > fileversionpart3) { + oldversion = false; + } + if (currentversionpart2 < fileversionpart2) { + oldversion = true; + } + if (currentversionpart2 > fileversionpart2) { + oldversion = false; + } + if (currentversionpart1 < fileversionpart1) { + oldversion = true; + } + if (currentversionpart1 > fileversionpart1) { + oldversion = false; + } + + if (oldversion) { + QMessageBox msgBox; + QString errstr = "The results file cannot be opened. The file was created in "; + errstr += s.c_str(); + errstr += " but your current version is only " + appname + " " + appversion + "."; msgBox.setText(errstr); msgBox.exec(); @@ -1946,10 +2497,33 @@ void cMainWindow::openResultsFile() { imagewindow->hide(); chromatogramwindow->hide(); + + multipledatasetswidget->deleteTable(); + multipledatasetswidget->hide(); + multipledatasetswidget->getPubChemSearchWidget()->hide(); + multipledatasetswidget->getPubChemSearchWidget()->setHTML(""); + multipledatasetswidget->getDefineCalibrationWidget()->hide(); + multipledatasetswidget->getCalibrationChartWidget()->hide(); + multipledatasetsisprepared = false; - theoreticalspectrumlist.clear(); + listoftheoreticalspectra.clear(); + eicchromatograms.clear(); spectradetails.clear(); + lastactivedetail = -1; + + othernormalgeometry = QRect(); + otherismaximized = false; + otherprofilespectrum = false; + otherabsoluteintensity = false; + othermatchedpeaks = false; + otherunmatchedpeaks = false; + otherscrambledpeaks = false; + otherlabelspeaks = false; + othermzselection = true; + + activefileid = 0; + parameters.clear(); rawdata.clear(); @@ -1970,12 +2544,12 @@ void cMainWindow::openResultsFile() { sb->setValue(sb->maximum()); // load parameters - parameters.load(infile); + parameters.load(infile, fileversionpart1, fileversionpart2, fileversionpart3); parameterswidget->setAndRestoreParameters(parameters); if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { actionShowIsomers->setEnabled(false); - if ((parameters.peaklistfileformat == mis) || (parameters.peaklistfileformat == imzML)) { + if ((parameters.peaklistfileformats[activefileid] == mis) || (parameters.peaklistfileformats[activefileid] == imzML)) { actionImageWindow->setEnabled(true); actionChromatogramWindow->setEnabled(false); } @@ -1990,26 +2564,69 @@ void cMainWindow::openResultsFile() { actionChromatogramWindow->setEnabled(false); } + int loadsize; + // load theoretical spectra - infile.read((char *)&size, sizeof(int)); + infile.read((char *)&loadsize, sizeof(int)); - QProgressDialog progress("Loading the report...", 0, 0, size, this); + QProgressDialog progress("Loading the report...", 0, 0, loadsize, this); progress.setMinimumWidth(250); cEventFilter filter; progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); - - for (int i = 0; i < size; i++) { - theoreticalspectrum.load(infile); - theoreticalspectrumlist.add(theoreticalspectrum); - progress.setValue(i); + progress.setValue(0); + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 0)) { + int progresscount = 0; + infile.read((char *)&size, sizeof(int)); + listoftheoreticalspectra.resize(size); + + for (int h = 0; h < listoftheoreticalspectra.size(); h++) { + infile.read((char *)&size, sizeof(int)); + for (int i = 0; i < size; i++) { + theoreticalspectrum.load(infile, fileversionpart1, fileversionpart2, fileversionpart3); + listoftheoreticalspectra.add(h, theoreticalspectrum); + progress.setValue(progresscount); + progresscount++; + } + } + } + else { + listoftheoreticalspectra.resize(1); + for (int i = 0; i < loadsize; i++) { + theoreticalspectrum.load(infile, fileversionpart1, fileversionpart2, fileversionpart3); + listoftheoreticalspectra.add(0, theoreticalspectrum); + progress.setValue(i); + } } - progress.setValue(size); + progress.setValue(loadsize); reportSpectra(); + // load results from PubChem + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 0, 22)) { + summarytableofmatchedpeaks->getPubChemSearchWidget()->load(infile); + } + else { + summarytableofmatchedpeaks->getPubChemSearchWidget()->setHTML(""); + } + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 6)) { + multipledatasetswidget->getPubChemSearchWidget()->load(infile); + } + else { + multipledatasetswidget->getPubChemSearchWidget()->setHTML(""); + } + + if (isCompatibleVersion(fileversionpart1, fileversionpart2, fileversionpart3, 2, 1, 14)) { + multipledatasetswidget->getDefineCalibrationWidget()->load(infile, fileversionpart1, fileversionpart2, fileversionpart3); + } + else { + // nothing to do + } + // close file infile.close(); } @@ -2097,6 +2714,11 @@ void cMainWindow::resetFilter() { } +void cMainWindow::lastActiveDetailSlot(int rowid) { + lastactivedetail = rowid - 1; +} + + void cMainWindow::gotoBookMark1() { QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl1)); } @@ -2107,22 +2729,121 @@ void cMainWindow::gotoBookMark2() { } +void cMainWindow::gotoBookMark3() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl3)); +} + + +void cMainWindow::gotoBookMark4() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl4)); +} + + +void cMainWindow::gotoBookMark5() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl5)); +} + + +void cMainWindow::gotoBookMark6() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl6)); +} + + +void cMainWindow::gotoBookMark7() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl7)); +} + + +void cMainWindow::gotoBookMark8() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl8)); +} + + +void cMainWindow::gotoBookMark9() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl9)); +} + + +void cMainWindow::gotoBookMark10() { + QDesktopServices::openUrl(QUrl(globalpreferences.bookmarkurl10)); +} + + void cMainWindow::summaryPeaksTableCancelled() { summarytableisprepared = false; } +void cMainWindow::multipleDatasetsTableCancelled() { + multipledatasetsisprepared = false; +} + + void cMainWindow::summaryPeaksTableRowDoubleClicked(int rowid, double experimentalmz) { - spectradetails[rowid].prepareToShow(actionShowIsomers, &rawdata, &imzmlprofilemetadata, profilemz64precision, profileintensity64precision); - spectradetails[rowid].show(); - spectradetails[rowid].activateWindow(); - if (spectradetails[rowid].isMinimized()) { - spectradetails[rowid].showNormal(); - } + openDetail(rowid); spectradetails[rowid].zoomToPeak(experimentalmz); } +void cMainWindow::multipleDatasetsTableRowClicked(int datasetid, int spectrumid, int peakid, int datatypeview, int peakshape, string name, string iontype, string mzstr) { + bool ctrlpressed = false; + if (QGuiApplication::keyboardModifiers().testFlag(Qt::ControlModifier)) { + ctrlpressed = true; + } + + bool activatetable = true; + int last = lastactivedetail; + + if (last == -1) { + activatetable = false; + } + + if (datasetid != activefileid) { + inputfiltercombobox->setCurrentIndex(datasetid); + inputFilterButtonReleased(); + } + + if (prepareSummaryTableOfMatchedPeaks()) { + summarytableofmatchedpeaks->filterCompound(name, iontype, datatypeview, mzstr); + + if ((parameters.mode == dereplication) || (parameters.mode == compoundsearch)) { + if ((parameters.peaklistfileformats[activefileid] == mis) || (parameters.peaklistfileformats[activefileid] == imzML)) { + if (imagewindow->isHidden()) { + showImageWindow(); + activatetable = false; + } + } + else { + if (chromatogramwindow->isHidden()) { + showChromatogramWindow(); + activatetable = false; + } + + //if (datatypeview == 0) { + // chromatogramwindow->setAbsoluteIntensityEnabled(false); + //} + //else { + // chromatogramwindow->setAbsoluteIntensityEnabled(true); + //} + + chromatogramwindow->setAbsoluteIntensityEnabled(true); + + chromatogramwindow->setPeakShape(peakshape); + } + } + } + + if (ctrlpressed) { + openDetail(spectrumid); + spectradetails[spectrumid].zoomToPeak(listoftheoreticalspectra.get(datasetid, spectrumid)[peakid].matchedmz); + } + + if (activatetable) { + multipledatasetswidget->activateWindow(); + } +} + + void cMainWindow::updateSummaryPeaksTableFilterSlot(int xmin, int xmax, int ymin, int ymax) { summarytableofmatchedpeaks->updateFilterBySelectedRegion(xmin, xmax, ymin, ymax); } @@ -2130,24 +2851,60 @@ void cMainWindow::updateSummaryPeaksTableFilterSlot(int xmin, int xmax, int ymin void cMainWindow::chromatogramDoubleClicked(int scanid) { if ((scanid >= 0) && (scanid < spectradetails.size())) { - spectradetails[scanid].prepareToShow(actionShowIsomers, &rawdata, &imzmlprofilemetadata, profilemz64precision, profileintensity64precision); - spectradetails[scanid].show(); - spectradetails[scanid].activateWindow(); - if (spectradetails[scanid].isMinimized()) { - spectradetails[scanid].showNormal(); - } + openDetail(scanid); } } void cMainWindow::imageWindowDoubleClicked(int spectrumid) { if ((spectrumid >= 0) && (spectrumid < spectradetails.size())) { - spectradetails[spectrumid].prepareToShow(actionShowIsomers, &rawdata, &imzmlprofilemetadata, profilemz64precision, profileintensity64precision); - spectradetails[spectrumid].show(); - spectradetails[spectrumid].activateWindow(); - if (spectradetails[spectrumid].isMinimized()) { - spectradetails[spectrumid].showNormal(); + openDetail(spectrumid); + } +} + + +void cMainWindow::inputFilterButtonReleased() { + if (inputfiltercombobox->count() > 0) { + if (lastactivedetail >= 0) { + othernormalgeometry = spectradetails[lastactivedetail].normalGeometry(); + otherismaximized = spectradetails[lastactivedetail].isMaximized(); + otherprofilespectrum = spectradetails[lastactivedetail].hasProfileSpectrumEnabled(); + otherabsoluteintensity = spectradetails[lastactivedetail].hasAbsoluteIntensityEnabled(); + othermatchedpeaks = spectradetails[lastactivedetail].hasHideMatchedPeaksEnabled(); + otherunmatchedpeaks = spectradetails[lastactivedetail].hasHideUnmatchedPeaksEnabled(); + otherscrambledpeaks = spectradetails[lastactivedetail].hasHideScrambledPeaksEnabled(); + otherlabelspeaks = spectradetails[lastactivedetail].hasHidePeakLabelsEnabled(); + othermzselection = spectradetails[lastactivedetail].hasMouseMzSelectionEnabled(); + lastactivedetail = -2; } + + summarytableofmatchedpeaks->deleteTable(); + summarytableisprepared = false; + + spectradetails.clear(); + + rawdata.clear(); + + activefileid = inputfiltercombobox->currentIndex(); + + reportSpectra(); + + resetFilter(); + + if (chromatogramwindow->isVisible() || imagewindow->isVisible() || summarytableofmatchedpeaks->isVisible()) { + if (prepareSummaryTableOfMatchedPeaks()) { + if (chromatogramwindow->isVisible()) { + chromatogramwindow->recalculateTICChromatogram(activefileid); + } + } + } + } +} + + +void cMainWindow::filterSummaryTableIfPrepared() { + if (summarytableisprepared) { + summarytableofmatchedpeaks->filterTablerows(); } } diff --git a/CycloBranch/gui/cMainWindow.h b/CycloBranch/gui/cMainWindow.h index 1a03d98..5adab0b 100644 --- a/CycloBranch/gui/cMainWindow.h +++ b/CycloBranch/gui/cMainWindow.h @@ -34,6 +34,9 @@ #include "gui/cChromatogramWindow.h" #include "gui/cMainWindowProxyModel.h" #include "gui/cPreferencesDialog.h" +#include "gui/cPatternSimulatorWidget.h" +#include "gui/cFormulaPredictor.h" +#include "gui/cMultipleDatasetsTableWidget.h" // forward declaration @@ -80,15 +83,18 @@ class cMainWindow : public QMainWindow QMenu* menuFile; QMenu* menuSearch; QMenu* menuTools; + QMenu* menuBookmarks; QMenu* menuView; QMenu* menuHelp; QToolBar* toolbarFile; QToolBar* toolbarSearch; QToolBar* toolbarTools; + QToolBar* toolbarBookmarks; QToolBar* toolbarView; QToolBar* toolbarHelp; - QToolBar* toolbarFilter; + QToolBar* toolbarInputFilter; + QToolBar* toolbarRowsFilter; QAction* actionOpenResults; QAction* actionSaveResults; @@ -105,16 +111,32 @@ class cMainWindow : public QMainWindow QAction *actionDrawPeptide; QAction *actionBookMark1; QAction *actionBookMark2; + QAction *actionBookMark3; + QAction *actionBookMark4; + QAction *actionBookMark5; + QAction *actionBookMark6; + QAction *actionBookMark7; + QAction *actionBookMark8; + QAction *actionBookMark9; + QAction *actionBookMark10; QAction* actionShowIsomers; QAction* actionGraph; QAction* actionSummaryTableOfMatchedPeaks; - QAction* actionImageWindow; + QAction* actionMultipleDatasets; QAction* actionChromatogramWindow; + QAction* actionImageWindow; + QAction* actionPatternSimulatorWindow; + QAction* actionFormulaPredictor; QAction* actionLog; QAction* actionHTMLDocumentation; QAction* actionPDFManual; QAction* actionAbout; + QWidget* inputfilterwidget; + QHBoxLayout* inputfilterhbox; + QComboBox* inputfiltercombobox; + QPushButton* inputfilterbutton; + QWidget* rowsfilterwidget; QHBoxLayout* rowsfilterhbox; QComboBox* rowsfilteroperator; @@ -133,7 +155,8 @@ class cMainWindow : public QMainWindow QStandardItemModel* resultsmodel; cMainWindowProxyModel* resultsproxymodel; - cTheoreticalSpectrumList theoreticalspectrumlist; + cTheoreticalSpectrumList listoftheoreticalspectra; + cPeakListSeries eicchromatograms; vector spectradetails; cGlobalPreferences globalpreferences; @@ -159,6 +182,9 @@ class cMainWindow : public QMainWindow cParametersWidget* parameterswidget; cHTMLExportDialog* htmlexportdialog; cPreferencesDialog* preferencesdialog; + cMultipleDatasetsTableWidget* multipledatasetswidget; + cPatternSimulatorWidget* patternsimulatorwidget; + cFormulaPredictor* formulapredictor; int resultsbasecolumncount; int resultsspecificcolumncount; @@ -171,6 +197,21 @@ class cMainWindow : public QMainWindow QString lastdiropenresults; bool summarytableisprepared; + bool multipledatasetsisprepared; + + int lastactivedetail; + + QRect othernormalgeometry; + bool otherismaximized; + bool otherprofilespectrum; + bool otherabsoluteintensity; + bool othermatchedpeaks; + bool otherunmatchedpeaks; + bool otherscrambledpeaks; + bool otherlabelspeaks; + bool othermzselection; + + int activefileid; bool quitapp; @@ -184,6 +225,8 @@ class cMainWindow : public QMainWindow void applyGlobalPreferences(); + void openDetail(int rowid); + private slots: @@ -213,6 +256,12 @@ private slots: void showProperties(); + void showMultipleDatasetsOverview(); + + void showPatternSimulatorWindow(); + + void showFormulaPredictor(); + void run(); void stop(); @@ -261,20 +310,46 @@ private slots: void resetFilter(); + void lastActiveDetailSlot(int rowid); + void gotoBookMark1(); void gotoBookMark2(); + void gotoBookMark3(); + + void gotoBookMark4(); + + void gotoBookMark5(); + + void gotoBookMark6(); + + void gotoBookMark7(); + + void gotoBookMark8(); + + void gotoBookMark9(); + + void gotoBookMark10(); + void summaryPeaksTableCancelled(); + void multipleDatasetsTableCancelled(); + void summaryPeaksTableRowDoubleClicked(int rowid, double experimentalmz); + void multipleDatasetsTableRowClicked(int datasetid, int spectrumid, int peakid, int datatypeview, int peakshape, string name, string iontype, string mzstr); + void updateSummaryPeaksTableFilterSlot(int xmin, int xmax, int ymin, int ymax); void chromatogramDoubleClicked(int scanid); void imageWindowDoubleClicked(int spectrumid); + void inputFilterButtonReleased(); + + void filterSummaryTableIfPrepared(); + //void showContextMenu(const QPoint &pt); signals: diff --git a/CycloBranch/gui/cModificationsWidget.cpp b/CycloBranch/gui/cModificationsWidget.cpp index eed3e8d..9daf37a 100644 --- a/CycloBranch/gui/cModificationsWidget.cpp +++ b/CycloBranch/gui/cModificationsWidget.cpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include cModificationsWidget::cModificationsWidget(cGlobalPreferences* globalpreferences, QWidget* parent) { @@ -420,6 +422,34 @@ void cModificationsWidget::keyPressEvent(QKeyEvent *event) { rowsfilterwholeword->setChecked(!rowsfilterwholeword->isChecked()); } + if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) { + QModelIndexList selectedindexes = database->selectionModel()->selectedIndexes(); + QStandardItem* item; + + QString selectedtext; + string itemtext; + + int selectedcount = selectedindexes.count(); + for (int i = 0; i < selectedcount; i++) { + if (i > 0) { + if (proxymodel->mapToSource(selectedindexes[i - 1]).row() != proxymodel->mapToSource(selectedindexes[i]).row()) { + selectedtext += "\n"; + } + else { + selectedtext += "\t"; + } + } + + item = databasemodel->itemFromIndex(proxymodel->mapToSource(selectedindexes[i])); + if (item) { + itemtext = item->text().toStdString(); + selectedtext += stripHTML(itemtext).c_str(); + } + } + selectedtext += "\n"; + QApplication::clipboard()->setText(selectedtext); + } + event->accept(); } @@ -472,6 +502,7 @@ void cModificationsWidget::openDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); database->setModel(0); proxymodel->setSourceModel(0); @@ -564,6 +595,7 @@ bool cModificationsWidget::saveDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); cFragmentIonType modification; modifications.clear(); @@ -777,6 +809,7 @@ void cModificationsWidget::importDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); database->setModel(0); proxymodel->setSourceModel(0); diff --git a/CycloBranch/gui/cMultipleDatasetsTableProxyModel.cpp b/CycloBranch/gui/cMultipleDatasetsTableProxyModel.cpp new file mode 100644 index 0000000..bcb2654 --- /dev/null +++ b/CycloBranch/gui/cMultipleDatasetsTableProxyModel.cpp @@ -0,0 +1,35 @@ +#include "gui/cMultipleDatasetsTableProxyModel.h" + + +cMultipleDatasetsTableProxyModel::cMultipleDatasetsTableProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { + // nothing to do +} + + +bool cMultipleDatasetsTableProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { + QVariant leftData = sourceModel()->data(left); + QVariant rightData = sourceModel()->data(right); + + if (leftData.toString().isEmpty()) { + return (sortOrder() == Qt::AscendingOrder) ? false : true; + } + + if (rightData.toString().isEmpty()) { + return (sortOrder() == Qt::AscendingOrder) ? true : false; + } + + if (leftData.type() == QVariant::ByteArray) { + return leftData.toDouble() < rightData.toDouble(); + } + + if (leftData.type() == QVariant::String) { + return leftData.toString().toLower() < rightData.toString().toLower(); + } + + if (leftData.type() == QVariant::Int) { + return leftData.toInt() < rightData.toInt(); + } + + return QSortFilterProxyModel::lessThan(left, right); +} + diff --git a/CycloBranch/gui/cMultipleDatasetsTableProxyModel.h b/CycloBranch/gui/cMultipleDatasetsTableProxyModel.h new file mode 100644 index 0000000..84e5abf --- /dev/null +++ b/CycloBranch/gui/cMultipleDatasetsTableProxyModel.h @@ -0,0 +1,47 @@ +/** + \file cMultipleDatasetsTableProxyModel.h + \brief A table proxy model. +*/ + + +#ifndef _CMULTIPLEDATASETSTABLEPROXYMODEL_H +#define _CMULTIPLEDATASETSTABLEPROXYMODEL_H + +#include +#include +#include +#include +#include +#include "core/cParameters.h" + + +/** + \brief A table proxy model. +*/ +class cMultipleDatasetsTableProxyModel : public QSortFilterProxyModel { + + Q_OBJECT + +public: + + /** + \brief The constructor. + \param parent pointer to a parent widget + */ + cMultipleDatasetsTableProxyModel(QObject *parent = 0); + +protected: + + /** + \brief Reimplementation of lessThan. + \param left QModelIndex + \param right QModelIndex + \retval bool bool + */ + bool lessThan(const QModelIndex &left, const QModelIndex &right) const Q_DECL_OVERRIDE; + +}; + + +#endif + diff --git a/CycloBranch/gui/cMultipleDatasetsTableWidget.cpp b/CycloBranch/gui/cMultipleDatasetsTableWidget.cpp new file mode 100644 index 0000000..07b2ea9 --- /dev/null +++ b/CycloBranch/gui/cMultipleDatasetsTableWidget.cpp @@ -0,0 +1,2891 @@ +#include "gui/cMultipleDatasetsTableWidget.h" +#include "core/cParameters.h" +#include "core/cTheoreticalSpectrumList.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +void calculateLineParameterA(vector& x, vector& y, double& a) { + size_t size = x.size(); + double tmp = 0; + + if (size < 1) { + return; + } + + a = 0; + for (size_t i = 0; i < size; i++) { + a += x[i] * y[i]; + tmp += x[i] * x[i]; + } + + if (tmp != 0) { + a /= tmp; + } + else { + a = 1; + } +} + + +void calculateLineParameters(vector& x, vector& y, double& a, double& b) { + int xsize = (int)x.size(); + int ysize = (int)y.size(); + + a = 1; + b = 0; + + if (xsize != ysize) { + return; + } + + //for (int i = 0; i < xsize; i++) { + // cout << x[i] << " " << y[i] << endl; + //} + //cout << endl; + + double sumx; + double sumx2; + + double sumy; + double sumxy; + + double n = xsize + 1; + double tmp; + + sumx = 0; + sumx2 = 0; + + sumy = 0; + sumxy = 0; + + for (int j = 0; j < xsize; j++) { + sumx += x[j]; + sumx2 += x[j] * x[j]; + + sumy += y[j]; + sumxy += x[j] * y[j]; + } + + a = sumxy * n - sumy * sumx; + tmp = sumx2 * n - sumx * sumx; + if (tmp == 0) { + return; + } + a /= tmp; + + b = sumy - a * sumx; + tmp = n; + if (tmp == 0) { + return; + } + b /= tmp; + + //cout << "a: " << a << ", "; + //cout << "b: " << b << endl; +} + + +void calculateLineParametersWithIterations(vector& x, vector& y, int iterations, double& a, double& b) { + int xsize = (int)x.size(); + int ysize = (int)y.size(); + + a = 1; + b = 0; + + if (xsize != ysize) { + return; + } + + //for (int i = 0; i < xsize; i++) { + // cout << x[i] << " " << y[i] << endl; + //} + //cout << endl; + + double sumy2; + + double sumx; + double sumx2; + + double sumy; + double sumxy; + + double y2; + double tmp; + + double S; + double oldS = DBL_MAX; + double olda, oldb; + + for (int i = 0; i < iterations; i++) { + + sumy2 = 0; + + sumx = 0; + sumx2 = 0; + + sumy = 0; + sumxy = 0; + + y2 = 0; + + for (int j = 0; j < xsize; j++) { + if (i == 0) { + y2 = y[j] * y[j]; + } + else { + y2 = a * x[j] + b; + y2 *= y2; + } + + sumy2 += y2; + + sumx += x[j] * y2; + sumx2 += x[j] * x[j] * y2; + + sumy += y[j] * y2; + sumxy += x[j] * y[j] * y2; + } + + a = sumxy * sumy2 - sumy * sumx; + tmp = sumx2 * sumy2 - sumx * sumx; + if (tmp == 0) { + return; + } + a /= tmp; + + b = sumy - a * sumx; + tmp = sumy2; + if (tmp == 0) { + return; + } + b /= tmp; + + //b = 0; + + //cout << "iteration: " << i + 1 << ", "; + //cout << "a: " << a << ", "; + //cout << "b: " << b << endl; + + S = 0; + for (int j = 0; j < xsize; j++) { + tmp = y[j] - (a * x[j] + b); + S += tmp * tmp; + } + + //cout << "iteration: " << i + 1 << ", "; + //cout << "S: " << S << ", oldS: " << oldS << endl; + //cout << endl; + + if (i > 0) { + if (oldS <= S) { + a = olda; + b = oldb; + return; + } + } + + olda = a; + oldb = b; + oldS = S; + + } + + //cout << endl; +} + + +cMultipleDatasetsTableWidget::cMultipleDatasetsTableWidget(cGlobalPreferences* globalpreferences, QWidget* parent) { + title = "Annotated Features Overview"; + + this->globalpreferences = globalpreferences; + this->parent = parent; + + parameters = 0; + listoftheoreticalspectra = 0; + + setWindowTitle(title); + setWindowIcon(QIcon(":/images/icons/features.png")); + + pubchemsearchwidget = new cPubChemSearchWidget(); + pubchemsearchwidget->hide(); + + definecalibrationwidget = new cDefineCalibrationWidget(); + definecalibrationwidget->hide(); + + connect(definecalibrationwidget, SIGNAL(calibrationRedefined()), this, SLOT(calibrationCurveRedefined())); + + calibrationchartwidget = new cCalibrationChart(globalpreferences, this); + calibrationchartwidget->hide(); + + menuBar = new QMenuBar(this); + menuBar->setNativeMenuBar(false); + menuFile = new QMenu(tr("&File"), this); + menuSearch = new QMenu(tr("&Search"), this); + menuHelp = new QMenu(tr("&Help"), this); + + datatypelabel = new QLabel(); + datatypelabel->setText("View: "); + + comboboxdatatype = new QComboBox(); + comboboxdatatype->setToolTip("Select data to be displayed."); + comboboxdatatype->setSizeAdjustPolicy(QComboBox::AdjustToContents); + connect(comboboxdatatype, SIGNAL(currentIndexChanged(int)), this, SLOT(dataTypeViewChanged(int))); + + datatypehboxlayout = new QHBoxLayout(); + datatypehboxlayout->addWidget(datatypelabel); + datatypehboxlayout->addWidget(comboboxdatatype); + + datatypewidget = new QWidget(); + datatypewidget->setLayout(datatypehboxlayout); + + peakshapelabel = new QLabel(); + peakshapelabel->setText("Peak Shape: "); + + comboboxpeakshape = new QComboBox(); + comboboxpeakshape->setToolTip("Select chromatographic peak shape to be used for area and concentration calculations:\nGaussian = basic Gaussian function,\nex-Gaussian (tailing) = Exponentially Modified Gaussian for chromatographic peaks with tailing,\nex-Gaussian (fronting) = Exponentially Modified Gaussian for chromatographic peaks with fronting."); + comboboxpeakshape->setSizeAdjustPolicy(QComboBox::AdjustToContents); + comboboxpeakshape->addItem("Gaussian"); + comboboxpeakshape->addItem("ex-Gaussian (tailing)"); + comboboxpeakshape->addItem("ex-Gaussian (fronting)"); + connect(comboboxpeakshape, SIGNAL(currentIndexChanged(int)), this, SLOT(peakShapeChanged(int))); + + peakshapehboxlayout = new QHBoxLayout(); + peakshapehboxlayout->addWidget(peakshapelabel); + peakshapehboxlayout->addWidget(comboboxpeakshape); + + peakshapewidget = new QWidget(); + peakshapewidget->setLayout(peakshapehboxlayout); + + standardlabel = new QLabel(); + standardlabel->setText("Standard: "); + + comboboxstandard = new QComboBox(); + comboboxstandard->setToolTip("Select compound standard."); + comboboxstandard->addItem("None"); + comboboxstandard->setSizeAdjustPolicy(QComboBox::AdjustToContents); + connect(comboboxstandard, SIGNAL(currentIndexChanged(int)), this, SLOT(standardChanged(int))); + + standardhboxlayout = new QHBoxLayout(); + standardhboxlayout->addWidget(standardlabel); + standardhboxlayout->addWidget(comboboxstandard); + + standardwidget = new QWidget(); + standardwidget->setLayout(standardhboxlayout); + + calibrationlabely = new QLabel(); + calibrationlabely->setText("Calibration Curve: y = "); + + calibrationspinboxa = new QDoubleSpinBox(); + calibrationspinboxa->setRange(-DBL_MAX, DBL_MAX); + calibrationspinboxa->setDecimals(6); + calibrationspinboxa->setValue(1); + calibrationspinboxa->setToolTip("Enter the value of 'a' in the calibration curve 'y = a*x + b'."); + + calibrationlabelx = new QLabel(); + calibrationlabelx->setText(" * x + "); + + calibrationspinboxb = new QDoubleSpinBox(); + calibrationspinboxb->setRange(-DBL_MAX, DBL_MAX); + calibrationspinboxb->setDecimals(6); + calibrationspinboxb->setValue(0); + calibrationspinboxb->setToolTip("Enter the value of 'b' in the calibration curve 'y = a*x + b'."); + + calibrationsetbutton = new QPushButton("Set"); + calibrationsetbutton->setToolTip("Set the calibration curve and recalculate the table."); + connect(calibrationsetbutton, SIGNAL(released()), this, SLOT(calibrationSetButtonReleased())); + + calibrationdefinebutton = new QPushButton("Define"); + calibrationdefinebutton->setToolTip("Define samples, calibration curve and recalculate the table."); + connect(calibrationdefinebutton, SIGNAL(released()), this, SLOT(calibrationDefineButtonReleased())); + + calibrationviewbutton = new QPushButton("View"); + calibrationviewbutton->setToolTip("View the calibration curve and statistics."); + connect(calibrationviewbutton, SIGNAL(released()), this, SLOT(calibrationViewButtonReleased())); + + calibrationhboxlayout = new QHBoxLayout(); + calibrationhboxlayout->addWidget(calibrationlabely); + calibrationhboxlayout->addWidget(calibrationspinboxa); + calibrationhboxlayout->addWidget(calibrationlabelx); + calibrationhboxlayout->addWidget(calibrationspinboxb); + calibrationhboxlayout->addWidget(calibrationsetbutton); + calibrationhboxlayout->addWidget(calibrationdefinebutton); + calibrationhboxlayout->addWidget(calibrationviewbutton); + + calibrationwidget = new QWidget(); + calibrationwidget->setLayout(calibrationhboxlayout); + + database = new QTableView(this); + databasemodel = new QStandardItemModel(0, 0, this); + proxymodel = new cMultipleDatasetsTableProxyModel(this); + proxymodel->setSourceModel(databasemodel); + proxymodel->setDynamicSortFilter(false); + database->setModel(proxymodel); + database->setSortingEnabled(true); + database->setSelectionBehavior(QAbstractItemView::SelectItems); + database->setSelectionMode(QAbstractItemView::ContiguousSelection); + database->setEditTriggers(QAbstractItemView::NoEditTriggers); + database->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); + database->horizontalHeader()->setSectionsMovable(true); + //database->verticalHeader()->setDefaultSectionSize(30); + connect(database, SIGNAL(clicked(const QModelIndex&)), this, SLOT(rowClicked(const QModelIndex&))); + + toolbarFile = addToolBar(tr("File")); + + actionExportCSV = new QAction(QIcon(":/images/icons/csv.png"), tr("&Export to CSV"), this); + actionExportCSV->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_E)); + actionExportCSV->setToolTip("Export to CSV (Ctrl + E)"); + toolbarFile->addAction(actionExportCSV); + connect(actionExportCSV, SIGNAL(triggered()), this, SLOT(exportToCsv())); + + actionExportDatabase = new QAction(QIcon(":/images/icons/db_export.png"), tr("Export to &Database"), this); + actionExportDatabase->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D)); + actionExportDatabase->setToolTip("Export to Database (Ctrl + D)"); + toolbarFile->addAction(actionExportDatabase); + connect(actionExportDatabase, SIGNAL(triggered()), this, SLOT(exportToDatabase())); + + actionCloseWindow = new QAction(QIcon(":/images/icons/33.png"), tr("&Close"), this); + actionCloseWindow->setShortcut(QKeySequence(Qt::Key_Escape)); + actionCloseWindow->setToolTip("Close (Esc)"); + toolbarFile->addAction(actionCloseWindow); + connect(actionCloseWindow, SIGNAL(triggered()), this, SLOT(closeWindow())); + + toolbarSearch = addToolBar(tr("Search")); + + actionSearchPubChem = new QAction(QIcon(":/images/icons/search.png"), tr("Search &PubChem..."), this); + actionSearchPubChem->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P)); + actionSearchPubChem->setToolTip("Search PubChem... (Ctrl + P)"); + toolbarSearch->addAction(actionSearchPubChem); + connect(actionSearchPubChem, SIGNAL(triggered()), this, SLOT(searchPubChem())); + + toolbarHelp = addToolBar(tr("Help")); + + actionHTMLDocumentation = new QAction(QIcon(":/images/icons/3.png"), tr("&HTML Documentation"), this); + actionHTMLDocumentation->setShortcut(QKeySequence(Qt::Key_F1)); + actionHTMLDocumentation->setToolTip("Show HTML Documentation (F1)"); + toolbarHelp->addAction(actionHTMLDocumentation); + connect(actionHTMLDocumentation, SIGNAL(triggered()), this, SLOT(showHTMLDocumentation())); + + addToolBarBreak(); + + toolbarView = addToolBar(tr("View")); + toolbarView->addWidget(datatypewidget); + toolbarView->addWidget(peakshapewidget); + toolbarView->addWidget(standardwidget); + + addToolBarBreak(); + + toolbarCalibration = addToolBar(tr("Calibration")); + toolbarCalibration->addWidget(calibrationwidget); + + menuFile->addAction(actionExportCSV); + menuFile->addAction(actionExportDatabase); + menuFile->addSeparator(); + menuFile->addAction(actionCloseWindow); + + menuSearch->addAction(actionSearchPubChem); + + menuHelp->addAction(actionHTMLDocumentation); + + menuBar->addMenu(menuFile); + menuBar->addMenu(menuSearch); + menuBar->addMenu(menuHelp); + + setMenuBar(menuBar); + + mainlayout = new QVBoxLayout(); + mainlayout->addWidget(database); + + mainwidget = new QWidget(); + mainwidget->setLayout(mainlayout); + + setCentralWidget(mainwidget); + + resize(defaultwinsizex, defaultwinsizey); + + applyGlobalPreferences(globalpreferences); + + identifieditems.clear(); + identifieditemswithmultimap.clear(); + + activefileid = 0; + + // default datatypeview cannot be relative intensity + // updateTable causes a bug if multiple peaks have 100% relative intensity + datatypeview = 1; + + peakshape = 0; + standard = 0; + calibrationa = 1; + calibrationb = 0; + systemcolumns = 0; +} + + +cMultipleDatasetsTableWidget::~cMultipleDatasetsTableWidget() { + deleteTable(); + + delete datatypelabel; + delete comboboxdatatype; + delete datatypehboxlayout; + delete datatypewidget; + + delete peakshapelabel; + delete comboboxpeakshape; + delete peakshapehboxlayout; + delete peakshapewidget; + + delete standardlabel; + delete comboboxstandard; + delete standardhboxlayout; + delete standardwidget; + + delete calibrationlabely; + delete calibrationspinboxa; + delete calibrationlabelx; + delete calibrationspinboxb; + delete calibrationsetbutton; + delete calibrationdefinebutton; + delete calibrationviewbutton; + delete calibrationhboxlayout; + delete calibrationwidget; + + delete pubchemsearchwidget; + delete definecalibrationwidget; + delete calibrationchartwidget; + + delete databasemodel; + delete proxymodel; + delete database; + delete mainlayout; + delete mainwidget; + + delete actionExportCSV; + delete actionExportDatabase; + delete actionCloseWindow; + delete actionSearchPubChem; + delete actionHTMLDocumentation; + + delete menuFile; + delete menuSearch; + delete menuHelp; + + delete menuBar; +} + + +void cMultipleDatasetsTableWidget::closeEvent(QCloseEvent *event) { + closeWindow(); + event->accept(); +} + + +bool cMultipleDatasetsTableWidget::prepareToShow(cParameters* parameters, cTheoreticalSpectrumList* listoftheoreticalspectra, int activefileid) { + QMessageBox msgBox; + QString errstr; + + if (!parameters || !listoftheoreticalspectra || (listoftheoreticalspectra->size() == 0) || (activefileid >= listoftheoreticalspectra->size())) { + QString errstr = "Nothing to show. Perform an analysis first (MS, LC-MS or MSI) !"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + + if ((parameters->mode != dereplication) && (parameters->mode != compoundsearch)) { + QString errstr = "This feature is available only for MS, LC-MS, and MSI data."; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + + this->parameters = parameters; + this->listoftheoreticalspectra = listoftheoreticalspectra; + this->activefileid = activefileid; + + int numberofdatasets = listoftheoreticalspectra->size(); + + deleteTable(); + + if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { + comboboxdatatype->blockSignals(true); + + comboboxdatatype->clear(); + comboboxdatatype->addItem("Maximum Relative Intensity"); + comboboxdatatype->addItem("Maximum Absolute Intensity"); + + if ((parameters->peaklistfileformats[activefileid] != mis) && (parameters->peaklistfileformats[activefileid] != imzML)) { + comboboxdatatype->addItem("Peak Area (Chromatogram) - All Isotopes"); + comboboxdatatype->addItem("Concentration - All Isotopes"); + comboboxdatatype->addItem("Peak Area (Chromatogram) - Highest Peak"); + comboboxdatatype->addItem("Concentration - Highest Peak"); + + standardlabel->show(); + comboboxstandard->show(); + + peakshapelabel->show(); + comboboxpeakshape->show(); + + toolbarCalibration->show(); + + calibrationlabely->show(); + calibrationspinboxa->show(); + calibrationlabelx->show(); + calibrationspinboxb->show(); + calibrationsetbutton->show(); + calibrationdefinebutton->show(); + calibrationviewbutton->show(); + } + else { + standardlabel->hide(); + comboboxstandard->hide(); + + peakshapelabel->hide(); + comboboxpeakshape->hide(); + + toolbarCalibration->hide(); + + calibrationlabely->hide(); + calibrationspinboxa->hide(); + calibrationlabelx->hide(); + calibrationspinboxb->hide(); + calibrationsetbutton->hide(); + calibrationdefinebutton->hide(); + calibrationviewbutton->hide(); + } + + // default datatypeview cannot be relative intensity + // updateTable causes a bug if multiple peaks have 100% relative intensity + if (datatypeview == 0) { + datatypeview = 1; + } + + if (datatypeview < comboboxdatatype->count()) { + comboboxdatatype->setCurrentIndex(datatypeview); + } + + comboboxdatatype->blockSignals(false); + } + + string tmpstr; + size_t pos; + + if (parameters->mode == dereplication) { + systemcolumns = 6; + } + else { + systemcolumns = 5; + } + + int currentcolumn = 0; + + databasemodel->setColumnCount(numberofdatasets + systemcolumns); + + if (parameters->mode == dereplication) { + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Name"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + } + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Ion Type"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Formula (M)"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Theoretical m/z"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("PubChem Results"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + databasemodel->horizontalHeaderItem(currentcolumn)->setText("Num. of Datasets"); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + + for (int i = 0; i < numberofdatasets; i++) { + databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); + + tmpstr = parameters->peaklistfilenames[i]; + pos = tmpstr.rfind('/'); + if (pos != string::npos) { + pos = tmpstr.substr(0, pos).rfind('/'); + if (pos != string::npos) { + tmpstr = tmpstr.substr(pos + 1); + } + } + + databasemodel->horizontalHeaderItem(currentcolumn)->setText(tmpstr.c_str()); + database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); + currentcolumn++; + } + + // prepare the data + identifieditems.clear(); + identifieditemswithmultimap.clear(); + + vector< vector > rtimes; + vector rtimeunits; + + cTheoreticalSpectrum* currentspectrum; + cPeak* currentpeak; + int sizei, sizej, sizek; + string compounddesc; + + sizei = listoftheoreticalspectra->size(); + rtimes.resize(sizei); + rtimeunits.resize(sizei); + + for (int i = 0; i < sizei; i++) { + + sizej = listoftheoreticalspectra->size(i); + rtimes[i].resize(sizej); + + for (int j = 0; j < sizej; j++) { + rtimes[i][j] = listoftheoreticalspectra->get(i, j).getExperimentalSpectrum().getRetentionTime(); + + if (j == 0) { + rtimeunits[i] = listoftheoreticalspectra->get(i, j).getExperimentalSpectrum().getRetentionTimeUnit(); + } + + currentspectrum = &(listoftheoreticalspectra->get(i, j)); + sizek = currentspectrum->getNumberOfPeaks(); + for (int k = 0; k < sizek; k++) { + currentpeak = &((*currentspectrum)[k]); + if (currentpeak->matched) { + if (parameters->generateisotopepattern) { + // nothing to do - the highest intensity peak (non-isotopic) is selected automatically below + } + else { + if (currentpeak->isotope) { + continue; + } + } + + compounddesc.clear(); + if (currentpeak->descriptionid != -1) { + currentpeak->description = parameters->peakidtodesc[currentpeak->descriptionid]; + + pos = currentpeak->description.find('>'); + if (pos != string::npos) { + tmpstr = currentpeak->description.substr(pos + 1); + pos = tmpstr.rfind('<'); + if (pos != string::npos) { + compounddesc = tmpstr.substr(0, pos); + } + } + + pos = currentpeak->description.find(" <"); + if (pos != string::npos) { + compounddesc += "\t"; + compounddesc += currentpeak->description.substr(0, pos); + } + + if (parameters->mode == dereplication) { + if ((currentpeak->compoundid >= 0) && (currentpeak->compoundid < parameters->sequencedatabase.size())) { + compounddesc += "\t"; + compounddesc += parameters->sequencedatabase[currentpeak->compoundid].getSummaryFormula(); + } + } + + compounddesc += "\t"; + + identifieditemswithmultimap[compounddesc].insert(make_pair(i, make_pair(j, k))); + } + } + } + } + } + + map tempmap; + + for (auto& it : identifieditemswithmultimap) { + + for (int i = 0; i < sizei; i++) { + + pair< multimap >::iterator, multimap >::iterator> result = identifieditemswithmultimap[it.first].equal_range(i); + tempmap.clear(); + + for (multimap >::iterator it2 = result.first; it2 != result.second; it2++) { + if (tempmap.count(it2->second.first) == 1) { + if (listoftheoreticalspectra->get(i, it2->second.first)[it2->second.second].relativeintensity > listoftheoreticalspectra->get(i, it2->second.first)[tempmap[it2->second.first]].relativeintensity) { + tempmap[it2->second.first] = it2->second.second; + } + } + else { + tempmap[it2->second.first] = it2->second.second; + } + } + + for (auto& it2 : tempmap) { + if (identifieditems[it.first].count(i) == 1) { + if (listoftheoreticalspectra->get(i, it2.first)[it2.second].matchedabsoluteintensity > listoftheoreticalspectra->get(i, identifieditems[it.first][i].first)[identifieditems[it.first][i].second].matchedabsoluteintensity) { + identifieditems[it.first][i] = make_pair(it2.first, it2.second); + } + } + else { + identifieditems[it.first][i] = make_pair(it2.first, it2.second); + } + } + + } + + } + + int numberofrows = (int)identifieditems.size(); + if (numberofrows > 50000) { + QMessageBox::StandardButton reply; + string msg = "The table contains " + to_string(numberofrows) + " rows. Do you wish to continue ?\n\nTip: Re-run the search using adjusted search settings to limit the number of rows. You may increase the minimum threshold of relative peak intensity, the minimum m/z ratio, decrease the m/z error tolerance or limit the number of selected ion types in theoretical spectra."; + reply = QMessageBox::question(this, appname, msg.c_str(), QMessageBox::Yes | QMessageBox::No); + if (reply == QMessageBox::No) { + return false; + } + } + + // fill the data + QProgressDialog* progress; + cEventFilter filter; + + progress = new QProgressDialog("Preparing the data...", "Cancel", 0, numberofrows, this); + progress->setMinimumWidth(250); + progress->installEventFilter(&filter); + progress->setMinimumDuration(0); + progress->setWindowModality(Qt::ApplicationModal); + progress->setValue(0); + + database->setModel(0); + proxymodel->setSourceModel(0); + database->setSortingEnabled(false); + + double value; + int hits; + int currentrow = 0; + string datastr; + + cPeaksList eicchromatogram; + vector nys; + vector sigmas; + vector as; + vector bases; + vector taus; + + double maxheight; + int tmpsize; + bool badhit; + + bool fronting = false; + if (peakshape == 2) { + fronting = true; + } + + for (auto& it : identifieditems) { + + progress->setValue(currentrow); + + currentrow = databasemodel->rowCount(); + currentcolumn = 0; + + databasemodel->insertRow(currentrow); + + if (parameters->mode == dereplication) { + datastr.clear(); + tmpstr = it.first; + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setText(datastr.c_str()); + currentcolumn++; + + datastr.clear(); + tmpstr = tmpstr.substr(pos + 1); + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setText(datastr.c_str()); + currentcolumn++; + + datastr.clear(); + tmpstr = tmpstr.substr(pos + 1); + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setText(datastr.c_str()); + currentcolumn++; + } + else { + datastr.clear(); + tmpstr = it.first; + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->setItem(currentrow, 1, new QStandardItem()); + databasemodel->item(currentrow, 1)->setText(datastr.c_str()); + + datastr.clear(); + tmpstr = tmpstr.substr(pos + 1); + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->setItem(currentrow, 0, new QStandardItem()); + databasemodel->item(currentrow, 0)->setText(datastr.c_str()); + + currentcolumn += 2; + } + + value = listoftheoreticalspectra->get(it.second.begin()->first, it.second.begin()->second.first)[it.second.begin()->second.second].mzratio; + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + datastr = databasemodel->item(currentrow, currentcolumn - 2)->text().toStdString(); + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + if (parameters->pchemresults.count(datastr) == 1) { + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(parameters->pchemresults[datastr]), Qt::DisplayRole); + } + currentcolumn++; + + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + currentcolumn++; + + hits = 0; + for (int i = systemcolumns; i < numberofdatasets + systemcolumns; i++) { + value = 0; + if (it.second.count(i - systemcolumns) > 0) { + switch (datatypeview) { + case 0: + value = listoftheoreticalspectra->get(i - systemcolumns, it.second[i - systemcolumns].first)[it.second[i - systemcolumns].second].matchedrelativeintensity; + break; + case 1: + value = listoftheoreticalspectra->get(i - systemcolumns, it.second[i - systemcolumns].first)[it.second[i - systemcolumns].second].matchedabsoluteintensity; + break; + case 2: + case 3: + getEICFromMultiMap(i - systemcolumns, identifieditemswithmultimap[it.first], eicchromatogram, false); + + calculateGaussianParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, nys, sigmas, as); + + if (peakshape > 0) { + calculateExponentialParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, fronting, 1.0, bases, taus); + } + + badhit = false; + + maxheight = 0; + tmpsize = eicchromatogram.size(); + for (int j = 0; j < tmpsize; j++) { + if (eicchromatogram[j].absoluteintensity > maxheight) { + maxheight = eicchromatogram[j].absoluteintensity; + } + } + + tmpsize = (int)nys.size(); + for (int j = 0; j < tmpsize; j++) { + if (as[j] > 2 * maxheight) { + nys[j] = 0; + sigmas[j] = 0; + as[j] = 0; + badhit = true; + } + } + + if (peakshape == 0) { + value = getGaussianAreas(sigmas, as); + } + else { + value = getExponentiallyModifiedGaussianAreas(nys, as, nys, sigmas, taus, fronting); + if (value == 0) { + badhit = true; + } + } + + if (badhit) { + value = -1; + } + break; + case 4: + case 5: + getEICFromMultiMap(i - systemcolumns, identifieditemswithmultimap[it.first], eicchromatogram, true); + calculateGaussianParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, nys, sigmas, as); + + if (peakshape > 0) { + calculateExponentialParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, fronting, 1.0, bases, taus); + } + + badhit = false; + + maxheight = 0; + tmpsize = eicchromatogram.size(); + for (int j = 0; j < tmpsize; j++) { + if (eicchromatogram[j].absoluteintensity > maxheight) { + maxheight = eicchromatogram[j].absoluteintensity; + } + } + + tmpsize = (int)nys.size(); + for (int j = 0; j < tmpsize; j++) { + if (as[j] > 2 * maxheight) { + nys[j] = 0; + sigmas[j] = 0; + as[j] = 0; + badhit = true; + } + } + + if (peakshape == 0) { + value = getGaussianAreas(sigmas, as); + } + else { + value = getExponentiallyModifiedGaussianAreas(nys, as, nys, sigmas, taus, fronting); + if (value == 0) { + badhit = true; + } + } + + if (badhit) { + value = -1; + } + break; + default: + break; + } + } + + databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); + + if (value != 0) { + //databasemodel->item(currentrow, currentcolumn)->setBackground(Qt::yellow); + hits++; + } + + if (value != 0) { + switch (datatypeview) { + case 0: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 1: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 2: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 3: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 4: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 5: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + default: + break; + } + } + + currentcolumn++; + } + + databasemodel->item(currentrow, systemcolumns - 1)->setData(QVariant::fromValue(hits), Qt::DisplayRole); + + if (progress->wasCanceled()) { + deleteTable(); + emit tableCancelled(); + break; + } + + } + + double stdvalue; + if (!progress->wasCanceled()) { + + if ((datatypeview == 2) || (datatypeview == 4)) { + if (standard > 0) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + stdvalue = 0; + if (databasemodel->item(standard - 1, j) && (databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble() > 0)) { + stdvalue = databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble(); + } + + for (int i = 0; i < databasemodel->rowCount(); i++) { + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() > 0)) { + if (stdvalue > 0) { + value = databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() / stdvalue; + databasemodel->item(i, j)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + } + else { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + } + } + } + + if ((datatypeview == 3) || (datatypeview == 5)) { + // standard selected + if (standard > 0) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + stdvalue = 0; + if (databasemodel->item(standard - 1, j) && (databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble() > 0)) { + stdvalue = databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble(); + } + + for (int i = 0; i < databasemodel->rowCount(); i++) { + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() > 0)) { + if ((stdvalue > 0) && (calibrationa > 0)) { + value = databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() / stdvalue; + value = (value - calibrationb) / calibrationa; + databasemodel->item(i, j)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + } + else { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + } + } + // standard not selected + else { + for (int i = 0; i < databasemodel->rowCount(); i++) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + value = 0; + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() > 0)) { + value = databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble(); + + if (calibrationa > 0) { + value = (value - calibrationb) / calibrationa; + databasemodel->item(i, j)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + } + else { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + } + } + } + + // clear badhits + concentrations below zero + for (int i = 0; i < databasemodel->rowCount(); i++) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() < 0)) { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + + } + + proxymodel->setSourceModel(databasemodel); + database->setModel(proxymodel); + database->setSortingEnabled(true); + proxymodel->sort(-1); + + if (!progress->wasCanceled()) { + for (int i = 0; i < databasemodel->columnCount(); i++) { + database->resizeColumnToContents(i); + } + } + + vector filenames; + for (int i = systemcolumns; i < numberofdatasets + systemcolumns; i++) { + filenames.push_back(databasemodel->horizontalHeaderItem(i)->text().toStdString()); + } + + vector compounds; + string compound; + int rowcount = databasemodel->rowCount(); + for (int i = 0; i < rowcount; i++) { + compound.clear(); + if (parameters->mode == dereplication) { + compound = databasemodel->item(i, 0)->text().toStdString(); + compound += ", "; + compound += databasemodel->item(i, 1)->text().toStdString(); + compound += ", "; + compound += databasemodel->item(i, 2)->text().toStdString(); + } + else { + compound = databasemodel->item(i, 0)->text().toStdString(); + compound += ", "; + compound += databasemodel->item(i, 1)->text().toStdString(); + } + compounds.push_back(compound); + } + + definecalibrationwidget->prepareWidget(filenames, compounds); + + vector tmpx; + vector tmpy; + + vector tmpsd; + + calibrationchartwidget->setLineParameters(0, calibrationa, calibrationb, tmpx, tmpy, tmpsd); + + progress->setValue(numberofrows); + delete progress; + + return true; +} + + +void cMultipleDatasetsTableWidget::updateTable() { + QMessageBox msgBox; + QString errstr; + + if (!parameters || !listoftheoreticalspectra || (listoftheoreticalspectra->size() == 0) || (activefileid >= listoftheoreticalspectra->size())) { + QString errstr = "Nothing to show. Perform an analysis first (MS, LC-MS or MSI) !"; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + if ((parameters->mode != dereplication) && (parameters->mode != compoundsearch)) { + QString errstr = "This feature is available only for MS, LC-MS, and MSI data."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + int numberofdatasets = listoftheoreticalspectra->size(); + + string tmpstr; + size_t pos; + + if (parameters->mode == dereplication) { + systemcolumns = 6; + } + else { + systemcolumns = 5; + } + + int currentcolumn = 0; + + vector< vector > rtimes; + vector rtimeunits; + + int sizei, sizej; + string compounddesc; + + sizei = listoftheoreticalspectra->size(); + rtimes.resize(sizei); + rtimeunits.resize(sizei); + for (int i = 0; i < sizei; i++) { + sizej = listoftheoreticalspectra->size(i); + rtimes[i].resize(sizej); + for (int j = 0; j < sizej; j++) { + rtimes[i][j] = listoftheoreticalspectra->get(i, j).getExperimentalSpectrum().getRetentionTime(); + + if (j == 0) { + rtimeunits[i] = listoftheoreticalspectra->get(i, j).getExperimentalSpectrum().getRetentionTimeUnit(); + } + } + } + + int numberofrows = (int)identifieditems.size(); + + // fill the data + QProgressDialog* progress; + cEventFilter filter; + + progress = new QProgressDialog("Updating the data...", /*"Cancel"*/0, 0, numberofrows, this); + progress->setMinimumWidth(250); + progress->installEventFilter(&filter); + progress->setMinimumDuration(0); + progress->setWindowModality(Qt::ApplicationModal); + progress->setValue(0); + + double value; + int hits; + int currentrow = -1; + string datastr; + + cPeaksList eicchromatogram; + vector nys; + vector sigmas; + vector as; + vector bases; + vector taus; + + double maxheight; + int tmpsize; + bool badhit; + + bool fronting = false; + if (peakshape == 2) { + fronting = true; + } + + for (auto& it : identifieditems) { + + progress->setValue(currentrow); + + currentrow++; + currentcolumn = 0; + + if (parameters->mode == dereplication) { + datastr.clear(); + tmpstr = it.first; + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->item(currentrow, currentcolumn)->setText(datastr.c_str()); + currentcolumn++; + + datastr.clear(); + tmpstr = tmpstr.substr(pos + 1); + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->item(currentrow, currentcolumn)->setText(datastr.c_str()); + currentcolumn++; + + datastr.clear(); + tmpstr = tmpstr.substr(pos + 1); + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->item(currentrow, currentcolumn)->setText(datastr.c_str()); + currentcolumn++; + } + else { + datastr.clear(); + tmpstr = it.first; + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->item(currentrow, 1)->setText(datastr.c_str()); + + datastr.clear(); + tmpstr = tmpstr.substr(pos + 1); + pos = tmpstr.find("\t"); + if (pos != string::npos) { + datastr = tmpstr.substr(0, pos); + } + + databasemodel->item(currentrow, 0)->setText(datastr.c_str()); + + currentcolumn += 2; + } + + value = listoftheoreticalspectra->get(it.second.begin()->first, it.second.begin()->second.first)[it.second.begin()->second.second].mzratio; + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + currentcolumn++; + + datastr = databasemodel->item(currentrow, currentcolumn - 2)->text().toStdString(); + if (parameters->pchemresults.count(datastr) == 1) { + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(parameters->pchemresults[datastr]), Qt::DisplayRole); + } + + currentcolumn += 2; + + hits = 0; + for (int i = systemcolumns; i < numberofdatasets + systemcolumns; i++) { + value = 0; + if (it.second.count(i - systemcolumns) > 0) { + switch (datatypeview) { + case 0: + value = listoftheoreticalspectra->get(i - systemcolumns, it.second[i - systemcolumns].first)[it.second[i - systemcolumns].second].matchedrelativeintensity; + break; + case 1: + value = listoftheoreticalspectra->get(i - systemcolumns, it.second[i - systemcolumns].first)[it.second[i - systemcolumns].second].matchedabsoluteintensity; + break; + case 2: + case 3: + getEICFromMultiMap(i - systemcolumns, identifieditemswithmultimap[it.first], eicchromatogram, false); + + calculateGaussianParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, nys, sigmas, as); + + if (peakshape > 0) { + calculateExponentialParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, fronting, 1.0, bases, taus); + } + + badhit = false; + + maxheight = 0; + tmpsize = eicchromatogram.size(); + for (int j = 0; j < tmpsize; j++) { + if (eicchromatogram[j].absoluteintensity > maxheight) { + maxheight = eicchromatogram[j].absoluteintensity; + } + } + + tmpsize = (int)nys.size(); + for (int j = 0; j < tmpsize; j++) { + if (as[j] > 2 * maxheight) { + nys[j] = 0; + sigmas[j] = 0; + as[j] = 0; + badhit = true; + } + } + + if (peakshape == 0) { + value = getGaussianAreas(sigmas, as); + } + else { + value = getExponentiallyModifiedGaussianAreas(nys, as, nys, sigmas, taus, fronting); + if (value == 0) { + badhit = true; + } + } + + if (badhit) { + value = -1; + } + break; + case 4: + case 5: + getEICFromMultiMap(i - systemcolumns, identifieditemswithmultimap[it.first], eicchromatogram, true); + calculateGaussianParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, nys, sigmas, as); + + if (peakshape > 0) { + calculateExponentialParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, fronting, 1.0, bases, taus); + } + + badhit = false; + + maxheight = 0; + tmpsize = eicchromatogram.size(); + for (int j = 0; j < tmpsize; j++) { + if (eicchromatogram[j].absoluteintensity > maxheight) { + maxheight = eicchromatogram[j].absoluteintensity; + } + } + + tmpsize = (int)nys.size(); + for (int j = 0; j < tmpsize; j++) { + if (as[j] > 2 * maxheight) { + nys[j] = 0; + sigmas[j] = 0; + as[j] = 0; + badhit = true; + } + } + + if (peakshape == 0) { + value = getGaussianAreas(sigmas, as); + } + else { + value = getExponentiallyModifiedGaussianAreas(nys, as, nys, sigmas, taus, fronting); + if (value == 0) { + badhit = true; + } + } + + if (badhit) { + value = -1; + } + break; + default: + break; + } + } + + if (value != 0) { + hits++; + } + + if (value != 0) { + switch (datatypeview) { + case 0: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 1: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 2: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 3: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 4: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + case 5: + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + break; + default: + break; + } + } + + currentcolumn++; + } + + databasemodel->item(currentrow, systemcolumns - 1)->setData(QVariant::fromValue(hits), Qt::DisplayRole); + + //if (progress->wasCanceled()) { + // break; + //} + + } + + double stdvalue; + //if (!progress->wasCanceled()) { + + if ((datatypeview == 2) || (datatypeview == 4)) { + if (standard > 0) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + stdvalue = 0; + if (databasemodel->item(standard - 1, j) && (databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble() > 0)) { + stdvalue = databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble(); + } + + for (int i = 0; i < databasemodel->rowCount(); i++) { + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() > 0)) { + if (stdvalue > 0) { + value = databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() / stdvalue; + databasemodel->item(i, j)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + } + else { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + } + } + } + + if ((datatypeview == 3) || (datatypeview == 5)) { + // standard selected + if (standard > 0) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + stdvalue = 0; + if (databasemodel->item(standard - 1, j) && (databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble() > 0)) { + stdvalue = databasemodel->item(standard - 1, j)->data(Qt::DisplayRole).toDouble(); + } + + for (int i = 0; i < databasemodel->rowCount(); i++) { + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() > 0)) { + if ((stdvalue > 0) && (calibrationa > 0)) { + value = databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() / stdvalue; + value = (value - calibrationb) / calibrationa; + databasemodel->item(i, j)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + } + else { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + } + } + // standard not selected + else { + for (int i = 0; i < databasemodel->rowCount(); i++) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + value = 0; + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() > 0)) { + value = databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble(); + + if (calibrationa > 0) { + value = (value - calibrationb) / calibrationa; + databasemodel->item(i, j)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(value)), Qt::DisplayRole); + } + else { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + } + } + } + + // clear badhits + concentrations below zero + for (int i = 0; i < databasemodel->rowCount(); i++) { + for (int j = systemcolumns; j < databasemodel->columnCount(); j++) { + if (databasemodel->item(i, j) && (databasemodel->item(i, j)->data(Qt::DisplayRole).toDouble() < 0)) { + databasemodel->item(i, j)->setText("DETECTED"); + } + } + } + + //} + + progress->setValue(numberofrows); + delete progress; + + if (database->selectionModel()->selectedIndexes().count() > 0) { + if (proxymodel->mapToSource(database->selectionModel()->selectedIndexes()[0]).column() >= systemcolumns) { + rowClicked(database->selectionModel()->selectedIndexes()[0]); + } + } +} + + +void cMultipleDatasetsTableWidget::resetStandard() { + standard = 0; +} + + +void cMultipleDatasetsTableWidget::updateListofStandards() { + if (!parameters) { + return; + } + + comboboxstandard->blockSignals(true); + comboboxstandard->clear(); + comboboxstandard->addItem("None"); + + string tmpstr; + for (int i = 0; i < databasemodel->rowCount(); i++) { + tmpstr.clear(); + + if (parameters->mode == dereplication) { + if (databasemodel->item(i, 0)) { + tmpstr += databasemodel->item(i, 0)->text().toStdString(); + tmpstr += ", "; + } + if (databasemodel->item(i, 1)) { + tmpstr += databasemodel->item(i, 1)->text().toStdString(); + tmpstr += ", "; + } + if (databasemodel->item(i, 2)) { + tmpstr += databasemodel->item(i, 2)->text().toStdString(); + } + + comboboxstandard->addItem(tmpstr.c_str()); + } + + if (parameters->mode == compoundsearch) { + if (databasemodel->item(i, 0)) { + tmpstr += databasemodel->item(i, 0)->text().toStdString(); + tmpstr += ", "; + } + if (databasemodel->item(i, 1)) { + tmpstr += databasemodel->item(i, 1)->text().toStdString(); + } + + comboboxstandard->addItem(tmpstr.c_str()); + } + } + + comboboxstandard->blockSignals(false); +} + + +void cMultipleDatasetsTableWidget::deleteTable() { + for (int i = 0; i < databasemodel->columnCount(); i++) { + if (database->itemDelegateForColumn(i)) { + delete database->itemDelegateForColumn(i); + } + } + databasemodel->clear(); +} + + +void cMultipleDatasetsTableWidget::applyGlobalPreferences(cGlobalPreferences* globalpreferences) { + if (globalpreferences) { + if (lastdirexporttocsv.right(4).compare(".csv", Qt::CaseInsensitive) != 0) { + lastdirexporttocsv = globalpreferences->exportcsvdefaultdir; + } + if (lastdirexportdatabase.right(4).compare(".txt", Qt::CaseInsensitive) != 0) { + lastdirexportdatabase = globalpreferences->sequencesdefaultdir; + } + } +} + + +cPubChemSearchWidget* cMultipleDatasetsTableWidget::getPubChemSearchWidget() { + return pubchemsearchwidget; +} + + +cDefineCalibrationWidget* cMultipleDatasetsTableWidget::getDefineCalibrationWidget() { + return definecalibrationwidget; +} + + +cCalibrationChart* cMultipleDatasetsTableWidget::getCalibrationChartWidget() { + return calibrationchartwidget; +} + + +void cMultipleDatasetsTableWidget::getEICFromMultiMap(int datafileid, multimap >& compoundmultimap, cPeaksList& eicchromatogram, bool highestpeaks) { + eicchromatogram.clear(); + + int size = listoftheoreticalspectra->size(datafileid); + eicchromatogram.resize(size); + for (int i = 0; i < size; i++) { + eicchromatogram[i].clear(); + eicchromatogram[i].mzratio = (double)(i + 1); + eicchromatogram[i].absoluteintensity = 0; + } + + pair< multimap >::iterator, multimap >::iterator> result = compoundmultimap.equal_range(datafileid); + map tempmap; + + if (highestpeaks) { + for (multimap >::iterator it = result.first; it != result.second; it++) { + if (tempmap.count(it->second.first) == 1) { + if (listoftheoreticalspectra->get(datafileid, it->second.first)[it->second.second].relativeintensity > listoftheoreticalspectra->get(datafileid, it->second.first)[tempmap[it->second.first]].relativeintensity) { + tempmap[it->second.first] = it->second.second; + } + } + else { + tempmap[it->second.first] = it->second.second; + } + } + + for (auto& it : tempmap) { + if (listoftheoreticalspectra->get(datafileid, it.first)[it.second].matchedabsoluteintensity > eicchromatogram[it.first].absoluteintensity) { + eicchromatogram[it.first].absoluteintensity = listoftheoreticalspectra->get(datafileid, it.first)[it.second].matchedabsoluteintensity; + } + } + } + else { + for (multimap >::iterator it = result.first; it != result.second; it++) { + eicchromatogram[it->second.first].absoluteintensity += listoftheoreticalspectra->get(datafileid, it->second.first)[it->second.second].matchedabsoluteintensity; + } + } + + eicchromatogram.normalizeIntenzity(); +} + + +void cMultipleDatasetsTableWidget::keyPressEvent(QKeyEvent *event) { + if ((event->key() == Qt::Key_Enter) || (event->key() == Qt::Key_Return)) { + if (calibrationspinboxa->hasFocus() || calibrationspinboxb->hasFocus() || calibrationsetbutton->hasFocus()) { + calibrationSetButtonReleased(); + } + else { + if (database->selectionModel()->selectedIndexes().count() > 0) { + rowClicked(database->selectionModel()->selectedIndexes()[0]); + } + } + } + + if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) { + QModelIndexList selectedindexes = database->selectionModel()->selectedIndexes(); + QStandardItem* item; + + QString selectedtext; + string itemtext; + + int selectedcount = selectedindexes.count(); + for (int i = 0; i < selectedcount; i++) { + if (i > 0) { + if (proxymodel->mapToSource(selectedindexes[i - 1]).row() != proxymodel->mapToSource(selectedindexes[i]).row()) { + selectedtext += "\n"; + } + else { + selectedtext += "\t"; + } + } + + item = databasemodel->itemFromIndex(proxymodel->mapToSource(selectedindexes[i])); + if (item) { + itemtext = item->text().toStdString(); + selectedtext += stripHTML(itemtext).c_str(); + } + } + selectedtext += "\n"; + QApplication::clipboard()->setText(selectedtext); + } + + event->accept(); +} + + +void cMultipleDatasetsTableWidget::closeWindow() { + pubchemsearchwidget->hide(); + definecalibrationwidget->hide(); + calibrationchartwidget->hide(); + hide(); +} + + +void cMultipleDatasetsTableWidget::exportToCsv() { + QString filename = QFileDialog::getSaveFileName(this, tr("Export to CSV"), lastdirexporttocsv, tr("Files (*.csv)")); + + if (!filename.isEmpty()) { + lastdirexporttocsv = filename; + + QProgressDialog progress("Exporting CSV file...", "Cancel", 0, proxymodel->rowCount(), this); + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + + bool removefile = false; + QFile file(filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + return; + } + + QTextStream out(&file); + + for (int i = 0; i < databasemodel->columnCount(); i++) { + out << "\"" << databasemodel->horizontalHeaderItem(i)->text() << "\""; + if (i < databasemodel->columnCount() - 1) { + out << ","; + } + } + out << endl; + + QStandardItem* item; + string str; + for (int i = 0; i < proxymodel->rowCount(); i++) { + + for (int j = 0; j < databasemodel->columnCount(); j++) { + item = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, j))); + if (item) { + str = item->data(Qt::DisplayRole).toString().toStdString(); + out << "\"" << stripHTML(str).c_str() << "\""; + if (j < databasemodel->columnCount() - 1) { + out << ","; + } + } + else { + if (j < databasemodel->columnCount() - 1) { + out << ","; + } + } + } + out << endl; + + progress.setValue(i); + if (progress.wasCanceled()) { + removefile = true; + break; + } + + } + + file.close(); + + if (removefile) { + file.remove(); + } + + progress.setValue(proxymodel->rowCount()); + } +} + + +void cMultipleDatasetsTableWidget::exportToDatabase() { + + if (!parameters) { + return; + } + + if (parameters->mode != compoundsearch) { + QMessageBox msgBox; + QString msg = "The feature is available only in 'Compound Search - MS, LC-MS, MSI' mode !"; + msgBox.setText(msg); + msgBox.exec(); + return; + } + + QString filename = QFileDialog::getSaveFileName(this, tr("Export Database"), lastdirexportdatabase, tr("Files (*.txt)")); + + if (!filename.isEmpty()) { + lastdirexportdatabase = filename; + + set formulas; + QStandardItem* item; + + for (int i = 0; i < proxymodel->rowCount(); i++) { + item = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, 1))); + if (item) { + formulas.insert(item->text().toStdString()); + } + } + + cSequenceDatabase seqdb; + cSequence seq; + + seq.setPeptideType(other); + for (auto& it : formulas) { + seq.setName(it); + seq.setSummaryFormula(it); + seqdb.push_back(seq); + } + + ofstream output; + output.open(filename.toStdString()); + seqdb.storeToPlainTextStream(output, false); + output.close(); + } + +} + + +void cMultipleDatasetsTableWidget::dataTypeViewChanged(int index) { + datatypeview = index; + updateTable(); + + vector tmpx; + vector tmpy; + + vector tmpsd; + + calibrationchartwidget->setLineParameters(0, calibrationa, calibrationb, tmpx, tmpy, tmpsd); +} + + +void cMultipleDatasetsTableWidget::peakShapeChanged(int index) { + peakshape = index; + updateTable(); + + vector tmpx; + vector tmpy; + + vector tmpsd; + + calibrationchartwidget->setLineParameters(0, calibrationa, calibrationb, tmpx, tmpy, tmpsd); +} + + +void cMultipleDatasetsTableWidget::standardChanged(int index) { + standard = index; + updateTable(); + + vector tmpx; + vector tmpy; + + vector tmpsd; + + calibrationchartwidget->setLineParameters(0, calibrationa, calibrationb, tmpx, tmpy, tmpsd); +} + + +void cMultipleDatasetsTableWidget::calibrationSetButtonReleased() { + calibrationa = calibrationspinboxa->value(); + calibrationb = calibrationspinboxb->value(); + updateTable(); + + vector tmpx; + vector tmpy; + + vector tmpsd; + + calibrationchartwidget->setLineParameters(0, calibrationa, calibrationb, tmpx, tmpy, tmpsd); +} + + +void cMultipleDatasetsTableWidget::calibrationDefineButtonReleased() { + definecalibrationwidget->show(); + definecalibrationwidget->activateWindow(); + if (definecalibrationwidget->isMinimized()) { + definecalibrationwidget->showNormal(); + } +} + + +void cMultipleDatasetsTableWidget::calibrationViewButtonReleased() { + calibrationchartwidget->show(); + calibrationchartwidget->activateWindow(); + if (calibrationchartwidget->isMinimized()) { + calibrationchartwidget->showNormal(); + } +} + + +void cMultipleDatasetsTableWidget::calibrationCurveRedefined() { + vector usedvector; + vector datatypes; + vector groupsvector; + vector concentrationsvector; + vector selectedionsvector; + + int equationtype; + double manuala; + double manualb; + int eictype; + int peakshapetype; + int standardtype; + + definecalibrationwidget->getData(usedvector, datatypes, groupsvector, concentrationsvector, selectedionsvector, equationtype, manuala, manualb, eictype, peakshapetype, standardtype); + + comboboxdatatype->blockSignals(true); + comboboxpeakshape->blockSignals(true); + comboboxstandard->blockSignals(true); + + if (eictype == 0) { + comboboxdatatype->setCurrentIndex(5); + datatypeview = 5; + } + // eictype == 1 + else { + comboboxdatatype->setCurrentIndex(3); + datatypeview = 3; + } + + comboboxpeakshape->setCurrentIndex(peakshapetype); + peakshape = peakshapetype; + + comboboxstandard->setCurrentIndex(standardtype); + standard = standardtype; + + comboboxdatatype->blockSignals(false); + comboboxpeakshape->blockSignals(false); + comboboxstandard->blockSignals(false); + + int selectedions = 0; + for (int i = 0; i < selectedionsvector.size(); i++) { + if (selectedionsvector[i]) { + selectedions++; + } + } + + if (selectedions == 0) { + return; + } + + int numberofdatasets = listoftheoreticalspectra->size(); + + vector< vector > rtimes; + vector rtimeunits; + + int sizei, sizej; + + sizei = listoftheoreticalspectra->size(); + rtimes.resize(sizei); + rtimeunits.resize(sizei); + for (int i = 0; i < sizei; i++) { + sizej = listoftheoreticalspectra->size(i); + rtimes[i].resize(sizej); + for (int j = 0; j < sizej; j++) { + rtimes[i][j] = listoftheoreticalspectra->get(i, j).getExperimentalSpectrum().getRetentionTime(); + + if (j == 0) { + rtimeunits[i] = listoftheoreticalspectra->get(i, j).getExperimentalSpectrum().getRetentionTimeUnit(); + } + } + } + + double value; + + cPeaksList eicchromatogram; + vector nys; + vector sigmas; + vector as; + vector bases; + vector taus; + + double maxheight; + int tmpsize; + bool badhit; + + bool fronting = false; + if (peakshape == 2) { + fronting = true; + } + + map calibrationareas; + multimap calibrationsubareas; + map calibrationcounts; + + map dataareas; + multimap datasubareas; + map datacounts; + + double stdarea; + double cumarea; + + int c, k; + + for (int i = systemcolumns; i < numberofdatasets + systemcolumns; i++) { + + if (usedvector[i - systemcolumns] == 0) { + continue; + } + + stdarea = 0; + cumarea = 0; + + k = 0; + + for (auto& it : identifieditems) { + + value = 0; + if (it.second.count(i - systemcolumns) > 0) { + + switch (datatypeview) { + case 2: + case 3: + getEICFromMultiMap(i - systemcolumns, identifieditemswithmultimap[it.first], eicchromatogram, false); + + calculateGaussianParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, nys, sigmas, as); + + if (peakshape > 0) { + calculateExponentialParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, fronting, 1.0, bases, taus); + } + + badhit = false; + + maxheight = 0; + tmpsize = eicchromatogram.size(); + for (int j = 0; j < tmpsize; j++) { + if (eicchromatogram[j].absoluteintensity > maxheight) { + maxheight = eicchromatogram[j].absoluteintensity; + } + } + + tmpsize = (int)nys.size(); + for (int j = 0; j < tmpsize; j++) { + if (as[j] > 2 * maxheight) { + nys[j] = 0; + sigmas[j] = 0; + as[j] = 0; + badhit = true; + } + } + + if (peakshape == 0) { + value = getGaussianAreas(sigmas, as); + } + else { + value = getExponentiallyModifiedGaussianAreas(nys, as, nys, sigmas, taus, fronting); + if (value == 0) { + badhit = true; + } + } + + if (badhit) { + value = -1; + } + break; + case 0: + case 1: + case 4: + case 5: + getEICFromMultiMap(i - systemcolumns, identifieditemswithmultimap[it.first], eicchromatogram, true); + calculateGaussianParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, nys, sigmas, as); + + if (peakshape > 0) { + calculateExponentialParameters(eicchromatogram, rtimes[i - systemcolumns], rtimeunits[i - systemcolumns], true, true, fronting, 1.0, bases, taus); + } + + badhit = false; + + maxheight = 0; + tmpsize = eicchromatogram.size(); + for (int j = 0; j < tmpsize; j++) { + if (eicchromatogram[j].absoluteintensity > maxheight) { + maxheight = eicchromatogram[j].absoluteintensity; + } + } + + tmpsize = (int)nys.size(); + for (int j = 0; j < tmpsize; j++) { + if (as[j] > 2 * maxheight) { + nys[j] = 0; + sigmas[j] = 0; + as[j] = 0; + badhit = true; + } + } + + if (peakshape == 0) { + value = getGaussianAreas(sigmas, as); + } + else { + value = getExponentiallyModifiedGaussianAreas(nys, as, nys, sigmas, taus, fronting); + if (value == 0) { + badhit = true; + } + } + + if (badhit) { + value = -1; + } + break; + default: + break; + } + + } + + if (value < 0) { + value = 0; + } + + if ((standard > 0) && (standard - 1 == k)) { + stdarea = value; + } + + if (selectedionsvector[k]) { + cumarea += value; + } + + k++; + + } + + if (datatypes[i - systemcolumns] == 0) { + + c = groupsvector[i - systemcolumns]; + + if (dataareas.count(c) == 0) { + if (stdarea > 0) { + dataareas[c] = cumarea / stdarea; + } + else { + dataareas[c] = cumarea; + } + } + else { + if (stdarea > 0) { + dataareas[c] += cumarea / stdarea; + } + else { + dataareas[c] += cumarea; + } + } + + if (stdarea > 0) { + datasubareas.insert(pair(c, cumarea / stdarea)); + } + else { + datasubareas.insert(pair(c, cumarea)); + } + + if (datacounts.count(c) == 0) { + datacounts[c] = 1; + } + else { + datacounts[c] += 1; + } + + } + else { + c = (int)(concentrationsvector[i - systemcolumns] * 1000.0); + + if (calibrationareas.count(c) == 0) { + if (stdarea > 0) { + calibrationareas[c] = cumarea / stdarea; + } + else { + calibrationareas[c] = cumarea; + } + } + else { + if (stdarea > 0) { + calibrationareas[c] += cumarea / stdarea; + } + else { + calibrationareas[c] += cumarea; + } + } + + if (stdarea > 0) { + calibrationsubareas.insert(pair(c, cumarea / stdarea)); + } + else { + calibrationsubareas.insert(pair(c, cumarea)); + } + + if (calibrationcounts.count(c) == 0) { + calibrationcounts[c] = 1; + } + else { + calibrationcounts[c] += 1; + } + } + + } + + double xvalue, yvalue, dev; + double avg; + + vector calibrationxvalues; + vector calibrationyvalues; + vector calibrationsd; + + //calibrationxvalues.push_back(0); + //calibrationyvalues.push_back(0); + + for (auto& it : calibrationareas) { + xvalue = (double)it.first / 1000.0; + calibrationxvalues.push_back(xvalue); + + yvalue = it.second / (double)(calibrationcounts[it.first]); + calibrationyvalues.push_back(yvalue); + + if (calibrationcounts[it.first] > 1) { + avg = 0; + auto range = calibrationsubareas.equal_range(it.first); + for (auto it2 = range.first; it2 != range.second; ++it2) { + avg += it2->second; + } + + avg /= (double)(calibrationcounts[it.first]); + + dev = 0; + for (auto it2 = range.first; it2 != range.second; ++it2) { + dev += (it2->second - avg) * (it2->second - avg); + } + + dev /= (double)(calibrationcounts[it.first] - 1); + dev = sqrt(dev); + + calibrationsd.push_back(dev); + } + else { + calibrationsd.push_back(0); + } + } + + double a = 1; + double b = 0; + + if (equationtype == 0) { + calculateLineParameterA(calibrationxvalues, calibrationyvalues, a); + } + + if (equationtype == 1) { + calculateLineParameters(calibrationxvalues, calibrationyvalues, a, b); + //calculateLineParametersWithIterations(xvalues, yvalues, 10, a, b); + } + + if (equationtype == 2) { + a = manuala; + b = manualb; + } + + calibrationspinboxa->setValue(a); + calibrationspinboxb->setValue(b); + + calibrationsetbutton->click(); + + // fix xvalues and yvalues + calibrationchartwidget->setLineParameters(equationtype, a, b, calibrationxvalues, calibrationyvalues, calibrationsd); + + vector dataxvalues; + vector datayvalues; + vector datasd; + vector datagroups; + + for (auto& it : dataareas) { + yvalue = it.second / (double)(datacounts[it.first]); + datayvalues.push_back(yvalue); + + xvalue = yvalue - b; + + if (a != 0) { + xvalue /= a; + } + else { + xvalue = 0; + } + + dataxvalues.push_back(xvalue); + + if (datacounts[it.first] > 1) { + avg = 0; + auto range = datasubareas.equal_range(it.first); + for (auto it2 = range.first; it2 != range.second; ++it2) { + avg += it2->second; + } + + avg /= (double)(datacounts[it.first]); + + dev = 0; + for (auto it2 = range.first; it2 != range.second; ++it2) { + dev += (it2->second - avg) * (it2->second - avg); + } + + dev /= (double)(datacounts[it.first] - 1); + dev = sqrt(dev); + + datasd.push_back(dev); + } + else { + datasd.push_back(0); + } + + datagroups.push_back(it.first); + } + + calibrationchartwidget->setData(dataxvalues, datayvalues, datasd, datagroups); + + calibrationchartwidget->createTable(a, b, calibrationxvalues, calibrationyvalues, calibrationsd, datagroups, dataxvalues, datayvalues, datasd); +} + + +void cMultipleDatasetsTableWidget::showHTMLDocumentation() { + #if OS_TYPE == WIN + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/annotatedfeatures.html").absoluteFilePath())); + #else + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/annotatedfeatures.html").absoluteFilePath())); + #endif +} + + +void cMultipleDatasetsTableWidget::rowClicked(const QModelIndex& item) { + if (!parameters || (systemcolumns == 0)) { + return; + } + + int row = proxymodel->mapToSource(item).row(); + int column = proxymodel->mapToSource(item).column(); + + if (database->selectionModel()->selectedIndexes().count() > 0) { + database->selectionModel()->select(item, QItemSelectionModel::ClearAndSelect); + } + + int datasetid; + int spectrumid; + int peakid; + + string clickedcompound; + if (parameters->mode == dereplication) { + clickedcompound = databasemodel->item(row, 0)->text().toStdString(); + clickedcompound += "\t"; + clickedcompound += databasemodel->item(row, 1)->text().toStdString(); + clickedcompound += "\t"; + clickedcompound += databasemodel->item(row, 2)->text().toStdString(); + clickedcompound += "\t"; + } + else { + clickedcompound = databasemodel->item(row, 1)->text().toStdString(); + clickedcompound += "\t"; + clickedcompound += databasemodel->item(row, 0)->text().toStdString(); + clickedcompound += "\t"; + } + + if (column < systemcolumns) { + string url = "https://pubchem.ncbi.nlm.nih.gov/#query="; + + if ((parameters->mode == dereplication) && (column == 0)) { + if (identifieditems.count(clickedcompound) > 0) { + datasetid = identifieditems[clickedcompound].begin()->first; + spectrumid = identifieditems[clickedcompound].begin()->second.first; + peakid = identifieditems[clickedcompound].begin()->second.second; + + string stmp = parameters->sequencedatabase[listoftheoreticalspectra->get(datasetid, spectrumid)[peakid].compoundid].getNameWithReferenceAsHTMLString(); + size_t pos = stmp.find('\"'); + if (pos + 1 != string::npos) { + stmp = stmp.substr(pos + 1); + pos = stmp.rfind('\"'); + if (pos != string::npos) { + stmp = stmp.substr(0, pos); + + // crop RT info + pos = stmp.rfind('@'); + if (pos != string::npos) { + stmp = stmp.substr(0, pos); + } + + QDesktopServices::openUrl(QUrl(stmp.c_str())); + } + } + } + } + + if ((parameters->mode == dereplication) && ((column == 2) || (column == 4))) { + url += databasemodel->item(row, 2)->text().toStdString(); + QDesktopServices::openUrl(QUrl(url.c_str())); + } + + if ((parameters->mode == compoundsearch) && ((column == 1) || (column == 3))) { + url += databasemodel->item(row, 1)->text().toStdString(); + QDesktopServices::openUrl(QUrl(url.c_str())); + } + + return; + } + + column -= systemcolumns; + + if (identifieditems.count(clickedcompound) > 0) { + if (identifieditems[clickedcompound].count(column) > 0) { + spectrumid = identifieditems[clickedcompound][column].first; + peakid = identifieditems[clickedcompound][column].second; + + if (parameters->mode == dereplication) { + emit multipleDatasetsTableRowClicked(column, spectrumid, peakid, datatypeview, peakshape, databasemodel->item(row, 0)->text().toStdString(), databasemodel->item(row, 1)->text().toStdString(), databasemodel->item(row, 3)->text().toStdString()); + } + else { + emit multipleDatasetsTableRowClicked(column, spectrumid, peakid, datatypeview, peakshape, databasemodel->item(row, 1)->text().toStdString(), databasemodel->item(row, 0)->text().toStdString(), databasemodel->item(row, 2)->text().toStdString()); + } + } + } +} + + +void cMultipleDatasetsTableWidget::searchPubChem() { + if (!parameters) { + return; + } + + if ((parameters->mode != dereplication) && (parameters->mode != compoundsearch)) { + QMessageBox msgBox; + QString msg = "This feature is available only in 'Compare Peaklist(s) with Database - MS, LC-MS, MSI' and 'Compound Search - MS, LC-MS, MSI' modes !"; + msgBox.setText(msg); + msgBox.exec(); + return; + } + + bool repeatsearch = false; + if (!pubchemsearchwidget->getHTML().empty()) { + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, "Search PubChem...", "Search again ?", QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::Yes) { + repeatsearch = true; + } + } + + if (repeatsearch || pubchemsearchwidget->getHTML().empty()) { + + //resetFilter(); + + int iontypecol; + int formulacol; + int theoreticalmzcol; + + if (parameters->mode == compoundsearch) { + iontypecol = 0; + formulacol = 1; + theoreticalmzcol = 2; + } + else { + iontypecol = 1; + formulacol = 2; + theoreticalmzcol = 3; + } + + set formulas; + map formulasmap; + multimap invertedmultimap; + //map > scanids; + set errorset; + //QStandardItem* itemid; + QStandardItem* itemiontype; + QStandardItem* itemtheoreticalmz; + //QStandardItem* itemexperimentalint; + QStandardItem* itemname; + ostringstream outhtml; + + cRowItemInfo rowitem; + string tmpstr; + + for (int i = 0; i < proxymodel->rowCount(); i++) { + //itemid = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, idcol))); + itemiontype = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, iontypecol))); + itemtheoreticalmz = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, theoreticalmzcol))); + //itemexperimentalint = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, experimentalintcol))); + itemname = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, formulacol))); + + if (/*itemid &&*/ itemiontype && itemtheoreticalmz && /*itemexperimentalint &&*/ itemname) { + formulas.insert(itemname->text().toStdString()); + + rowitem.id = 0; //itemid->text().toInt(); + rowitem.iontype = itemiontype->text().toStdString(); + rowitem.theoreticalmz = itemtheoreticalmz->text().toDouble(); + rowitem.experimentalint = 0; //itemexperimentalint->text().toDouble(); + + tmpstr = itemname->text().toStdString() + ", " + rowitem.iontype; + + if (formulasmap.count(tmpstr) == 0) { + formulasmap[tmpstr] = rowitem; + } + //else { + // if (formulasmap[tmpstr].id == rowitem.id) { + // if (rowitem.experimentalint > formulasmap[tmpstr].experimentalint) { + // formulasmap[tmpstr].experimentalint = rowitem.experimentalint; + // formulasmap[tmpstr].theoreticalmz = rowitem.theoreticalmz; + // } + // } + //} + + //if (scanids.count(tmpstr) == 0) { + // set tmpset; + // tmpset.insert(rowitem.id); + // scanids[tmpstr] = tmpset; + //} + //else { + // scanids[tmpstr].insert(rowitem.id); + //} + } + } + + if (formulas.size() == 0) { + return; + } + + const int limit = 500; + + if (formulas.size() > limit) { + QMessageBox msgBox; + QString errstr = "The maximum number of formulas to be searched is " + QVariant(limit).toString() + ". You generated " + QVariant((int)formulas.size()).toString() + " formulas. "; + errstr += "Please, optimize the search settings."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + for (auto& it : formulasmap) { + invertedmultimap.insert(make_pair(it.second.theoreticalmz, it.first)); + } + + parameters->pchemresults.clear(); + vector cidsvector; + + //vector allcids; + + bool allempty = true; + + bool writelog = false; + ofstream pchemlog; + + if (writelog) { + pchemlog.open("pubchem.log", ofstream::out); + } + + int maxthreadsbackup = QThreadPool::globalInstance()->maxThreadCount(); + int maxparallelqueries = 2; + + QThreadPool::globalInstance()->setMaxThreadCount(maxparallelqueries); + + vector vformulas; + for (auto& it : formulas) { + vformulas.push_back(it); + } + + QProgressDialog firstdialog("Searching compounds (CIDs)...", "Cancel", 0, (int)formulas.size(), this); + firstdialog.setMinimumWidth(250); + cEventFilter firstfilter; + firstdialog.installEventFilter(&firstfilter); + firstdialog.setMinimumDuration(0); + firstdialog.setWindowModality(Qt::ApplicationModal); + firstdialog.setValue(0); + + QFutureWatcher firstfuturewatcher; + QObject::connect(&firstfuturewatcher, SIGNAL(finished()), &firstdialog, SLOT(reset())); + QObject::connect(&firstdialog, SIGNAL(canceled()), &firstfuturewatcher, SLOT(cancel())); + QObject::connect(&firstfuturewatcher, SIGNAL(progressRangeChanged(int, int)), &firstdialog, SLOT(setRange(int, int))); + QObject::connect(&firstfuturewatcher, SIGNAL(progressValueChanged(int)), &firstdialog, SLOT(setValue(int))); + + QFuture firstfuture = QtConcurrent::mapped(vformulas.begin(), vformulas.end(), cPubchemCIDReader()); + + firstfuturewatcher.setFuture(firstfuture); + + firstdialog.exec(); + + if (firstfuturewatcher.isCanceled()) { + QThreadPool::globalInstance()->clear(); + } + + firstfuturewatcher.waitForFinished(); + + if (!firstfuturewatcher.isCanceled()) { + + cidsvector.resize(vformulas.size()); + + cPubchemCIDReader pubchemformulareader; + int count; + string firstfutureresult; + for (int i = 0; i < (int)vformulas.size(); i++) { + firstfutureresult = firstfuture.resultAt(i); + + if (firstfutureresult.substr(0, 6).compare("@ERROR") == 0) { + if (writelog) { + pchemlog << firstfutureresult; + } + firstfutureresult.clear(); + } + + if (!firstfutureresult.empty()) { + allempty = false; + } + + count = pubchemformulareader.getNumberOfCIDs(firstfutureresult); + if (count > 0) { + parameters->pchemresults.insert(make_pair(vformulas[i], count)); + pubchemformulareader.getCommaSeparatedCIDs(firstfutureresult, cidsvector[i]); + //pubchemformulareader.attachVectorOfCIDs(firstfutureresult, allcids); + } + + if (firstfutureresult.find("Status:") != string::npos) { + if (firstfutureresult.find("Status: 404") == string::npos) { + errorset.insert(vformulas[i]); + } + } + + if (writelog) { + pchemlog << "Formula: \"" << vformulas[i] << "\"" << endl; + pchemlog << "Result: \"" << firstfutureresult << "\"" << endl; + pchemlog << "Reduced result: \"" << cidsvector[i] << "\"" << endl; + pchemlog << "-----" << endl << endl; + } + } + + QProgressDialog seconddialog("Searching compounds (Names)...", "Cancel", 0, (int)cidsvector.size(), this); + seconddialog.setMinimumWidth(250); + cEventFilter secondfilter; + seconddialog.installEventFilter(&secondfilter); + seconddialog.setMinimumDuration(0); + seconddialog.setWindowModality(Qt::ApplicationModal); + seconddialog.setValue(0); + + QFutureWatcher secondfuturewatcher; + QObject::connect(&secondfuturewatcher, SIGNAL(finished()), &seconddialog, SLOT(reset())); + QObject::connect(&seconddialog, SIGNAL(canceled()), &secondfuturewatcher, SLOT(cancel())); + QObject::connect(&secondfuturewatcher, SIGNAL(progressRangeChanged(int, int)), &seconddialog, SLOT(setRange(int, int))); + QObject::connect(&secondfuturewatcher, SIGNAL(progressValueChanged(int)), &seconddialog, SLOT(setValue(int))); + + QFuture secondfuture = QtConcurrent::mapped(cidsvector.begin(), cidsvector.end(), cPubchemNameReader()); + + secondfuturewatcher.setFuture(secondfuture); + + seconddialog.exec(); + + if (secondfuturewatcher.isCanceled()) { + QThreadPool::globalInstance()->clear(); + } + + secondfuturewatcher.waitForFinished(); + + if (!secondfuturewatcher.isCanceled()) { + + cPubchemNameReader pubchemnamereader; + set reducednames; + string link; + + map > namesmap; + string secondfutureresult; + + bool servererror = false; + + for (int i = 0; i < (int)vformulas.size(); i++) { + if (cidsvector[i].empty()) { + continue; + } + + reducednames.clear(); + secondfutureresult = secondfuture.resultAt(i); + + if (secondfutureresult.substr(0, 6).compare("@ERROR") == 0) { + if (writelog) { + pchemlog << secondfutureresult; + } + secondfutureresult.clear(); + } + + pubchemnamereader.getReducedNames(secondfutureresult, reducednames); + + if (!reducednames.empty()) { + namesmap[vformulas[i]] = reducednames; + } + + if (secondfutureresult.find("Status:") != string::npos) { + if (secondfutureresult.find("Status: 404") == string::npos) { + set tmperrset; + string status; + + if (secondfutureresult.find("Status: 414") != string::npos) { + tmperrset.insert("Too many names, this item must be checked manually."); + namesmap[vformulas[i]] = tmperrset; + } + else { + tmperrset.insert("No names found, try again or later."); + namesmap[vformulas[i]] = tmperrset; + + servererror = true; + + status = vformulas[i]; + status += ", "; + status += "https://pubchem.ncbi.nlm.nih.gov/#query=" + vformulas[i]; + status += ""; + + errorset.insert(status); + } + } + } + + if (writelog) { + pchemlog << "Formula: \"" << vformulas[i] << "\"" << endl; + pchemlog << "Result: \"" << secondfutureresult << "\"" << endl; + pchemlog << "Reduced result: " << endl; + for (auto& it : reducednames) { + pchemlog << it << endl; + } + pchemlog << "-----" << endl << endl; + } + } + + if (errorset.size() > 0) { + outhtml << "
"; + outhtml << "The queries on the following formulas returned an error:
"; + for (auto& it : errorset) { + outhtml << it << "
"; + } + outhtml << "
"; + } + + if (servererror) { + outhtml << "
Try to repeat the search process again or later !
"; + } + else { + if (allempty) { + outhtml << "
Failed to connect to the server. Please, check your Internet connection, firewall or antivirus settings !
"; + } + else { + outhtml << "
The search process has been completed successfully !
"; + } + } + + outhtml << "

---
"; + + for (auto& it : invertedmultimap) { + tmpstr = it.second.substr(0, it.second.find(",")); + + if (namesmap[tmpstr].size() > 0) { + link = "https://pubchem.ncbi.nlm.nih.gov/#query=" + tmpstr; + + outhtml << "
"; + outhtml << std::fixed << std::setprecision(6); + outhtml << "m/z " << it.first << ", " << it.second << ", " << link << " ("; + outhtml << parameters->pchemresults[tmpstr]; + outhtml << " result"; + if (parameters->pchemresults[tmpstr] > 1) { + outhtml << "s"; + } + outhtml << ")
"; + + //vector scanidsvector; + //if (scanids.count(it.second) == 1) { + // scanidsvector.assign(scanids[it.second].begin(), scanids[it.second].end()); + //} + + //outhtml << "Scans: "; + //int scanssize = (int)scanidsvector.size(); + //for (int i = 0; i < scanssize; i++) { + // if (i == 0) { + // outhtml << scanidsvector[i]; + // continue; + // } + // if (i == scanssize - 1) { + // if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + // outhtml << "-"; + // } + // else { + // outhtml << ", "; + // } + // outhtml << scanidsvector[i]; + // break; + // } + // if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + // if (scanidsvector[i] + 1 != scanidsvector[i + 1]) { + // outhtml << "-" << scanidsvector[i]; + // } + // } + // else { + // outhtml << ", " << scanidsvector[i]; + // } + //} + //outhtml << "
"; + + //if ((rtimes.size() > 0) && (rtimes[rtimes.size() - 1] > 0)) { + // outhtml << "RT: "; + // outhtml << std::fixed << std::setprecision(3); + // for (int i = 0; i < scanssize; i++) { + // if (i == 0) { + // outhtml << rtimes[scanidsvector[i] - 1]; + // continue; + // } + // if (i == scanssize - 1) { + // if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + // outhtml << "-"; + // } + // else { + // outhtml << ", "; + // } + // outhtml << rtimes[scanidsvector[i] - 1]; + // break; + // } + // if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + // if (scanidsvector[i] + 1 != scanidsvector[i + 1]) { + // outhtml << "-" << rtimes[scanidsvector[i] - 1]; + // } + // } + // else { + // outhtml << ", " << rtimes[scanidsvector[i] - 1]; + // } + // } + // outhtml << "
"; + //} + + outhtml << "Names: " << "
"; + for (auto& it2 : namesmap[tmpstr]) { + outhtml << it2 << "
"; + } + outhtml << "
"; + } + } + + } + + } + + //ofstream of("out.sh"); + //for (auto& it : allcids) { + // of << "wget https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/" << it << "/xml -O " << it << ".xml" << endl; + //} + + QThreadPool::globalInstance()->setMaxThreadCount(maxthreadsbackup); + + if (writelog) { + pchemlog.close(); + } + + //resetFilter(); + + prepareToShow(parameters, listoftheoreticalspectra, activefileid); + + emit filterSummaryTable(); + + pubchemsearchwidget->setHTML(outhtml.str()); + } + + pubchemsearchwidget->show(); + pubchemsearchwidget->activateWindow(); + if (pubchemsearchwidget->isMinimized()) { + pubchemsearchwidget->showNormal(); + } +} diff --git a/CycloBranch/gui/cMultipleDatasetsTableWidget.h b/CycloBranch/gui/cMultipleDatasetsTableWidget.h new file mode 100644 index 0000000..f539660 --- /dev/null +++ b/CycloBranch/gui/cMultipleDatasetsTableWidget.h @@ -0,0 +1,332 @@ +/** + \file cMultipleDatasetsTableWidget.h + \brief Aggregated results from multiple datasets. +*/ + + +#ifndef _CMULTIPLEDATASETSTABLEWIDGET_H +#define _CMULTIPLEDATASETSTABLEWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "core/utilities.h" +#include "core/cGlobalPreferences.h" +#include "gui/cMultipleDatasetsTableProxyModel.h" +#include "gui/cPubChemSearchWidget.h" +#include "gui/cEventFilter.h" +#include "gui/cChromatogramWindowWidget.h" +#include "gui/cDefineCalibrationWidget.h" +#include "gui/cCalibrationChart.h" + + +// forward declarations +class cParameters; +class cTheoreticalSpectrumList; +class QVBoxLayout; +class QMenuBar; +class QMenu; + + +/** + \brief Calculate parameter a of a line. + \param x input vector of x-coordinates + \param y input vector of y-coordinates + \param a output value a +*/ +void calculateLineParameterA(vector& x, vector& y, double& a); + + +/** + \brief Calculate parameters a and b of a line. + \param x input vector of x-coordinates + \param y input vector of y-coordinates + \param a output value a + \param b output value b +*/ +void calculateLineParameters(vector& x, vector& y, double& a, double& b); + + +/** + \brief Calculate parameters a and b of a line. + \param x input vector of x-coordinates + \param y input vector of y-coordinates + \param iterations number of iterations + \param a output value a + \param b output value b +*/ +void calculateLineParametersWithIterations(vector& x, vector& y, int iterations, double& a, double& b); + + +/** + \brief Aggregated results from multiple datasets. +*/ +class cMultipleDatasetsTableWidget : public QMainWindow { + + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param globalpreferences global preferences of the application + \param parent pointer to a parent widget + */ + cMultipleDatasetsTableWidget(cGlobalPreferences* globalpreferences, QWidget* parent = (QWidget *)0); + + + /** + \brief The destructor. + */ + ~cMultipleDatasetsTableWidget(); + + + /** + \brief Handle the window close event. + \param event pointer to QCloseEvent + */ + void closeEvent(QCloseEvent *event); + + + /** + \brief Prepare the widget to show. + \param parameters parameters of the application + \param listoftheoreticalspectra lists of theoretical spectra + \param activefileid id of the active file + \retval bool true if the table was successfully prepared, false otherwise + */ + bool prepareToShow(cParameters* parameters, cTheoreticalSpectrumList* listoftheoreticalspectra, int activefileid); + + + /** + \brief Update the table if attributes were changed. + */ + void updateTable(); + + + /** + \brief Reset the compound standard. + */ + void resetStandard(); + + + /** + \brief Update the list of compound standards. + */ + void updateListofStandards(); + + + /** + \brief Delete the table content. + */ + void deleteTable(); + + + /** + \brief Apply new global preferences. + \param globalpreferences global preferences of the application + */ + void applyGlobalPreferences(cGlobalPreferences* globalpreferences); + + + /** + \brief Get the reference to cPubChemSearchWidget. + \retval cPubChemSearchWidget reference to cPubChemSearchWidget + */ + cPubChemSearchWidget* getPubChemSearchWidget(); + + + /** + \brief Get the reference to cDefineCalibrationWidget. + \retval cDefineCalibrationWidget reference to cDefineCalibrationWidget + */ + cDefineCalibrationWidget* getDefineCalibrationWidget(); + + + /** + \brief Get the reference to cCalibrationChart widget. + \retval cCalibrationChart reference to cCalibrationChart + */ + cCalibrationChart* getCalibrationChartWidget(); + + +private: + + QString title; + + cGlobalPreferences* globalpreferences; + QWidget* parent; + + cParameters* parameters; + cTheoreticalSpectrumList* listoftheoreticalspectra; + + cPubChemSearchWidget* pubchemsearchwidget; + cDefineCalibrationWidget* definecalibrationwidget; + cCalibrationChart* calibrationchartwidget; + + QMenuBar* menuBar; + QMenu* menuFile; + QMenu* menuSearch; + QMenu* menuHelp; + + QToolBar* toolbarFile; + QAction* actionExportCSV; + QAction* actionExportDatabase; + QAction* actionCloseWindow; + + QToolBar* toolbarView; + + QToolBar* toolbarCalibration; + + QToolBar* toolbarSearch; + QAction* actionSearchPubChem; + + QToolBar* toolbarHelp; + QAction* actionHTMLDocumentation; + + QLabel* datatypelabel; + QComboBox* comboboxdatatype; + QHBoxLayout* datatypehboxlayout; + QWidget* datatypewidget; + + QLabel* peakshapelabel; + QComboBox* comboboxpeakshape; + QHBoxLayout* peakshapehboxlayout; + QWidget* peakshapewidget; + + QLabel* standardlabel; + QComboBox* comboboxstandard; + QHBoxLayout* standardhboxlayout; + QWidget* standardwidget; + + QLabel* calibrationlabely; + QDoubleSpinBox* calibrationspinboxa; + QLabel* calibrationlabelx; + QDoubleSpinBox* calibrationspinboxb; + QPushButton* calibrationsetbutton; + QPushButton* calibrationdefinebutton; + QPushButton* calibrationviewbutton; + QHBoxLayout* calibrationhboxlayout; + QWidget* calibrationwidget; + + QTableView* database; + QStandardItemModel* databasemodel; + cMultipleDatasetsTableProxyModel* proxymodel; + QVBoxLayout* mainlayout; + QWidget* mainwidget; + + QString lastdirexporttocsv; + QString lastdirexportdatabase; + + map > > identifieditems; + map > > identifieditemswithmultimap; + + int activefileid; + int datatypeview; + int peakshape; + int standard; + double calibrationa; + double calibrationb; + int systemcolumns; + + void getEICFromMultiMap(int datafileid, multimap >& compoundmultimap, cPeaksList& eicchromatogram, bool highestpeaks); + + +protected: + + + /** + \brief Handle a key press event. + \param event pointer to QKeyEvent + */ + void keyPressEvent(QKeyEvent *event); + + +private slots: + + void closeWindow(); + + + void exportToCsv(); + + + void exportToDatabase(); + + + void dataTypeViewChanged(int index); + + + void peakShapeChanged(int index); + + + void standardChanged(int index); + + + void calibrationSetButtonReleased(); + + + void calibrationDefineButtonReleased(); + + + void calibrationViewButtonReleased(); + + + void calibrationCurveRedefined(); + + + void showHTMLDocumentation(); + + + void rowClicked(const QModelIndex& item); + + + void searchPubChem(); + + +signals: + + + /** + \brief The table was not generated because the process was cancelled. + */ + void tableCancelled(); + + + /** + \brief Update chromatogram via summary table of matched peaks. + */ + void filterSummaryTable(); + + + /** + \brief Process a row click event. + \param datasetid id of a dataset + \param spectrumid id of a spectrum + \param peakid id of a peak + \param datatypeview type of data shown + \param peakshape type of chromatographic peak + \param name compound name + \param iontype ion type + \param mzstr theoretical m/z value converted to a string + */ + void multipleDatasetsTableRowClicked(int datasetid, int spectrumid, int peakid, int datatypeview, int peakshape, string name, string iontype, string mzstr); + +}; + +#endif + diff --git a/CycloBranch/gui/cNeutralLossesListWidget.cpp b/CycloBranch/gui/cNeutralLossesListWidget.cpp index d17be24..4c0711e 100644 --- a/CycloBranch/gui/cNeutralLossesListWidget.cpp +++ b/CycloBranch/gui/cNeutralLossesListWidget.cpp @@ -6,7 +6,9 @@ #include -cNeutralLossesListWidget::cNeutralLossesListWidget(QObject* parent) { +cNeutralLossesListWidget::cNeutralLossesListWidget(bool showdefaultbutton, bool showhconbutton, QObject* parent) { + this->showdefaultbutton = showdefaultbutton; + this->showhconbutton = showhconbutton; this->parent = parent; vbox1 = new QVBoxLayout(); @@ -26,10 +28,14 @@ cNeutralLossesListWidget::cNeutralLossesListWidget(QObject* parent) { addbutton->setToolTip("Add a new item."); removebutton = new QPushButton("Remove"); removebutton->setToolTip("Remove selected items."); - defaultbutton = new QPushButton("Default"); - defaultbutton->setToolTip("Set default items."); - hconbutton = new QPushButton("HCON"); - hconbutton->setToolTip("Set the default chemical elements H, C, O, N, S, and P."); + if (showdefaultbutton) { + defaultbutton = new QPushButton("Default"); + defaultbutton->setToolTip("Set a list of default neutral losses."); + } + if (showhconbutton) { + hconbutton = new QPushButton("HCON"); + hconbutton->setToolTip("Set a list of default chemical elements (H, C, O, N, S, and P)."); + } vbox1->addWidget(list); vbox1->addStretch(1); @@ -38,8 +44,12 @@ cNeutralLossesListWidget::cNeutralLossesListWidget(QObject* parent) { vbox2->addWidget(clearallbutton); vbox2->addWidget(addbutton); vbox2->addWidget(removebutton); - vbox2->addWidget(defaultbutton); - vbox2->addWidget(hconbutton); + if (showdefaultbutton) { + vbox2->addWidget(defaultbutton); + } + if (showhconbutton) { + vbox2->addWidget(hconbutton); + } vbox2->addStretch(1); hbox->setMargin(0); @@ -50,12 +60,21 @@ cNeutralLossesListWidget::cNeutralLossesListWidget(QObject* parent) { connect(clearallbutton, SIGNAL(released()), this, SLOT(clearAllItems())); connect(addbutton, SIGNAL(released()), this, SLOT(addEmptyItem())); connect(removebutton, SIGNAL(released()), this, SLOT(removeItem())); - connect(defaultbutton, SIGNAL(released()), this, SLOT(setDefaultItems())); - connect(hconbutton, SIGNAL(released()), this, SLOT(setHCON())); + if (showdefaultbutton) { + connect(defaultbutton, SIGNAL(released()), this, SLOT(setDefaultItems())); + } + if (showhconbutton) { + connect(hconbutton, SIGNAL(released()), this, SLOT(setHCON())); + } setLayout(hbox); - setDefaultItems(); + if (showdefaultbutton) { + setDefaultItems(); + } + else { + setHCON(); + } } @@ -65,8 +84,12 @@ cNeutralLossesListWidget::~cNeutralLossesListWidget() { delete clearallbutton; delete addbutton; delete removebutton; - delete defaultbutton; - delete hconbutton; + if (showdefaultbutton) { + delete defaultbutton; + } + if (showhconbutton) { + delete hconbutton; + } delete vbox1; delete vbox2; @@ -101,7 +124,12 @@ void cNeutralLossesListWidget::clearAllItems() { void cNeutralLossesListWidget::addEmptyItem() { - addItem("type a formula here"); + if (showdefaultbutton) { + addItem("type a formula here"); + } + else { + addItem("type an element here"); + } list->setCurrentRow(list->count() - 1); QListWidgetItem* item = list->item(list->count() - 1); list->editItem(item); diff --git a/CycloBranch/gui/cNeutralLossesListWidget.h b/CycloBranch/gui/cNeutralLossesListWidget.h index 3c9ff6e..31ef224 100644 --- a/CycloBranch/gui/cNeutralLossesListWidget.h +++ b/CycloBranch/gui/cNeutralLossesListWidget.h @@ -31,9 +31,11 @@ class cNeutralLossesListWidget : public QWidget /** \brief The constructor. + \param showdefaultbutton if true, the default button is shown + \param showhconbutton if true, the HCON button is shown \param parent pointer to a parent widget */ - cNeutralLossesListWidget(QObject* parent); + cNeutralLossesListWidget(bool showdefaultbutton, bool showhconbutton, QObject* parent); /** @@ -59,6 +61,9 @@ class cNeutralLossesListWidget : public QWidget private: QObject* parent; + bool showdefaultbutton; + bool showhconbutton; + QListWidget* list; QPushButton* selectallbutton; QPushButton* clearallbutton; diff --git a/CycloBranch/gui/cParametersWidget.cpp b/CycloBranch/gui/cParametersWidget.cpp index 1b49954..d1a4414 100644 --- a/CycloBranch/gui/cParametersWidget.cpp +++ b/CycloBranch/gui/cParametersWidget.cpp @@ -24,13 +24,21 @@ #include #include +// C++17 begin +#if OS_TYPE == WIN + #include +#endif +// C++17 end + cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWidget* parent) { + hideunusedparameters = true; + this->globalpreferences = globalpreferences; this->parent = parent; - int leftdefaultwidth = 400; - int rightdefaultwidth = 400; + int leftdefaultwidth = 420; + int rightdefaultwidth = 420; int searchedsequencedefaultwidth = 510; int checkboxfieldwidth = 80; @@ -120,11 +128,11 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid useprofiledata->setToolTip("Use profile data (if applicable)."); peaklistbutton = new QPushButton("Select"); #if OS_TYPE != WIN - peaklistline->setToolTip("Select a file. Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists)."); - peaklistbutton->setToolTip("Select a file. Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists)."); + peaklistline->setToolTip("Select input file(s). Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists)."); + peaklistbutton->setToolTip("Select input file(s). Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists)."); #else - peaklistline->setToolTip("Select a file. Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists),\nbaf (profile spectra),\nraw (profile spectra or peaklists),\ndat (peaklists),\nmis (deprecated),\nser (deprecated)."); - peaklistbutton->setToolTip("Select a file. Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists),\nbaf (profile spectra),\nraw (profile spectra or peaklists),\ndat (peaklists),\nmis (deprecated),\nser (deprecated)."); + peaklistline->setToolTip("Select input file(s). Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists),\nbaf (profile spectra),\nraw (profile spectra or peaklists),\ndat (peaklists),\nmis (deprecated),\nser (deprecated)."); + peaklistbutton->setToolTip("Select input file(s). Supported file formats:\ntxt (peaklists),\nmgf (peaklists),\nmzML (profile spectra or peaklists),\nmzXML (peaklists),\nimzML (profile spectra or peaklists),\nbaf (profile spectra),\nraw (profile spectra or peaklists),\ndat (peaklists),\nmis (deprecated),\nser (deprecated)."); #endif peaklistbutton->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P)); peaklistlayout = new QHBoxLayout(); @@ -241,6 +249,31 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid experimentalspectragridlayout->addWidget(mzratiolabel, 10, 0); experimentalspectragridlayout->addWidget(mzratiowidget, 10, 1); + minimumrt = new QDoubleSpinBox(); + minimumrt->setToolTip("Enter the minimum retention time (0 = disabled). Units depend on your input file. Seconds or minutes can be used."); + minimumrt->setDecimals(3); + minimumrt->setRange(0, 100000); + minimumrt->setSingleStep(1); + minimumrt->setPrefix("minimum: "); + + maximumrt = new QDoubleSpinBox(); + maximumrt->setToolTip("Enter the maximum retention time (0 = disabled). Units depend on your input file. Seconds or minutes can be used."); + maximumrt->setDecimals(3); + maximumrt->setRange(0, 100000); + maximumrt->setSingleStep(1); + maximumrt->setPrefix("maximum: "); + + rtlayout = new QHBoxLayout(); + rtlayout->addWidget(minimumrt); + rtlayout->addWidget(maximumrt); + rtlayout->setMargin(0); + rtwidget = new QWidget(); + rtwidget->setLayout(rtlayout); + rtwidget->setFixedWidth(leftdefaultwidth); + rtlabel = new QLabel("Retention Time:"); + experimentalspectragridlayout->addWidget(rtlabel, 11, 0); + experimentalspectragridlayout->addWidget(rtwidget, 11, 1); + fwhm = new QDoubleSpinBox(); fwhm->setToolTip("Full width at half maximum. The value is used if the profile spectra are converted into peaklists (mzML and imzML) and if the full isotope patterns of compounds are generated."); fwhm->setDecimals(6); @@ -249,8 +282,35 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid fwhm->setSuffix(" Da"); fwhm->setFixedWidth(leftdefaultwidth); fwhmlabel = new QLabel("FWHM:"); - experimentalspectragridlayout->addWidget(fwhmlabel, 11, 0); - experimentalspectragridlayout->addWidget(fwhm, 11, 1); + experimentalspectragridlayout->addWidget(fwhmlabel, 12, 0); + experimentalspectragridlayout->addWidget(fwhm, 12, 1); + + minratio54Fe56Fe = new QDoubleSpinBox(); + minratio54Fe56Fe->setToolTip("Enter the minimum intensity ratio of 54Fe/56Fe."); + minratio54Fe56Fe->setDecimals(3); + minratio54Fe56Fe->setRange(0, 1); + minratio54Fe56Fe->setSingleStep(0.01); + minratio54Fe56Fe->setValue(0.01); + minratio54Fe56Fe->setPrefix("minimum: "); + + maxratio54Fe56Fe = new QDoubleSpinBox(); + maxratio54Fe56Fe->setToolTip("Enter the maximum intensity ratio of 54Fe/56Fe."); + maxratio54Fe56Fe->setDecimals(3); + maxratio54Fe56Fe->setRange(0, 1); + maxratio54Fe56Fe->setSingleStep(0.01); + maxratio54Fe56Fe->setValue(0.1); + maxratio54Fe56Fe->setPrefix("maximum: "); + + ratio54Fe56Felayout = new QHBoxLayout(); + ratio54Fe56Felayout->addWidget(minratio54Fe56Fe); + ratio54Fe56Felayout->addWidget(maxratio54Fe56Fe); + ratio54Fe56Felayout->setMargin(0); + ratio54Fe56Fewidget = new QWidget(); + ratio54Fe56Fewidget->setLayout(ratio54Fe56Felayout); + ratio54Fe56Fewidget->setFixedWidth(leftdefaultwidth); + ratio54Fe56Felabel = new QLabel("54Fe/56Fe Ratio:"); + experimentalspectragridlayout->addWidget(ratio54Fe56Felabel, 13, 0); + experimentalspectragridlayout->addWidget(ratio54Fe56Fewidget, 13, 1); experimentalspectragroupbox = new QGroupBox("Experimental Spectrum/Spectra"); experimentalspectragroupbox->setLayout(experimentalspectragridlayout); @@ -449,22 +509,38 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid theoreticalspectragridlayout->addWidget(iontypeslabel, 4, 0); theoreticalspectragridlayout->addWidget(iontypes, 4, 1); - neutrallosstypes = new cNeutralLossesListWidget(this); - neutrallosstypes->setToolTip("Define and select the types of neutral losses or chemical elements which will be used when generating theoretical spectra."); + neutrallosstypes = new cNeutralLossesListWidget(true, true, this); + neutrallosstypes->setToolTip("Define and select the types of neutral losses."); neutrallosstypes->setFixedWidth(rightdefaultwidth); - neutrallosstypeslabel = new QLabel("Neutral Losses / Chemical Elements:"); + neutrallosstypeslabel = new QLabel("Neutral Losses:"); theoreticalspectragridlayout->addWidget(neutrallosstypeslabel, 5, 0); theoreticalspectragridlayout->addWidget(neutrallosstypes, 5, 1); maximumcombinedlosses = new QSpinBox(); - maximumcombinedlosses->setToolTip("Maximum number of combined neutral losses or chemical elements."); + maximumcombinedlosses->setToolTip("Maximum number of combined neutral losses."); maximumcombinedlosses->setRange(0, 10000); maximumcombinedlosses->setSingleStep(1); maximumcombinedlosses->setFixedWidth(rightdefaultwidth); - maximumcombinedlosseslabel = new QLabel("Maximum Number of Combined Losses/Elements:"); + maximumcombinedlosseslabel = new QLabel("Maximum Number of Combined Losses:"); theoreticalspectragridlayout->addWidget(maximumcombinedlosseslabel, 6, 0); theoreticalspectragridlayout->addWidget(maximumcombinedlosses, 6, 1); + elementstypes = new cNeutralLossesListWidget(false, true, this); + elementstypes->setToolTip("Define and select chemical elements."); + elementstypes->setFixedWidth(rightdefaultwidth); + elementstypeslabel = new QLabel("Chemical Elements:"); + theoreticalspectragridlayout->addWidget(elementstypeslabel, 7, 0); + theoreticalspectragridlayout->addWidget(elementstypes, 7, 1); + + maximumcombinedelements = new QSpinBox(); + maximumcombinedelements->setToolTip("Maximum number of combined chemical elements."); + maximumcombinedelements->setRange(0, 10000); + maximumcombinedelements->setSingleStep(1); + maximumcombinedelements->setFixedWidth(rightdefaultwidth); + maximumcombinedelementslabel = new QLabel("Maximum Number of Combined Elements:"); + theoreticalspectragridlayout->addWidget(maximumcombinedelementslabel, 8, 0); + theoreticalspectragridlayout->addWidget(maximumcombinedelements, 8, 1); + //clearhitswithoutparent = new QCheckBox(); //clearhitswithoutparent->setToolTip("If checked, a peak is not matched if the corresponding parent peak is not matched (e.g., a dehydrated b-ion is not matched if corresponding b-ion is not matched)."); //theoreticalspectraformlayout->addRow(tr("Remove Hits of Fragments without Hits of Parent Fragments: "), clearhitswithoutparent); @@ -473,16 +549,16 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid reportunmatchedtheoreticalpeaks->setToolTip("If checked, all unmatched theoretical peaks are reported.\nIf unchecked, unmatched theoretical peaks are reported only if a corresponding isotope pattern has been matched.\nThis feature may spend a lot of main memory, keep it disabled if possible."); reportunmatchedtheoreticalpeaks->setFixedWidth(rightdefaultwidth); reportunmatchedtheoreticalpeakslabel = new QLabel("Report Unmatched Theoretical Peaks:"); - theoreticalspectragridlayout->addWidget(reportunmatchedtheoreticalpeakslabel, 7, 0); - theoreticalspectragridlayout->addWidget(reportunmatchedtheoreticalpeaks, 7, 1); + theoreticalspectragridlayout->addWidget(reportunmatchedtheoreticalpeakslabel, 9, 0); + theoreticalspectragridlayout->addWidget(reportunmatchedtheoreticalpeaks, 9, 1); generateisotopepattern = new QCheckBox(); generateisotopepattern->setChecked(true); generateisotopepattern->setToolTip("The full isotope patterns of compounds are generated in theoretical spectra.\nThe FWHM value is used for this purpose. If checked, the deisotoping is disabled automatically."); generateisotopepattern->setFixedWidth(rightdefaultwidth); generateisotopepatternlabel = new QLabel("Generate Full Isotope Patterns:"); - theoreticalspectragridlayout->addWidget(generateisotopepatternlabel, 8, 0); - theoreticalspectragridlayout->addWidget(generateisotopepattern, 8, 1); + theoreticalspectragridlayout->addWidget(generateisotopepatternlabel, 10, 0); + theoreticalspectragridlayout->addWidget(generateisotopepattern, 10, 1); minimumpatternsize = new QSpinBox(); minimumpatternsize->setToolTip("The minimum number of peaks which must be annotated in an isotopic pattern. The option \"Generate Full Isotope Patterns\" must be enabled."); @@ -490,8 +566,8 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid minimumpatternsize->setSingleStep(1); minimumpatternsize->setFixedWidth(rightdefaultwidth); minimumpatternsizelabel = new QLabel("Minimum Number of Isotopic Peaks:"); - theoreticalspectragridlayout->addWidget(minimumpatternsizelabel, 9, 0); - theoreticalspectragridlayout->addWidget(minimumpatternsize, 9, 1); + theoreticalspectragridlayout->addWidget(minimumpatternsizelabel, 11, 0); + theoreticalspectragridlayout->addWidget(minimumpatternsize, 11, 1); minimumfeaturesize = new QSpinBox(); minimumfeaturesize->setToolTip("The minimum number of spectra in which a compound must be identified to be reported.\nLC-MS data = the minimum number of consecutive scans;\nMSI data = the minimum number of pixels."); @@ -499,8 +575,8 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid minimumfeaturesize->setSingleStep(1); minimumfeaturesize->setFixedWidth(rightdefaultwidth); minimumfeaturesizelabel = new QLabel("Minimum Number of Spectra:"); - theoreticalspectragridlayout->addWidget(minimumfeaturesizelabel, 10, 0); - theoreticalspectragridlayout->addWidget(minimumfeaturesize, 10, 1); + theoreticalspectragridlayout->addWidget(minimumfeaturesizelabel, 12, 0); + theoreticalspectragridlayout->addWidget(minimumfeaturesize, 12, 1); minimumiontypes = new QSpinBox(); minimumiontypes->setToolTip("The minimum number of ion types which must be matched to report a given compound."); @@ -508,51 +584,83 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid minimumiontypes->setSingleStep(1); minimumiontypes->setFixedWidth(rightdefaultwidth); minimumiontypeslabel = new QLabel("Minimum Number of Ion Types:"); - theoreticalspectragridlayout->addWidget(minimumiontypeslabel, 11, 0); - theoreticalspectragridlayout->addWidget(minimumiontypes, 11, 1); + theoreticalspectragridlayout->addWidget(minimumiontypeslabel, 13, 0); + theoreticalspectragridlayout->addWidget(minimumiontypes, 13, 1); basicformulacheck = new QCheckBox(); basicformulacheck->setToolTip("Apply Senior's filtering rules."); basicformulacheck->setFixedWidth(rightdefaultwidth); basicformulachecklabel = new QLabel("Basic Formula Check:"); - theoreticalspectragridlayout->addWidget(basicformulachecklabel, 12, 0); - theoreticalspectragridlayout->addWidget(basicformulacheck, 12, 1); + theoreticalspectragridlayout->addWidget(basicformulachecklabel, 14, 0); + theoreticalspectragridlayout->addWidget(basicformulacheck, 14, 1); advancedformulacheck = new QCheckBox(); advancedformulacheck->setToolTip("Apply advanced filtering rules if molecular formulas of compounds are generated."); advancedformulacheck->setFixedWidth(rightdefaultwidth); advancedformulachecklabel = new QLabel("Advanced Formula Check:"); - theoreticalspectragridlayout->addWidget(advancedformulachecklabel, 13, 0); - theoreticalspectragridlayout->addWidget(advancedformulacheck, 13, 1); + theoreticalspectragridlayout->addWidget(advancedformulachecklabel, 15, 0); + theoreticalspectragridlayout->addWidget(advancedformulacheck, 15, 1); noratiocheck = new QCheckBox(); noratiocheck->setToolTip("Check if the number of nitrogen atoms is less or equal to the number of oxygen atoms."); noratiocheck->setFixedWidth(rightdefaultwidth); noratiochecklabel = new QLabel("N/O Ratio Check:"); - theoreticalspectragridlayout->addWidget(noratiochecklabel, 14, 0); - theoreticalspectragridlayout->addWidget(noratiocheck, 14, 1); + theoreticalspectragridlayout->addWidget(noratiochecklabel, 16, 0); + theoreticalspectragridlayout->addWidget(noratiocheck, 16, 1); + + calculatefdrs = new QCheckBox(); + calculatefdrs->setToolTip("Calculate false discovery rates (experimental feature)."); + calculatefdrs->setFixedWidth(rightdefaultwidth); + calculatefdrslabel = new QLabel("Calculate FDRs:"); + theoreticalspectragridlayout->addWidget(calculatefdrslabel, 17, 0); + theoreticalspectragridlayout->addWidget(calculatefdrs, 17, 1); + + minimumannotationintensityrelative = new QDoubleSpinBox(); + minimumannotationintensityrelative->setToolTip("Enter the minimum relative intensity of the most intense peak in an isotopic pattern. Isotopic patterns with relative intensities below this value will be kept in the spectrum but not annotated."); + minimumannotationintensityrelative->setDecimals(3); + minimumannotationintensityrelative->setRange(0, 100); + minimumannotationintensityrelative->setSingleStep(1); + minimumannotationintensityrelative->setPrefix("relative: "); + minimumannotationintensityrelative->setSuffix(" %"); + + minimumannotationintensityabsolute = new QSpinBox(); + minimumannotationintensityabsolute->setToolTip("Enter the minimum absolute intensity of the most intense peak in an isotopic pattern. Isotopic patterns with absolute intensities below this value will be kept in the spectrum but not annotated."); + minimumannotationintensityabsolute->setRange(0, INT32_MAX); + minimumannotationintensityabsolute->setSingleStep(100); + minimumannotationintensityabsolute->setPrefix("absolute: "); + + minimumannotationintensitylayout = new QHBoxLayout(); + minimumannotationintensitylayout->addWidget(minimumannotationintensityrelative); + minimumannotationintensitylayout->addWidget(minimumannotationintensityabsolute); + minimumannotationintensitylayout->setMargin(0); + minimumannotationintensitywidget = new QWidget(); + minimumannotationintensitywidget->setLayout(minimumannotationintensitylayout); + minimumannotationintensitywidget->setFixedWidth(rightdefaultwidth); + minimumannotationintensitylabel = new QLabel("Minimum Intensity of Highest Peak in Isotopic Pattern:"); + theoreticalspectragridlayout->addWidget(minimumannotationintensitylabel, 18, 0); + theoreticalspectragridlayout->addWidget(minimumannotationintensitywidget, 18, 1); mzdifftolerance = new QDoubleSpinBox(); - mzdifftolerance->setToolTip("The maximum m/z error of difference between an isotopic peak and the monoisotopic peak in an experimental and theoretical isotopic pattern (0 = disabled) [ppm]."); + mzdifftolerance->setToolTip("The maximum m/z error of difference between an isotopic peak and the most intense peak in an experimental and theoretical isotopic pattern (0 = disabled) [ppm]."); mzdifftolerance->setDecimals(3); mzdifftolerance->setRange(0, 10000); mzdifftolerance->setSingleStep(1); mzdifftolerance->setSuffix(" ppm"); mzdifftolerance->setFixedWidth(rightdefaultwidth); mzdifftolerancelabel = new QLabel("Isotope m/z Tolerance:"); - theoreticalspectragridlayout->addWidget(mzdifftolerancelabel, 15, 0); - theoreticalspectragridlayout->addWidget(mzdifftolerance, 15, 1); + theoreticalspectragridlayout->addWidget(mzdifftolerancelabel, 19, 0); + theoreticalspectragridlayout->addWidget(mzdifftolerance, 19, 1); intensitytolerance = new QDoubleSpinBox(); - intensitytolerance->setToolTip("The maximum error tolerance of intensities of matched isotopes (0 = disabled) [in % of relative intensity of monoisotopic peak].\nExample:\nIsotope Intensity Tolerance = 10%, Relative Intensity of Monoisotopic Peak = 100% => the tolerance of relative intensities of isotopes is 10%;\nIsotope Intensity Tolerance = 10%, Relative Intensity of Monoisotopic Peak = 50% => the tolerance of relative intensities of isotopes is 5%; etc."); + intensitytolerance->setToolTip("The maximum error tolerance of intensities of matched isotopes (0 = disabled) [in % of relative intensity of the most intense peak].\nExample:\nIsotope Intensity Tolerance = 10%, Relative Intensity of the Most Intense Peak = 100% => the tolerance of relative intensities of isotopes is 10%;\nIsotope Intensity Tolerance = 10%, Relative Intensity of the Most Intense Peak = 50% => the tolerance of relative intensities of isotopes is 5%; etc."); intensitytolerance->setDecimals(3); intensitytolerance->setRange(0, 100); intensitytolerance->setSingleStep(1); intensitytolerance->setSuffix(" %"); intensitytolerance->setFixedWidth(rightdefaultwidth); intensitytolerancelabel = new QLabel("Isotope Intensity Tolerance:"); - theoreticalspectragridlayout->addWidget(intensitytolerancelabel, 16, 0); - theoreticalspectragridlayout->addWidget(intensitytolerance, 16, 1); + theoreticalspectragridlayout->addWidget(intensitytolerancelabel, 20, 0); + theoreticalspectragridlayout->addWidget(intensitytolerance, 20, 1); theoreticalspectragroupbox = new QGroupBox("Theoretical Spectrum/Spectra"); theoreticalspectragroupbox->setLayout(theoreticalspectragridlayout); @@ -618,10 +726,16 @@ cParametersWidget::cParametersWidget(cGlobalPreferences* globalpreferences, QWid vlayout1->addWidget(experimentalspectragroupbox); vlayout1->addWidget(brickdatabasegroupbox); vlayout1->addWidget(miscgroupbox); + if (hideunusedparameters) { + vlayout1->addStretch(1); + } vlayout2 = new QVBoxLayout(); vlayout2->addWidget(theoreticalspectragroupbox); vlayout2->addWidget(searchedsequencegroupbox); + if (hideunusedparameters) { + vlayout2->addStretch(1); + } hlayout = new QHBoxLayout(); hlayout->setContentsMargins(0, 0, 0, 0); @@ -717,8 +831,18 @@ cParametersWidget::~cParametersWidget() { delete maximummz; delete mzratiolayout; delete mzratiowidget; + delete rtlabel; + delete minimumrt; + delete maximumrt; + delete rtlayout; + delete rtwidget; delete fwhmlabel; delete fwhm; + delete ratio54Fe56Felabel; + delete minratio54Fe56Fe; + delete maxratio54Fe56Fe; + delete ratio54Fe56Felayout; + delete ratio54Fe56Fewidget; delete experimentalspectragridlayout; delete experimentalspectragroupbox; @@ -777,6 +901,10 @@ cParametersWidget::~cParametersWidget() { delete neutrallosstypes; delete maximumcombinedlosseslabel; delete maximumcombinedlosses; + delete elementstypeslabel; + delete elementstypes; + delete maximumcombinedelementslabel; + delete maximumcombinedelements; //delete clearhitswithoutparent; delete reportunmatchedtheoreticalpeakslabel; delete reportunmatchedtheoreticalpeaks; @@ -794,6 +922,13 @@ cParametersWidget::~cParametersWidget() { delete advancedformulacheck; delete noratiochecklabel; delete noratiocheck; + delete calculatefdrslabel; + delete calculatefdrs; + delete minimumannotationintensitylabel; + delete minimumannotationintensityrelative; + delete minimumannotationintensityabsolute; + delete minimumannotationintensitylayout; + delete minimumannotationintensitywidget; delete mzdifftolerancelabel; delete mzdifftolerance; delete intensitytolerancelabel; @@ -837,7 +972,7 @@ void cParametersWidget::setAndRestoreParameters(cParameters& parameters) { this->parameters = parameters; this->parameters.bricksdatabase.clear(); - this->parameters.peaklistseries.clear(); + this->parameters.peaklistseriesvector.clear(); this->parameters.fragmentionsfordenovograph.clear(); this->parameters.sequencetag = this->parameters.originalsequencetag; this->parameters.searchedsequence = this->parameters.originalsearchedsequence; @@ -959,7 +1094,11 @@ void cParametersWidget::loadSettings() { minimumabsoluteintensitythreshold->setValue(settings.value("minimumabsoluteintensitythreshold", 0).toUInt()); minimummz->setValue(settings.value("minimummz", 150).toDouble()); maximummz->setValue(settings.value("maximummz", 0).toDouble()); + minimumrt->setValue(settings.value("minimumrt", 0).toDouble()); + maximumrt->setValue(settings.value("maximumrt", 0).toDouble()); fwhm->setValue(settings.value("fwhm", 0.05).toDouble()); + minratio54Fe56Fe->setValue(settings.value("minratio54Fe56Fe", 0.01).toDouble()); + maxratio54Fe56Fe->setValue(settings.value("maxratio54Fe56Fe", 0.1).toDouble()); brickdatabaseline->setText(settings.value("brickdatabase", "").toString()); maximumbricksincombinationbegin->setValue(settings.value("maximumbricksincombinationbegin", 1).toInt()); @@ -1024,6 +1163,39 @@ void cParametersWidget::loadSettings() { } maximumcombinedlosses->setValue(settings.value("maximumcombinedlosses", 2).toInt()); + + elementstypes->getList()->clear(); + i = 0; + qloadstring = ("elementsformula_" + to_string(i)).c_str(); + while (settings.value(qloadstring, "XXX").toString().compare("XXX") != 0) { + elementstypes->addItem(settings.value(qloadstring).toString()); + + qloadstring = ("elementstype_" + to_string(i)).c_str(); + settings.value(qloadstring, 0).toInt() == 0 ? elementstypes->getList()->item(i)->setSelected(false) : elementstypes->getList()->item(i)->setSelected(true); + + i++; + qloadstring = ("elementsformula_" + to_string(i)).c_str(); + } + + maximumcombinedelements->setValue(settings.value("maximumcombinedelements", 200).toInt()); + + if ((eModeType)mode->currentIndex() == compoundsearch) { + if (!settings.contains("maximumcombinedelements")) { + elementstypes->getList()->clear(); + for (int i = 0; i < neutrallosstypes->getList()->count(); i++) { + elementstypes->getList()->addItem(neutrallosstypes->getList()->item(i)->text()); + if (neutrallosstypes->getList()->item(i)->isSelected()) { + elementstypes->getList()->item(i)->setSelected(true); + } + } + + maximumcombinedelements->setValue(maximumcombinedlosses->value()); + + neutrallosstypes->getList()->clear(); + maximumcombinedlosses->setValue(0); + } + } + //settings.value("clearhitswithoutparent", 0).toInt() == 0 ? clearhitswithoutparent->setChecked(false) : clearhitswithoutparent->setChecked(true); settings.value("reportunmatchedtheoreticalpeaks", 0).toInt() == 0 ? reportunmatchedtheoreticalpeaks->setChecked(false) : reportunmatchedtheoreticalpeaks->setChecked(true); settings.value("generateisotopepattern", 0).toInt() == 0 ? generateisotopepattern->setChecked(false) : generateisotopepattern->setChecked(true); @@ -1033,6 +1205,11 @@ void cParametersWidget::loadSettings() { settings.value("basicformulacheck", 1).toInt() == 0 ? basicformulacheck->setChecked(false) : basicformulacheck->setChecked(true); settings.value("advancedformulacheck", 1).toInt() == 0 ? advancedformulacheck->setChecked(false) : advancedformulacheck->setChecked(true); settings.value("noratiocheck", 1).toInt() == 0 ? noratiocheck->setChecked(false) : noratiocheck->setChecked(true); + settings.value("calculatefdrs", 1).toInt() == 0 ? calculatefdrs->setChecked(false) : calculatefdrs->setChecked(true); + + minimumannotationintensityrelative->setValue(settings.value("minimumannotationintensityrelative", 0).toDouble()); + minimumannotationintensityabsolute->setValue(settings.value("minimumannotationintensityabsolute", 0).toUInt()); + mzdifftolerance->setValue(settings.value("mzdifftolerance", 0).toDouble()); intensitytolerance->setValue(settings.value("intensitytolerance", 0).toDouble()); @@ -1074,7 +1251,11 @@ void cParametersWidget::saveSettings() { settings.setValue("minimumabsoluteintensitythreshold", minimumabsoluteintensitythreshold->value()); settings.setValue("minimummz", minimummz->value()); settings.setValue("maximummz", maximummz->value()); + settings.setValue("minimumrt", minimumrt->value()); + settings.setValue("maximumrt", maximumrt->value()); settings.setValue("fwhm", fwhm->value()); + settings.setValue("minratio54Fe56Fe", minratio54Fe56Fe->value()); + settings.setValue("maxratio54Fe56Fe", maxratio54Fe56Fe->value()); settings.setValue("brickdatabase", brickdatabaseline->text()); settings.setValue("maximumbricksincombinationbegin", maximumbricksincombinationbegin->value()); @@ -1122,6 +1303,17 @@ void cParametersWidget::saveSettings() { } settings.setValue("maximumcombinedlosses", maximumcombinedlosses->value()); + + for (int i = 0; i < elementstypes->getList()->count(); i++) { + qsavestring = ("elementstype_" + to_string(i)).c_str(); + elementstypes->getList()->item(i)->isSelected() ? settings.setValue(qsavestring, 1) : settings.setValue(qsavestring, 0); + + qsavestring = ("elementsformula_" + to_string(i)).c_str(); + settings.setValue(qsavestring, elementstypes->getList()->item(i)->text()); + } + + settings.setValue("maximumcombinedelements", maximumcombinedelements->value()); + //clearhitswithoutparent->isChecked() ? settings.setValue("clearhitswithoutparent", 1) : settings.setValue("clearhitswithoutparent", 0); reportunmatchedtheoreticalpeaks->isChecked() ? settings.setValue("reportunmatchedtheoreticalpeaks", 1) : settings.setValue("reportunmatchedtheoreticalpeaks", 0); generateisotopepattern->isChecked() ? settings.setValue("generateisotopepattern", 1) : settings.setValue("generateisotopepattern", 0); @@ -1131,6 +1323,11 @@ void cParametersWidget::saveSettings() { basicformulacheck->isChecked() ? settings.setValue("basicformulacheck", 1) : settings.setValue("basicformulacheck", 0); advancedformulacheck->isChecked() ? settings.setValue("advancedformulacheck", 1) : settings.setValue("advancedformulacheck", 0); noratiocheck->isChecked() ? settings.setValue("noratiocheck", 1) : settings.setValue("noratiocheck", 0); + calculatefdrs->isChecked() ? settings.setValue("calculatefdrs", 1) : settings.setValue("calculatefdrs", 0); + + settings.setValue("minimumannotationintensityrelative", minimumannotationintensityrelative->value()); + settings.setValue("minimumannotationintensityabsolute", minimumannotationintensityabsolute->value()); + settings.setValue("mzdifftolerance", mzdifftolerance->value()); settings.setValue("intensitytolerance", intensitytolerance->value()); @@ -1158,18 +1355,24 @@ void cParametersWidget::saveSettingsAs() { void cParametersWidget::peaklistButtonReleased() { QString currentdir = peaklistline->text(); + + size_t pos = currentdir.toStdString().find(';'); + if (pos != string::npos) { + currentdir = currentdir.toStdString().substr(0, pos).c_str(); + } + if (!checkFile(currentdir.toStdString())) { currentdir = defaultdirselectpeaklist; } #if OS_TYPE != WIN - QString filename = QFileDialog::getOpenFileName(this, tr("Select Peaklist..."), currentdir, tr("Peak Lists (*.txt *.mgf *.mzML *.mzXML *.imzML)")); + QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Select Peaklist(s)..."), currentdir, tr("Peaklists (*.txt *.mgf *.mzML *.mzXML *.imzML)")); #else - QString filename = QFileDialog::getOpenFileName(this, tr("Select Peaklist..."), currentdir, tr("Peak Lists (*.txt *.mgf *.mzML *.mzXML *.imzML *.baf *.raw *.dat *.mis ser)")); + QStringList filenames = QFileDialog::getOpenFileNames(this, tr("Select Peaklist(s)..."), currentdir, tr("Peaklists (*.txt *.mgf *.mzML *.mzXML *.imzML *.baf *.raw *.dat *.mis ser)")); #endif - if (!filename.isEmpty()) { - peaklistline->setText(filename); + if (!filenames.isEmpty()) { + peaklistline->setText(filenames.join(";")); } } @@ -1224,13 +1427,101 @@ bool cParametersWidget::updateParameters() { string tmpstring; string errmsg; - if (peaklistline->text().toStdString().compare("") == 0) { + QStringList multiplefiles = peaklistline->text().split(";"); + + if ((peaklistline->text().toStdString().compare("") == 0) || (multiplefiles.size() == 0)) { errstr = "A peaklist must be specified !"; msgBox.setText(errstr); msgBox.exec(); return false; } + // C++17 begin + #if OS_TYPE == WIN + QStringList tmpmultiplefiles; + + regex tmprx; + string tmppath; + + for (auto& it : multiplefiles) { + QFileInfo fileinfo(it); + if (fileinfo.exists()) { + if (fileinfo.isDir()) { + for (auto& p : filesystem::recursive_directory_iterator(it.toStdString())) { + tmppath = filesystem::absolute(p.path()).string(); + replace(tmppath.begin(), tmppath.end(), '\\', '/'); + + tmprx = "\\.[bB][aA][fF]$"; + if (regex_search(tmppath, tmprx)) { + tmpmultiplefiles.push_back(tmppath.c_str()); + } + + tmprx = "PEAKS.[rR][aA][wW]\\/\\_[fF][uU][nN][cC]001.[dD][aA][tT]$"; + if (!regex_search(tmppath, tmprx)) { + tmprx = "\\_[fF][uU][nN][cC]001.[dD][aA][tT]$"; + if (regex_search(tmppath, tmprx)) { + tmpmultiplefiles.push_back(tmppath.c_str()); + } + } + } + } + else { + tmpmultiplefiles.push_back(it); + } + } + else { + errstr = "The path '" + it + "' does not exist !"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + } + + multiplefiles = tmpmultiplefiles; + #endif + // C++17 end + + int msi = 0; + regex rx; + for (auto& it : multiplefiles) { + #if OS_TYPE == WIN + rx = "\\.[mM][iI][sS]$"; + // flexImaging File + if (regex_search(it.toStdString(), rx)) { + msi++; + } + #endif + + rx = "\\.[iI][mM][zZ][mM][lL]$"; + // imzML File + if (regex_search(it.toStdString(), rx)) { + msi++; + } + } + + if ((msi == multiplefiles.size()) && (multiplefiles.size() > 1)) { + errstr = "Please, select only one mass spectrometry imaging input file !"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + + if ((msi > 0) && (msi < multiplefiles.size()) && (multiplefiles.size() > 1)) { + errstr = "Please, do not mix conventional/LC-MS input files with mass spectrometry imaging files !"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + + if (((eModeType)mode->currentIndex() == denovoengine) || ((eModeType)mode->currentIndex() == databasesearch) || ((eModeType)mode->currentIndex() == singlecomparison)) { + if (multiplefiles.size() > 1) { + errstr = "Multiple files cannot be selected in this mode !"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + } + if ((brickdatabaseline->text().toStdString().compare("") == 0) && (((eModeType)mode->currentIndex() == denovoengine) || (((eModeType)mode->currentIndex() == databasesearch) && ((ePeptideType)peptidetype->currentIndex() != other)) || (((eModeType)mode->currentIndex() == singlecomparison) && ((ePeptideType)peptidetype->currentIndex() != other)))) { errstr = "A database of building blocks must be specified !"; msgBox.setText(errstr); @@ -1286,6 +1577,47 @@ bool cParametersWidget::updateParameters() { return false; } + if (((eModeType)mode->currentIndex() == compoundsearch) || ((eModeType)mode->currentIndex() == dereplication)) { + if ((minimumrt->value() != 0) && (maximumrt->value() != 0)) { + if (maximumrt->value() <= minimumrt->value()) { + regex rx; + bool lcms; + + for (auto& it : multiplefiles) { + lcms = true; + + rx = "\\.[iI][mM][zZ][mM][lL]$"; + // imzML File + if (regex_search(it.toStdString(), rx)) { + lcms = false; + } + + #if OS_TYPE == WIN + rx = "\\.[mM][iI][sS]$"; + // flexImaging File + if (regex_search(it.toStdString(), rx)) { + lcms = false; + } + #endif + + if (lcms) { + errstr = "The maximum retention time must be bigger than the minimum retention time !"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + } + } + } + + if (minratio54Fe56Fe->value() >= maxratio54Fe56Fe->value()) { + errstr = "The minimum ratio 54Fe/56Fe must be lower than the maximum ratio of 54Fe/56Fe !"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + } + if ((eModeType)mode->currentIndex() == denovoengine) { if ((ePeptideType)peptidetype->currentIndex() == other) { errstr = "The peptide type 'Other' cannot be used in this mode !"; @@ -1325,28 +1657,81 @@ bool cParametersWidget::updateParameters() { } */ - for (int i = 0; i < neutrallosstypes->getList()->count(); i++) { - tmpstring = neutrallosstypes->getList()->item(i)->text().toStdString(); - - if (tmpstring.rfind(':') != string::npos) { - tmpstring = tmpstring.substr(0, tmpstring.rfind(':')); - } - - tmpformula.setFormula(tmpstring, false); - if (!tmpformula.isValid(errmsg)) { - errstr = "A molecular formula of a neutral loss is not valid!\n\n"; - errstr += errmsg.c_str(); + if ((eModeType)mode->currentIndex() == compoundsearch) { + if (elementstypes->getList()->count() == 0) { + errstr = "The list of chemical elements is empty!"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + + if (maximumcombinedelements->value() == 0) { + errstr = "The maximum number of combined elements is zero (use e.g. 150 or 200)!"; + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + + bool somethingselected = false; + for (int i = 0; i < elementstypes->getList()->count(); i++) { + tmpstring = elementstypes->getList()->item(i)->text().toStdString(); + + if (tmpstring.rfind(':') != string::npos) { + tmpstring = tmpstring.substr(0, tmpstring.rfind(':')); + } + + tmpformula.setFormula(tmpstring, false); + if (!tmpformula.isValid(errmsg)) { + errstr = "A formula in the list of elements is not valid!\n\n"; + errstr += errmsg.c_str(); + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + + if (elementstypes->getList()->item(i)->isSelected()) { + somethingselected = true; + } + } + + if (!somethingselected) { + errstr = "Please, select some chemical elements!"; msgBox.setText(errstr); msgBox.exec(); return false; } } + else { + for (int i = 0; i < neutrallosstypes->getList()->count(); i++) { + tmpstring = neutrallosstypes->getList()->item(i)->text().toStdString(); + + if (tmpstring.rfind(':') != string::npos) { + tmpstring = tmpstring.substr(0, tmpstring.rfind(':')); + } + + tmpformula.setFormula(tmpstring, false); + if (!tmpformula.isValid(errmsg)) { + errstr = "A molecular formula of a neutral loss is not valid!\n\n"; + errstr += errmsg.c_str(); + msgBox.setText(errstr); + msgBox.exec(); + return false; + } + } + } parameters.mode = (eModeType)mode->currentIndex(); parameters.maximumnumberofthreads = maximumnumberofthreads->value(); parameters.peptidetype = (ePeptideType)peptidetype->currentIndex(); - parameters.peaklistfilename = peaklistline->text().toStdString(); + + parameters.peaklistfilenames.clear(); + for (auto& it : multiplefiles) { + parameters.peaklistfilenames.push_back(it.toStdString()); + } + + parameters.originalpeaklistfilenames = peaklistline->text().toStdString(); + parameters.useprofiledata = useprofiledata->isChecked(); parameters.scannumber = scannumber->value(); parameters.precursormass = precursormass->value(); @@ -1358,7 +1743,11 @@ bool cParametersWidget::updateParameters() { parameters.minimumabsoluteintensitythreshold = minimumabsoluteintensitythreshold->value(); parameters.minimummz = minimummz->value(); parameters.maximummz = maximummz->value(); + parameters.minimumrt = minimumrt->value(); + parameters.maximumrt = maximumrt->value(); parameters.fwhm = fwhm->value(); + parameters.minratio54Fe56Fe = minratio54Fe56Fe->value(); + parameters.maxratio54Fe56Fe = maxratio54Fe56Fe->value(); parameters.bricksdatabasefilename = brickdatabaseline->text().toStdString(); parameters.maximumbricksincombinationbegin = maximumbricksincombinationbegin->value(); @@ -1436,6 +1825,21 @@ bool cParametersWidget::updateParameters() { } parameters.maximumcombinedlosses = maximumcombinedlosses->value(); + + parameters.originalelementsdefinitions.clear(); + parameters.originalelementsfortheoreticalspectra.clear(); + neutralLoss element; + for (int i = 0; i < elementstypes->getList()->count(); i++) { + element.clear(); + element.summary = elementstypes->getList()->item(i)->text().toStdString(); + parameters.originalelementsdefinitions.push_back(element); + if (elementstypes->getList()->item(i)->isSelected()) { + parameters.originalelementsfortheoreticalspectra.push_back(i); + } + } + + parameters.maximumcombinedelements = maximumcombinedelements->value(); + //parameters.clearhitswithoutparent = clearhitswithoutparent->isChecked(); parameters.reportunmatchedtheoreticalpeaks = reportunmatchedtheoreticalpeaks->isChecked(); parameters.generateisotopepattern = generateisotopepattern->isChecked(); @@ -1445,6 +1849,11 @@ bool cParametersWidget::updateParameters() { parameters.basicformulacheck = basicformulacheck->isChecked(); parameters.advancedformulacheck = advancedformulacheck->isChecked(); parameters.noratiocheck = noratiocheck->isChecked(); + parameters.calculatefdrs = calculatefdrs->isChecked(); + + parameters.minimumannotationintensityrelative = minimumannotationintensityrelative->value(); + parameters.minimumannotationintensityabsolute = minimumannotationintensityabsolute->value(); + parameters.mzdifftolerance = mzdifftolerance->value(); parameters.intensitytolerance = intensitytolerance->value(); @@ -1475,7 +1884,20 @@ void cParametersWidget::restoreParameters() { maximumnumberofthreads->setValue(parameters.maximumnumberofthreads); peptidetype->setCurrentIndex(parameters.peptidetype); - peaklistline->setText(parameters.peaklistfilename.c_str()); + + //if (parameters.peaklistfilenames.size() > 0) { + // QStringList strlist; + // for (auto& it : parameters.peaklistfilenames) { + // strlist << it.c_str(); + // } + // peaklistline->setText(strlist.join(";")); + //} + //else { + // peaklistline->setText(""); + //} + + peaklistline->setText(parameters.originalpeaklistfilenames.c_str()); + useprofiledata->setChecked(parameters.useprofiledata); scannumber->setValue(parameters.scannumber); precursormass->setValue(parameters.precursormass); @@ -1487,7 +1909,11 @@ void cParametersWidget::restoreParameters() { minimumabsoluteintensitythreshold->setValue(parameters.minimumabsoluteintensitythreshold); minimummz->setValue(parameters.minimummz); maximummz->setValue(parameters.maximummz); + minimumrt->setValue(parameters.minimumrt); + maximumrt->setValue(parameters.maximumrt); fwhm->setValue(parameters.fwhm); + minratio54Fe56Fe->setValue(parameters.minratio54Fe56Fe); + maxratio54Fe56Fe->setValue(parameters.maxratio54Fe56Fe); brickdatabaseline->setText(parameters.bricksdatabasefilename.c_str()); maximumbricksincombinationbegin->setValue(parameters.maximumbricksincombinationbegin); @@ -1552,7 +1978,6 @@ void cParametersWidget::restoreParameters() { } } - neutrallosstypes->getList()->clear(); for (int i = 0; i < (int)parameters.originalneutrallossesdefinitions.size(); i++) { neutrallosstypes->addItem(parameters.originalneutrallossesdefinitions[i].summary.c_str()); @@ -1563,6 +1988,18 @@ void cParametersWidget::restoreParameters() { } maximumcombinedlosses->setValue(parameters.maximumcombinedlosses); + + elementstypes->getList()->clear(); + for (int i = 0; i < (int)parameters.originalelementsdefinitions.size(); i++) { + elementstypes->addItem(parameters.originalelementsdefinitions[i].summary.c_str()); + } + + for (int i = 0; i < (int)parameters.originalelementsfortheoreticalspectra.size(); i++) { + elementstypes->getList()->item(parameters.originalelementsfortheoreticalspectra[i])->setSelected(true); + } + + maximumcombinedelements->setValue(parameters.maximumcombinedelements); + //clearhitswithoutparent->setChecked(parameters.clearhitswithoutparent); reportunmatchedtheoreticalpeaks->setChecked(parameters.reportunmatchedtheoreticalpeaks); generateisotopepattern->setChecked(parameters.generateisotopepattern); @@ -1572,6 +2009,11 @@ void cParametersWidget::restoreParameters() { basicformulacheck->setChecked(parameters.basicformulacheck); advancedformulacheck->setChecked(parameters.advancedformulacheck); noratiocheck->setChecked(parameters.noratiocheck); + calculatefdrs->setChecked(parameters.calculatefdrs); + + minimumannotationintensityrelative->setValue(parameters.minimumannotationintensityrelative); + minimumannotationintensityabsolute->setValue(parameters.minimumannotationintensityabsolute); + mzdifftolerance->setValue(parameters.mzdifftolerance); intensitytolerance->setValue(parameters.intensitytolerance); @@ -1594,6 +2036,9 @@ void cParametersWidget::restoreParameters() { void cParametersWidget::updateSettingsWhenPeptideTypeChanged(int index) { + if (((eModeType)mode->currentIndex() == dereplication) || ((eModeType)mode->currentIndex() == compoundsearch)) { + return; + } if (!(((eModeType)mode->currentIndex() != oldmodetype) && (((eModeType)mode->currentIndex() == denovoengine) || ((eModeType)mode->currentIndex() == singlecomparison) || ((eModeType)mode->currentIndex() == databasesearch)) @@ -1781,7 +2226,6 @@ void cParametersWidget::updateSettingsWhenPeptideTypeChanged(int index) { void cParametersWidget::updateSettingsWhenModeChanged(int index) { - switch ((eModeType)index) { case denovoengine: peptidetype->setDisabled(false); @@ -1791,7 +2235,11 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { precursorcharge->setDisabled(false); precursormasserrortolerance->setDisabled(false); maximummz->setDisabled(true); + minimumrt->setDisabled(true); + maximumrt->setDisabled(true); fwhm->setDisabled(false); + minratio54Fe56Fe->setDisabled(true); + maxratio54Fe56Fe->setDisabled(true); brickdatabaseline->setDisabled(false); brickdatabasebutton->setDisabled(false); maximumbricksincombinationbegin->setDisabled(false); @@ -1811,10 +2259,15 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { iontypes->setDisabled(false); neutrallosstypes->setDisabled(false); maximumcombinedlosses->setDisabled(false); + elementstypes->setDisabled(true); + maximumcombinedelements->setDisabled(true); //clearhitswithoutparent->setDisabled(false); basicformulacheck->setDisabled(false); advancedformulacheck->setDisabled(true); noratiocheck->setDisabled(true); + calculatefdrs->setDisabled(true); + minimumannotationintensityrelative->setDisabled(true); + minimumannotationintensityabsolute->setDisabled(true); mzdifftolerance->setDisabled(true); intensitytolerance->setDisabled(true); reportunmatchedtheoreticalpeaks->setDisabled(false); @@ -1826,6 +2279,102 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { searchedsequencebutton->setDisabled(false); updateSettingsWhenPeptideTypeChanged(peptidetype->currentIndex()); + + if (hideunusedparameters) { + + maximumnumberofthreadslabel->setHidden(false); + maximumnumberofthreads->setHidden(false); + + peptidetypelabel->setHidden(false); + peptidetype->setHidden(false); + + scannumberlabel->setHidden(false); + scannumber->setHidden(false); + + precursormasslabel->setHidden(false); + precursormass->setHidden(false); + + precursoradductlabel->setHidden(false); + precursoradduct->setHidden(false); + + precursormasserrortolerancelabel->setHidden(false); + precursormasserrortolerance->setHidden(false); + + rtlabel->setHidden(true); + minimumrt->setHidden(true); + maximumrt->setHidden(true); + + ratio54Fe56Felabel->setHidden(true); + minratio54Fe56Fe->setHidden(true); + maxratio54Fe56Fe->setHidden(true); + + maximumbricksincombinatiolabel->setHidden(false); + maximumbricksincombinationbegin->setHidden(false); + maximumbricksincombinationmiddle->setHidden(false); + maximumbricksincombinationend->setHidden(false); + + blindedgeslabel->setHidden(false); + blindedges->setHidden(false); + + maximumcumulativemasslabel->setHidden(false); + maximumcumulativemass->setHidden(false); + + sequencedatabaselabel->setHidden(true); + sequencedatabaseline->setHidden(true); + sequencedatabasebutton->setHidden(true); + + scoretypelabel->setHidden(false); + scoretype->setHidden(false); + + hitsreportedlabel->setHidden(false); + hitsreported->setHidden(false); + + sequencetaglabel->setHidden(false); + sequencetag->setHidden(false); + + neutrallosstypeslabel->setHidden(false); + neutrallosstypes->setHidden(false); + + maximumcombinedlosseslabel->setHidden(false); + maximumcombinedlosses->setHidden(false); + + elementstypeslabel->setHidden(true); + elementstypes->setHidden(true); + + maximumcombinedelementslabel->setHidden(true); + maximumcombinedelements->setHidden(true); + + minimumfeaturesizelabel->setHidden(true); + minimumfeaturesize->setHidden(true); + + minimumiontypeslabel->setHidden(true); + minimumiontypes->setHidden(true); + + advancedformulachecklabel->setHidden(true); + advancedformulacheck->setHidden(true); + + noratiochecklabel->setHidden(true); + noratiocheck->setHidden(true); + + calculatefdrslabel->setHidden(true); + calculatefdrs->setHidden(true); + + minimumannotationintensitylabel->setHidden(true); + minimumannotationintensityrelative->setHidden(true); + minimumannotationintensityabsolute->setHidden(true); + + mzdifftolerancelabel->setHidden(true); + mzdifftolerance->setHidden(true); + + intensitytolerancelabel->setHidden(true); + intensitytolerance->setHidden(true); + + brickdatabasegroupbox->setHidden(false); + miscgroupbox->setHidden(false); + searchedsequencegroupbox->setHidden(false); + + } + break; case singlecomparison: peptidetype->setDisabled(false); @@ -1835,7 +2384,11 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { precursorcharge->setDisabled(false); precursormasserrortolerance->setDisabled(false); maximummz->setDisabled(true); + minimumrt->setDisabled(true); + maximumrt->setDisabled(true); fwhm->setDisabled(false); + minratio54Fe56Fe->setDisabled(true); + maxratio54Fe56Fe->setDisabled(true); brickdatabaseline->setDisabled(false); brickdatabasebutton->setDisabled(false); maximumbricksincombinationbegin->setDisabled(true); @@ -1855,10 +2408,15 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { iontypes->setDisabled(false); neutrallosstypes->setDisabled(false); maximumcombinedlosses->setDisabled(false); + elementstypes->setDisabled(true); + maximumcombinedelements->setDisabled(true); //clearhitswithoutparent->setDisabled(false); basicformulacheck->setDisabled(false); advancedformulacheck->setDisabled(true); noratiocheck->setDisabled(true); + calculatefdrs->setDisabled(true); + minimumannotationintensityrelative->setDisabled(true); + minimumannotationintensityabsolute->setDisabled(true); mzdifftolerance->setDisabled(true); intensitytolerance->setDisabled(true); reportunmatchedtheoreticalpeaks->setDisabled(false); @@ -1870,6 +2428,102 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { searchedsequencebutton->setDisabled(false); updateSettingsWhenPeptideTypeChanged(peptidetype->currentIndex()); + + if (hideunusedparameters) { + + maximumnumberofthreadslabel->setHidden(true); + maximumnumberofthreads->setHidden(true); + + peptidetypelabel->setHidden(false); + peptidetype->setHidden(false); + + scannumberlabel->setHidden(true); + scannumber->setHidden(true); + + precursormasslabel->setHidden(false); + precursormass->setHidden(false); + + precursoradductlabel->setHidden(false); + precursoradduct->setHidden(false); + + precursormasserrortolerancelabel->setHidden(false); + precursormasserrortolerance->setHidden(false); + + rtlabel->setHidden(true); + minimumrt->setHidden(true); + maximumrt->setHidden(true); + + ratio54Fe56Felabel->setHidden(true); + minratio54Fe56Fe->setHidden(true); + maxratio54Fe56Fe->setHidden(true); + + maximumbricksincombinatiolabel->setHidden(true); + maximumbricksincombinationbegin->setHidden(true); + maximumbricksincombinationmiddle->setHidden(true); + maximumbricksincombinationend->setHidden(true); + + blindedgeslabel->setHidden(true); + blindedges->setHidden(true); + + maximumcumulativemasslabel->setHidden(true); + maximumcumulativemass->setHidden(true); + + sequencedatabaselabel->setHidden(true); + sequencedatabaseline->setHidden(true); + sequencedatabasebutton->setHidden(true); + + scoretypelabel->setHidden(true); + scoretype->setHidden(true); + + hitsreportedlabel->setHidden(true); + hitsreported->setHidden(true); + + sequencetaglabel->setHidden(true); + sequencetag->setHidden(true); + + neutrallosstypeslabel->setHidden(false); + neutrallosstypes->setHidden(false); + + maximumcombinedlosseslabel->setHidden(false); + maximumcombinedlosses->setHidden(false); + + elementstypeslabel->setHidden(true); + elementstypes->setHidden(true); + + maximumcombinedelementslabel->setHidden(true); + maximumcombinedelements->setHidden(true); + + minimumfeaturesizelabel->setHidden(true); + minimumfeaturesize->setHidden(true); + + minimumiontypeslabel->setHidden(true); + minimumiontypes->setHidden(true); + + advancedformulachecklabel->setHidden(true); + advancedformulacheck->setHidden(true); + + noratiochecklabel->setHidden(true); + noratiocheck->setHidden(true); + + calculatefdrslabel->setHidden(true); + calculatefdrs->setHidden(true); + + minimumannotationintensitylabel->setHidden(true); + minimumannotationintensityrelative->setHidden(true); + minimumannotationintensityabsolute->setHidden(true); + + mzdifftolerancelabel->setHidden(true); + mzdifftolerance->setHidden(true); + + intensitytolerancelabel->setHidden(true); + intensitytolerance->setHidden(true); + + brickdatabasegroupbox->setHidden(false); + miscgroupbox->setHidden(false); + searchedsequencegroupbox->setHidden(false); + + } + break; case databasesearch: peptidetype->setDisabled(false); @@ -1879,7 +2533,11 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { precursorcharge->setDisabled(false); precursormasserrortolerance->setDisabled(false); maximummz->setDisabled(true); + minimumrt->setDisabled(true); + maximumrt->setDisabled(true); fwhm->setDisabled(false); + minratio54Fe56Fe->setDisabled(true); + maxratio54Fe56Fe->setDisabled(true); brickdatabaseline->setDisabled(false); brickdatabasebutton->setDisabled(false); maximumbricksincombinationbegin->setDisabled(true); @@ -1899,10 +2557,15 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { iontypes->setDisabled(false); neutrallosstypes->setDisabled(false); maximumcombinedlosses->setDisabled(false); + elementstypes->setDisabled(true); + maximumcombinedelements->setDisabled(true); //clearhitswithoutparent->setDisabled(false); basicformulacheck->setDisabled(false); advancedformulacheck->setDisabled(true); noratiocheck->setDisabled(true); + calculatefdrs->setDisabled(true); + minimumannotationintensityrelative->setDisabled(true); + minimumannotationintensityabsolute->setDisabled(true); mzdifftolerance->setDisabled(true); intensitytolerance->setDisabled(true); reportunmatchedtheoreticalpeaks->setDisabled(false); @@ -1914,6 +2577,102 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { searchedsequencebutton->setDisabled(false); updateSettingsWhenPeptideTypeChanged(peptidetype->currentIndex()); + + if (hideunusedparameters) { + + maximumnumberofthreadslabel->setHidden(false); + maximumnumberofthreads->setHidden(false); + + peptidetypelabel->setHidden(false); + peptidetype->setHidden(false); + + scannumberlabel->setHidden(false); + scannumber->setHidden(false); + + precursormasslabel->setHidden(false); + precursormass->setHidden(false); + + precursoradductlabel->setHidden(false); + precursoradduct->setHidden(false); + + precursormasserrortolerancelabel->setHidden(false); + precursormasserrortolerance->setHidden(false); + + rtlabel->setHidden(true); + minimumrt->setHidden(true); + maximumrt->setHidden(true); + + ratio54Fe56Felabel->setHidden(true); + minratio54Fe56Fe->setHidden(true); + maxratio54Fe56Fe->setHidden(true); + + maximumbricksincombinatiolabel->setHidden(true); + maximumbricksincombinationbegin->setHidden(true); + maximumbricksincombinationmiddle->setHidden(true); + maximumbricksincombinationend->setHidden(true); + + blindedgeslabel->setHidden(true); + blindedges->setHidden(true); + + maximumcumulativemasslabel->setHidden(true); + maximumcumulativemass->setHidden(true); + + sequencedatabaselabel->setHidden(false); + sequencedatabaseline->setHidden(false); + sequencedatabasebutton->setHidden(false); + + scoretypelabel->setHidden(false); + scoretype->setHidden(false); + + hitsreportedlabel->setHidden(false); + hitsreported->setHidden(false); + + sequencetaglabel->setHidden(false); + sequencetag->setHidden(false); + + neutrallosstypeslabel->setHidden(false); + neutrallosstypes->setHidden(false); + + maximumcombinedlosseslabel->setHidden(false); + maximumcombinedlosses->setHidden(false); + + elementstypeslabel->setHidden(true); + elementstypes->setHidden(true); + + maximumcombinedelementslabel->setHidden(true); + maximumcombinedelements->setHidden(true); + + minimumfeaturesizelabel->setHidden(true); + minimumfeaturesize->setHidden(true); + + minimumiontypeslabel->setHidden(true); + minimumiontypes->setHidden(true); + + advancedformulachecklabel->setHidden(true); + advancedformulacheck->setHidden(true); + + noratiochecklabel->setHidden(true); + noratiocheck->setHidden(true); + + calculatefdrslabel->setHidden(true); + calculatefdrs->setHidden(true); + + minimumannotationintensitylabel->setHidden(true); + minimumannotationintensityrelative->setHidden(true); + minimumannotationintensityabsolute->setHidden(true); + + mzdifftolerancelabel->setHidden(true); + mzdifftolerance->setHidden(true); + + intensitytolerancelabel->setHidden(true); + intensitytolerance->setHidden(true); + + brickdatabasegroupbox->setHidden(false); + miscgroupbox->setHidden(false); + searchedsequencegroupbox->setHidden(false); + + } + break; case dereplication: peptidetype->setDisabled(true); @@ -1923,7 +2682,11 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { precursorcharge->setDisabled(false); precursormasserrortolerance->setDisabled(true); maximummz->setDisabled(false); + minimumrt->setDisabled(false); + maximumrt->setDisabled(false); fwhm->setDisabled(false); + minratio54Fe56Fe->setDisabled(false); + maxratio54Fe56Fe->setDisabled(false); brickdatabaseline->setDisabled(true); brickdatabasebutton->setDisabled(true); maximumbricksincombinationbegin->setDisabled(true); @@ -1936,17 +2699,22 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { similaritysearch->setDisabled(true); sequencedatabaseline->setDisabled(false); sequencedatabasebutton->setDisabled(false); - maximumnumberofthreads->setDisabled(true); + maximumnumberofthreads->setDisabled(false); scoretype->setDisabled(true); hitsreported->setDisabled(true); sequencetag->setDisabled(true); iontypes->setDisabled(false); neutrallosstypes->setDisabled(false); maximumcombinedlosses->setDisabled(false); + elementstypes->setDisabled(true); + maximumcombinedelements->setDisabled(true); //clearhitswithoutparent->setDisabled(true); basicformulacheck->setDisabled(false); advancedformulacheck->setDisabled(true); noratiocheck->setDisabled(true); + calculatefdrs->setDisabled(false); + minimumannotationintensityrelative->setDisabled(false); + minimumannotationintensityabsolute->setDisabled(false); mzdifftolerance->setDisabled(false); intensitytolerance->setDisabled(false); reportunmatchedtheoreticalpeaks->setDisabled(false); @@ -1976,6 +2744,102 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { searchedsequenceCtermmodif->setDisabled(true); searchedsequenceTmodif->setDisabled(true); searchedsequenceformula->setDisabled(true); + + if (hideunusedparameters) { + + maximumnumberofthreadslabel->setHidden(false); + maximumnumberofthreads->setHidden(false); + + peptidetypelabel->setHidden(true); + peptidetype->setHidden(true); + + scannumberlabel->setHidden(true); + scannumber->setHidden(true); + + precursormasslabel->setHidden(true); + precursormass->setHidden(true); + + precursoradductlabel->setHidden(true); + precursoradduct->setHidden(true); + + precursormasserrortolerancelabel->setHidden(true); + precursormasserrortolerance->setHidden(true); + + rtlabel->setHidden(false); + minimumrt->setHidden(false); + maximumrt->setHidden(false); + + ratio54Fe56Felabel->setHidden(false); + minratio54Fe56Fe->setHidden(false); + maxratio54Fe56Fe->setHidden(false); + + maximumbricksincombinatiolabel->setHidden(true); + maximumbricksincombinationbegin->setHidden(true); + maximumbricksincombinationmiddle->setHidden(true); + maximumbricksincombinationend->setHidden(true); + + blindedgeslabel->setHidden(true); + blindedges->setHidden(true); + + maximumcumulativemasslabel->setHidden(true); + maximumcumulativemass->setHidden(true); + + sequencedatabaselabel->setHidden(false); + sequencedatabaseline->setHidden(false); + sequencedatabasebutton->setHidden(false); + + scoretypelabel->setHidden(true); + scoretype->setHidden(true); + + hitsreportedlabel->setHidden(true); + hitsreported->setHidden(true); + + sequencetaglabel->setHidden(true); + sequencetag->setHidden(true); + + neutrallosstypeslabel->setHidden(false); + neutrallosstypes->setHidden(false); + + maximumcombinedlosseslabel->setHidden(false); + maximumcombinedlosses->setHidden(false); + + elementstypeslabel->setHidden(true); + elementstypes->setHidden(true); + + maximumcombinedelementslabel->setHidden(true); + maximumcombinedelements->setHidden(true); + + minimumfeaturesizelabel->setHidden(false); + minimumfeaturesize->setHidden(false); + + minimumiontypeslabel->setHidden(false); + minimumiontypes->setHidden(false); + + advancedformulachecklabel->setHidden(true); + advancedformulacheck->setHidden(true); + + noratiochecklabel->setHidden(true); + noratiocheck->setHidden(true); + + calculatefdrslabel->setHidden(false); + calculatefdrs->setHidden(false); + + minimumannotationintensitylabel->setHidden(false); + minimumannotationintensityrelative->setHidden(false); + minimumannotationintensityabsolute->setHidden(false); + + mzdifftolerancelabel->setHidden(false); + mzdifftolerance->setHidden(false); + + intensitytolerancelabel->setHidden(false); + intensitytolerance->setHidden(false); + + brickdatabasegroupbox->setHidden(true); + miscgroupbox->setHidden(true); + searchedsequencegroupbox->setHidden(true); + + } + break; case compoundsearch: peptidetype->setDisabled(true); @@ -1985,7 +2849,11 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { precursorcharge->setDisabled(false); precursormasserrortolerance->setDisabled(true); maximummz->setDisabled(false); + minimumrt->setDisabled(false); + maximumrt->setDisabled(false); fwhm->setDisabled(false); + minratio54Fe56Fe->setDisabled(false); + maxratio54Fe56Fe->setDisabled(false); brickdatabaseline->setDisabled(true); brickdatabasebutton->setDisabled(true); maximumbricksincombinationbegin->setDisabled(true); @@ -1998,17 +2866,22 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { similaritysearch->setDisabled(true); sequencedatabaseline->setDisabled(true); sequencedatabasebutton->setDisabled(true); - maximumnumberofthreads->setDisabled(true); + maximumnumberofthreads->setDisabled(false); scoretype->setDisabled(true); hitsreported->setDisabled(true); sequencetag->setDisabled(true); iontypes->setDisabled(false); - neutrallosstypes->setDisabled(false); - maximumcombinedlosses->setDisabled(false); + neutrallosstypes->setDisabled(true); + maximumcombinedlosses->setDisabled(true); + elementstypes->setDisabled(false); + maximumcombinedelements->setDisabled(false); //clearhitswithoutparent->setDisabled(true); basicformulacheck->setDisabled(false); advancedformulacheck->setDisabled(false); noratiocheck->setDisabled(false); + calculatefdrs->setDisabled(false); + minimumannotationintensityrelative->setDisabled(false); + minimumannotationintensityabsolute->setDisabled(false); mzdifftolerance->setDisabled(false); intensitytolerance->setDisabled(false); reportunmatchedtheoreticalpeaks->setDisabled(false); @@ -2038,6 +2911,102 @@ void cParametersWidget::updateSettingsWhenModeChanged(int index) { searchedsequenceCtermmodif->setDisabled(true); searchedsequenceTmodif->setDisabled(true); searchedsequenceformula->setDisabled(true); + + if (hideunusedparameters) { + + maximumnumberofthreadslabel->setHidden(false); + maximumnumberofthreads->setHidden(false); + + peptidetypelabel->setHidden(true); + peptidetype->setHidden(true); + + scannumberlabel->setHidden(true); + scannumber->setHidden(true); + + precursormasslabel->setHidden(true); + precursormass->setHidden(true); + + precursoradductlabel->setHidden(true); + precursoradduct->setHidden(true); + + precursormasserrortolerancelabel->setHidden(true); + precursormasserrortolerance->setHidden(true); + + rtlabel->setHidden(false); + minimumrt->setHidden(false); + maximumrt->setHidden(false); + + ratio54Fe56Felabel->setHidden(false); + minratio54Fe56Fe->setHidden(false); + maxratio54Fe56Fe->setHidden(false); + + maximumbricksincombinatiolabel->setHidden(true); + maximumbricksincombinationbegin->setHidden(true); + maximumbricksincombinationmiddle->setHidden(true); + maximumbricksincombinationend->setHidden(true); + + blindedgeslabel->setHidden(true); + blindedges->setHidden(true); + + maximumcumulativemasslabel->setHidden(true); + maximumcumulativemass->setHidden(true); + + sequencedatabaselabel->setHidden(true); + sequencedatabaseline->setHidden(true); + sequencedatabasebutton->setHidden(true); + + scoretypelabel->setHidden(true); + scoretype->setHidden(true); + + hitsreportedlabel->setHidden(true); + hitsreported->setHidden(true); + + sequencetaglabel->setHidden(true); + sequencetag->setHidden(true); + + neutrallosstypeslabel->setHidden(true); + neutrallosstypes->setHidden(true); + + maximumcombinedlosseslabel->setHidden(true); + maximumcombinedlosses->setHidden(true); + + elementstypeslabel->setHidden(false); + elementstypes->setHidden(false); + + maximumcombinedelementslabel->setHidden(false); + maximumcombinedelements->setHidden(false); + + minimumfeaturesizelabel->setHidden(false); + minimumfeaturesize->setHidden(false); + + minimumiontypeslabel->setHidden(false); + minimumiontypes->setHidden(false); + + advancedformulachecklabel->setHidden(false); + advancedformulacheck->setHidden(false); + + noratiochecklabel->setHidden(false); + noratiocheck->setHidden(false); + + calculatefdrslabel->setHidden(false); + calculatefdrs->setHidden(false); + + minimumannotationintensitylabel->setHidden(false); + minimumannotationintensityrelative->setHidden(false); + minimumannotationintensityabsolute->setHidden(false); + + mzdifftolerancelabel->setHidden(false); + mzdifftolerance->setHidden(false); + + intensitytolerancelabel->setHidden(false); + intensitytolerance->setHidden(false); + + brickdatabasegroupbox->setHidden(true); + miscgroupbox->setHidden(true); + searchedsequencegroupbox->setHidden(true); + + } + break; default: break; @@ -2055,6 +3024,9 @@ void cParametersWidget::resetFragmentIonTypes() { if (globalpreferences) { for (int i = 0; i < (int)globalpreferences->customions.size(); i++) { iontypes->getList()->addItem(globalpreferences->customions[i].name.c_str()); + if (globalpreferences->customions[i].name.compare("[M+H]+") == 0) { + iontypes->getList()->item(i)->setSelected(true); + } } } } diff --git a/CycloBranch/gui/cParametersWidget.h b/CycloBranch/gui/cParametersWidget.h index 09e79fd..ae577ae 100644 --- a/CycloBranch/gui/cParametersWidget.h +++ b/CycloBranch/gui/cParametersWidget.h @@ -117,6 +117,8 @@ class cParametersWidget : public QWidget private: + bool hideunusedparameters; + QWidget* parent; cGlobalPreferences* globalpreferences; @@ -177,9 +179,20 @@ class cParametersWidget : public QWidget QDoubleSpinBox* maximummz; QHBoxLayout* mzratiolayout; QWidget* mzratiowidget; + QLabel* rtlabel; + QDoubleSpinBox* minimumrt; + QDoubleSpinBox* maximumrt; + QHBoxLayout* rtlayout; + QWidget* rtwidget; QLabel* fwhmlabel; QDoubleSpinBox* fwhm; + QLabel* ratio54Fe56Felabel; + QDoubleSpinBox* minratio54Fe56Fe; + QDoubleSpinBox* maxratio54Fe56Fe; + QHBoxLayout* ratio54Fe56Felayout; + QWidget* ratio54Fe56Fewidget; + QGroupBox* brickdatabasegroupbox; QGridLayout* brickdatabasegridlayout; QLabel* brickdatabaselabel; @@ -237,6 +250,10 @@ class cParametersWidget : public QWidget cNeutralLossesListWidget* neutrallosstypes; QLabel* maximumcombinedlosseslabel; QSpinBox* maximumcombinedlosses; + QLabel* elementstypeslabel; + cNeutralLossesListWidget* elementstypes; + QLabel* maximumcombinedelementslabel; + QSpinBox* maximumcombinedelements; //QCheckBox* clearhitswithoutparent; QLabel* reportunmatchedtheoreticalpeakslabel; QCheckBox* reportunmatchedtheoreticalpeaks; @@ -254,6 +271,15 @@ class cParametersWidget : public QWidget QCheckBox* advancedformulacheck; QLabel* noratiochecklabel; QCheckBox* noratiocheck; + QLabel* calculatefdrslabel; + QCheckBox* calculatefdrs; + + QLabel* minimumannotationintensitylabel; + QDoubleSpinBox* minimumannotationintensityrelative; + QSpinBox* minimumannotationintensityabsolute; + QHBoxLayout* minimumannotationintensitylayout; + QWidget* minimumannotationintensitywidget; + QLabel* mzdifftolerancelabel; QDoubleSpinBox* mzdifftolerance; QLabel* intensitytolerancelabel; diff --git a/CycloBranch/gui/cPatternSimulatorSceneWidget.cpp b/CycloBranch/gui/cPatternSimulatorSceneWidget.cpp new file mode 100644 index 0000000..82af3d0 --- /dev/null +++ b/CycloBranch/gui/cPatternSimulatorSceneWidget.cpp @@ -0,0 +1,917 @@ +#include "gui/cPatternSimulatorSceneWidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +double computeGaussFunction(double x, double a, double ny, double sigma) { + if (sigma == 0) { + return 0; + } + + double value = x - ny; + value *= value; + value /= 2.0 * sigma * sigma; + value = -value; + value = pow(econst, value); + return a * value; +} + + +double computeGaussHeight(double x, double y, double ny, double sigma) { + if (sigma == 0) { + return 0; + } + + double value = x - ny; + value *= value; + value /= 2.0 * sigma * sigma; + value = -value; + value = pow(econst, value); + + if (value != 0) { + return y / value; + } + + return 0; +} + + +cPatternSimulatorSceneWidget::cPatternSimulatorSceneWidget(QWidget* parent) { + this->parent = parent; + isotopicpattern.clear(); + origwidth = 0; + origheight = 0; + calledbyresizeevent = false; + oldwidth.clear(); + oldheight.clear(); + currentscale = 1; + absoluteintensity = false; + rawdatastate = true; + hidelabels = true; + factor = 0.2; + pressedx = -1; + pressedy = -1; + currentx = 0; + currenty = 0; + minmzratio = 0; + maxmzratio = 0; + + topmargin = 0; + bottommargin = 0; + leftmargin = 0; + rightmargin = 0; + + firstshow = true; + enablemousemzselection = true; + + mzoverhead = 1.0; + fwhm = 0.05; + + scene = new QGraphicsScene(this); + + zoomgroup = new QGraphicsItemGroup(); + zoomrect = new QGraphicsRectItem(); + zoomgroup->addToGroup(zoomrect); + zoomsimpletextitem = new QGraphicsSimpleTextItem(); + zoomgroup->addToGroup(zoomsimpletextitem); + scene->addItem(zoomgroup); + + cursorsimpletextitem = new QGraphicsSimpleTextItem(); + scene->addItem(cursorsimpletextitem); +} + + +cPatternSimulatorSceneWidget::~cPatternSimulatorSceneWidget() { + delete scene; +} + + +void cPatternSimulatorSceneWidget::initialize(cPeaksList isotopicpattern, double fwhm) { + this->isotopicpattern = isotopicpattern; + this->fwhm = fwhm; + + minmzratio = max(isotopicpattern.getMinimumMZRatio() - mzoverhead, 0.0); + maxmzratio = isotopicpattern.getMaximumMZRatio() + mzoverhead; + emit updateMZInterval(minmzratio, maxmzratio); + + setScene(scene); + + origwidth = viewport()->width() * 4 / 5; + origheight = viewport()->height() * 3 / 5; + + // a visualization fix + origwidth = (origwidth / 10) * 10; + origheight = (origheight / 10) * 10; + + originalmatrix = matrix(); + + redrawScene(); +} + + +void cPatternSimulatorSceneWidget::exportToPDF(QString filename, bool postscript) { + QPrinter printer; + if (postscript) { + printer.setPaperSize(QSizeF(scene->width() + 100, scene->height() + 100), QPrinter::DevicePixel); + printer.setPageMargins (50, 50, 50, 50, QPrinter::DevicePixel); + } + else { + printer.setPaperSize(QSizeF(scene->width(), scene->height()), QPrinter::DevicePixel); + printer.setPageMargins (0, 0, 0, 0, QPrinter::DevicePixel); + } + printer.setOutputFormat(QPrinter::NativeFormat); + printer.setOutputFileName(filename); + + QPainter painter; + if (!painter.begin(&printer)) { + QMessageBox msgBox; + QString errstr = "The file cannot be created."; + #if OS_TYPE == UNX + errstr += "\nDo you have a properly configured print server (sudo apt-get install cups-pdf) ?"; + #endif + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing|QPainter::SmoothPixmapTransform); + scene->render(&painter); + painter.end(); +} + + +void cPatternSimulatorSceneWidget::exportToSVG(QString filename) { + QSvgGenerator generator; + generator.setFileName(filename); + generator.setSize(QSize(scene->width(), scene->height())); + generator.setViewBox(QRect(0, 0, scene->width(), scene->height())); + + QPainter painter; + if (!painter.begin(&generator)) { + QMessageBox msgBox; + QString errstr = "The file cannot be created."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + painter.fillRect(QRect(0, 0, scene->width(), scene->height()), Qt::white); + scene->render(&painter); + painter.end(); +} + + +void cPatternSimulatorSceneWidget::exportToPNG(QString filename) { + QImage image(scene->width(), scene->height(), QImage::Format_ARGB32); + image.fill(Qt::white); + + QPainter painter; + if (!painter.begin(&image)) { + QMessageBox msgBox; + QString errstr = "The file cannot be created."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + scene->render(&painter); + painter.end(); + image.save(filename); +} + + +void cPatternSimulatorSceneWidget::hidePeakLabels(bool state) { + hidelabels = state; + redrawScene(); +} + + +void cPatternSimulatorSceneWidget::wheelEvent(QWheelEvent *event) { + double part, newmin, newmax; + + if (event->delta() > 0) { + part = fabs(maxmzratio - minmzratio) / 10.0; + newmin = minmzratio + part; + newmax = maxmzratio - part; + } + else { + part = fabs(maxmzratio - minmzratio) / 8.0; + newmin = max(minmzratio - part, 0.0); + newmax = min(maxmzratio + part, isotopicpattern.getMaximumMZRatio() + mzoverhead); + } + + if (newmin < newmax) { + minmzratio = newmin; + maxmzratio = newmax; + emit updateMZInterval(minmzratio, maxmzratio); + redrawScene(); + viewport()->update(); + } + + event->accept(); +} + + +void cPatternSimulatorSceneWidget::mouseMoveEvent(QMouseEvent *event) { + QGraphicsView::mouseMoveEvent(event); + + QPointF p = mapToScene(event->x(), event->y()); + + QPointF curpos; + curpos.setX(p.x() + 15); + curpos.setY(p.y() - 2); + + double mz = getMZRatioFromXPosition((int)p.x(), origwidth); + double intensity = getIntensityFromYPosition((int)p.y(), origheight); + QString curtext = "m/z: " + QString::number(mz) + ", int: " + QString::number(intensity); + if (!absoluteintensity) { + curtext += " %"; + } + + cursorsimpletextitem->setPos(curpos); + cursorsimpletextitem->setText(curtext); + + if ((pressedx != -1) && (pressedy != -1)) { + cursorsimpletextitem->setVisible(false); + + currentx = (int)p.x(); + currenty = (int)p.y(); + + if (enablemousemzselection) { + updateZoomGroup(); + } + else { + calculateMinMaxMZ(); + + emit updateMZInterval(minmzratio, maxmzratio); + + pressedx = currentx; + pressedy = currenty; + + redrawScene(); + } + } + else { + if (((int)p.x() >= leftmargin) && ((int)p.x() <= origwidth - rightmargin) && ((int)p.y() >= topmargin) && ((int)p.y() <= origheight - bottommargin)) { + cursorsimpletextitem->setVisible(true); + } + else { + cursorsimpletextitem->setVisible(false); + } + } + + event->accept(); +} + + +void cPatternSimulatorSceneWidget::mouseReleaseEvent(QMouseEvent *event) { + QGraphicsView::mouseReleaseEvent(event); + + if (pressedx == currentx) { + pressedx = -1; + currentx = -1; + + redrawScene(); + } + + if ((event->button() == Qt::LeftButton) && (pressedx != -1) && (pressedy != -1)) { + calculateMinMaxMZ(); + + emit updateMZInterval(minmzratio, maxmzratio); + + pressedx = -1; + pressedy = -1; + + redrawScene(); + } + + QPointF p = mapToScene(event->x(), event->y()); + + QPointF curpos; + curpos.setX(p.x() + 15); + curpos.setY(p.y() - 2); + + double mz = getMZRatioFromXPosition((int)p.x(), origwidth); + double intensity = getIntensityFromYPosition((int)p.y(), origheight); + QString curtext = "m/z: " + QString::number(mz) + ", int: " + QString::number(intensity); + if (!absoluteintensity) { + curtext += " %"; + } + + cursorsimpletextitem->setPos(curpos); + cursorsimpletextitem->setText(curtext); + + if (((int)p.x() >= leftmargin) && ((int)p.x() <= origwidth - rightmargin) && ((int)p.y() >= topmargin) && ((int)p.y() <= origheight - bottommargin)) { + cursorsimpletextitem->setVisible(true); + } + else { + cursorsimpletextitem->setVisible(false); + } + + event->accept(); +} + + +void cPatternSimulatorSceneWidget::mousePressEvent(QMouseEvent *event) { + QGraphicsView::mousePressEvent(event); + + cursorsimpletextitem->setVisible(false); + + if (event->button() == Qt::LeftButton) { + QPointF p = mapToScene(event->x(), event->y()); + pressedx = (int)p.x(); + pressedy = (int)p.y(); + + currentx = pressedx; + currenty = pressedy; + + if (enablemousemzselection) { + updateZoomGroup(); + } + } + + if (event->button() == Qt::RightButton) { + pressedx = -1; + pressedy = -1; + + redrawScene(); + } + + //if (enablemousemzselection) { + if (event->button() == Qt::MiddleButton) { + pressedx = -1; + pressedy = -1; + + resetMZInterval(); + + redrawScene(); + } + //} + + event->accept(); +} + + +void cPatternSimulatorSceneWidget::showEvent(QShowEvent *event) { + QGraphicsView::showEvent(event); + + if (firstshow) { + normalSize(); + firstshow = false; + } +} + + +void cPatternSimulatorSceneWidget::resizeEvent(QResizeEvent *event) { + QGraphicsView::resizeEvent(event); + + origwidth = viewport()->width() * 4 / 5; + origheight = viewport()->height() * 3 / 5; + + // a visualization fix + origwidth = (origwidth / 10) * 10; + origheight = (origheight / 10) * 10; + + calledbyresizeevent = true; + + redrawScene(); +} + + +double cPatternSimulatorSceneWidget::getMZRatioFromXPosition(int x, int w) { + double mz = (double)(x - leftmargin) / (double)(w - leftmargin - rightmargin) * (maxmzratio - minmzratio) + minmzratio; + return max(0.0, mz); +} + + +int cPatternSimulatorSceneWidget::getXPositionFromMZRatio(double mzratio, int w) { + double val = mzratio - minmzratio; + val /= maxmzratio - minmzratio; + val *= double(w - leftmargin - rightmargin); + return (int)val + leftmargin; +} + + +double cPatternSimulatorSceneWidget::getIntensityFromYPosition(int y, int h) { + double maximumintensity = getMaximumIntensity(); + double intensity = (double)(y - topmargin) / (double)(h - topmargin - bottommargin) * maximumintensity; + intensity = maximumintensity - intensity; + return max(0.0, intensity); +} + + +int cPatternSimulatorSceneWidget::getYPositionFromIntensity(double intensity, int h) { + double maximumintensity = getMaximumIntensity(); + double val = maximumintensity - intensity; + val /= maximumintensity; + val *= double(h - topmargin - bottommargin); + return (int)val + topmargin; +} + + +void cPatternSimulatorSceneWidget::redrawScene() { + QGraphicsSimpleTextItem* simpletext; + QGraphicsTextItem* text; + QGraphicsLineItem* line; + + int x; + double y; + qreal tx, ty, tw, th, sumh; + + char tmpbuf[30]; + string s; + + int xstep, ystep; + int w = origwidth; + int h = origheight; + int rulergranularity = 10; + + cPeaksList visiblepeaks; + visiblepeaks.clear(); + + QList hiddenitems; + + vector hits; + size_t pos1, pos2; + string tmpsubstr; + + QFont myFont("Arial", 8); + QFontMetrics fm(myFont); + + double maxintensity = getMaximumIntensity(); + + scene->removeItem(zoomgroup); + scene->removeItem(cursorsimpletextitem); + + scene->clear(); + + zoomgroup->setVisible(false); + scene->addItem(zoomgroup); + + cursorsimpletextitem->setVisible(false); + scene->addItem(cursorsimpletextitem); + + + // x axis + line = scene->addLine(leftmargin, h - bottommargin, w - rightmargin, h - bottommargin, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + // x axis ruler + xstep = (w - leftmargin - rightmargin) / rulergranularity; + for (int i = 0; i < rulergranularity; i++) { + line = scene->addLine(leftmargin + xstep * i, h - bottommargin, leftmargin + xstep * i, h - bottommargin + 10, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + } + line = scene->addLine(w - rightmargin, h - bottommargin, w - rightmargin, h - bottommargin + 10, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + simpletext = scene->addSimpleText(QString::number(minmzratio), myFont); + simpletext->setPos(QPointF(leftmargin - simpletext->boundingRect().width() / 2, h - bottommargin + 12)); + simpletext->setZValue(1); + + if (maxmzratio - minmzratio > 0.01) { + xstep = (w - leftmargin - rightmargin) / rulergranularity; + for (int i = 1; i < rulergranularity; i++) { + simpletext = scene->addSimpleText(QString::number(minmzratio + (maxmzratio - minmzratio) / (double)rulergranularity * (double)i), myFont); + simpletext->setPos(QPointF(leftmargin + xstep * i - simpletext->boundingRect().width() / 2, h - bottommargin + 12)); + simpletext->setZValue(1); + } + } + + simpletext = scene->addSimpleText(QString::number(maxmzratio), myFont); + simpletext->setPos(QPointF(w - rightmargin - simpletext->boundingRect().width() / 2, h - bottommargin + 12)); + simpletext->setZValue(1); + + + // y axis + line = scene->addLine(leftmargin, h - bottommargin, leftmargin, h - bottommargin - std::max(h - topmargin - bottommargin, 0), QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + // y axis ruler + ystep = (h - topmargin - bottommargin) / rulergranularity; + for (int i = 0; i < rulergranularity; i++) { + line = scene->addLine(leftmargin - 10, h - bottommargin - ystep * i, leftmargin, h - bottommargin - ystep * i, QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + } + line = scene->addLine(leftmargin - 10, h - bottommargin - std::max(h - topmargin - bottommargin, 0), leftmargin, h - bottommargin - std::max(h - topmargin - bottommargin, 0), QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + if (absoluteintensity) { + simpletext = scene->addSimpleText(QString::number(0), myFont); + } + else { + simpletext = scene->addSimpleText(QString::number(0) + " %", myFont); + } + simpletext->setPos(QPointF(leftmargin - 15 - simpletext->boundingRect().width(), h - bottommargin - simpletext->boundingRect().height() / 2)); + simpletext->setZValue(1); + + ystep = (h - topmargin - bottommargin) / rulergranularity; + if (absoluteintensity) { + if (maxintensity > rulergranularity) { + for (int i = 1; i < rulergranularity; i++) { + simpletext = scene->addSimpleText(QString::number((unsigned long long)maxintensity / (unsigned long long)rulergranularity * (unsigned long long)i), myFont); + simpletext->setPos(QPointF(leftmargin - 15 - simpletext->boundingRect().width(), h - bottommargin - simpletext->boundingRect().height() / 2 - ystep * i)); + simpletext->setZValue(1); + } + } + } + else { + if (maxintensity > 0) { + for (int i = 1; i < rulergranularity; i++) { + simpletext = scene->addSimpleText(QString::number(maxintensity / (double)rulergranularity * (double)i) + " %", myFont); + simpletext->setPos(QPointF(leftmargin - 15 - simpletext->boundingRect().width(), h - bottommargin - simpletext->boundingRect().height() / 2 - ystep * i)); + simpletext->setZValue(1); + } + } + } + + if (absoluteintensity) { + simpletext = scene->addSimpleText(QString::number((unsigned long long)maxintensity), myFont); + } + else { + simpletext = scene->addSimpleText(QString::number(maxintensity) + " %", myFont); + } + simpletext->setPos(QPointF(leftmargin - 15 - simpletext->boundingRect().width(), h - bottommargin - std::max(h - topmargin - bottommargin, 0) - simpletext->boundingRect().height() / 2)); + simpletext->setZValue(1); + + + // select visible peaks + for (int i = 0; i < isotopicpattern.size(); i++) { + // skip peaks which are out of range + if ((isotopicpattern[i].mzratio < minmzratio) || (isotopicpattern[i].mzratio > maxmzratio)) { + continue; + } + visiblepeaks.add(isotopicpattern[i]); + } + visiblepeaks.sortbyRelativeIntensityDesc(); + + + // visible peaks only + for (int i = 0; i < (int)visiblepeaks.size(); i++) { + + x = getXPositionFromMZRatio(visiblepeaks[i].mzratio, w); + + if (absoluteintensity) { + y = visiblepeaks[i].absoluteintensity / maxintensity * (h - topmargin - bottommargin); + } + else { + y = visiblepeaks[i].relativeintensity / maxintensity * (h - topmargin - bottommargin); + } + + hits.clear(); + + pos1 = 0; + pos2 = visiblepeaks[i].description.find(";"); + while (pos2 != string::npos) { + tmpsubstr = visiblepeaks[i].description.substr(pos1, pos2 - pos1); + + if (!tmpsubstr.empty()) { + hits.push_back(tmpsubstr); + } + else { + break; + } + + pos1 = pos2 + 1; + pos2 = visiblepeaks[i].description.find(";", pos1); + } + + sprintf_s(tmpbuf,"%.5f\0",visiblepeaks[i].mzratio); + s = tmpbuf; + hits.push_back(s); + + if (hits.size() > 1) { + line = scene->addLine(x, h - bottommargin - 2, x, h - bottommargin - std::max((int)y, 2), QPen(Qt::red, 2, Qt::SolidLine)); + line->setZValue(2); + + hiddenitems.clear(); + sumh = 0; + for (vector::reverse_iterator rit = hits.rbegin(); rit != hits.rend(); ++rit) { + text = scene->addText(""); + text->setDefaultTextColor(QColor(Qt::red)); + text->setFont(myFont); + //if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { + // text->setTextInteractionFlags(Qt::TextBrowserInteraction); + // text->setOpenExternalLinks(true); + //} + text->setHtml(rit->c_str()); + tw = text->boundingRect().width(); + th = text->boundingRect().height(); + sumh += th + 1; + tx = x - 2 - 4; + ty = h - bottommargin - std::max((int)y, 2) - sumh - 4; + text->setPos(tx, ty); + text->setZValue(2); + + hiddenitems.append(text); + + if (scene->items(tx, ty, tw, th, Qt::IntersectsItemBoundingRect, Qt::AscendingOrder).size() > 1) { + for (int k = 0; k < (int)hiddenitems.size(); k++) { + scene->removeItem(hiddenitems[k]); + } + break; + } + + if (hidelabels) { + break; + } + } + } + else { + line = scene->addLine(x, h - bottommargin - 2, x, h - bottommargin - std::max((int)y, 2), QPen(Qt::black, 2, Qt::SolidLine)); + line->setZValue(1); + + simpletext = scene->addSimpleText(hits[0].c_str(), myFont); + tw = simpletext->boundingRect().width(); + th = simpletext->boundingRect().height(); + tx = x - 2; + ty = h - bottommargin - std::max((int)y, 2) - th - 1 - 4; + simpletext->setPos(tx, ty); + simpletext->setBrush(Qt::black); + simpletext->setZValue(1); + + if (scene->items(tx, ty, tw, th, Qt::IntersectsItemBoundingRect, Qt::AscendingOrder).size() > 1) { + scene->removeItem(simpletext); + } + } + + } + + + // draw profile spectrum + if (rawdatastate) { + + QPainterPath rpath; + + visiblepeaks.sortbyMass(); + + const int step = 1; + + int xmin = getXPositionFromMZRatio(minmzratio, w); + int xmax = getXPositionFromMZRatio(maxmzratio, w); + int a, ny, yval; + double sigma; + double relint; + + for (int i = xmin; i < xmax; i += step) { + relint = 0; + for (int j = 0; j < visiblepeaks.size(); j++) { + if (absoluteintensity) { + a = getYPositionFromIntensity(visiblepeaks[j].absoluteintensity, h); + } + else { + a = getYPositionFromIntensity(visiblepeaks[j].relativeintensity, h); + } + ny = getXPositionFromMZRatio(visiblepeaks[j].mzratio, w); + + sigma = fwhm / (2.0 * sqrt(2.0 * log(2.0))); + sigma /= maxmzratio - minmzratio; + sigma *= double(w - leftmargin - rightmargin); + + a = h - topmargin - bottommargin - a; + + relint += computeGaussFunction((double)i, (double)a, (double)ny, sigma); + } + + yval = h - topmargin - bottommargin - (int)relint; + + if (i == xmin) { + rpath.moveTo(i, yval); + } + else { + rpath.lineTo(i, yval); + } + } + + scene->addPath(rpath, QPen(Qt::gray, 1, Qt::SolidLine)); + + } + + + scene->removeItem(zoomgroup); + scene->removeItem(cursorsimpletextitem); + + if (calledbyresizeevent) { + oldwidth.push_back(origwidth); + oldheight.push_back(origheight); + } + else { + oldwidth.clear(); + oldheight.clear(); + } + + bool blocksignal = false; + // detection of cyclic calls redrawScene<->resizeEvent + if ((oldwidth.size() == 4) && (oldheight.size() == 4)) { + if ((oldwidth[3] == oldwidth[1]) && (oldheight[3] == oldheight[1]) && (oldwidth[2] == oldwidth[0]) && (oldheight[2] == oldheight[0])) { + blocksignal = true; + } + } + + if (blocksignal) { + scene->blockSignals(true); + } + + scene->setSceneRect(scene->itemsBoundingRect()); + + if (blocksignal) { + scene->blockSignals(false); + } + + zoomgroup->setVisible(false); + scene->addItem(zoomgroup); + + cursorsimpletextitem->setVisible(false); + scene->addItem(cursorsimpletextitem); + + while (oldwidth.size() > 3) { + oldwidth.pop_front(); + } + + while (oldheight.size() > 3) { + oldheight.pop_front(); + } + + calledbyresizeevent = false; + +} + + +void cPatternSimulatorSceneWidget::updateZoomGroup() { + qreal rx1, rx2, ry1, ry2; + QFont myFont("Arial", 8); + + if (currentx < pressedx) { + rx1 = currentx; + rx2 = pressedx; + } + else { + rx1 = pressedx; + rx2 = currentx; + } + + if (currenty < pressedy) { + ry1 = currenty; + ry2 = pressedy; + } + else { + ry1 = pressedy; + ry2 = currenty; + } + + zoomrect->setPen(QPen(Qt::black, 1, Qt::DashLine)); + zoomrect->setRect(QRectF(QPointF(rx1, ry1), QPointF(rx2, ry2))); + + QString qstr = "m/z: "; + qstr += QString::number(getMZRatioFromXPosition((pressedx < currentx)?pressedx:currentx, origwidth)); + qstr += "-"; + qstr += QString::number(getMZRatioFromXPosition((pressedx < currentx)?currentx:pressedx, origwidth)); + qstr += "\ndiff: "; + qstr += QString::number(getMZRatioFromXPosition((pressedx < currentx)?currentx:pressedx, origwidth) - getMZRatioFromXPosition((pressedx < currentx)?pressedx:currentx, origwidth)); + + zoomsimpletextitem->setFont(myFont); + zoomsimpletextitem->setText(qstr); + zoomsimpletextitem->setPos(QPointF(pressedx, pressedy - 2)); + + zoomgroup->setVisible(true); +} + + +void cPatternSimulatorSceneWidget::calculateMinMaxMZ() { + if (pressedx < leftmargin) { + pressedx = leftmargin; + } + + if (pressedx > origwidth - rightmargin) { + pressedx = origwidth - rightmargin; + } + + if (currentx < leftmargin) { + currentx = leftmargin; + } + + if (currentx > origwidth - rightmargin) { + currentx = origwidth - rightmargin; + } + + double tmpminmzratio = getMZRatioFromXPosition((pressedx < currentx) ? pressedx : currentx, origwidth); + double tmpmaxmzratio = getMZRatioFromXPosition((pressedx < currentx) ? currentx : pressedx, origwidth); + + if (enablemousemzselection) { + minmzratio = tmpminmzratio; + maxmzratio = tmpmaxmzratio; + } + else { + if (pressedx > currentx) { + minmzratio = min(minmzratio + tmpmaxmzratio - tmpminmzratio, isotopicpattern.getMaximumMZRatio() + mzoverhead); + maxmzratio = min(maxmzratio + tmpmaxmzratio - tmpminmzratio, isotopicpattern.getMaximumMZRatio() + mzoverhead); + } + else { + minmzratio = max(0.0, minmzratio - tmpmaxmzratio + tmpminmzratio); + maxmzratio = max(0.0, maxmzratio - tmpmaxmzratio + tmpminmzratio); + } + } +} + + +double cPatternSimulatorSceneWidget::getMaximumIntensity() { + double maxintensity = 0; + + if (absoluteintensity) { + maxintensity = isotopicpattern.getMaximumAbsoluteIntensityFromMZInterval(minmzratio, maxmzratio, false, false, other, false); + } + else { + maxintensity = isotopicpattern.getMaximumRelativeIntensityFromMZInterval(minmzratio, maxmzratio, false, false, other, false); + } + + return maxintensity; +} + + +void cPatternSimulatorSceneWidget::zoomIn() { + if (currentscale < 32) { + currentscale += factor; + setMatrix(originalmatrix); + scale(currentscale, currentscale); + verticalScrollBar()->setSliderPosition(verticalScrollBar()->maximum()); + } +} + + +void cPatternSimulatorSceneWidget::zoomOut() { + if (currentscale > 1) { + currentscale -= factor; + setMatrix(originalmatrix); + scale(currentscale, currentscale); + verticalScrollBar()->setSliderPosition(verticalScrollBar()->maximum()); + } +} + + +void cPatternSimulatorSceneWidget::normalSize() { + currentscale = 1; + setMatrix(originalmatrix); + verticalScrollBar()->setSliderPosition(verticalScrollBar()->maximum()); +} + + +void cPatternSimulatorSceneWidget::absoluteIntensityStateChanged(bool state) { + absoluteintensity = state; + redrawScene(); +} + + +void cPatternSimulatorSceneWidget::rawDataStateChanged(bool state) { + rawdatastate = state; + redrawScene(); +} + + +void cPatternSimulatorSceneWidget::setMZInterval(double minmz, double maxmz) { + if (maxmz < minmz) { + double tmp = maxmz; + maxmz = minmz; + minmz = tmp; + } + + minmzratio = std::max(0.0, minmz); + maxmzratio = std::min(maxmz, isotopicpattern.getMaximumMZRatio() + mzoverhead); + emit updateMZInterval(minmzratio, maxmzratio); + + redrawScene(); + viewport()->update(); +} + + +void cPatternSimulatorSceneWidget::resetMZInterval() { + minmzratio = max(isotopicpattern.getMinimumMZRatio() - mzoverhead, 0.0); + maxmzratio = isotopicpattern.getMaximumMZRatio() + mzoverhead; + emit updateMZInterval(minmzratio, maxmzratio); + + redrawScene(); +} + + +void cPatternSimulatorSceneWidget::enableMouseMzSelectionTool(bool enable) { + enablemousemzselection = enable; + pressedx = -1; + pressedy = -1; + + redrawScene(); +} + diff --git a/CycloBranch/gui/cPatternSimulatorSceneWidget.h b/CycloBranch/gui/cPatternSimulatorSceneWidget.h new file mode 100644 index 0000000..becd776 --- /dev/null +++ b/CycloBranch/gui/cPatternSimulatorSceneWidget.h @@ -0,0 +1,268 @@ +/** + \file cPatternSimulatorSceneWidget.h + \brief The implementation of an isotopic pattern simulator (graphics). +*/ + + +#ifndef _CPATTERNSIMULATORSCENEWIDGET_H +#define _CPATTERNSIMULATORSCENEWIDGET_H + +#include +#include +#include + +#include "core/cTheoreticalSpectrum.h" + + +using namespace std; + + +// forward declaration +class QPaintEvent; +class QGraphicsScene; +class QMatrix; +class QGraphicsItemGroup; +class QGraphicsRectItem; +class QGraphicsSimpleTextItem; + + +/** + \brief Compute value of Gaussian function. + \param x x + \param a a + \param ny ny + \param sigma sigma + \retval double f(x) +*/ +double computeGaussFunction(double x, double a, double ny, double sigma); + + +/** + \brief Compute height of Gaussian function (a). + \param x x + \param y y + \param ny ny + \param sigma sigma + \retval double a +*/ +double computeGaussHeight(double x, double y, double ny, double sigma); + + +/** + \brief The implementation of an isotopic pattern simulator (graphics). +*/ +class cPatternSimulatorSceneWidget : public QGraphicsView +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param parent pointer to a parent widget + */ + cPatternSimulatorSceneWidget(QWidget* parent = 0); + + + /** + \brief The destructor. + */ + ~cPatternSimulatorSceneWidget(); + + + /** + \brief Initialize the widget. + \param isotopicpattern an isotopic pattern + \param fwhm fwhm + */ + void initialize(cPeaksList isotopicpattern, double fwhm); + + + /** + \brief Export spectrum scene into a PDF or a PS file. + \param filename filename + \param postscript if true then PS file is generated instead of PDF + */ + void exportToPDF(QString filename, bool postscript); + + + /** + \brief Export spectrum scene into a SVG file. + \param filename filename + */ + void exportToSVG(QString filename); + + + /** + \brief Export spectrum scene into a PNG file. + \param filename filename + */ + void exportToPNG(QString filename); + + + /** + \brief Hide/Show labels of peaks. + \param state the peak labels are hidden when \a state is true + */ + void hidePeakLabels(bool state); + + +protected: + + + /** + \brief Handle the mouse wheel event. + \param event pointer to QWheelEvent + */ + void wheelEvent(QWheelEvent *event); + + + /** + \brief Handle the mouse move event. + \param event pointer to QMouseEvent + */ + void mouseMoveEvent(QMouseEvent *event); + + + /** + \brief Handle the mouse release event. + \param event pointer to QMouseEvent + */ + void mouseReleaseEvent(QMouseEvent *event); + + + /** + \brief Handle the mouse press event. + \param event pointer to QMouseEvent + */ + void mousePressEvent(QMouseEvent *event); + + + /** + \brief Handle the widget show event. + \param event pointer to QShowEvent + */ + void showEvent(QShowEvent *event); + + + /** + \brief Handle the widget resize event. + \param event pointer to QResizeEvent + */ + void resizeEvent(QResizeEvent *event); + + +private: + + QWidget* parent; + QGraphicsScene* scene; + QMatrix originalmatrix; + + QGraphicsItemGroup* zoomgroup; + QGraphicsRectItem* zoomrect; + QGraphicsSimpleTextItem* zoomsimpletextitem; + + QGraphicsSimpleTextItem* cursorsimpletextitem; + + cPeaksList isotopicpattern; + + qreal currentscale; + qreal factor; + + int origwidth; + int origheight; + + bool calledbyresizeevent; + deque oldwidth; + deque oldheight; + + bool absoluteintensity; + bool rawdatastate; + bool hidelabels; + + int pressedx; + int pressedy; + + int currentx; + int currenty; + + double minmzratio; + double maxmzratio; + + int topmargin; + int bottommargin; + int leftmargin; + int rightmargin; + + bool firstshow; + bool enablemousemzselection; + + double mzoverhead; + double fwhm; + + + double getMZRatioFromXPosition(int x, int w); + + + int getXPositionFromMZRatio(double mzratio, int w); + + + double getIntensityFromYPosition(int y, int h); + + + int getYPositionFromIntensity(double intensity, int h); + + + void redrawScene(); + + + void updateZoomGroup(); + + + void calculateMinMaxMZ(); + + + double getMaximumIntensity(); + + +signals: + + + /** + \brief The signal is emitted when the range of m/z ratios has been changed. + \param minmz a minimum threshold of m/z ratio + \param maxmz a maximum threshold of m/z ratio + */ + void updateMZInterval(double minmz, double maxmz); + + +private slots: + + + void zoomIn(); + + + void zoomOut(); + + + void normalSize(); + + + void absoluteIntensityStateChanged(bool state); + + + void rawDataStateChanged(bool state); + + + void setMZInterval(double minmz, double maxmz); + + + void resetMZInterval(); + + + void enableMouseMzSelectionTool(bool enable); + +}; + +#endif diff --git a/CycloBranch/gui/cPatternSimulatorWidget.cpp b/CycloBranch/gui/cPatternSimulatorWidget.cpp new file mode 100644 index 0000000..a8994f0 --- /dev/null +++ b/CycloBranch/gui/cPatternSimulatorWidget.cpp @@ -0,0 +1,782 @@ +#include "gui/cPatternSimulatorWidget.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +cPatternSimulatorWidget::cPatternSimulatorWidget(cGlobalPreferences* globalpreferences, QWidget *parent) { + this->parent = parent; + this->globalpreferences = globalpreferences; + + setWindowTitle("Simulate Isotopic Pattern"); + setWindowIcon(QIcon(":/images/icons/pattern.png")); + + vsplitter = new QSplitter(); + vsplitter->setOrientation(Qt::Vertical); + + hsplitter1 = new QSplitter(); + hsplitter1->setOrientation(Qt::Horizontal); + + hsplitter2 = new QSplitter(); + hsplitter2->setOrientation(Qt::Horizontal); + + spectrumscene = new cPatternSimulatorSceneWidget(this); + + menuBar = new QMenuBar(this); + menuBar->setNativeMenuBar(false); + menuFile = new QMenu(tr("&File"), this); + menuView = new QMenu(tr("&View"), this); + menuHelp = new QMenu(tr("&Help"), this); + + toolbarFile = addToolBar(tr("File")); + + actionExportTable = new QAction(QIcon(":/images/icons/csv.png"), tr("&Export Table to CSV"), this); + actionExportTable->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_E)); + actionExportTable->setToolTip("Export Table to CSV (Ctrl + E)"); + toolbarFile->addAction(actionExportTable); + connect(actionExportTable, SIGNAL(triggered()), this, SLOT(exportTableToCSV())); + + actionExportSpectrum = new QAction(QIcon(":/images/icons/66.png"), tr("Export Ima&ge"), this); + actionExportSpectrum->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_G)); + actionExportSpectrum->setToolTip("Export Image (Ctrl + G)"); + toolbarFile->addAction(actionExportSpectrum); + connect(actionExportSpectrum, SIGNAL(triggered()), this, SLOT(exportSpectrum())); + + actionCloseWindow = new QAction(QIcon(":/images/icons/33.png"), tr("&Close"), this); + actionCloseWindow->setShortcut(QKeySequence(Qt::Key_Escape)); + actionCloseWindow->setToolTip("Close (Esc)"); + toolbarFile->addAction(actionCloseWindow); + connect(actionCloseWindow, SIGNAL(triggered()), this, SLOT(closeWindow())); + + toolbarView = addToolBar(tr("View")); + + actionZoomIn = new QAction(QIcon(":/images/icons/83.png"), tr("Zoom &In"), this); + actionZoomIn->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Plus)); + actionZoomIn->setToolTip("Zoom In (Ctrl +)"); + toolbarView->addAction(actionZoomIn); + connect(actionZoomIn, SIGNAL(triggered()), spectrumscene, SLOT(zoomIn())); + + actionZoomOut = new QAction(QIcon(":/images/icons/82.png"), tr("Zoom &Out"), this); + actionZoomOut->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Minus)); + actionZoomOut->setToolTip("Zoom Out (Ctrl -)"); + toolbarView->addAction(actionZoomOut); + connect(actionZoomOut, SIGNAL(triggered()), spectrumscene, SLOT(zoomOut())); + + actionZoomReset = new QAction(QIcon(":/images/icons/84.png"), tr("&Reset Zoom"), this); + actionZoomReset->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_R)); + actionZoomReset->setToolTip("Zoom Reset (Ctrl + R)"); + toolbarView->addAction(actionZoomReset); + connect(actionZoomReset, SIGNAL(triggered()), spectrumscene, SLOT(normalSize())); + + toolbarView->addSeparator(); + + actionAbsoluteIntensity = new QAction(QIcon(":/images/icons/11.png"), tr("&Absolute Intensity"), this); + actionAbsoluteIntensity->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_I)); + actionAbsoluteIntensity->setToolTip("Absolute Intensity (Ctrl + I)"); + actionAbsoluteIntensity->setCheckable(true); + toolbarView->addAction(actionAbsoluteIntensity); + connect(actionAbsoluteIntensity, SIGNAL(toggled(bool)), spectrumscene, SLOT(absoluteIntensityStateChanged(bool))); + + actionRawData = new QAction(QIcon(":/images/icons/chromatography.png"), tr("&Profile Spectrum"), this); + actionRawData->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P)); + actionRawData->setToolTip("Profile Spectrum (Ctrl + P)"); + actionRawData->setCheckable(true); + actionRawData->setChecked(true); + toolbarView->addAction(actionRawData); + connect(actionRawData, SIGNAL(toggled(bool)), this, SLOT(rawDataStateChanged(bool))); + connect(this, SIGNAL(rawDataStateChangedSignal(bool)), spectrumscene, SLOT(rawDataStateChanged(bool))); + + toolbarView->addSeparator(); + + actionHideLabels = new QAction(QIcon(":/images/icons/79.png"), tr("Hide Peak &Labels"), this); + actionHideLabels->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); + actionHideLabels->setToolTip("Hide Peak Labels (Ctrl + L)"); + actionHideLabels->setCheckable(true); + actionHideLabels->setChecked(true); + toolbarView->addAction(actionHideLabels); + connect(actionHideLabels, SIGNAL(toggled(bool)), this, SLOT(hidePeakLabels(bool))); + + toolbarHelp = addToolBar(tr("Help")); + + actionHTMLDocumentation = new QAction(QIcon(":/images/icons/3.png"), tr("&HTML Documentation"), this); + actionHTMLDocumentation->setShortcut(QKeySequence(Qt::Key_F1)); + actionHTMLDocumentation->setToolTip("Show HTML Documentation (F1)"); + toolbarHelp->addAction(actionHTMLDocumentation); + connect(actionHTMLDocumentation, SIGNAL(triggered()), this, SLOT(showHTMLDocumentation())); + + peakstable = new QTableView(this); + peakstablemodel = new QStandardItemModel(0, 0, this); + proxymodel = new cSpectrumDetailProxyModel(this); + proxymodel->setSourceModel(peakstablemodel); + proxymodel->setDynamicSortFilter(false); + peakstable->setModel(proxymodel); + peakstable->setSortingEnabled(true); + + labelmz = new QLabel(tr("m/z: ")); + + minmz = new QDoubleSpinBox(); + minmz->setDecimals(6); + minmz->setRange(0, 100000); + minmz->setSingleStep(1); + + labelseparator = new QLabel(tr("-")); + + maxmz = new QDoubleSpinBox(); + maxmz->setDecimals(6); + maxmz->setRange(0, 100000); + maxmz->setSingleStep(1); + + setmzinterval = new QPushButton("Set"); + setmzinterval->setMinimumWidth(75); + connect(setmzinterval, SIGNAL(released()), this, SLOT(setMZInterval())); + connect(this, SIGNAL(emitMZInterval(double, double)), spectrumscene, SLOT(setMZInterval(double, double))); + + resetmzinterval = new QPushButton("Reset"); + resetmzinterval->setMinimumWidth(75); + connect(resetmzinterval, SIGNAL(released()), spectrumscene, SLOT(resetMZInterval())); + connect(spectrumscene, SIGNAL(updateMZInterval(double, double)), this, SLOT(updateMZInterval(double, double))); + + hboxmz = new QHBoxLayout(); + hboxmz->addWidget(labelmz); + hboxmz->addWidget(minmz); + hboxmz->addWidget(labelseparator); + hboxmz->addWidget(maxmz); + hboxmz->addSpacing(5); + hboxmz->addWidget(setmzinterval); + hboxmz->addSpacing(5); + hboxmz->addWidget(resetmzinterval); + + widgetmz = new QWidget(); + widgetmz->setLayout(hboxmz); + + toolbarMz = addToolBar(tr("m/z")); + + actionMouseMzSelection = new QAction(QIcon(":/images/icons/64.png"), tr("Mouse m/z Selection Tool"), this); + actionMouseMzSelection->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_T)); + actionMouseMzSelection->setToolTip("Mouse m/z Selection Tool (Ctrl + T)"); + actionMouseMzSelection->setCheckable(true); + actionMouseMzSelection->setChecked(true); + actionMouseMzSelection->setEnabled(true); + toolbarMz->addAction(actionMouseMzSelection); + connect(actionMouseMzSelection, SIGNAL(toggled(bool)), spectrumscene, SLOT(enableMouseMzSelectionTool(bool))); + + toolbarMz->addWidget(widgetmz); + + addToolBarBreak(); + + toolbarInput = addToolBar(tr("Input")); + + labeliontype = new QLabel(tr("Ion Type: ")); + comboboxiontype = new QComboBox(); + comboboxiontype->setSizeAdjustPolicy(QComboBox::AdjustToContents); + hboxiontype = new QHBoxLayout(); + hboxiontype->addWidget(labeliontype); + hboxiontype->addWidget(comboboxiontype); + widgetiontype = new QWidget(); + widgetiontype->setLayout(hboxiontype); + toolbarInput->addWidget(widgetiontype); + + labelformula = new QLabel("Formula (M): "); + lineeditformula = new QLineEdit(); + hboxformula = new QHBoxLayout(); + hboxformula->addWidget(labelformula); + hboxformula->addWidget(lineeditformula); + widgetformula = new QWidget(); + widgetformula->setLayout(hboxformula); + widgetformula->setMaximumWidth(300); + toolbarInput->addWidget(widgetformula); + + labelfwhm = new QLabel("FWHM: "); + doublespinboxfwhm = new QDoubleSpinBox(); + //doublespinboxfwhm->setMinimumWidth(120); + doublespinboxfwhm->setDecimals(6); + doublespinboxfwhm->setRange(0, 1); + doublespinboxfwhm->setSingleStep(0.001); + doublespinboxfwhm->setSuffix(" Da"); + doublespinboxfwhm->setValue(0.05); + hboxfwhm = new QHBoxLayout(); + hboxfwhm->addWidget(labelfwhm); + hboxfwhm->addWidget(doublespinboxfwhm); + widgetfwhm = new QWidget(); + widgetfwhm->setLayout(hboxfwhm); + toolbarInput->addWidget(widgetfwhm); + + labelcharge = new QLabel("Charge: "); + spinboxcharge = new QSpinBox(); + //spinboxcharge->setMinimumWidth(120); + spinboxcharge->setRange(-100, 100); + spinboxcharge->setSingleStep(1); + spinboxcharge->setValue(1); + hboxcharge = new QHBoxLayout(); + hboxcharge->addWidget(labelcharge); + hboxcharge->addWidget(spinboxcharge); + widgetcharge = new QWidget(); + widgetcharge->setLayout(hboxcharge); + toolbarInput->addWidget(widgetcharge); + + labelabsoluteintensity = new QLabel("Max. Absolute Intensity: "); + doublespinboxabsoluteintensity = new QDoubleSpinBox(); + //doublespinboxabsoluteintensity->setMinimumWidth(120); + doublespinboxabsoluteintensity->setDecimals(0); + doublespinboxabsoluteintensity->setRange(1000.0, DBL_MAX); + doublespinboxabsoluteintensity->setSingleStep(1000000.0); + doublespinboxabsoluteintensity->setValue(1000000.0); + hboxabsoluteintensity = new QHBoxLayout(); + hboxabsoluteintensity->addWidget(labelabsoluteintensity); + hboxabsoluteintensity->addWidget(doublespinboxabsoluteintensity); + widgetabsoluteintensity = new QWidget(); + widgetabsoluteintensity->setLayout(hboxabsoluteintensity); + toolbarInput->addWidget(widgetabsoluteintensity); + + simulatebutton = new QPushButton("Simulate"); + simulatebutton->setMinimumWidth(75); + toolbarInput->addWidget(simulatebutton); + + connect(simulatebutton, SIGNAL(released()), this, SLOT(simulateButtonReleased())); + + hsplitter1->addWidget(spectrumscene); + hsplitter2->addWidget(peakstable); + + QList sizes; + sizes.push_back(300); + sizes.push_back(100); + + vsplitter->addWidget(hsplitter1); + vsplitter->addWidget(hsplitter2); + + vsplitter->setSizes(sizes); + + setCentralWidget(vsplitter); + centralWidget()->setContentsMargins(5, 5, 5, 5); + + exportdialog = new cExportDialog(this); + + menuFile->addAction(actionExportTable); + menuFile->addAction(actionExportSpectrum); + menuFile->addSeparator(); + menuFile->addAction(actionCloseWindow); + + menuView->addAction(actionZoomIn); + menuView->addAction(actionZoomOut); + menuView->addAction(actionZoomReset); + menuView->addSeparator(); + menuView->addAction(actionAbsoluteIntensity); + menuView->addAction(actionRawData); + menuView->addSeparator(); + menuView->addAction(actionHideLabels); + + menuHelp->addAction(actionHTMLDocumentation); + + menuBar->addMenu(menuFile); + menuBar->addMenu(menuView); + menuBar->addMenu(menuHelp); + + setMenuBar(menuBar); + + resize(defaultwinsizex, defaultwinsizey); + + applyGlobalPreferences(globalpreferences); +} + + +cPatternSimulatorWidget::~cPatternSimulatorWidget() { + delete spectrumscene; + + deleteTable(); + + delete peakstablemodel; + delete proxymodel; + delete peakstable; + + delete labelmz; + delete minmz; + delete labelseparator; + delete maxmz; + delete setmzinterval; + delete resetmzinterval; + delete hboxmz; + delete widgetmz; + + delete labeliontype; + delete comboboxiontype; + delete hboxiontype; + delete widgetiontype; + + delete labelformula; + delete lineeditformula; + delete hboxformula; + delete widgetformula; + + delete labelfwhm; + delete doublespinboxfwhm; + delete hboxfwhm; + delete widgetfwhm; + + delete labelcharge; + delete spinboxcharge; + delete hboxcharge; + delete widgetcharge; + + delete labelabsoluteintensity; + delete doublespinboxabsoluteintensity; + delete hboxabsoluteintensity; + delete widgetabsoluteintensity; + + delete simulatebutton; + + delete hsplitter1; + delete hsplitter2; + + delete vsplitter; + + delete actionExportTable; + delete actionExportSpectrum; + delete actionCloseWindow; + delete actionZoomIn; + delete actionZoomOut; + delete actionZoomReset; + delete actionAbsoluteIntensity; + delete actionRawData; + delete actionHideLabels; + delete actionMouseMzSelection; + delete actionHTMLDocumentation; + + delete exportdialog; + + delete menuFile; + delete menuView; + delete menuHelp; + + delete menuBar; +} + + +void cPatternSimulatorWidget::closeEvent(QCloseEvent *event) { + hide(); + event->accept(); +} + + +void cPatternSimulatorWidget::applyGlobalPreferences(cGlobalPreferences* globalpreferences) { + if (globalpreferences) { + comboboxiontype->clear(); + for (auto it : globalpreferences->customions) { + comboboxiontype->addItem(it.name.c_str()); + } + } +} + + +void cPatternSimulatorWidget::keyPressEvent(QKeyEvent *event) { + if ((event->key() == Qt::Key_Enter) || (event->key() == Qt::Key_Return)) { + if (minmz->hasFocus() || maxmz->hasFocus() || setmzinterval->hasFocus()) { + setMZInterval(); + } + else { + simulateButtonReleased(); + } + } + + if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) { + QModelIndexList selectedindexes = peakstable->selectionModel()->selectedIndexes(); + QStandardItem* item; + + QString selectedtext; + string itemtext; + + int selectedcount = selectedindexes.count(); + for (int i = 0; i < selectedcount; i++) { + if (i > 0) { + if (proxymodel->mapToSource(selectedindexes[i - 1]).row() != proxymodel->mapToSource(selectedindexes[i]).row()) { + selectedtext += "\n"; + } + else { + selectedtext += "\t"; + } + } + + item = peakstablemodel->itemFromIndex(proxymodel->mapToSource(selectedindexes[i])); + if (item) { + itemtext = item->text().toStdString(); + selectedtext += stripHTML(itemtext).c_str(); + } + } + selectedtext += "\n"; + QApplication::clipboard()->setText(selectedtext); + } + + event->accept(); +} + + +void cPatternSimulatorWidget::preparePeaksTable(cPeaksList& isotopepattern) { + deleteTable(); + + peakstable->setEditTriggers(QAbstractItemView::NoEditTriggers); + peakstable->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); + peakstable->horizontalHeader()->setSectionsMovable(true); + //peakstable->verticalHeader()->setDefaultSectionSize(30); + + peakstablemodel->setColumnCount(4); + + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + peakstablemodel->setHorizontalHeaderItem(i, new QStandardItem()); + } + + int currentcolumn = 0; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Theoretical m/z"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Theoretical Relative Intensity [%]"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Theoretical Absolute Intensity"); + currentcolumn++; + + peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Summary Formula"); + peakstable->setItemDelegateForColumn(currentcolumn, new cHTMLDelegate()); + + int thpeakscount = isotopepattern.size(); + peakstablemodel->setRowCount(thpeakscount); + + peakstable->setModel(0); + proxymodel->setSourceModel(0); + peakstable->setSortingEnabled(false); + + for (int i = 0; i < thpeakscount; i++) { + currentcolumn = 0; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(isotopepattern[i].mzratio)), Qt::DisplayRole); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(isotopepattern[i].relativeintensity)), Qt::DisplayRole); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setData(QVariant::fromValue(cropDecimalsByteArray(isotopepattern[i].absoluteintensity)), Qt::DisplayRole); + currentcolumn++; + + peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); + peakstablemodel->item(i, currentcolumn)->setText(isotopepattern[i].description.c_str()); + } + + proxymodel->setSourceModel(peakstablemodel); + peakstable->setModel(proxymodel); + peakstable->setSortingEnabled(true); + + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + peakstable->resizeColumnToContents(i); + } + + peakstable->setColumnWidth(3, min(1200, peakstable->columnWidth(3))); +} + + +void cPatternSimulatorWidget::deleteTable() { + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + if (peakstable->itemDelegateForColumn(i)) { + delete peakstable->itemDelegateForColumn(i); + } + } + peakstablemodel->clear(); +} + + +void cPatternSimulatorWidget::simulateButtonReleased() { + QMessageBox msgbox; + string errmsg; + string tmpstring; + string proton = "H+"; + + if (comboboxiontype->currentIndex() == -1) { + errmsg = "A ion type must be defined (go to 'File->Preferences->Ion Types' in the main window) !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + cIonType iontype = globalpreferences->customions[comboboxiontype->currentIndex()]; + + cSummaryFormula formula; + formula.setFormula(lineeditformula->text().toStdString()); + + double fwhm = doublespinboxfwhm->value(); + int charge = spinboxcharge->value(); + double absoluteintensity = doublespinboxabsoluteintensity->value(); + + if (formula.isEmpty()) { + errmsg = "The formula is empty !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + if (!formula.isValid(errmsg)) { + errmsg = "The formula is not valid !\n\n"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + if (fwhm <= 0) { + errmsg = "The FWHM value must be > 0 !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + if (charge == 0) { + errmsg = "The charge cannot be zero !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + if (absoluteintensity < 1000.0) { + errmsg = "The maximum absolute intensity must be >= 1000 !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + if (iontype.positive && (charge < 0)) { + errmsg = "The selected ion type is defined for positive mode but the value of charge is negative !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + if (!iontype.positive && (charge > 0)) { + errmsg = "The selected ion type is defined for negative mode but the value of charge is positive !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + cSummaryFormula ionformula; + for (int i = 0; i < iontype.multiplier; i++) { + tmpstring = formula.getSummary(); + ionformula.addFormula(tmpstring); + } + ionformula.addFormula(iontype.formula); + + for (int i = 1; i < abs(charge); i++) { + if (iontype.positive) { + ionformula.addFormula(proton); + } + else { + ionformula.addFormula(proton, true); + } + } + + double mz = ionformula.getMass(); + if (mz > 25000) { + errmsg = "The mass of compound exceeds the maximum limit 25000 Da !"; + msgbox.setText(errmsg.c_str()); + msgbox.exec(); + return; + } + + cPeaksList isotopepattern = ionformula.getIsotopePattern(fwhm, abs(charge), iontype.positive, 40, true); + for (int i = 0; i < isotopepattern.size(); i++) { + isotopepattern[i].absoluteintensity = isotopepattern[i].relativeintensity / 100.0 * absoluteintensity; + } + + /* + string ionname = iontype.name.substr(0, iontype.name.size() - 1) + " "; + ionname += to_string(abs(charge)); + if (iontype.positive) { + ionname += "+"; + } + else { + ionname += "-"; + } + */ + + preparePeaksTable(isotopepattern); + + spectrumscene->initialize(isotopepattern, fwhm); +} + + +void cPatternSimulatorWidget::updateMZInterval(double minmz, double maxmz) { + this->minmz->setValue(minmz); + this->maxmz->setValue(maxmz); +} + + +void cPatternSimulatorWidget::setMZInterval() { + emit emitMZInterval(minmz->value(), maxmz->value()); +} + + +void cPatternSimulatorWidget::exportSpectrum() { + QString currentdir = "./"; + if (globalpreferences) { + currentdir = globalpreferences->exportimagedefaultdir; + } + + #if OS_TYPE == WIN + QString filename = QFileDialog::getSaveFileName(this, tr("Export Spectrum..."), currentdir, "PDF Files (*.pdf);; PS Files (*.ps);; PNG Files (*.png);; SVG Files (*.svg)"); + #else + QString filename = QFileDialog::getSaveFileName(this, tr("Export Spectrum..."), currentdir, "PDF Files (*.pdf);; PNG Files (*.png);; SVG Files (*.svg)"); + #endif + if (!filename.isEmpty()) { + regex rx; + bool selected = false; + + rx = ".+\\.pdf$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + spectrumscene->exportToPDF(filename, false); + selected = true; + } + + #if OS_TYPE == WIN + rx = ".+\\.ps$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + spectrumscene->exportToPDF(filename, true); + selected = true; + } + #endif + + rx = ".+\\.png$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + spectrumscene->exportToPNG(filename); + selected = true; + } + + rx = ".+\\.svg$"; + if (!selected && (regex_search(filename.toStdString(), rx))) { + spectrumscene->exportToSVG(filename); + selected = true; + } + + if (!selected) { + QMessageBox msgBox; + QString errstr = "Unsupported file format."; + msgBox.setText(errstr); + msgBox.exec(); + } + } +} + + +void cPatternSimulatorWidget::exportTableToCSV() { + QString currentdir = "./"; + if (globalpreferences) { + currentdir = globalpreferences->exportcsvdefaultdir; + } + + QString filename = QFileDialog::getSaveFileName(this, tr("Export Table to CSV..."), currentdir, "Files (*.csv)"); + + if (!filename.isEmpty()) { + + QProgressDialog progress("Exporting the CSV file...", "Cancel", 0, proxymodel->rowCount(), this); + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + + bool removefile = false; + QFile file(filename); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { + return; + } + + QTextStream out(&file); + + for (int i = 0; i < peakstablemodel->columnCount(); i++) { + out << "\"" << peakstablemodel->horizontalHeaderItem(i)->text() << "\""; + if (i < peakstablemodel->columnCount() - 1) { + out << ","; + } + } + out << endl; + + QStandardItem* item; + string str; + for (int i = 0; i < proxymodel->rowCount(); i++) { + + for (int j = 0; j < peakstablemodel->columnCount(); j++) { + item = peakstablemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, j))); + if (item) { + str = item->data(Qt::DisplayRole).toString().toStdString(); + out << "\"" << stripHTML(str).c_str() << "\""; + if (j < peakstablemodel->columnCount() - 1) { + out << ","; + } + } + else { + if (j < peakstablemodel->columnCount() - 1) { + out << ","; + } + } + } + out << endl; + + progress.setValue(i); + if (progress.wasCanceled()) { + removefile = true; + break; + } + } + + file.close(); + + if (removefile) { + file.remove(); + } + + progress.setValue(proxymodel->rowCount()); + + } +} + + +void cPatternSimulatorWidget::rawDataStateChanged(bool state) { + emit rawDataStateChangedSignal(state); +} + + +void cPatternSimulatorWidget::hidePeakLabels(bool hide) { + spectrumscene->hidePeakLabels(hide); +} + + +void cPatternSimulatorWidget::showHTMLDocumentation() { + #if OS_TYPE == WIN + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/simulateisotopicpattern.html").absoluteFilePath())); + #else + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/simulateisotopicpattern.html").absoluteFilePath())); + #endif +} + + +void cPatternSimulatorWidget::closeWindow() { + hide(); +} + diff --git a/CycloBranch/gui/cPatternSimulatorWidget.h b/CycloBranch/gui/cPatternSimulatorWidget.h new file mode 100644 index 0000000..6b396bb --- /dev/null +++ b/CycloBranch/gui/cPatternSimulatorWidget.h @@ -0,0 +1,228 @@ +/** + \file cPatternSimulatorWidget.h + \brief The implementation of an isotopic pattern simulator (window). +*/ + + +#ifndef _CPATTERNSIMULATORWIDGET_H +#define _CPATTERNSIMULATORWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "core/cGlobalPreferences.h" +#include "gui/cPatternSimulatorSceneWidget.h" +#include "gui/cSpectrumDetailProxyModel.h" +#include "gui/cExportDialog.h" +#include "gui/cEventFilter.h" +#include "gui/cHTMLDelegate.h" + + +// forward declaration +class QTextBrowser; +class QHBoxLayout; +class QVBoxLayout; +class QFormLayout; +class QCheckBox; +class QPushButton; +class QSplitter; +class QComboBox; +class QDoubleSpinBox; +class QSpinBox; +class QAction; +class QLabel; + + +/** + \brief The implementation of an isotopic pattern simulator (window). +*/ +class cPatternSimulatorWidget : public QMainWindow +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + \param globalpreferences global preferences of the application + \param parent pointer to a parent widget + */ + cPatternSimulatorWidget(cGlobalPreferences* globalpreferences, QWidget *parent); + + + /** + \brief The destructor. + */ + ~cPatternSimulatorWidget(); + + + /** + \brief Handle the window close event. + \param event pointer to QCloseEvent + */ + void closeEvent(QCloseEvent *event); + + + /** + \brief Apply new global preferences. + \param globalpreferences global preferences of the application + */ + void applyGlobalPreferences(cGlobalPreferences* globalpreferences); + + +protected: + + + /** + \brief Handle a key press event. + \param event pointer to QKeyEvent + */ + void keyPressEvent(QKeyEvent *event); + + +private: + + cGlobalPreferences* globalpreferences; + QWidget* parent; + + QMenuBar* menuBar; + QMenu* menuFile; + QMenu* menuView; + QMenu* menuHelp; + + QToolBar* toolbarFile; + QToolBar* toolbarView; + QToolBar* toolbarHelp; + QToolBar* toolbarMz; + QToolBar* toolbarInput; + + QAction* actionExportTable; + QAction* actionExportSpectrum; + QAction* actionCloseWindow; + QAction* actionZoomIn; + QAction* actionZoomOut; + QAction* actionZoomReset; + QAction* actionAbsoluteIntensity; + QAction* actionRawData; + QAction* actionHideLabels; + QAction* actionMouseMzSelection; + QAction* actionHTMLDocumentation; + QSplitter* hsplitter1; + QSplitter* hsplitter2; + QSplitter* vsplitter; + + QWidget* widgetmz; + QHBoxLayout* hboxmz; + QLabel* labelmz; + QDoubleSpinBox* minmz; + QLabel* labelseparator; + QDoubleSpinBox* maxmz; + QPushButton* setmzinterval; + QPushButton* resetmzinterval; + + QWidget* widgetiontype; + QHBoxLayout* hboxiontype; + QLabel* labeliontype; + QComboBox* comboboxiontype; + + QWidget* widgetformula; + QHBoxLayout* hboxformula; + QLabel* labelformula; + QLineEdit* lineeditformula; + + QWidget* widgetfwhm; + QHBoxLayout* hboxfwhm; + QLabel* labelfwhm; + QDoubleSpinBox* doublespinboxfwhm; + + QWidget* widgetcharge; + QHBoxLayout* hboxcharge; + QLabel* labelcharge; + QSpinBox* spinboxcharge; + + QWidget* widgetabsoluteintensity; + QHBoxLayout* hboxabsoluteintensity; + QLabel* labelabsoluteintensity; + QDoubleSpinBox* doublespinboxabsoluteintensity; + + QPushButton* simulatebutton; + + QTableView* peakstable; + QStandardItemModel* peakstablemodel; + cSpectrumDetailProxyModel* proxymodel; + + cPatternSimulatorSceneWidget* spectrumscene; + + cExportDialog* exportdialog; + + + void preparePeaksTable(cPeaksList& isotopepattern); + + + void deleteTable(); + + +signals: + + + /** + \brief The signal is emitted when the range of m/z ratios is changed. + \param minmz a minimum threshold of m/z ratio + \param maxmz a maximum threshold of m/z ratio + */ + void emitMZInterval(double minmz, double maxmz); + + + /** + \brief The signal is emitted when raw data state was changed. + \param state current state + */ + void rawDataStateChangedSignal(bool state); + + +private slots: + + + void simulateButtonReleased(); + + + void updateMZInterval(double minmz, double maxmz); + + + void setMZInterval(); + + + void exportSpectrum(); + + + void exportTableToCSV(); + + + void rawDataStateChanged(bool state); + + + void hidePeakLabels(bool hide); + + + void showHTMLDocumentation(); + + + void closeWindow(); + +}; + +#endif + diff --git a/CycloBranch/gui/cPreferencesDialog.cpp b/CycloBranch/gui/cPreferencesDialog.cpp index 94ff4d4..875f7cd 100644 --- a/CycloBranch/gui/cPreferencesDialog.cpp +++ b/CycloBranch/gui/cPreferencesDialog.cpp @@ -15,9 +15,11 @@ cPreferencesDialog::cPreferencesDialog(cGlobalPreferences& globalpreferences, QW tabwidget = new QTabWidget(); tabwidget->addTab(tabiontypes, tr("Ion Types")); - //tabwidget->addTab(tabdataprocessing, tr("Data Processing")); + #if OS_TYPE == WIN + tabwidget->addTab(tabdataprocessing, tr("Data Processing")); + #endif tabwidget->addTab(tabdirectories, tr("Directories")); - tabwidget->addTab(taburls, tr("URLs")); + tabwidget->addTab(taburls, tr("Bookmarks")); buttonbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); diff --git a/CycloBranch/gui/cPreferencesTabDataProcessing.cpp b/CycloBranch/gui/cPreferencesTabDataProcessing.cpp index 3c4a574..e3caf03 100644 --- a/CycloBranch/gui/cPreferencesTabDataProcessing.cpp +++ b/CycloBranch/gui/cPreferencesTabDataProcessing.cpp @@ -4,19 +4,29 @@ cPreferencesTabDataProcessing::cPreferencesTabDataProcessing(cGlobalPreferences& globalpreferences, QWidget *parent) : QWidget(parent) { gridlayout = new QGridLayout(); - labelbafprocessingmethod = new QLabel("BAF processing method : "); - comboboxbafprocessingmethod = new QComboBox(); - comboboxbafprocessingmethod->addItem("CompassXport"); - comboboxbafprocessingmethod->addItem("CompassXtract"); - gridlayout->addWidget(labelbafprocessingmethod, 0, 0); - gridlayout->addWidget(comboboxbafprocessingmethod, 0, 1); + labellinebafprocessingmethod = new QLabel("Line Data Converter (*.baf) : "); + comboboxlinebafprocessingmethod = new QComboBox(); + comboboxlinebafprocessingmethod->addItem("CompassXport"); + comboboxlinebafprocessingmethod->addItem("CompassXtract"); + comboboxlinebafprocessingmethod->setCurrentIndex(globalpreferences.linebafprocessingmethod); + gridlayout->addWidget(labellinebafprocessingmethod, 0, 0); + gridlayout->addWidget(comboboxlinebafprocessingmethod, 0, 1); + + labelprofilebafprocessingmethod = new QLabel("Profile Data Converter (*.baf) : "); + comboboxprofilebafprocessingmethod = new QComboBox(); + comboboxprofilebafprocessingmethod->addItem("CompassXport"); + comboboxprofilebafprocessingmethod->addItem("CompassXtract"); + comboboxprofilebafprocessingmethod->setCurrentIndex(globalpreferences.profilebafprocessingmethod); + gridlayout->addWidget(labelprofilebafprocessingmethod, 1, 0); + gridlayout->addWidget(comboboxprofilebafprocessingmethod, 1, 1); labelrawdataprocessingmethod = new QLabel("Peak Picking (non-vendor's file formats) : "); comboboxrawdataprocessingmethod = new QComboBox(); comboboxrawdataprocessingmethod->addItem("OpenMS"); - comboboxrawdataprocessingmethod->addItem("Built-in"); - gridlayout->addWidget(labelrawdataprocessingmethod, 1, 0); - gridlayout->addWidget(comboboxrawdataprocessingmethod, 1, 1); + comboboxrawdataprocessingmethod->addItem("Custom"); + //comboboxrawdataprocessingmethod->setCurrentIndex(globalpreferences.rawdataprocessingmethod); + //gridlayout->addWidget(labelrawdataprocessingmethod, 2, 0); + //gridlayout->addWidget(comboboxrawdataprocessingmethod, 2, 1); gridlayoutwidget = new QWidget(); gridlayoutwidget->setLayout(gridlayout); @@ -40,20 +50,27 @@ cPreferencesTabDataProcessing::cPreferencesTabDataProcessing(cGlobalPreferences& void cPreferencesTabDataProcessing::setPreferences(cGlobalPreferences& globalpreferences) { - globalpreferences.bafprocessingmethod = comboboxbafprocessingmethod->currentIndex(); + globalpreferences.linebafprocessingmethod = comboboxlinebafprocessingmethod->currentIndex(); + globalpreferences.profilebafprocessingmethod = comboboxprofilebafprocessingmethod->currentIndex(); + globalpreferences.rawdataprocessingmethod = comboboxrawdataprocessingmethod->currentIndex(); } void cPreferencesTabDataProcessing::resetPreferences(cGlobalPreferences& globalpreferences) { - comboboxbafprocessingmethod->setCurrentIndex(globalpreferences.bafprocessingmethod); + comboboxlinebafprocessingmethod->setCurrentIndex(globalpreferences.linebafprocessingmethod); + comboboxprofilebafprocessingmethod->setCurrentIndex(globalpreferences.profilebafprocessingmethod); + comboboxrawdataprocessingmethod->setCurrentIndex(globalpreferences.rawdataprocessingmethod); } cPreferencesTabDataProcessing::~cPreferencesTabDataProcessing() { - delete labelbafprocessingmethod; - delete comboboxbafprocessingmethod; + delete labellinebafprocessingmethod; + delete comboboxlinebafprocessingmethod; + + delete labelprofilebafprocessingmethod; + delete comboboxprofilebafprocessingmethod; delete labelrawdataprocessingmethod; delete comboboxrawdataprocessingmethod; @@ -71,7 +88,10 @@ cPreferencesTabDataProcessing::~cPreferencesTabDataProcessing() { void cPreferencesTabDataProcessing::defaultButtonReleased() { cGlobalPreferences gp; - comboboxbafprocessingmethod->setCurrentIndex(gp.bafprocessingmethod); + + comboboxlinebafprocessingmethod->setCurrentIndex(gp.linebafprocessingmethod); + comboboxprofilebafprocessingmethod->setCurrentIndex(gp.profilebafprocessingmethod); + comboboxrawdataprocessingmethod->setCurrentIndex(gp.rawdataprocessingmethod); } diff --git a/CycloBranch/gui/cPreferencesTabDataProcessing.h b/CycloBranch/gui/cPreferencesTabDataProcessing.h index 5ae96ed..6700266 100644 --- a/CycloBranch/gui/cPreferencesTabDataProcessing.h +++ b/CycloBranch/gui/cPreferencesTabDataProcessing.h @@ -15,6 +15,8 @@ #include #include #include +#include +#include /** @@ -62,8 +64,11 @@ class cPreferencesTabDataProcessing : public QWidget QWidget* gridlayoutwidget; QGridLayout* gridlayout; - QLabel* labelbafprocessingmethod; - QComboBox* comboboxbafprocessingmethod; + QLabel* labellinebafprocessingmethod; + QComboBox* comboboxlinebafprocessingmethod; + + QLabel* labelprofilebafprocessingmethod; + QComboBox* comboboxprofilebafprocessingmethod; QLabel* labelrawdataprocessingmethod; QComboBox* comboboxrawdataprocessingmethod; diff --git a/CycloBranch/gui/cPreferencesTabURLs.cpp b/CycloBranch/gui/cPreferencesTabURLs.cpp index 107d7d5..9c6014a 100644 --- a/CycloBranch/gui/cPreferencesTabURLs.cpp +++ b/CycloBranch/gui/cPreferencesTabURLs.cpp @@ -4,17 +4,101 @@ cPreferencesTabURLs::cPreferencesTabURLs(cGlobalPreferences& globalpreferences, QWidget *parent) : QWidget(parent) { gridlayout = new QGridLayout(); - labelurl1 = new QLabel("Norine : "); + labelurl1 = new QLabel("Bookmark 1 : "); + lineeditname1 = new QLineEdit(); + lineeditname1->setText(globalpreferences.bookmarkname1); lineediturl1 = new QLineEdit(); lineediturl1->setText(globalpreferences.bookmarkurl1); gridlayout->addWidget(labelurl1, 0, 0); - gridlayout->addWidget(lineediturl1, 0, 1); + gridlayout->addWidget(lineeditname1, 0, 1); + gridlayout->addWidget(lineediturl1, 0, 2); - labelurl2 = new QLabel("BBDGNC : "); + labelurl2 = new QLabel("Bookmark 2 : "); + lineeditname2 = new QLineEdit(); + lineeditname2->setText(globalpreferences.bookmarkname2); lineediturl2 = new QLineEdit(); lineediturl2->setText(globalpreferences.bookmarkurl2); gridlayout->addWidget(labelurl2, 1, 0); - gridlayout->addWidget(lineediturl2, 1, 1); + gridlayout->addWidget(lineeditname2, 1, 1); + gridlayout->addWidget(lineediturl2, 1, 2); + + labelurl3 = new QLabel("Bookmark 3 : "); + lineeditname3 = new QLineEdit(); + lineeditname3->setText(globalpreferences.bookmarkname3); + lineediturl3 = new QLineEdit(); + lineediturl3->setText(globalpreferences.bookmarkurl3); + gridlayout->addWidget(labelurl3, 2, 0); + gridlayout->addWidget(lineeditname3, 2, 1); + gridlayout->addWidget(lineediturl3, 2, 2); + + labelurl4 = new QLabel("Bookmark 4 : "); + lineeditname4 = new QLineEdit(); + lineeditname4->setText(globalpreferences.bookmarkname4); + lineediturl4 = new QLineEdit(); + lineediturl4->setText(globalpreferences.bookmarkurl4); + gridlayout->addWidget(labelurl4, 3, 0); + gridlayout->addWidget(lineeditname4, 3, 1); + gridlayout->addWidget(lineediturl4, 3, 2); + + labelurl5 = new QLabel("Bookmark 5 : "); + lineeditname5 = new QLineEdit(); + lineeditname5->setText(globalpreferences.bookmarkname5); + lineediturl5 = new QLineEdit(); + lineediturl5->setText(globalpreferences.bookmarkurl5); + gridlayout->addWidget(labelurl5, 4, 0); + gridlayout->addWidget(lineeditname5, 4, 1); + gridlayout->addWidget(lineediturl5, 4, 2); + + labelurl6 = new QLabel("Bookmark 6 : "); + lineeditname6 = new QLineEdit(); + lineeditname6->setText(globalpreferences.bookmarkname6); + lineediturl6 = new QLineEdit(); + lineediturl6->setText(globalpreferences.bookmarkurl6); + gridlayout->addWidget(labelurl6, 5, 0); + gridlayout->addWidget(lineeditname6, 5, 1); + gridlayout->addWidget(lineediturl6, 5, 2); + + labelurl7 = new QLabel("Bookmark 7 : "); + lineeditname7 = new QLineEdit(); + lineeditname7->setText(globalpreferences.bookmarkname7); + lineediturl7 = new QLineEdit(); + lineediturl7->setText(globalpreferences.bookmarkurl7); + gridlayout->addWidget(labelurl7, 6, 0); + gridlayout->addWidget(lineeditname7, 6, 1); + gridlayout->addWidget(lineediturl7, 6, 2); + + labelurl8 = new QLabel("Bookmark 8 : "); + lineeditname8 = new QLineEdit(); + lineeditname8->setText(globalpreferences.bookmarkname8); + lineediturl8 = new QLineEdit(); + lineediturl8->setText(globalpreferences.bookmarkurl8); + gridlayout->addWidget(labelurl8, 7, 0); + gridlayout->addWidget(lineeditname8, 7, 1); + gridlayout->addWidget(lineediturl8, 7, 2); + + labelurl9 = new QLabel("Bookmark 9 : "); + lineeditname9 = new QLineEdit(); + lineeditname9->setText(globalpreferences.bookmarkname9); + lineediturl9 = new QLineEdit(); + lineediturl9->setText(globalpreferences.bookmarkurl9); + gridlayout->addWidget(labelurl9, 8, 0); + gridlayout->addWidget(lineeditname9, 8, 1); + gridlayout->addWidget(lineediturl9, 8, 2); + + labelurl10 = new QLabel("Bookmark 10 : "); + lineeditname10 = new QLineEdit(); + lineeditname10->setText(globalpreferences.bookmarkname10); + lineediturl10 = new QLineEdit(); + lineediturl10->setText(globalpreferences.bookmarkurl10); + gridlayout->addWidget(labelurl10, 9, 0); + gridlayout->addWidget(lineeditname10, 9, 1); + gridlayout->addWidget(lineediturl10, 9, 2); + + labelviewbookmarks = new QLabel("Show Toolbar"); + checkboxviewbookmarks = new QCheckBox(); + checkboxviewbookmarks->setChecked(globalpreferences.viewbookmarks); + gridlayout->addWidget(labelviewbookmarks, 10, 0); + gridlayout->addWidget(checkboxviewbookmarks, 10, 1); gridlayoutwidget = new QWidget(); gridlayoutwidget->setLayout(gridlayout); @@ -38,24 +122,119 @@ cPreferencesTabURLs::cPreferencesTabURLs(cGlobalPreferences& globalpreferences, void cPreferencesTabURLs::setPreferences(cGlobalPreferences& globalpreferences) { + globalpreferences.bookmarkname1 = lineeditname1->text(); globalpreferences.bookmarkurl1 = lineediturl1->text(); + + globalpreferences.bookmarkname2 = lineeditname2->text(); globalpreferences.bookmarkurl2 = lineediturl2->text(); + + globalpreferences.bookmarkname3 = lineeditname3->text(); + globalpreferences.bookmarkurl3 = lineediturl3->text(); + + globalpreferences.bookmarkname4 = lineeditname4->text(); + globalpreferences.bookmarkurl4 = lineediturl4->text(); + + globalpreferences.bookmarkname5 = lineeditname5->text(); + globalpreferences.bookmarkurl5 = lineediturl5->text(); + + globalpreferences.bookmarkname6 = lineeditname6->text(); + globalpreferences.bookmarkurl6 = lineediturl6->text(); + + globalpreferences.bookmarkname7 = lineeditname7->text(); + globalpreferences.bookmarkurl7 = lineediturl7->text(); + + globalpreferences.bookmarkname8 = lineeditname8->text(); + globalpreferences.bookmarkurl8 = lineediturl8->text(); + + globalpreferences.bookmarkname9 = lineeditname9->text(); + globalpreferences.bookmarkurl9 = lineediturl9->text(); + + globalpreferences.bookmarkname10 = lineeditname10->text(); + globalpreferences.bookmarkurl10 = lineediturl10->text(); + + globalpreferences.viewbookmarks = checkboxviewbookmarks->isChecked(); } void cPreferencesTabURLs::resetPreferences(cGlobalPreferences& globalpreferences) { + lineeditname1->setText(globalpreferences.bookmarkname1); lineediturl1->setText(globalpreferences.bookmarkurl1); + + lineeditname2->setText(globalpreferences.bookmarkname2); lineediturl2->setText(globalpreferences.bookmarkurl2); + + lineeditname3->setText(globalpreferences.bookmarkname3); + lineediturl3->setText(globalpreferences.bookmarkurl3); + + lineeditname4->setText(globalpreferences.bookmarkname4); + lineediturl4->setText(globalpreferences.bookmarkurl4); + + lineeditname5->setText(globalpreferences.bookmarkname5); + lineediturl5->setText(globalpreferences.bookmarkurl5); + + lineeditname6->setText(globalpreferences.bookmarkname6); + lineediturl6->setText(globalpreferences.bookmarkurl6); + + lineeditname7->setText(globalpreferences.bookmarkname7); + lineediturl7->setText(globalpreferences.bookmarkurl7); + + lineeditname8->setText(globalpreferences.bookmarkname8); + lineediturl8->setText(globalpreferences.bookmarkurl8); + + lineeditname9->setText(globalpreferences.bookmarkname9); + lineediturl9->setText(globalpreferences.bookmarkurl9); + + lineeditname10->setText(globalpreferences.bookmarkname10); + lineediturl10->setText(globalpreferences.bookmarkurl10); + + checkboxviewbookmarks->setChecked(globalpreferences.viewbookmarks); } cPreferencesTabURLs::~cPreferencesTabURLs() { delete labelurl1; + delete lineeditname1; delete lineediturl1; delete labelurl2; + delete lineeditname2; delete lineediturl2; + delete labelurl3; + delete lineeditname3; + delete lineediturl3; + + delete labelurl4; + delete lineeditname4; + delete lineediturl4; + + delete labelurl5; + delete lineeditname5; + delete lineediturl5; + + delete labelurl6; + delete lineeditname6; + delete lineediturl6; + + delete labelurl7; + delete lineeditname7; + delete lineediturl7; + + delete labelurl8; + delete lineeditname8; + delete lineediturl8; + + delete labelurl9; + delete lineeditname9; + delete lineediturl9; + + delete labelurl10; + delete lineeditname10; + delete lineediturl10; + + delete labelviewbookmarks; + delete checkboxviewbookmarks; + delete defaultbutton; delete hlayout; delete hwidget; @@ -69,7 +248,37 @@ cPreferencesTabURLs::~cPreferencesTabURLs() { void cPreferencesTabURLs::defaultButtonReleased() { cGlobalPreferences gp; + + lineeditname1->setText(gp.bookmarkname1); lineediturl1->setText(gp.bookmarkurl1); + + lineeditname2->setText(gp.bookmarkname2); lineediturl2->setText(gp.bookmarkurl2); + + lineeditname3->setText(gp.bookmarkname3); + lineediturl3->setText(gp.bookmarkurl3); + + lineeditname4->setText(gp.bookmarkname4); + lineediturl4->setText(gp.bookmarkurl4); + + lineeditname5->setText(gp.bookmarkname5); + lineediturl5->setText(gp.bookmarkurl5); + + lineeditname6->setText(gp.bookmarkname6); + lineediturl6->setText(gp.bookmarkurl6); + + lineeditname7->setText(gp.bookmarkname7); + lineediturl7->setText(gp.bookmarkurl7); + + lineeditname8->setText(gp.bookmarkname8); + lineediturl8->setText(gp.bookmarkurl8); + + lineeditname9->setText(gp.bookmarkname9); + lineediturl9->setText(gp.bookmarkurl9); + + lineeditname10->setText(gp.bookmarkname10); + lineediturl10->setText(gp.bookmarkurl10); + + checkboxviewbookmarks->setChecked(gp.viewbookmarks); } diff --git a/CycloBranch/gui/cPreferencesTabURLs.h b/CycloBranch/gui/cPreferencesTabURLs.h index 4b6a991..5e1aa7c 100644 --- a/CycloBranch/gui/cPreferencesTabURLs.h +++ b/CycloBranch/gui/cPreferencesTabURLs.h @@ -16,6 +16,7 @@ #include #include #include +#include /** @@ -64,11 +65,48 @@ class cPreferencesTabURLs : public QWidget QGridLayout* gridlayout; QLabel* labelurl1; + QLineEdit* lineeditname1; QLineEdit* lineediturl1; QLabel* labelurl2; + QLineEdit* lineeditname2; QLineEdit* lineediturl2; + QLabel* labelurl3; + QLineEdit* lineeditname3; + QLineEdit* lineediturl3; + + QLabel* labelurl4; + QLineEdit* lineeditname4; + QLineEdit* lineediturl4; + + QLabel* labelurl5; + QLineEdit* lineeditname5; + QLineEdit* lineediturl5; + + QLabel* labelurl6; + QLineEdit* lineeditname6; + QLineEdit* lineediturl6; + + QLabel* labelurl7; + QLineEdit* lineeditname7; + QLineEdit* lineediturl7; + + QLabel* labelurl8; + QLineEdit* lineeditname8; + QLineEdit* lineediturl8; + + QLabel* labelurl9; + QLineEdit* lineeditname9; + QLineEdit* lineediturl9; + + QLabel* labelurl10; + QLineEdit* lineeditname10; + QLineEdit* lineediturl10; + + QLabel* labelviewbookmarks; + QCheckBox* checkboxviewbookmarks; + QWidget* hwidget; QHBoxLayout* hlayout; QPushButton* defaultbutton; diff --git a/CycloBranch/gui/cPubChemSearchWidget.cpp b/CycloBranch/gui/cPubChemSearchWidget.cpp new file mode 100644 index 0000000..818dff9 --- /dev/null +++ b/CycloBranch/gui/cPubChemSearchWidget.cpp @@ -0,0 +1,82 @@ +#include "gui/cPubChemSearchWidget.h" + +#include +#include +#include +#include + + +cPubChemSearchWidget::cPubChemSearchWidget() { + htmlstring = ""; + + setWindowTitle("Search PubChem..."); + setWindowIcon(QIcon(":/images/icons/search.png")); + + layout = new QVBoxLayout(); + + textbrowser = new QTextBrowser(); + textbrowser->setReadOnly(true); + textbrowser->setFont(QFont("Courier", 9)); + textbrowser->setLineWrapMode(QTextEdit::NoWrap); + textbrowser->setAcceptRichText(true); + textbrowser->setOpenExternalLinks(true); + + layout->addWidget(textbrowser); + + setLayout(layout); + + resize(defaultwinsizex, defaultwinsizey); +} + + +cPubChemSearchWidget::~cPubChemSearchWidget() { + delete textbrowser; + + delete layout; +} + + +void cPubChemSearchWidget::setHTML(string html) { + htmlstring = html; + textbrowser->setHtml(html.c_str()); +} + + +string cPubChemSearchWidget::getHTML() { + return htmlstring; +} + + +void cPubChemSearchWidget::closeEvent(QCloseEvent *event) { + hide(); + event->accept(); +} + + +void cPubChemSearchWidget::store(ofstream& os) { + storeString(htmlstring, os); +} + + +void cPubChemSearchWidget::load(ifstream& is) { + loadString(htmlstring, is); + textbrowser->setHtml(htmlstring.c_str()); +} + + +void cPubChemSearchWidget::keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Escape) { + hide(); + } + + if (event->key() == Qt::Key_F1) { + #if OS_TYPE == WIN + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo("docs/html/summarypeakstable.html").absoluteFilePath())); + #else + QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(installdir + "docs/html/summarypeakstable.html").absoluteFilePath())); + #endif + } + + event->accept(); +} + diff --git a/CycloBranch/gui/cPubChemSearchWidget.h b/CycloBranch/gui/cPubChemSearchWidget.h new file mode 100644 index 0000000..7d7d1c8 --- /dev/null +++ b/CycloBranch/gui/cPubChemSearchWidget.h @@ -0,0 +1,369 @@ +/** + \file cPubChemSearchWidget.h + \brief The implementation of the dialog PubChem search widget. +*/ + + +#ifndef _CPUBCHEMSEARCHWIDGET_H +#define _CPUBCHEMSEARCHWIDGET_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "core/utilities.h" + + +// forward declaration +class QTextBrowser; +class QVBoxLayout; + + +/** + \brief The widget representing the PubChem search widget. +*/ +class cPubChemSearchWidget : public QWidget +{ + Q_OBJECT + +public: + + + /** + \brief The constructor. + */ + cPubChemSearchWidget(); + + + /** + \brief The destructor. + */ + ~cPubChemSearchWidget(); + + + /** + \brief Set the HTML text into the widget. + \param html string with the HTML text + */ + void setHTML(string html); + + + /** + \brief Get the HTML text from the widget. + \retval string HTML string + */ + string getHTML(); + + + /** + \brief Handle the window close event. + \param event pointer to QCloseEvent + */ + void closeEvent(QCloseEvent *event); + + + /** + \brief Store the content into an output stream. + \param os an output stream + */ + void store(ofstream& os); + + + /** + \brief Load the content from an input stream. + \param is an input stream + */ + void load(ifstream& is); + + +private: + + QVBoxLayout* layout; + QTextBrowser* textbrowser; + string htmlstring; + + +protected: + + + /** + \brief Handle a key press event. + \param event pointer to QKeyEvent + */ + void keyPressEvent(QKeyEvent *event); + + +}; + + +/** + \brief The functor used to get the CIDs of compounds with the same formula. +*/ +struct cPubchemCIDReader { + + /** + \brief result_type + */ + typedef string result_type; + + + /** + \brief Get the list of CIDs. + \param compound formula + \retval string list of CIDs + */ + string getCIDList(const string& compound) { + string url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/fastformula/"; + url += compound; + url += "/cids/txt"; + + QNetworkAccessManager networkmanager; + QNetworkRequest request(QUrl(url.c_str())); + QNetworkReply *response = networkmanager.get(request); + + QEventLoop loop; + QObject::connect(response, SIGNAL(finished()), &loop, SLOT(quit())); + loop.exec(); + + string cids = response->readAll().toStdString(); + + stringstream errorstream; + if (cids.empty()) { + errorstream << "@ERROR" << endl; + errorstream << "URL: " << url << endl; + errorstream << "ERROR: " << response->errorString().toStdString() << endl; + errorstream << endl; + } + + response->deleteLater(); + + if (cids.empty()) { + return errorstream.str(); + } + + return cids; + } + + + /** + \brief Get a list of CIDs separated by comma. + \param cids input list of CIDs + \param reducedcids output list of CIDs separated by comma + */ + void getCommaSeparatedCIDs(string& cids, string& reducedcids) { + reducedcids.clear(); + if (cids.find("Status:") == string::npos) { + istringstream inputstream(cids); + string line; + while (getline(inputstream, line)) { + if (!reducedcids.empty()) { + reducedcids += ","; + } + reducedcids += line; + } + } + } + + + /** + \brief Attach a vector of CIDs. + \param cids input list of CIDs + \param cidsvector input/output vector of CIDs + */ + void attachVectorOfCIDs(string& cids, vector& cidsvector) { + if (cids.find("Status:") == string::npos) { + istringstream inputstream(cids); + string line; + while (getline(inputstream, line)) { + cidsvector.push_back(line); + } + } + } + + + /** + \brief Get the number of compounds with the same formula. + \param cids list of CIDs + \retval int number of CIDs + */ + int getNumberOfCIDs(string& cids) { + int count = 0; + if (cids.find("Status:") == string::npos) { + istringstream inputstream(cids); + string line; + while (getline(inputstream, line)) { + count++; + } + } + else { + if (cids.find("Status: 404") == string::npos) { + // report error codes 500 (server error), 503 (server busy), etc. + cout << cids << endl << endl; + } + } + + return count; + } + + + /** + \brief Overloaded operator (). + \param compound formula + \retval string list of CIDs + */ + string operator()(const string& compound) { + return getCIDList(compound); + } +}; + + +/** + \brief The functor used to get the names of compounds from CID. +*/ +struct cPubchemNameReader { + + /** + \brief result_type + */ + typedef string result_type; + + + /** + \brief Get the list of names. + \param cid CID + \retval string list of names + */ + string getNameList(const string& cid) { + bool usepost = true; + + string url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/"; + if (!usepost) { + url += cid + "/"; + } + url += "synonyms/txt"; + + if (!usepost) { + // URL too long + if (url.size() > 4000) { + return "Status: 414"; + } + } + + QNetworkAccessManager networkmanager; + QNetworkRequest request(QUrl(url.c_str())); + QNetworkReply *response; + + if (usepost) { + QString body = "cid="; + body += cid.c_str(); + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + response = networkmanager.post(request, body.toUtf8()); + } + else { + response = networkmanager.get(request); + } + + QEventLoop loop; + QObject::connect(response, SIGNAL(finished()), &loop, SLOT(quit())); + loop.exec(); + + string names = response->readAll().toStdString(); + + stringstream errorstream; + if (names.empty()) { + errorstream << "@ERROR" << endl; + errorstream << "URL: " << url << endl; + errorstream << "ERROR: " << response->errorString().toStdString() << endl; + errorstream << endl; + } + + response->deleteLater(); + + if (names.empty()) { + return errorstream.str(); + } + + return names; + } + + + /** + \brief Get the reduded list of names. + \param names input list of names + \param reducednames ouput set of reduced names + */ + void getReducedNames(string& names, set& reducednames) { + if (names.find("Status:") == string::npos) { + istringstream inputstream(names); + string line; + while (getline(inputstream, line)) { + if (line.find("SCHEMBL") == string::npos) { + reducednames.insert(line); + } + } + if (reducednames.empty()) { + reducednames.insert("This item has only SCHEMBL name(s)."); + } + } + else { + if (names.find("Status: 404") == string::npos) { + // report error codes 500 (server error), 503 (server busy), etc. + cout << names << endl << endl; + } + } + } + + + /** + \brief Overloaded operator (). + \param cid CID + \retval string list of names + */ + string operator()(const string& cid) { + if (cid.empty()) { + return ""; + } + return getNameList(cid); + } +}; + + +/** + \brief An auxiliary row info structure. +*/ +struct cRowItemInfo { + + /** + \brief Identification ID. + */ + int id; + + + /** + \brief Theoretical m/z. + */ + double theoreticalmz; + + + /** + \brief Experimental intensity. + */ + double experimentalint; + + + /** + \brief Ion type. + */ + string iontype; + +}; + +#endif + diff --git a/CycloBranch/gui/cSequenceDatabaseWidget.cpp b/CycloBranch/gui/cSequenceDatabaseWidget.cpp index d8bfdc3..e801bd6 100644 --- a/CycloBranch/gui/cSequenceDatabaseWidget.cpp +++ b/CycloBranch/gui/cSequenceDatabaseWidget.cpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include cSequenceDatabaseWidget::cSequenceDatabaseWidget(cGlobalPreferences* globalpreferences, QWidget* parent) { @@ -195,6 +197,12 @@ cSequenceDatabaseWidget::cSequenceDatabaseWidget(cGlobalPreferences* globalprefe toolbarEdit->addAction(actionUnselectAll); connect(actionUnselectAll, SIGNAL(triggered()), this, SLOT(unselectAll())); + actionRemoveDuplicateRows = new QAction(QIcon(":/images/icons/db_delete.png"), tr("Remove Dup&licate Rows"), this); + actionRemoveDuplicateRows->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); + actionRemoveDuplicateRows->setToolTip("Remove Duplicate Rows (Ctrl + L)"); + toolbarEdit->addAction(actionRemoveDuplicateRows); + connect(actionRemoveDuplicateRows, SIGNAL(triggered()), this, SLOT(removeDuplicateRows())); + toolbarHelp = addToolBar(tr("Help")); actionHTMLDocumentation = new QAction(QIcon(":/images/icons/3.png"), tr("&HTML Documentation"), this); @@ -223,6 +231,8 @@ cSequenceDatabaseWidget::cSequenceDatabaseWidget(cGlobalPreferences* globalprefe menuEdit->addSeparator(); menuEdit->addAction(actionSelectAll); menuEdit->addAction(actionUnselectAll); + menuEdit->addSeparator(); + menuEdit->addAction(actionRemoveDuplicateRows); menuHelp->addAction(actionHTMLDocumentation); @@ -288,6 +298,7 @@ cSequenceDatabaseWidget::~cSequenceDatabaseWidget() { delete actionRemoveSelectedRows; delete actionSelectAll; delete actionUnselectAll; + delete actionRemoveDuplicateRows; delete actionHTMLDocumentation; delete menuFile; @@ -514,6 +525,34 @@ void cSequenceDatabaseWidget::keyPressEvent(QKeyEvent *event) { rowsfilterwholeword->setChecked(!rowsfilterwholeword->isChecked()); } + if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) { + QModelIndexList selectedindexes = database->selectionModel()->selectedIndexes(); + QStandardItem* item; + + QString selectedtext; + string itemtext; + + int selectedcount = selectedindexes.count(); + for (int i = 0; i < selectedcount; i++) { + if (i > 0) { + if (proxymodel->mapToSource(selectedindexes[i - 1]).row() != proxymodel->mapToSource(selectedindexes[i]).row()) { + selectedtext += "\n"; + } + else { + selectedtext += "\t"; + } + } + + item = databasemodel->itemFromIndex(proxymodel->mapToSource(selectedindexes[i])); + if (item) { + itemtext = item->text().toStdString(); + selectedtext += stripHTML(itemtext).c_str(); + } + } + selectedtext += "\n"; + QApplication::clipboard()->setText(selectedtext); + } + event->accept(); } @@ -560,7 +599,7 @@ void cSequenceDatabaseWidget::openDatabase() { resetFilter(); sequences.clear(); - sequences.loadFromPlainTextStream(inputstream); + sequences.loadFromPlainTextStream(inputstream, true); QProgressDialog progress("Loading the Sequence Database...", "Cancel", 0, sequences.size(), this); progress.setMinimumWidth(250); @@ -568,6 +607,7 @@ void cSequenceDatabaseWidget::openDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); database->setModel(0); proxymodel->setSourceModel(0); @@ -617,6 +657,13 @@ void cSequenceDatabaseWidget::openDatabase() { pos = stmp.rfind('\"'); if (pos != string::npos) { stmp = stmp.substr(0, pos); + + // crop RT info + pos = stmp.rfind('@'); + if (pos != string::npos) { + stmp = stmp.substr(0, pos); + } + databasemodel->item(i, 10)->setText(stmp.c_str()); } } @@ -681,6 +728,7 @@ bool cSequenceDatabaseWidget::saveDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); // close an editor of a combobox database->setDisabled(true); @@ -743,7 +791,7 @@ bool cSequenceDatabaseWidget::saveDatabase() { progress.setValue(i); } - sequences.storeToPlainTextStream(outputstream); + sequences.storeToPlainTextStream(outputstream, true); progress.setValue(progress.maximum()); @@ -858,6 +906,13 @@ void cSequenceDatabaseWidget::itemChanged(QStandardItem* item) { pos = stmp.rfind('\"'); if (pos != string::npos) { stmp = stmp.substr(0, pos); + + // crop RT info + pos = stmp.rfind('@'); + if (pos != string::npos) { + stmp = stmp.substr(0, pos); + } + databasemodel->item(item->row(), 10)->setText(stmp.c_str()); } } @@ -939,7 +994,7 @@ void cSequenceDatabaseWidget::importDatabase() { size_t pos; cSequenceDatabase importedsequences; - importedsequences.loadFromPlainTextStream(inputstream); + importedsequences.loadFromPlainTextStream(inputstream, true); QProgressDialog progress("Importing the Sequence Database...", "Cancel", 0, importedsequences.size(), this); progress.setMinimumWidth(250); @@ -947,6 +1002,7 @@ void cSequenceDatabaseWidget::importDatabase() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); database->setModel(0); proxymodel->setSourceModel(0); @@ -997,6 +1053,13 @@ void cSequenceDatabaseWidget::importDatabase() { pos = stmp.rfind('\"'); if (pos != string::npos) { stmp = stmp.substr(0, pos); + + // crop RT info + pos = stmp.rfind('@'); + if (pos != string::npos) { + stmp = stmp.substr(0, pos); + } + databasemodel->item(i + originalrowcount, 10)->setText(stmp.c_str()); } } @@ -1077,3 +1140,49 @@ void cSequenceDatabaseWidget::editItem(const QModelIndex& index) { } } + +void cSequenceDatabaseWidget::removeDuplicateRows() { + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, appname, "Remove duplicates ?", QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::No) { + return; + } + + resetFilter(); + + set seqset; + string seqhash; + + int origcount = proxymodel->rowCount(); + + int i = 0; + while (i < proxymodel->rowCount()) { + seqhash.clear(); + + for (int j = 1; j < proxymodel->columnCount() - 1; j++) { + if (j == 4) { + continue; + } + + seqhash += proxymodel->index(i, j).data(Qt::DisplayRole).toString().toStdString() + ";"; + } + + if (seqset.count(seqhash) == 1) { + proxymodel->removeRow(i); + setDataModified(true); + } + else { + seqset.insert(seqhash); + i++; + } + } + + QMessageBox msgBox; + QString msg = "Number of duplicate rows removed: "; + msg += QVariant(origcount - proxymodel->rowCount()).toString(); + msg += "."; + msgBox.setText(msg); + msgBox.exec(); +} + diff --git a/CycloBranch/gui/cSequenceDatabaseWidget.h b/CycloBranch/gui/cSequenceDatabaseWidget.h index 57c583b..ffd852f 100644 --- a/CycloBranch/gui/cSequenceDatabaseWidget.h +++ b/CycloBranch/gui/cSequenceDatabaseWidget.h @@ -109,6 +109,7 @@ class cSequenceDatabaseWidget : public QMainWindow QAction* actionRemoveSelectedRows; QAction* actionSelectAll; QAction* actionUnselectAll; + QAction* actionRemoveDuplicateRows; QToolBar* toolbarHelp; QAction* actionHTMLDocumentation; @@ -201,6 +202,8 @@ private slots: void editItem(const QModelIndex& index); + void removeDuplicateRows(); + }; #endif diff --git a/CycloBranch/gui/cSpectrumDetailWidget.cpp b/CycloBranch/gui/cSpectrumDetailWidget.cpp index 25126ee..2cfe1eb 100644 --- a/CycloBranch/gui/cSpectrumDetailWidget.cpp +++ b/CycloBranch/gui/cSpectrumDetailWidget.cpp @@ -19,6 +19,7 @@ #include #include #include +#include cSpectrumDetailWidget::cSpectrumDetailWidget() { @@ -34,6 +35,8 @@ cSpectrumDetailWidget::cSpectrumDetailWidget() { preparedToShow = false; localneutralosses.clear(); theoreticalspectrum = new cTheoreticalSpectrum(); + + activefileid = 0; } @@ -55,11 +58,11 @@ cSpectrumDetailWidget& cSpectrumDetailWidget::operator=(const cSpectrumDetailWid theoreticalspectrum = new cTheoreticalSpectrum(); if (parameters && sd.theoreticalspectrum) { - initialize(rowid, globalpreferences, parameters, *sd.theoreticalspectrum, sd.parent); + initialize(sd.rowid, sd.activefileid, globalpreferences, parameters, *sd.theoreticalspectrum, sd.parent); } if (parameters && sd.preparedToShow) { - prepareToShow(actionShowIsomers, rawdata, imzmlprofilemetadata, profilemz64precision, profileintensity64precision); + prepareToShow(actionShowIsomers, rawdata, imzmlprofilemetadata, profilemz64precision, profileintensity64precision, true); } setWindowTitle(sd.windowTitle()); @@ -68,8 +71,9 @@ cSpectrumDetailWidget& cSpectrumDetailWidget::operator=(const cSpectrumDetailWid } -void cSpectrumDetailWidget::initialize(int rowid, cGlobalPreferences* globalpreferences, cParameters* parameters, cTheoreticalSpectrum& theoreticalspectrum, QWidget* parent) { +void cSpectrumDetailWidget::initialize(int rowid, int activefileid, cGlobalPreferences* globalpreferences, cParameters* parameters, cTheoreticalSpectrum& theoreticalspectrum, QWidget* parent) { this->rowid = rowid; + this->activefileid = activefileid; this->globalpreferences = globalpreferences; this->parameters = parameters; *this->theoreticalspectrum = theoreticalspectrum; @@ -186,7 +190,12 @@ string cSpectrumDetailWidget::getPeaksTableAsHTMLString(bool unmatchedtheoretica if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { if (parameters->generateisotopepattern) { - columncount = 12; + if (parameters->calculatefdrs) { + columncount = 12; + } + else { + columncount = 10; + } } else { columncount = 9; @@ -227,7 +236,7 @@ string cSpectrumDetailWidget::getPeaksTableAsHTMLString(bool unmatchedtheoretica s += "Error [ppm]"; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { s += "Score"; s += "FDR"; } @@ -297,7 +306,7 @@ string cSpectrumDetailWidget::getPeaksTableAsHTMLString(bool unmatchedtheoretica s += printHTMLTableCell(QVariant(cropDecimalsByteArray(peak->matchedabsoluteintensity)).toString().toStdString(), isred); s += printHTMLTableCell(to_string(cropPrecisionToSixDecimals(peak->matchedppm)), isred); if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { s += printHTMLTableCell(to_string(cropPrecisionToSixDecimals(theoreticalspectrum->getTargetPatternScore(peak->groupid))), isred); s += printHTMLTableCell(to_string(cropPrecisionToSixDecimals(theoreticalspectrum->getTargetPatternFDR(peak->groupid))), isred); } @@ -306,7 +315,7 @@ string cSpectrumDetailWidget::getPeaksTableAsHTMLString(bool unmatchedtheoretica else { s += ""; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { s += ""; } } @@ -382,7 +391,7 @@ string cSpectrumDetailWidget::getPeaksTableAsHTMLString(bool unmatchedtheoretica s += ""; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { s += ""; - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { s += ""; } } @@ -453,7 +462,7 @@ string cSpectrumDetailWidget::getPartialPeaksTableAsHTMLString(int id, bool expo s += printHTMLTableCell(to_string(id + 1), isred); if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { s += printHTMLTableCell(to_string(theoreticalspectrum->getExperimentalSpectrum().getCoordinateX()), isred); s += printHTMLTableCell(to_string(theoreticalspectrum->getExperimentalSpectrum().getCoordinateY()), isred); } @@ -484,7 +493,7 @@ string cSpectrumDetailWidget::getPartialPeaksTableAsHTMLString(int id, bool expo s += printHTMLTableCell(QVariant(cropDecimalsByteArray(peak->matchedabsoluteintensity)).toString().toStdString(), isred); s += printHTMLTableCell(to_string(cropPrecisionToSixDecimals(peak->matchedppm)), isred); if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { s += printHTMLTableCell(to_string(cropPrecisionToSixDecimals(theoreticalspectrum->getTargetPatternScore(peak->groupid))), isred); s += printHTMLTableCell(to_string(cropPrecisionToSixDecimals(theoreticalspectrum->getTargetPatternFDR(peak->groupid))), isred); } @@ -493,7 +502,7 @@ string cSpectrumDetailWidget::getPartialPeaksTableAsHTMLString(int id, bool expo else { s += ""; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { s += ""; } } @@ -678,7 +687,7 @@ void cSpectrumDetailWidget::closeEvent(QCloseEvent *event) { } -void cSpectrumDetailWidget::prepareToShow(QAction* actionShowIsomers, cPeakListSeries* rawdata, vector* imzmlprofilemetadata, bool profilemz64precision, bool profileintensity64precision) { +void cSpectrumDetailWidget::prepareToShow(QAction* actionShowIsomers, cPeakListSeries* rawdata, vector* imzmlprofilemetadata, bool profilemz64precision, bool profileintensity64precision, bool usedefaultsize) { if (!preparedToShow) { @@ -686,7 +695,7 @@ void cSpectrumDetailWidget::prepareToShow(QAction* actionShowIsomers, cPeakListS if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { string title = "Experimental Spectrum No. " + to_string(rowid); if (theoreticalspectrum) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { title += " - X: " + to_string(theoreticalspectrum->getExperimentalSpectrum().getCoordinateX()); title += " Y: " + to_string(theoreticalspectrum->getExperimentalSpectrum().getCoordinateY()); } @@ -1206,7 +1215,11 @@ void cSpectrumDetailWidget::prepareToShow(QAction* actionShowIsomers, cPeakListS setMenuBar(menuBar); - resize(defaultwinsizex, defaultwinsizey); + if (usedefaultsize) { + resize(defaultwinsizex, defaultwinsizey); + } + + QRect geometry = normalGeometry(); if (parameters && theoreticalspectrum) { @@ -1245,9 +1258,9 @@ void cSpectrumDetailWidget::prepareToShow(QAction* actionShowIsomers, cPeakListS } - spectrumscene->initialize(parameters, theoreticalspectrum, rawdata, rowid); - - preparePeaksTable(); + spectrumscene->initialize(parameters, theoreticalspectrum, rawdata, rowid, activefileid); + + preparePeaksTable(geometry); if ((parameters->mode == denovoengine) || (parameters->mode == singlecomparison) || (parameters->mode == databasesearch)) { if (localneutralosses.size() > 0) { @@ -1398,6 +1411,76 @@ set& cSpectrumDetailWidget::getLocalNeutralLosses() { } +void cSpectrumDetailWidget::setProfileSpectrumEnabled(bool enable) { + actionRawData->setChecked(enable); +} + + +bool cSpectrumDetailWidget::hasProfileSpectrumEnabled() { + return actionRawData->isChecked(); +} + + +void cSpectrumDetailWidget::setAbsoluteIntensityEnabled(bool enable) { + actionAbsoluteIntensity->setChecked(enable); +} + + +bool cSpectrumDetailWidget::hasAbsoluteIntensityEnabled() { + return actionAbsoluteIntensity->isChecked(); +} + + +void cSpectrumDetailWidget::setHideMatchedPeaksEnabled(bool enable) { + actionHideMatched->setChecked(enable); +} + + +bool cSpectrumDetailWidget::hasHideMatchedPeaksEnabled() { + return actionHideMatched->isChecked(); +} + + +void cSpectrumDetailWidget::setHideUnmatchedPeaksEnabled(bool enable) { + actionHideUnmatched->setChecked(enable); +} + + +bool cSpectrumDetailWidget::hasHideUnmatchedPeaksEnabled() { + return actionHideUnmatched->isChecked(); +} + + +void cSpectrumDetailWidget::setHideScrambledPeaksEnabled(bool enable) { + actionHideScrambled->setChecked(enable); +} + + +bool cSpectrumDetailWidget::hasHideScrambledPeaksEnabled() { + return actionHideScrambled->isChecked(); +} + + +void cSpectrumDetailWidget::setHidePeakLabelsEnabled(bool enable) { + actionHideLabels->setChecked(enable); +} + + +bool cSpectrumDetailWidget::hasHidePeakLabelsEnabled() { + return actionHideLabels->isChecked(); +} + + +void cSpectrumDetailWidget::setMouseMzSelectionEnabled(bool enable) { + actionMouseMzSelection->setChecked(enable); +} + + +bool cSpectrumDetailWidget::hasMouseMzSelectionEnabled() { + return actionMouseMzSelection->isChecked(); +} + + void cSpectrumDetailWidget::keyPressEvent(QKeyEvent *event) { if ((event->key() == Qt::Key_Enter) || (event->key() == Qt::Key_Return)) { setMZInterval(); @@ -1435,8 +1518,12 @@ void cSpectrumDetailWidget::keyPressEvent(QKeyEvent *event) { } -void cSpectrumDetailWidget::preparePeaksTable() { +void cSpectrumDetailWidget::moveEvent(QMoveEvent *event) { + emit lastActiveDetail(rowid); +} + +void cSpectrumDetailWidget::preparePeaksTable(QRect geometry) { peakstable->setEditTriggers(QAbstractItemView::NoEditTriggers); peakstable->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); peakstable->horizontalHeader()->setSectionsMovable(true); @@ -1444,7 +1531,12 @@ void cSpectrumDetailWidget::preparePeaksTable() { if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { if (parameters->generateisotopepattern) { - peakstablemodel->setColumnCount(12); + if (parameters->calculatefdrs) { + peakstablemodel->setColumnCount(12); + } + else { + peakstablemodel->setColumnCount(10); + } } else { peakstablemodel->setColumnCount(9); @@ -1499,7 +1591,7 @@ void cSpectrumDetailWidget::preparePeaksTable() { if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { peakstablemodel->horizontalHeaderItem(currentcolumn)->setText("Score"); currentcolumn++; @@ -1546,13 +1638,22 @@ void cSpectrumDetailWidget::preparePeaksTable() { peakstablemodel->setRowCount(thpeakscount + theoreticalspectrum->getUnmatchedExperimentalPeaksCount()); - QProgressDialog progress("Preparing the peaklist...", /*"Cancel"*/0, 0, thpeakscount + theoreticalspectrum->getUnmatchedExperimentalPeaksCount(), parent); + QProgressDialog progress("Preparing the peaklist...", /*"Cancel"*/0, 0, thpeakscount + theoreticalspectrum->getUnmatchedExperimentalPeaksCount(), this); progress.setMinimumWidth(250); cEventFilter filter; progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.move(geometry.x(), geometry.y()); + + QRect progressgeometry; + progressgeometry.setRect(geometry.x() + geometry.width() / 2 - progress.width() / 2, geometry.y() + geometry.height() / 2 - progress.height() / 2, progress.width(), progress.height()); + + progress.setGeometry(progressgeometry); + + progress.setValue(0); + peakstable->setModel(0); proxymodel->setSourceModel(0); peakstable->setSortingEnabled(false); @@ -1638,7 +1739,7 @@ void cSpectrumDetailWidget::preparePeaksTable() { currentcolumn++; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { peakstablemodel->setItem(i, currentcolumn, new QStandardItem()); peakstablemodel->item(i, currentcolumn)->setForeground(brush); peakstablemodel->item(i, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(theoreticalspectrum->getTargetPatternScore(peak->groupid))), Qt::DisplayRole); @@ -1654,7 +1755,7 @@ void cSpectrumDetailWidget::preparePeaksTable() { else { currentcolumn += 4; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { currentcolumn += 2; } } @@ -1782,7 +1883,12 @@ void cSpectrumDetailWidget::preparePeaksTable() { if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { if (parameters->generateisotopepattern) { - peakstable->setColumnWidth(9, min(400, peakstable->columnWidth(9))); + if (parameters->calculatefdrs) { + peakstable->setColumnWidth(9, min(400, peakstable->columnWidth(9))); + } + else { + peakstable->setColumnWidth(7, min(400, peakstable->columnWidth(7))); + } } else { peakstable->setColumnWidth(6, min(400, peakstable->columnWidth(6))); @@ -2057,6 +2163,7 @@ void cSpectrumDetailWidget::exportTableToCSV() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); bool removefile = false; QFile file(filename); @@ -2273,13 +2380,13 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); - progress.setValue(1); + progress.setValue(0); if (parameters && theoreticalspectrum && parameters->useprofiledata) { progress.setValue(10); - if (parameters->peaklistfileformat == baf) { + if (parameters->peaklistfileformats[activefileid] == baf) { if ((parameters->mode == denovoengine) || (parameters->mode == databasesearch)) { fileid = parameters->scannumber; @@ -2291,17 +2398,50 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { if ((targetid >= 0) && (targetid < rawdata->size())) { if (state) { - peakliststream.open(parameters->peaklistfilename + ".profile." + to_string(fileid) + ".csv"); - while (peakliststream.good() && !(strstr(s.c_str(), "M/Z"))) { - getline(peakliststream, s); - } - (*rawdata)[targetid].clear(); - (*rawdata)[targetid].loadFromBAFStream(peakliststream); + progress.setValue(33); - peakliststream.close(); + if (globalpreferences) { - progress.setValue(33); + string datafile = parameters->peaklistfilenames[activefileid] + ".profile." + to_string(fileid) + ".csv"; + + #if OS_TYPE == WIN + if (globalpreferences->profilebafprocessingmethod == 1) { + if (!QFile(datafile.c_str()).exists()) { + //string s = "External\\windows\\profilespectrumreader.exe \"" + parameters->peaklistfilenames[activefileid] + "\" " + to_string(fileid); + //system(s.c_str()); + + QString command = "External\\windows\\profilespectrumreader.exe"; + QString param1 = parameters->peaklistfilenames[activefileid].c_str(); + QString param2 = to_string(fileid).c_str(); + + QStringList params; + params << param1; + params << param2; + + QProcess convert; + convert.start(command, params); + convert.waitForFinished(-1); + } + } + #endif + + if (QFile(datafile.c_str()).exists()) { + peakliststream.open(datafile); + + while (peakliststream.good() && !(strstr(s.c_str(), "M/Z"))) { + getline(peakliststream, s); + } + + (*rawdata)[targetid].clear(); + (*rawdata)[targetid].loadFromBAFStream(peakliststream); + + peakliststream.close(); + } + + } + + progress.setValue(66); (*rawdata)[targetid].sortbyMass(); (*rawdata)[targetid].normalizeIntenzityByValue(theoreticalspectrum->getExperimentalSpectrum().getMaximumAbsoluteIntensity() * 100.0 / theoreticalspectrum->getExperimentalSpectrum().getMaximumRelativeIntensity()); @@ -2311,7 +2451,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { (*rawdata)[targetid].cropMaximumMZRatio(charge(uncharge(parameters->precursormass, parameters->precursorcharge) + maxmzoverhead, (parameters->precursorcharge > 0) ? 1 : -1), parameters->precursormasserrortolerance); } - progress.setValue(66); + progress.setValue(99); } else { (*rawdata)[targetid].clear(); @@ -2322,23 +2462,23 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { } - if (parameters->peaklistfileformat == dat) { + if (parameters->peaklistfileformats[activefileid] == dat) { targetid = rowid - 1; if ((targetid >= 0) && (targetid < rawdata->size())) { if (state) { - string mgfname = parameters->peaklistfilename.substr(0, parameters->peaklistfilename.rfind('/')); + string mgfname = parameters->peaklistfilenames[activefileid].substr(0, parameters->peaklistfilenames[activefileid].rfind('/')); mgfname = mgfname.substr(0, mgfname.size() - 4); mgfname += ".mgf"; peakliststream.open(mgfname); (*rawdata)[targetid].clear(); - (*rawdata)[targetid].loadFromMGFStream(peakliststream); + (*rawdata)[targetid].loadFromMGFStream(peakliststream, 1); while (peakliststream.good() && (theoreticalspectrum->getExperimentalSpectrum().getTitle().compare((*rawdata)[targetid].getTitle()) != 0)) { (*rawdata)[targetid].clear(); - (*rawdata)[targetid].loadFromMGFStream(peakliststream); + (*rawdata)[targetid].loadFromMGFStream(peakliststream, 1); } if ((theoreticalspectrum->getExperimentalSpectrum().getTitle().compare((*rawdata)[targetid].getTitle()) != 0)) { @@ -2368,7 +2508,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { } - if (parameters->peaklistfileformat == raw) { + if (parameters->peaklistfileformats[activefileid] == raw) { if ((parameters->mode == denovoengine) || (parameters->mode == databasesearch)) { fileid = parameters->scannumber - 1; @@ -2385,7 +2525,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { bool terminatecomputation = false; - string basename = parameters->peaklistfilename.substr(0, (int)parameters->peaklistfilename.size() - 3); + string basename = parameters->peaklistfilenames[activefileid].substr(0, (int)parameters->peaklistfilenames[activefileid].size() - 3); string mzmlname = basename + "mzML"; int resultcode = mzml.parse(mzmlname, peaklists, fileid, parameters->mode, 0 /* ok */, terminatecomputation /* ok */); @@ -2398,7 +2538,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { ifstream mgfifstream; mgfifstream.open(mgfname); (*rawdata)[targetid].clear(); - (*rawdata)[targetid].loadFromMGFStream(mgfifstream); + (*rawdata)[targetid].loadFromMGFStream(mgfifstream, 1); mgfifstream.close(); QFile::remove(mgfname.c_str()); @@ -2420,7 +2560,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { } - if (parameters->peaklistfileformat == mzML) { + if (parameters->peaklistfileformats[activefileid] == mzML) { if ((parameters->mode == denovoengine) || (parameters->mode == databasesearch)) { fileid = parameters->scannumber - 1; @@ -2437,7 +2577,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { bool terminatecomputation = false; - string basename = parameters->peaklistfilename.substr(0, (int)parameters->peaklistfilename.size() - 4); + string basename = parameters->peaklistfilenames[activefileid].substr(0, (int)parameters->peaklistfilenames[activefileid].size() - 4); string mzmlname = basename + "mzML"; int resultcode = mzml.parse(mzmlname, peaklists, fileid, parameters->mode, 0 /* ok */, terminatecomputation /* ok */); @@ -2474,7 +2614,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { ifstream mgfifstream; mgfifstream.open(mgfname); (*rawdata)[targetid].clear(); - (*rawdata)[targetid].loadFromMGFStream(mgfifstream); + (*rawdata)[targetid].loadFromMGFStream(mgfifstream, 1); mgfifstream.close(); QFile::remove(mgfname.c_str()); @@ -2496,7 +2636,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { } - if ((parameters->peaklistfileformat == imzML) && ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (imzmlprofilemetadata->size() > 0)) { + if ((parameters->peaklistfileformats[activefileid] == imzML) && ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (imzmlprofilemetadata->size() > 0)) { targetid = rowid - 1; if ((targetid >= 0) && (targetid < rawdata->size())) { @@ -2571,7 +2711,7 @@ void cSpectrumDetailWidget::rawDataStateChanged(bool state) { QFile::remove(mzmlname.c_str()); mgfifstream.open(mgfname); - (*rawdata)[targetid].loadFromMGFStream(mgfifstream); + (*rawdata)[targetid].loadFromMGFStream(mgfifstream, 1); mgfifstream.close(); QFile::remove(mgfname.c_str()); diff --git a/CycloBranch/gui/cSpectrumDetailWidget.h b/CycloBranch/gui/cSpectrumDetailWidget.h index 12e0cf9..756fffb 100644 --- a/CycloBranch/gui/cSpectrumDetailWidget.h +++ b/CycloBranch/gui/cSpectrumDetailWidget.h @@ -120,12 +120,13 @@ class cSpectrumDetailWidget : public QMainWindow /** \brief Initialize the widget. \param rowid id of a row + \param activefileid id of an active file \param globalpreferences global preferences of the application \param parameters a pointer to parameters \param theoreticalspectrum a reference to a theoretical spectrum \param parent pointer to a parent widget */ - void initialize(int rowid, cGlobalPreferences* globalpreferences, cParameters* parameters, cTheoreticalSpectrum& theoreticalspectrum, QWidget* parent); + void initialize(int rowid, int activefileid, cGlobalPreferences* globalpreferences, cParameters* parameters, cTheoreticalSpectrum& theoreticalspectrum, QWidget* parent); /** @@ -168,8 +169,9 @@ class cSpectrumDetailWidget : public QMainWindow \param imzmlprofilemetadata imzml profile metadata \param profilemz64precision true if 64 mz precision is used, false if 32 bit mz precision is used \param profileintensity64precision true if 64 intensity precision is used, false if 32 bit intensity precision is used + \param usedefaultsize if true, the default size is used */ - void prepareToShow(QAction* actionShowIsomers, cPeakListSeries* rawdata, vector* imzmlprofilemetadata, bool profilemz64precision, bool profileintensity64precision); + void prepareToShow(QAction* actionShowIsomers, cPeakListSeries* rawdata, vector* imzmlprofilemetadata, bool profilemz64precision, bool profileintensity64precision, bool usedefaultsize); /** @@ -202,6 +204,104 @@ class cSpectrumDetailWidget : public QMainWindow set& getLocalNeutralLosses(); + /** + \brief Set the state of profile spectrum visualization. + \param enable state of profile spectrum visualization + */ + void setProfileSpectrumEnabled(bool enable); + + + /** + \brief Check if the profile spectrum visualization is enabled. + \retval bool true if the profile spectrum is enabled + */ + bool hasProfileSpectrumEnabled(); + + + /** + \brief Set the state of absolute intensity mode. + \param enable state of absolute intensity mode + */ + void setAbsoluteIntensityEnabled(bool enable); + + + /** + \brief Check if the absolute intensity mode is enabled. + \retval bool true if the absolute intensity mode is enabled + */ + bool hasAbsoluteIntensityEnabled(); + + + /** + \brief Set the state of hide matched peaks mode. + \param enable state of hide matched peaks mode + */ + void setHideMatchedPeaksEnabled(bool enable); + + + /** + \brief Check if the hide matched peaks mode is enabled. + \retval bool true if the hide matched peaks mode is enabled + */ + bool hasHideMatchedPeaksEnabled(); + + + /** + \brief Set the state of hide unmatched peaks mode. + \param enable state of hide unmatched peaks mode + */ + void setHideUnmatchedPeaksEnabled(bool enable); + + + /** + \brief Check if the hide unmatched peaks mode is enabled. + \retval bool true if the hide unmatched peaks mode is enabled + */ + bool hasHideUnmatchedPeaksEnabled(); + + + /** + \brief Set the state of hide scrambled peaks mode. + \param enable state of hide scrambled peaks mode + */ + void setHideScrambledPeaksEnabled(bool enable); + + + /** + \brief Check if the hide scrambled peaks mode is enabled. + \retval bool true if the hide scrambled peaks mode is enabled + */ + bool hasHideScrambledPeaksEnabled(); + + + /** + \brief Set the state of hide peak labels mode. + \param enable state of hide peak labels mode + */ + void setHidePeakLabelsEnabled(bool enable); + + + /** + \brief Check if the hide peak labels mode is enabled. + \retval bool true if the hide peak labels mode is enabled + */ + bool hasHidePeakLabelsEnabled(); + + + /** + \brief Set the state of mouse m/z selection tool. + \param enable state of mouse m/z selection tool + */ + void setMouseMzSelectionEnabled(bool enable); + + + /** + \brief Check if the mouse m/z selection tool is enabled. + \retval bool true if the mouse m/z selection tool is enabled + */ + bool hasMouseMzSelectionEnabled(); + + protected: @@ -212,6 +312,13 @@ class cSpectrumDetailWidget : public QMainWindow void keyPressEvent(QKeyEvent *event); + /** + \brief Handle a move event. + \param event pointer to QMoveEvent + */ + void moveEvent(QMoveEvent *event); + + private: QWidget* parent; @@ -319,7 +426,9 @@ class cSpectrumDetailWidget : public QMainWindow bool reportisomers; - void preparePeaksTable(); + int activefileid; + + void preparePeaksTable(QRect geometry); string printHTMLTableCell(string text, bool red); @@ -342,6 +451,13 @@ class cSpectrumDetailWidget : public QMainWindow void rawDataStateChangedSignal(bool state); + /** + \brief The signal is emitted when the widget has been moved. + \param rowid rowid of the widget + */ + void lastActiveDetail(int rowid); + + private slots: diff --git a/CycloBranch/gui/cSpectrumSceneWidget.cpp b/CycloBranch/gui/cSpectrumSceneWidget.cpp index 91220ef..0993b41 100644 --- a/CycloBranch/gui/cSpectrumSceneWidget.cpp +++ b/CycloBranch/gui/cSpectrumSceneWidget.cpp @@ -60,6 +60,8 @@ cSpectrumSceneWidget::cSpectrumSceneWidget(QWidget* parent) { maxmzoverhead = 5.0; + activefileid = 0; + scene = new QGraphicsScene(this); zoomgroup = new QGraphicsItemGroup(); @@ -79,12 +81,13 @@ cSpectrumSceneWidget::~cSpectrumSceneWidget() { } -void cSpectrumSceneWidget::initialize(cParameters* parameters, cTheoreticalSpectrum* theoreticalspectrum, cPeakListSeries* rawdata, int rowid) { +void cSpectrumSceneWidget::initialize(cParameters* parameters, cTheoreticalSpectrum* theoreticalspectrum, cPeakListSeries* rawdata, int rowid, int activefileid) { this->parameters = parameters; this->theoreticalspectrum = theoreticalspectrum; + this->activefileid = activefileid; if (parameters && parameters->useprofiledata) { - if ((parameters->peaklistfileformat == baf) || (parameters->peaklistfileformat == dat) || (parameters->peaklistfileformat == mzML) || (parameters->peaklistfileformat == raw) || (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformat == imzML))) { + if ((parameters->peaklistfileformats[activefileid] == baf) || (parameters->peaklistfileformats[activefileid] == dat) || (parameters->peaklistfileformats[activefileid] == mzML) || (parameters->peaklistfileformats[activefileid] == raw) || (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformats[activefileid] == imzML))) { if ((rowid > 0) && (rowid <= rawdata->size())) { this->rawdatapeaklist = &((*rawdata)[rowid - 1]); } @@ -460,6 +463,8 @@ void cSpectrumSceneWidget::redrawScene() { cursorsimpletextitem->setVisible(false); scene->addItem(cursorsimpletextitem); + // bug fix - mouseMoveEvent is not fired if any QGraphicsTextItem is not in the scene + scene->addText(""); // x axis line = scene->addLine(leftmargin, h - bottommargin, w - rightmargin, h - bottommargin, QPen(Qt::black, 2, Qt::SolidLine)); @@ -890,7 +895,7 @@ void cSpectrumSceneWidget::redrawScene() { // raw data (intersections with other objects are not tested) - if ((maxintensity > 0) && parameters->useprofiledata && ((parameters->peaklistfileformat == baf) || (parameters->peaklistfileformat == dat) || (parameters->peaklistfileformat == mzML) || (parameters->peaklistfileformat == raw) || (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformat == imzML))) && rawdatastate && (rawdatapeaklist->size() > 0)) { + if ((maxintensity > 0) && parameters->useprofiledata && ((parameters->peaklistfileformats[activefileid] == baf) || (parameters->peaklistfileformats[activefileid] == dat) || (parameters->peaklistfileformats[activefileid] == mzML) || (parameters->peaklistfileformats[activefileid] == raw) || (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformats[activefileid] == imzML))) && rawdatastate && (rawdatapeaklist->size() > 0)) { QPainterPath rpath; int rx, ry, lastrx, lastry; @@ -1062,7 +1067,7 @@ double cSpectrumSceneWidget::getMaximumIntensity() { double rawdatamaxintensity = 0; // get the maximum intensity in the interval - if (parameters->useprofiledata && ((parameters->peaklistfileformat == baf) || (parameters->peaklistfileformat == dat) || (parameters->peaklistfileformat == mzML) || (parameters->peaklistfileformat == raw) || (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformat == imzML))) && rawdatastate && (rawdatapeaklist->size() > 0)) { + if (parameters->useprofiledata && ((parameters->peaklistfileformats[activefileid] == baf) || (parameters->peaklistfileformats[activefileid] == dat) || (parameters->peaklistfileformats[activefileid] == mzML) || (parameters->peaklistfileformats[activefileid] == raw) || (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformats[activefileid] == imzML))) && rawdatastate && (rawdatapeaklist->size() > 0)) { if (absoluteintensity) { maxintensity = theoreticalspectrum->getExperimentalSpectrum().getMaximumAbsoluteIntensityFromMZInterval(minmzratio, maxmzratio, false, false, other, false); } diff --git a/CycloBranch/gui/cSpectrumSceneWidget.h b/CycloBranch/gui/cSpectrumSceneWidget.h index b650252..f9fddba 100644 --- a/CycloBranch/gui/cSpectrumSceneWidget.h +++ b/CycloBranch/gui/cSpectrumSceneWidget.h @@ -55,8 +55,9 @@ class cSpectrumSceneWidget : public QGraphicsView \param theoreticalspectrum a pointer to a theoretical spectrum \param rawdata a pointer to a structure handling raw data \param rowid id of a row + \param activefileid id of an active file */ - void initialize(cParameters* parameters, cTheoreticalSpectrum* theoreticalspectrum, cPeakListSeries* rawdata, int rowid); + void initialize(cParameters* parameters, cTheoreticalSpectrum* theoreticalspectrum, cPeakListSeries* rawdata, int rowid, int activefileid); /** @@ -213,6 +214,8 @@ class cSpectrumSceneWidget : public QGraphicsView double maxmzoverhead; + int activefileid; + double getMZRatioFromXPosition(int x, int w); diff --git a/CycloBranch/gui/cSummaryPeaksTableWidget.cpp b/CycloBranch/gui/cSummaryPeaksTableWidget.cpp index 6968a5f..35b8305 100644 --- a/CycloBranch/gui/cSummaryPeaksTableWidget.cpp +++ b/CycloBranch/gui/cSummaryPeaksTableWidget.cpp @@ -1,7 +1,6 @@ #include "gui/cSummaryPeaksTableWidget.h" #include "core/cParameters.h" #include "core/cTheoreticalSpectrumList.h" -#include "gui/cEventFilter.h" #include #include @@ -19,7 +18,55 @@ #include #include #include -#include + + +void addEICPeak(cParameters* parameters, cPeaksList& eicchromatogram, cTheoreticalSpectrum& theoreticalspectrum, cPeaksList& experimentalspectrum) { + if (!parameters) { + return; + } + + double intensity = 0; + int size; + + set matchedcompounds; + string matcheditem; + size_t pos; + + size = experimentalspectrum.size(); + for (int i = 0; i < size; i++) { + if (experimentalspectrum[i].matched > 0) { + intensity += experimentalspectrum[i].absoluteintensity; + } + } + + size = theoreticalspectrum.getNumberOfPeaks(); + for (int i = 0; i < size; i++) { + if (theoreticalspectrum[i].matched > 0) { + matcheditem.clear(); + + pos = parameters->peakidtodesc[theoreticalspectrum[i].descriptionid].find(""); + if (pos != string::npos) { + matcheditem = parameters->peakidtodesc[theoreticalspectrum[i].descriptionid].substr(0, pos + 4); + } + + if (!matcheditem.empty()) { + matchedcompounds.insert(matcheditem); + } + } + } + + matcheditem.clear(); + for (auto& it : matchedcompounds) { + matcheditem += it; + matcheditem += "
"; + } + + cPeak peak; + peak.mzratio = (double)(eicchromatogram.size() + 1); + peak.absoluteintensity = intensity; + peak.description = matcheditem; + eicchromatogram.add(peak); +} cSummaryPeaksTableWidget::cSummaryPeaksTableWidget(cGlobalPreferences* globalpreferences, QWidget* parent) { @@ -31,9 +78,13 @@ cSummaryPeaksTableWidget::cSummaryPeaksTableWidget(cGlobalPreferences* globalpre setWindowTitle(title); setWindowIcon(QIcon(":/images/icons/table.png")); + pubchemsearchwidget = new cPubChemSearchWidget(); + pubchemsearchwidget->hide(); + menuBar = new QMenuBar(this); menuBar->setNativeMenuBar(false); menuFile = new QMenu(tr("&File"), this); + //menuSearch = new QMenu(tr("&Search"), this); menuHelp = new QMenu(tr("&Help"), this); rowsfilteroperator = new QComboBox(); @@ -170,6 +221,12 @@ cSummaryPeaksTableWidget::cSummaryPeaksTableWidget(cGlobalPreferences* globalpre toolbarFile->addAction(actionExportCSV); connect(actionExportCSV, SIGNAL(triggered()), this, SLOT(exportToCsv())); + actionExportDatabase = new QAction(QIcon(":/images/icons/db_export.png"), tr("Export to &Database"), this); + actionExportDatabase->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D)); + actionExportDatabase->setToolTip("Export to Database (Ctrl + D)"); + toolbarFile->addAction(actionExportDatabase); + connect(actionExportDatabase, SIGNAL(triggered()), this, SLOT(exportToDatabase())); + actionExportStatistics = new QAction(QIcon(":/images/icons/74.png"), tr("Export Stat&istics to CSV"), this); actionExportStatistics->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_I)); actionExportStatistics->setToolTip("Export Statistics to CSV (Ctrl + I)"); @@ -182,6 +239,14 @@ cSummaryPeaksTableWidget::cSummaryPeaksTableWidget(cGlobalPreferences* globalpre toolbarFile->addAction(actionCloseWindow); connect(actionCloseWindow, SIGNAL(triggered()), this, SLOT(closeWindow())); + //toolbarSearch = addToolBar(tr("Search")); + + //actionSearchPubChem = new QAction(QIcon(":/images/icons/search.png"), tr("Search &PubChem..."), this); + //actionSearchPubChem->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P)); + //actionSearchPubChem->setToolTip("Search PubChem... (Ctrl + P)"); + //toolbarSearch->addAction(actionSearchPubChem); + //connect(actionSearchPubChem, SIGNAL(triggered()), this, SLOT(searchPubChem())); + toolbarHelp = addToolBar(tr("Help")); actionHTMLDocumentation = new QAction(QIcon(":/images/icons/3.png"), tr("&HTML Documentation"), this); @@ -190,17 +255,23 @@ cSummaryPeaksTableWidget::cSummaryPeaksTableWidget(cGlobalPreferences* globalpre toolbarHelp->addAction(actionHTMLDocumentation); connect(actionHTMLDocumentation, SIGNAL(triggered()), this, SLOT(showHTMLDocumentation())); + addToolBarBreak(); + toolbarFilter = addToolBar(tr("Filter")); toolbarFilter->addWidget(rowsfilterwidget); menuFile->addAction(actionExportCSV); + menuFile->addAction(actionExportDatabase); menuFile->addAction(actionExportStatistics); menuFile->addSeparator(); menuFile->addAction(actionCloseWindow); + //menuSearch->addAction(actionSearchPubChem); + menuHelp->addAction(actionHTMLDocumentation); menuBar->addMenu(menuFile); + //menuBar->addMenu(menuSearch); menuBar->addMenu(menuHelp); setMenuBar(menuBar); @@ -224,6 +295,8 @@ cSummaryPeaksTableWidget::cSummaryPeaksTableWidget(cGlobalPreferences* globalpre resize(defaultwinsizex, defaultwinsizey); applyGlobalPreferences(globalpreferences); + + activefileid = 0; } @@ -259,14 +332,19 @@ cSummaryPeaksTableWidget::~cSummaryPeaksTableWidget() { delete mainwidget; delete actionExportCSV; + delete actionExportDatabase; delete actionExportStatistics; delete actionCloseWindow; + //delete actionSearchPubChem; delete actionHTMLDocumentation; delete menuFile; + //delete menuSearch; delete menuHelp; delete menuBar; + + delete pubchemsearchwidget; } @@ -276,18 +354,30 @@ void cSummaryPeaksTableWidget::closeEvent(QCloseEvent *event) { } -bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandardmodel, cMainWindowProxyModel* resultsproxymodel, cParameters* parameters, cTheoreticalSpectrumList* spectralist, bool showisomers) { - if (!parameters || !spectralist || (resultsstandardmodel->rowCount() != spectralist->size())) { +bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandardmodel, cMainWindowProxyModel* resultsproxymodel, cParameters* parameters, cTheoreticalSpectrumList* listoftheoreticalspectra, int activefileid, bool showisomers) { + QMessageBox msgBox; + QString errstr; + + if (!parameters || !listoftheoreticalspectra || (activefileid >= listoftheoreticalspectra->size()) || (resultsstandardmodel->rowCount() != listoftheoreticalspectra->size(activefileid))) { + QString errstr = "Nothing to show. Perform an analysis first !"; + msgBox.setText(errstr); + msgBox.exec(); return false; } - int spectracount = spectralist->size(); + this->activefileid = activefileid; + + int spectracount = listoftheoreticalspectra->size(activefileid); int thpeakscount = 0; int spectrumindex; int iontypecol; cPeak* peak; + rtimes.clear(); + rtimes.resize(spectracount); + for (int i = 0; i < spectracount; i++) { + rtimes[i] = listoftheoreticalspectra->get(activefileid, i).getExperimentalSpectrum().getRetentionTime(); if (!resultsproxymodel->mapFromSource(resultsstandardmodel->index(i, 0)).isValid()) { continue; @@ -295,12 +385,12 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard spectrumindex = resultsstandardmodel->item(i, 1)->data(Qt::DisplayRole).toInt() - 1; - if ((*spectralist)[spectrumindex].getNumberOfMatchedPeaks() == 0) { + if (listoftheoreticalspectra->get(activefileid, spectrumindex).getNumberOfMatchedPeaks() == 0) { continue; } - for (int j = 0; j < (int)((*spectralist)[spectrumindex].getTheoreticalPeaks()->size()); j++) { - peak = &((*((*spectralist)[spectrumindex].getTheoreticalPeaks()))[j]); + for (int j = 0; j < (int)(listoftheoreticalspectra->get(activefileid, spectrumindex).getTheoreticalPeaks()->size()); j++) { + peak = &((*(listoftheoreticalspectra->get(activefileid, spectrumindex).getTheoreticalPeaks()))[j]); if (peak->matchedmz > 0) { thpeakscount++; } @@ -320,13 +410,18 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard resetFilter(); deleteTable(); - proxymodel->initialize(parameters->mode, parameters->peaklistfileformat, parameters->generateisotopepattern, rowsfilteroperator, rowsfiltercombobox1, rowsfiltercomparatorcombobox1, rowsfilterline1, rowsfiltercombobox2, rowsfiltercomparatorcombobox2, rowsfilterline2); + proxymodel->initialize(parameters->mode, parameters->peaklistfileformats[activefileid], parameters->generateisotopepattern, rowsfilteroperator, rowsfiltercombobox1, rowsfiltercomparatorcombobox1, rowsfilterline1, rowsfiltercombobox2, rowsfiltercomparatorcombobox2, rowsfilterline2); // prepare the header if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { if (parameters->generateisotopepattern) { - databasemodel->setColumnCount(15); + if (parameters->calculatefdrs) { + databasemodel->setColumnCount(15); + } + else { + databasemodel->setColumnCount(13); + } } else { databasemodel->setColumnCount(12); @@ -334,7 +429,12 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard } else { if (parameters->generateisotopepattern) { - databasemodel->setColumnCount(14); + if (parameters->calculatefdrs) { + databasemodel->setColumnCount(14); + } + else { + databasemodel->setColumnCount(12); + } } else { databasemodel->setColumnCount(11); @@ -364,7 +464,7 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard int currentcolumn = 1; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { iontypecol = 3; databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); @@ -442,7 +542,7 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard currentcolumn++; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { databasemodel->setHorizontalHeaderItem(currentcolumn, new QStandardItem()); databasemodel->horizontalHeaderItem(currentcolumn)->setText("Score"); database->setItemDelegateForColumn(currentcolumn, new QItemDelegate()); @@ -542,7 +642,7 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard for (int i = 0; i < spectracount; i++) { if (!resultsproxymodel->mapFromSource(resultsstandardmodel->index(i, 0)).isValid()) { - if (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformat != mis) && (parameters->peaklistfileformat != imzML)) { + if (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformats[activefileid] != mis) && (parameters->peaklistfileformats[activefileid] != imzML)) { cPeak emptypeak; emptypeak.mzratio = (double)(eicchromatogram.size() + 1); emptypeak.absoluteintensity = 0; @@ -553,21 +653,21 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard spectrumindex = resultsstandardmodel->item(i, 1)->data(Qt::DisplayRole).toInt() - 1; - if (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformat != mis) && (parameters->peaklistfileformat != imzML)) { - addEICPeak(eicchromatogram, (*spectralist)[spectrumindex], (*spectralist)[spectrumindex].getExperimentalSpectrum()); + if (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && (parameters->peaklistfileformats[activefileid] != mis) && (parameters->peaklistfileformats[activefileid] != imzML)) { + addEICPeak(parameters, eicchromatogram, listoftheoreticalspectra->get(activefileid, spectrumindex), listoftheoreticalspectra->get(activefileid, spectrumindex).getExperimentalSpectrum()); } - if (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML))) { - addCoordinateInfo(spectrumindex, coordinateinfo, (*spectralist)[spectrumindex], (*spectralist)[spectrumindex].getExperimentalSpectrum()); + if (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML))) { + addCoordinateInfo(spectrumindex, coordinateinfo, listoftheoreticalspectra->get(activefileid, spectrumindex), listoftheoreticalspectra->get(activefileid, spectrumindex).getExperimentalSpectrum()); } - if ((*spectralist)[spectrumindex].getNumberOfMatchedPeaks() == 0) { + if (listoftheoreticalspectra->get(activefileid, spectrumindex).getNumberOfMatchedPeaks() == 0) { progress->setValue(i); continue; } - thpeaks = (*spectralist)[spectrumindex].getTheoreticalPeaks(); - thpeakscount = (*spectralist)[spectrumindex].getTheoreticalPeaks()->size(); + thpeaks = listoftheoreticalspectra->get(activefileid, spectrumindex).getTheoreticalPeaks(); + thpeakscount = listoftheoreticalspectra->get(activefileid, spectrumindex).getTheoreticalPeaks()->size(); // theoretical peaks for (int j = 0; j < thpeakscount; j++) { @@ -596,21 +696,21 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard currentcolumn++; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); databasemodel->item(currentrow, currentcolumn)->setForeground(brush); - databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue((*spectralist)[spectrumindex].getExperimentalSpectrum().getCoordinateX()), Qt::DisplayRole); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(listoftheoreticalspectra->get(activefileid, spectrumindex).getExperimentalSpectrum().getCoordinateX()), Qt::DisplayRole); currentcolumn++; databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); databasemodel->item(currentrow, currentcolumn)->setForeground(brush); - databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue((*spectralist)[spectrumindex].getExperimentalSpectrum().getCoordinateY()), Qt::DisplayRole); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(listoftheoreticalspectra->get(activefileid, spectrumindex).getExperimentalSpectrum().getCoordinateY()), Qt::DisplayRole); currentcolumn++; } else { databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); databasemodel->item(currentrow, currentcolumn)->setForeground(brush); - databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray((*spectralist)[spectrumindex].getExperimentalSpectrum().getRetentionTime())), Qt::DisplayRole); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(listoftheoreticalspectra->get(activefileid, spectrumindex).getExperimentalSpectrum().getRetentionTime())), Qt::DisplayRole); currentcolumn++; } @@ -624,7 +724,7 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard if (parameters->mode == denovoengine) { databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); databasemodel->item(currentrow, currentcolumn)->setForeground(brush); - databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue((*spectralist)[spectrumindex].getPathId() + 1), Qt::DisplayRole); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(listoftheoreticalspectra->get(activefileid, spectrumindex).getPathId() + 1), Qt::DisplayRole); currentcolumn++; } @@ -668,15 +768,15 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard currentcolumn++; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); databasemodel->item(currentrow, currentcolumn)->setForeground(brush); - databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray((*spectralist)[spectrumindex].getTargetPatternScore(peak->groupid))), Qt::DisplayRole); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(listoftheoreticalspectra->get(activefileid, spectrumindex).getTargetPatternScore(peak->groupid))), Qt::DisplayRole); currentcolumn++; databasemodel->setItem(currentrow, currentcolumn, new QStandardItem()); databasemodel->item(currentrow, currentcolumn)->setForeground(brush); - databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray((*spectralist)[spectrumindex].getTargetPatternFDR(peak->groupid))), Qt::DisplayRole); + databasemodel->item(currentrow, currentcolumn)->setData(QVariant::fromValue(cropPrecisionToSixDecimalsByteArray(listoftheoreticalspectra->get(activefileid, spectrumindex).getTargetPatternFDR(peak->groupid))), Qt::DisplayRole); currentcolumn++; } @@ -767,13 +867,18 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard } if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { origcoordinateinfo = coordinateinfo; emit resetRegion(); emit sendFilterOptionsToImageWindow(coordinateinfo, (bool)rowsfilteroperator->currentIndex(), rowsfiltercombobox1->currentText().toStdString(), rowsfiltercomparatorcombobox1->currentText().toStdString(), rowsfilterline1->text().toStdString(), rowsfiltercombobox2->currentText().toStdString(), rowsfiltercomparatorcombobox2->currentText().toStdString(), rowsfilterline2->text().toStdString(), rowsfiltercasesensitive->isChecked(), rowsfilterwholeword->isChecked()); if (parameters->generateisotopepattern) { - database->setColumnWidth(12, min(400, database->columnWidth(12))); + if (parameters->calculatefdrs) { + database->setColumnWidth(12, min(400, database->columnWidth(12))); + } + else { + database->setColumnWidth(10, min(400, database->columnWidth(10))); + } } else { database->setColumnWidth(9, min(400, database->columnWidth(9))); @@ -785,7 +890,12 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard emit sendFilterOptionsToChromatogram(eicchromatogram); if (parameters->generateisotopepattern) { - database->setColumnWidth(11, min(400, database->columnWidth(11))); + if (parameters->calculatefdrs) { + database->setColumnWidth(11, min(400, database->columnWidth(11))); + } + else { + database->setColumnWidth(9, min(400, database->columnWidth(9))); + } } else { database->setColumnWidth(8, min(400, database->columnWidth(8))); @@ -818,6 +928,8 @@ bool cSummaryPeaksTableWidget::prepareToShow(QStandardItemModel* resultsstandard progress->setValue(spectracount); delete progress; + resetFilter(); + return true; } @@ -843,6 +955,9 @@ void cSummaryPeaksTableWidget::applyGlobalPreferences(cGlobalPreferences* global if (lastdirexporttocsv.right(4).compare(".csv", Qt::CaseInsensitive) != 0) { lastdirexporttocsv = globalpreferences->exportcsvdefaultdir; } + if (lastdirexportdatabase.right(4).compare(".txt", Qt::CaseInsensitive) != 0) { + lastdirexportdatabase = globalpreferences->sequencesdefaultdir; + } if (lastdirexportstatisticstocsv.right(4).compare(".csv", Qt::CaseInsensitive) != 0) { lastdirexportstatisticstocsv = globalpreferences->exportcsvdefaultdir; } @@ -850,48 +965,43 @@ void cSummaryPeaksTableWidget::applyGlobalPreferences(cGlobalPreferences* global } -void cSummaryPeaksTableWidget::addEICPeak(cPeaksList& eicchromatogram, cTheoreticalSpectrum& theoreticalspectrum, cPeaksList& experimentalspectrum) { - double intensity = 0; - int size; - - set matchedcompounds; - string matcheditem; - size_t pos; +cPubChemSearchWidget* cSummaryPeaksTableWidget::getPubChemSearchWidget() { + return pubchemsearchwidget; +} - size = experimentalspectrum.size(); - for (int i = 0; i < size; i++) { - if (experimentalspectrum[i].matched > 0) { - intensity += experimentalspectrum[i].absoluteintensity; - } - } - size = theoreticalspectrum.getNumberOfPeaks(); - for (int i = 0; i < size; i++) { - if (theoreticalspectrum[i].matched > 0) { - matcheditem.clear(); +void cSummaryPeaksTableWidget::filterTablerows() { + filterRows(); +} - pos = parameters->peakidtodesc[theoreticalspectrum[i].descriptionid].find(""); - if (pos != string::npos) { - matcheditem = parameters->peakidtodesc[theoreticalspectrum[i].descriptionid].substr(0, pos + 4); - } - if (!matcheditem.empty()) { - matchedcompounds.insert(matcheditem); - } - } +void cSummaryPeaksTableWidget::filterCompound(string name, string iontype, int datatypeview, string mzstr) { + if ((datatypeview == 0) || (datatypeview == 1) || (datatypeview == 4) || (datatypeview == 5)) { + rowsfiltercombobox1->setCurrentText("Theoretical m/z"); + rowsfiltercomparatorcombobox1->setCurrentText("="); + rowsfilterline1->setText(mzstr.c_str()); + } + else { + rowsfiltercombobox1->setCurrentText("Name"); + rowsfiltercomparatorcombobox1->setCurrentText("="); + rowsfilterline1->setText(name.c_str()); } - matcheditem.clear(); - for (auto& it : matchedcompounds) { - matcheditem += it; - matcheditem += "
"; + rowsfilteroperator->setCurrentText("AND"); + + if (parameters->generateisotopepattern) { + rowsfiltercombobox2->setCurrentText("Pattern Type"); + } + else { + rowsfiltercombobox2->setCurrentText("Ion Type"); } + rowsfiltercomparatorcombobox2->setCurrentText("="); + rowsfilterline2->setText(iontype.c_str()); - cPeak peak; - peak.mzratio = (double)(eicchromatogram.size() + 1); - peak.absoluteintensity = intensity; - peak.description = matcheditem; - eicchromatogram.add(peak); + rowsfiltercasesensitive->setChecked(true); + rowsfilterwholeword->setChecked(true); + + filterRows(); } @@ -1018,6 +1128,7 @@ void cSummaryPeaksTableWidget::keyPressEvent(QKeyEvent *event) { void cSummaryPeaksTableWidget::closeWindow() { + pubchemsearchwidget->hide(); hide(); } @@ -1034,13 +1145,21 @@ void cSummaryPeaksTableWidget::filterRows() { eicchromatogram.clear(); if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { iontypecol = 3; if (parameters->generateisotopepattern) { - mzcol = 6; - relintcol = 7; - absintcol = 8; - namecol = 13; + if (parameters->calculatefdrs) { + mzcol = 6; + relintcol = 7; + absintcol = 8; + namecol = 13; + } + else { + mzcol = 6; + relintcol = 7; + absintcol = 8; + namecol = 11; + } } else { mzcol = 5; @@ -1052,10 +1171,18 @@ void cSummaryPeaksTableWidget::filterRows() { else { iontypecol = 2; if (parameters->generateisotopepattern) { - mzcol = 5; - absintcol = 7; - namecol = 12; - referencecol = 13; + if (parameters->calculatefdrs) { + mzcol = 5; + absintcol = 7; + namecol = 12; + referencecol = 13; + } + else { + mzcol = 5; + absintcol = 7; + namecol = 10; + referencecol = 11; + } } else { mzcol = 4; @@ -1079,6 +1206,7 @@ void cSummaryPeaksTableWidget::filterRows() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); // filter table proxymodel->setWholeWord(rowsfilterwholeword->isChecked()); @@ -1093,7 +1221,7 @@ void cSummaryPeaksTableWidget::filterRows() { string tmpdescription; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { int proxymodelrowcount = proxymodel->rowCount(); for (i = 0; i < proxymodelrowcount; i++) { x = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, 1)))->data(Qt::DisplayRole).toInt(); @@ -1154,6 +1282,8 @@ void cSummaryPeaksTableWidget::filterRows() { } else { int proxymodelrowcount = proxymodel->rowCount(); + string compname; + for (i = 0; i < proxymodelrowcount; i++) { id = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, 0)))->data(Qt::DisplayRole).toInt() - 1; // ok @@ -1163,15 +1293,24 @@ void cSummaryPeaksTableWidget::filterRows() { experimentalmz[id].insert(tmpdescription); } + compname = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, namecol)))->text().toStdString(); + tmpdescription = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, iontypecol)))->text().toStdString(); tmpdescription += " itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, referencecol)))->text().toStdString(); tmpdescription += "\">"; - tmpdescription += databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, namecol)))->text().toStdString(); + tmpdescription += compname; tmpdescription += ""; if (eicchromatogram[id].description.find(tmpdescription) == string::npos) { eicchromatogram[id].description += tmpdescription; + + if (parameters->mode == compoundsearch) { + if (parameters->pchemresults.count(compname) == 1) { + eicchromatogram[id].description += ", " + to_string(parameters->pchemresults[compname]) + "x"; + } + } + eicchromatogram[id].description += "
"; } @@ -1186,7 +1325,7 @@ void cSummaryPeaksTableWidget::filterRows() { } if (((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) && !progress.wasCanceled()) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { emit sendFilterOptionsToImageWindow(coordinateinfo, (bool)rowsfilteroperator->currentIndex(), rowsfiltercombobox1->currentText().toStdString(), rowsfiltercomparatorcombobox1->currentText().toStdString(), rowsfilterline1->text().toStdString(), rowsfiltercombobox2->currentText().toStdString(), rowsfiltercomparatorcombobox2->currentText().toStdString(), rowsfilterline2->text().toStdString(), rowsfiltercasesensitive->isChecked(), rowsfilterwholeword->isChecked()); } else { @@ -1206,7 +1345,7 @@ void cSummaryPeaksTableWidget::resetFilter() { rowsfilterline2->setText(""); if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { vector coordinateinfo; for (auto& it : origcoordinateinfo) { @@ -1228,6 +1367,11 @@ void cSummaryPeaksTableWidget::resetFilter() { proxymodel->setWholeWord(false); proxymodel->setFilterKeyColumn(-1); proxymodel->setFilterFixedString(""); + + bool lcms = (parameters->peaklistseriesvector[activefileid].size() > 1) && !((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)); + if (lcms && (parameters->mode == compoundsearch)) { + filterRows(); + } } @@ -1243,6 +1387,7 @@ void cSummaryPeaksTableWidget::exportToCsv() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); bool removefile = false; QFile file(filename); @@ -1300,6 +1445,82 @@ void cSummaryPeaksTableWidget::exportToCsv() { } +void cSummaryPeaksTableWidget::exportToDatabase() { + + if (!parameters) { + return; + } + + if (parameters->mode != compoundsearch) { + QMessageBox msgBox; + QString msg = "The feature is available only in 'Compound Search - MS, LC-MS, MSI' mode !"; + msgBox.setText(msg); + msgBox.exec(); + return; + } + + QString filename = QFileDialog::getSaveFileName(this, tr("Export Database"), lastdirexportdatabase, tr("Files (*.txt)")); + + if (!filename.isEmpty()) { + lastdirexportdatabase = filename; + + int namecol; + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { + if (parameters->generateisotopepattern) { + if (parameters->calculatefdrs) { + namecol = 13; + } + else { + namecol = 11; + } + } + else { + namecol = 10; + } + } + else { + if (parameters->generateisotopepattern) { + if (parameters->calculatefdrs) { + namecol = 12; + } + else { + namecol = 10; + } + } + else { + namecol = 9; + } + } + + set formulas; + QStandardItem* item; + + for (int i = 0; i < proxymodel->rowCount(); i++) { + item = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, namecol))); + if (item) { + formulas.insert(item->text().toStdString()); + } + } + + cSequenceDatabase seqdb; + cSequence seq; + + seq.setPeptideType(other); + for (auto& it : formulas) { + seq.setName(it); + seq.setSummaryFormula(it); + seqdb.push_back(seq); + } + + ofstream output; + output.open(filename.toStdString()); + seqdb.storeToPlainTextStream(output, false); + output.close(); + } + +} + + void cSummaryPeaksTableWidget::exportStatistics() { if (!parameters) { @@ -1317,6 +1538,7 @@ void cSummaryPeaksTableWidget::exportStatistics() { progress.installEventFilter(&filter); progress.setMinimumDuration(0); progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); bool removefile = false; QFile file(filename); @@ -1344,20 +1566,34 @@ void cSummaryPeaksTableWidget::exportStatistics() { if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { if (parameters->generateisotopepattern) { - iontypecol = 3; - theoreticalmzcol = 4; - summaryformulacol = 12; - namecol = 13; - referencecol = 14; - scorecol = 10; - fdrcol = 11; - idcol = 0; - xcol = 1; - ycol = 2; - relintcol = 7; - absintcol = 8; + if (parameters->calculatefdrs) { + iontypecol = 3; + theoreticalmzcol = 4; + summaryformulacol = 12; + namecol = 13; + referencecol = 14; + scorecol = 10; + fdrcol = 11; + idcol = 0; + xcol = 1; + ycol = 2; + relintcol = 7; + absintcol = 8; + } + else { + iontypecol = 3; + theoreticalmzcol = 4; + summaryformulacol = 10; + namecol = 11; + referencecol = 12; + idcol = 0; + xcol = 1; + ycol = 2; + relintcol = 7; + absintcol = 8; + } } else { iontypecol = 3; @@ -1374,16 +1610,28 @@ void cSummaryPeaksTableWidget::exportStatistics() { } else { if (parameters->generateisotopepattern) { - iontypecol = 2; - theoreticalmzcol = 3; - summaryformulacol = 11; - namecol = 12; - referencecol = 13; - scorecol = 9; - fdrcol = 10; - idcol = 0; - relintcol = 6; - absintcol = 7; + if (parameters->calculatefdrs) { + iontypecol = 2; + theoreticalmzcol = 3; + summaryformulacol = 11; + namecol = 12; + referencecol = 13; + scorecol = 9; + fdrcol = 10; + idcol = 0; + relintcol = 6; + absintcol = 7; + } + else { + iontypecol = 2; + theoreticalmzcol = 3; + summaryformulacol = 9; + namecol = 10; + referencecol = 11; + idcol = 0; + relintcol = 6; + absintcol = 7; + } } else { iontypecol = 2; @@ -1475,7 +1723,7 @@ void cSummaryPeaksTableWidget::exportStatistics() { if (item) { keyms.reference = item->text().toStdString(); } - if (parameters->generateisotopepattern) { + if (parameters->generateisotopepattern && parameters->calculatefdrs) { item = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, scorecol))); if (item) { keyms.score = item->text().toStdString(); @@ -1708,7 +1956,7 @@ void cSummaryPeaksTableWidget::exportStatistics() { out << "\"Average Relative Intensity [%]\",\"Median Relative Intensity [%]\",\"Maximum Relative Intensity [%]\","; out << "\"Average Absolute Intensity\",\"Median Absolute Intensity\",\"Maximum Absolute Intensity\","; out << "\"ID (min)\",\"ID (max)\","; - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { out << "\"Coordinate X (min)\",\"Coordinate X (max)\",\"Coordinate Y (min)\",\"Coordinate Y (max)\","; } out << "\"Summary Formula\"" << endl; @@ -1751,7 +1999,7 @@ void cSummaryPeaksTableWidget::exportStatistics() { } } - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { item = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(*it2, xcol))); if (item) { @@ -1810,7 +2058,7 @@ void cSummaryPeaksTableWidget::exportStatistics() { out << ss.str().c_str(); out << idmin << "\",\"" << idmax << "\",\""; - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { out << xmin << "\",\"" << xmax << "\",\"" << ymin << "\",\"" << ymax << "\",\""; } @@ -1875,7 +2123,7 @@ void cSummaryPeaksTableWidget::rowDoubleClicked(const QModelIndex& item) { int experimentalmzcolumn = 0; if ((parameters->mode == dereplication) || (parameters->mode == compoundsearch)) { - if ((parameters->peaklistfileformat == mis) || (parameters->peaklistfileformat == imzML)) { + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { if (parameters->generateisotopepattern) { size = 14; experimentalmzcolumn = 6; @@ -2012,3 +2260,524 @@ void cSummaryPeaksTableWidget::rowsFilterRight2Slot() { } } + +void cSummaryPeaksTableWidget::searchPubChem() { + if (!parameters) { + return; + } + + if (parameters->mode != compoundsearch) { + QMessageBox msgBox; + QString msg = "This feature is available only in 'Compound Search - MS, LC-MS, MSI' mode !"; + msgBox.setText(msg); + msgBox.exec(); + return; + } + + bool repeatsearch = false; + if (!pubchemsearchwidget->getHTML().empty()) { + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, "Search PubChem...", "Search again ?", QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::Yes) { + repeatsearch = true; + } + } + + if (repeatsearch || pubchemsearchwidget->getHTML().empty()) { + + resetFilter(); + + int idcol; + int iontypecol; + int theoreticalmzcol; + int experimentalintcol; + int namecol; + + if ((parameters->peaklistfileformats[activefileid] == mis) || (parameters->peaklistfileformats[activefileid] == imzML)) { + if (parameters->generateisotopepattern) { + if (parameters->calculatefdrs) { + idcol = 0; + iontypecol = 3; + theoreticalmzcol = 4; + experimentalintcol = 7; + namecol = 13; + } + else { + idcol = 0; + iontypecol = 3; + theoreticalmzcol = 4; + experimentalintcol = 7; + namecol = 11; + } + } + else { + idcol = 0; + iontypecol = 3; + theoreticalmzcol = 4; + experimentalintcol = 6; + namecol = 10; + } + } + else { + if (parameters->generateisotopepattern) { + if (parameters->calculatefdrs) { + idcol = 0; + iontypecol = 2; + theoreticalmzcol = 3; + experimentalintcol = 6; + namecol = 12; + } + else { + idcol = 0; + iontypecol = 2; + theoreticalmzcol = 3; + experimentalintcol = 6; + namecol = 10; + } + } + else { + idcol = 0; + iontypecol = 2; + theoreticalmzcol = 3; + experimentalintcol = 5; + namecol = 9; + } + } + + set formulas; + map formulasmap; + multimap invertedmultimap; + map > scanids; + set errorset; + QStandardItem* itemid; + QStandardItem* itemiontype; + QStandardItem* itemtheoreticalmz; + QStandardItem* itemexperimentalint; + QStandardItem* itemname; + ostringstream outhtml; + + cRowItemInfo rowitem; + string tmpstr; + + for (int i = 0; i < proxymodel->rowCount(); i++) { + itemid = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, idcol))); + itemiontype = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, iontypecol))); + itemtheoreticalmz = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, theoreticalmzcol))); + itemexperimentalint = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, experimentalintcol))); + itemname = databasemodel->itemFromIndex(proxymodel->mapToSource(proxymodel->index(i, namecol))); + + if (itemid && itemiontype && itemtheoreticalmz && itemexperimentalint && itemname) { + formulas.insert(itemname->text().toStdString()); + + rowitem.id = itemid->text().toInt(); + rowitem.iontype = itemiontype->text().toStdString(); + rowitem.theoreticalmz = itemtheoreticalmz->text().toDouble(); + rowitem.experimentalint = itemexperimentalint->text().toDouble(); + + tmpstr = itemname->text().toStdString() + ", " + rowitem.iontype; + + if (formulasmap.count(tmpstr) == 0) { + formulasmap[tmpstr] = rowitem; + } + else { + if (formulasmap[tmpstr].id == rowitem.id) { + if (rowitem.experimentalint > formulasmap[tmpstr].experimentalint) { + formulasmap[tmpstr].experimentalint = rowitem.experimentalint; + formulasmap[tmpstr].theoreticalmz = rowitem.theoreticalmz; + } + } + } + + if (scanids.count(tmpstr) == 0) { + set tmpset; + tmpset.insert(rowitem.id); + scanids[tmpstr] = tmpset; + } + else { + scanids[tmpstr].insert(rowitem.id); + } + } + } + + if (formulas.size() == 0) { + return; + } + + const int limit = 500; + + if (formulas.size() > limit) { + QMessageBox msgBox; + QString errstr = "The maximum number of formulas to be searched is " + QVariant(limit).toString() + ". You generated " + QVariant((int)formulas.size()).toString() + " formulas. "; + errstr += "Please, optimize the search settings."; + msgBox.setText(errstr); + msgBox.exec(); + return; + } + + for (auto& it : formulasmap) { + invertedmultimap.insert(make_pair(it.second.theoreticalmz, it.first)); + } + + parameters->pchemresults.clear(); + vector cidsvector; + + //vector allcids; + + bool allempty = true; + + bool writelog = false; + ofstream pchemlog; + + if (writelog) { + pchemlog.open("pubchem.log", ofstream::out); + } + + bool parallel = true; + if (parallel) { + int maxthreadsbackup = QThreadPool::globalInstance()->maxThreadCount(); + int maxqueries = 2; + + QThreadPool::globalInstance()->setMaxThreadCount(maxqueries); + + vector vformulas; + for (auto& it : formulas) { + vformulas.push_back(it); + } + + QProgressDialog firstdialog("Searching compounds (CIDs)...", "Cancel", 0, (int)formulas.size(), this); + firstdialog.setMinimumWidth(250); + cEventFilter firstfilter; + firstdialog.installEventFilter(&firstfilter); + firstdialog.setMinimumDuration(0); + firstdialog.setWindowModality(Qt::ApplicationModal); + firstdialog.setValue(0); + + QFutureWatcher firstfuturewatcher; + QObject::connect(&firstfuturewatcher, SIGNAL(finished()), &firstdialog, SLOT(reset())); + QObject::connect(&firstdialog, SIGNAL(canceled()), &firstfuturewatcher, SLOT(cancel())); + QObject::connect(&firstfuturewatcher, SIGNAL(progressRangeChanged(int, int)), &firstdialog, SLOT(setRange(int, int))); + QObject::connect(&firstfuturewatcher, SIGNAL(progressValueChanged(int)), &firstdialog, SLOT(setValue(int))); + + QFuture firstfuture = QtConcurrent::mapped(vformulas.begin(), vformulas.end(), cPubchemCIDReader()); + + firstfuturewatcher.setFuture(firstfuture); + + firstdialog.exec(); + + if (firstfuturewatcher.isCanceled()) { + QThreadPool::globalInstance()->clear(); + } + + firstfuturewatcher.waitForFinished(); + + if (!firstfuturewatcher.isCanceled()) { + + cidsvector.resize(vformulas.size()); + + cPubchemCIDReader pubchemformulareader; + int count; + string firstfutureresult; + for (int i = 0; i < (int)vformulas.size(); i++) { + firstfutureresult = firstfuture.resultAt(i); + + if (firstfutureresult.substr(0, 6).compare("@ERROR") == 0) { + if (writelog) { + pchemlog << firstfutureresult; + } + firstfutureresult.clear(); + } + + if (!firstfutureresult.empty()) { + allempty = false; + } + + count = pubchemformulareader.getNumberOfCIDs(firstfutureresult); + if (count > 0) { + parameters->pchemresults.insert(make_pair(vformulas[i], count)); + pubchemformulareader.getCommaSeparatedCIDs(firstfutureresult, cidsvector[i]); + //pubchemformulareader.attachVectorOfCIDs(firstfutureresult, allcids); + } + + if (firstfutureresult.find("Status:") != string::npos) { + if (firstfutureresult.find("Status: 404") == string::npos) { + errorset.insert(vformulas[i]); + } + } + + if (writelog) { + pchemlog << "Formula: \"" << vformulas[i] << "\"" << endl; + pchemlog << "Result: \"" << firstfutureresult << "\"" << endl; + pchemlog << "Reduced result: \"" << cidsvector[i] << "\"" << endl; + pchemlog << "-----" << endl << endl; + } + } + + QProgressDialog seconddialog("Searching compounds (Names)...", "Cancel", 0, (int)cidsvector.size(), this); + seconddialog.setMinimumWidth(250); + cEventFilter secondfilter; + seconddialog.installEventFilter(&secondfilter); + seconddialog.setMinimumDuration(0); + seconddialog.setWindowModality(Qt::ApplicationModal); + seconddialog.setValue(0); + + QFutureWatcher secondfuturewatcher; + QObject::connect(&secondfuturewatcher, SIGNAL(finished()), &seconddialog, SLOT(reset())); + QObject::connect(&seconddialog, SIGNAL(canceled()), &secondfuturewatcher, SLOT(cancel())); + QObject::connect(&secondfuturewatcher, SIGNAL(progressRangeChanged(int, int)), &seconddialog, SLOT(setRange(int, int))); + QObject::connect(&secondfuturewatcher, SIGNAL(progressValueChanged(int)), &seconddialog, SLOT(setValue(int))); + + QFuture secondfuture = QtConcurrent::mapped(cidsvector.begin(), cidsvector.end(), cPubchemNameReader()); + + secondfuturewatcher.setFuture(secondfuture); + + seconddialog.exec(); + + if (secondfuturewatcher.isCanceled()) { + QThreadPool::globalInstance()->clear(); + } + + secondfuturewatcher.waitForFinished(); + + if (!secondfuturewatcher.isCanceled()) { + + cPubchemNameReader pubchemnamereader; + set reducednames; + string link; + + map > namesmap; + string secondfutureresult; + + bool servererror = false; + + for (int i = 0; i < (int)vformulas.size(); i++) { + if (cidsvector[i].empty()) { + continue; + } + + reducednames.clear(); + secondfutureresult = secondfuture.resultAt(i); + + if (secondfutureresult.substr(0, 6).compare("@ERROR") == 0) { + if (writelog) { + pchemlog << secondfutureresult; + } + secondfutureresult.clear(); + } + + pubchemnamereader.getReducedNames(secondfutureresult, reducednames); + + if (!reducednames.empty()) { + namesmap[vformulas[i]] = reducednames; + } + + if (secondfutureresult.find("Status:") != string::npos) { + if (secondfutureresult.find("Status: 404") == string::npos) { + set tmperrset; + string status; + + if (secondfutureresult.find("Status: 414") != string::npos) { + tmperrset.insert("Too many names, this item must be checked manually."); + namesmap[vformulas[i]] = tmperrset; + } + else { + tmperrset.insert("No names found, try again or later."); + namesmap[vformulas[i]] = tmperrset; + + servererror = true; + + status = vformulas[i]; + status += ", "; + status += "https://pubchem.ncbi.nlm.nih.gov/#query=" + vformulas[i]; + status += ""; + + errorset.insert(status); + } + } + } + + if (writelog) { + pchemlog << "Formula: \"" << vformulas[i] << "\"" << endl; + pchemlog << "Result: \"" << secondfutureresult << "\"" << endl; + pchemlog << "Reduced result: " << endl; + for (auto& it : reducednames) { + pchemlog << it << endl; + } + pchemlog << "-----" << endl << endl; + } + } + + if (errorset.size() > 0) { + outhtml << "
"; + outhtml << "The queries on the following formulas returned an error:
"; + for (auto& it : errorset) { + outhtml << it << "
"; + } + outhtml << "
"; + } + + if (servererror) { + outhtml << "
Try to repeat the search process again or later !
"; + } + else { + if (allempty) { + outhtml << "
Failed to connect to the server. Please, check your Internet connection, firewall or antivirus settings !
"; + } + else { + outhtml << "
The search process has been completed successfully !
"; + } + } + + outhtml << "

---
"; + + for (auto& it : invertedmultimap) { + tmpstr = it.second.substr(0, it.second.find(",")); + + if (namesmap[tmpstr].size() > 0) { + link = "https://pubchem.ncbi.nlm.nih.gov/#query=" + tmpstr; + + outhtml << "
"; + outhtml << std::fixed << std::setprecision(6); + outhtml << "m/z " << it.first << ", " << it.second << ", " << link << " ("; + outhtml << parameters->pchemresults[tmpstr]; + outhtml << " result"; + if (parameters->pchemresults[tmpstr] > 1) { + outhtml << "s"; + } + outhtml << ")
"; + + vector scanidsvector; + if (scanids.count(it.second) == 1) { + scanidsvector.assign(scanids[it.second].begin(), scanids[it.second].end()); + } + + outhtml << "Scans: "; + int scanssize = (int)scanidsvector.size(); + for (int i = 0; i < scanssize; i++) { + if (i == 0) { + outhtml << scanidsvector[i]; + continue; + } + if (i == scanssize - 1) { + if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + outhtml << "-"; + } + else { + outhtml << ", "; + } + outhtml << scanidsvector[i]; + break; + } + if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + if (scanidsvector[i] + 1 != scanidsvector[i + 1]) { + outhtml << "-" << scanidsvector[i]; + } + } + else { + outhtml << ", " << scanidsvector[i]; + } + } + outhtml << "
"; + + if ((rtimes.size() > 0) && (rtimes[rtimes.size() - 1] > 0)) { + outhtml << "RT: "; + outhtml << std::fixed << std::setprecision(3); + for (int i = 0; i < scanssize; i++) { + if (i == 0) { + outhtml << rtimes[scanidsvector[i] - 1]; + continue; + } + if (i == scanssize - 1) { + if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + outhtml << "-"; + } + else { + outhtml << ", "; + } + outhtml << rtimes[scanidsvector[i] - 1]; + break; + } + if (scanidsvector[i - 1] + 1 == scanidsvector[i]) { + if (scanidsvector[i] + 1 != scanidsvector[i + 1]) { + outhtml << "-" << rtimes[scanidsvector[i] - 1]; + } + } + else { + outhtml << ", " << rtimes[scanidsvector[i] - 1]; + } + } + outhtml << "
"; + } + + outhtml << "Names: " << "
"; + for (auto& it2 : namesmap[tmpstr]) { + outhtml << it2 << "
"; + } + outhtml << "
"; + } + } + + } + + } + + //ofstream of("out.sh"); + //for (auto& it : allcids) { + // of << "wget https://pubchem.ncbi.nlm.nih.gov/rest/pug_view/data/compound/" << it << "/xml -O " << it << ".xml" << endl; + //} + + QThreadPool::globalInstance()->setMaxThreadCount(maxthreadsbackup); + } + else { + QProgressDialog progress("Searching compounds (CIDs)...", "Cancel", 0, (int)formulas.size(), this); + progress.setMinimumWidth(250); + cEventFilter filter; + progress.installEventFilter(&filter); + progress.setMinimumDuration(0); + progress.setWindowModality(Qt::ApplicationModal); + progress.setValue(0); + + string url; + string cids; + int i = 0; + int count; + for (auto& it : formulas) { + cPubchemCIDReader pubchemformulareader; + cids = pubchemformulareader.getCIDList(it); + count = pubchemformulareader.getNumberOfCIDs(cids); + + if (count > 0) { + parameters->pchemresults.insert(make_pair(it, count)); + } + + progress.setValue(i); + + if (progress.wasCanceled()) { + parameters->pchemresults.clear(); + break; + } + + i++; + } + + if (!progress.wasCanceled()) { + progress.setValue((int)formulas.size()); + } + } + + if (writelog) { + pchemlog.close(); + } + + resetFilter(); + + pubchemsearchwidget->setHTML(outhtml.str()); + } + + pubchemsearchwidget->show(); + pubchemsearchwidget->activateWindow(); + if (pubchemsearchwidget->isMinimized()) { + pubchemsearchwidget->showNormal(); + } +} + diff --git a/CycloBranch/gui/cSummaryPeaksTableWidget.h b/CycloBranch/gui/cSummaryPeaksTableWidget.h index 035d3b0..93d8a0c 100644 --- a/CycloBranch/gui/cSummaryPeaksTableWidget.h +++ b/CycloBranch/gui/cSummaryPeaksTableWidget.h @@ -7,6 +7,7 @@ #ifndef _CSUMMARYPEAKSTABLEWIDGET_H #define _CSUMMARYPEAKSTABLEWIDGET_H +#include #include #include #include @@ -22,15 +23,15 @@ #include #include #include -#include + #include "core/utilities.h" #include "core/cGlobalPreferences.h" #include "gui/cViewButtonDelegate.h" #include "gui/cSummaryPeaksTableProxyModel.h" #include "gui/cMainWindowProxyModel.h" #include "gui/cHTMLDelegate.h" - -using namespace std; +#include "gui/cPubChemSearchWidget.h" +#include "gui/cEventFilter.h" // forward declaration @@ -233,6 +234,16 @@ struct cSummaryTableKeyMSMS_comp { }; +/** + \brief Add a peak to an extracted ion chromatogram. + \param parameters application parameters + \param eicchromatogram EIC chromatogram + \param theoreticalspectrum theoretical spectrum + \param experimentalspectrum experimental spectrum +*/ +void addEICPeak(cParameters* parameters, cPeaksList& eicchromatogram, cTheoreticalSpectrum& theoreticalspectrum, cPeaksList& experimentalspectrum); + + /** \brief Summary table of matched peaks. */ @@ -269,11 +280,12 @@ class cSummaryPeaksTableWidget : public QMainWindow \param resultsstandardmodel standard model of the tableview in the main application window \param resultsproxymodel proxy model of the tableview in the main application window \param parameters parameters of the application - \param spectralist list of spectra + \param listoftheoreticalspectra lists of theoretical spectra + \param activefileid id of the active file \param showisomers true if isomers of blocks are reported; false otherwise \retval bool true if the table was successfully prepared, false otherwise */ - bool prepareToShow(QStandardItemModel* resultsstandardmodel, cMainWindowProxyModel* resultsproxymodel, cParameters* parameters, cTheoreticalSpectrumList* spectralist, bool showisomers); + bool prepareToShow(QStandardItemModel* resultsstandardmodel, cMainWindowProxyModel* resultsproxymodel, cParameters* parameters, cTheoreticalSpectrumList* listoftheoreticalspectra, int activefileid, bool showisomers); /** @@ -299,6 +311,29 @@ class cSummaryPeaksTableWidget : public QMainWindow void applyGlobalPreferences(cGlobalPreferences* globalpreferences); + /** + \brief Get the reference to cPubChemSearchWidget. + \retval cPubChemSearchWidget reference to cPubChemSearchWidget + */ + cPubChemSearchWidget* getPubChemSearchWidget(); + + + /** + \brief Filter table rows. + */ + void filterTablerows(); + + + /** + \brief Filter a specific compound. + \param name compound name + \param iontype ion type + \param datatypeview type of data shown + \param mzstr theoretical m/z value converted to a string + */ + void filterCompound(string name, string iontype, int datatypeview, string mzstr); + + private: QString title; @@ -308,15 +343,22 @@ class cSummaryPeaksTableWidget : public QMainWindow cParameters* parameters; QWidget* parent; + cPubChemSearchWidget* pubchemsearchwidget; + QMenuBar* menuBar; QMenu* menuFile; + //QMenu* menuSearch; QMenu* menuHelp; QToolBar* toolbarFile; QAction* actionExportCSV; + QAction* actionExportDatabase; QAction* actionExportStatistics; QAction* actionCloseWindow; + //QToolBar* toolbarSearch; + //QAction* actionSearchPubChem; + QToolBar* toolbarHelp; QAction* actionHTMLDocumentation; @@ -354,13 +396,16 @@ class cSummaryPeaksTableWidget : public QMainWindow QWidget* mainwidget; QString lastdirexporttocsv; + QString lastdirexportdatabase; QString lastdirexportstatisticstocsv; + vector rtimes; + vector origcoordinateinfo; cPeaksList origeicchromatogram; - void addEICPeak(cPeaksList& eicchromatogram, cTheoreticalSpectrum& theoreticalspectrum, cPeaksList& experimentalspectrum); - + int activefileid; + void addCoordinateInfo(int spectrumindex, vector& coordinateinfo, cTheoreticalSpectrum& theoreticalspectrum, cPeaksList& experimentalspectrum); @@ -388,6 +433,9 @@ private slots: void exportToCsv(); + void exportToDatabase(); + + void exportStatistics(); @@ -409,6 +457,8 @@ private slots: void rowsFilterRight2Slot(); + void searchPubChem(); + signals: @@ -428,7 +478,7 @@ private slots: /** - \brief Reset the region in imagw window. + \brief Reset the region in image window. */ void resetRegion(); @@ -459,3 +509,4 @@ private slots: }; #endif + diff --git a/CycloBranch/images.qrc b/CycloBranch/images.qrc index e9e88e5..fab52a2 100644 --- a/CycloBranch/images.qrc +++ b/CycloBranch/images.qrc @@ -29,8 +29,6 @@ images/icons/95.png images/icons/65.png images/icons/56.png - images/icons/5.png - images/icons/25.png images/icons/63.png images/icons/13.png images/icons/14.png @@ -49,8 +47,17 @@ images/icons/12.png images/icons/preferences.png images/icons/table.png - images/icons/image.png images/icons/csv.png images/icons/66.png + images/icons/image_edit.png + images/icons/image_open.png + images/icons/clear.png + images/icons/import.png + images/icons/db_export.png + images/icons/db_delete.png + images/icons/search.png + images/icons/pattern.png + images/icons/formula.png + images/icons/features.png diff --git a/CycloBranch/images/formula.cdr b/CycloBranch/images/formula.cdr new file mode 100644 index 0000000000000000000000000000000000000000..c33a47e9bcad9fbe1441e92aa3adcd0a55d78ad4 GIT binary patch literal 1487604 zcmb5VV{j(XxBnYw;!H5HZQHhOb7ChGOl;e>ZQJ(5w(&&I&F|b(b?f}ky)W*rUK_nu zuNS-a?)vtpyA@@?A<#fTet>|Ocrz#yxA&IPfq;Pg$G%U2*jm||xp+F5896xESeY2P zSlQb#c+k1onbMosJDJ(gdzqNin>rb})0^6xxZ0Z8xzKo7IVk>j${+ug@|@M>(EmFZ zf)ohIukVy5_I57cfefZbE=K=VG0}f_uXN>XaKzAjw?7CiX{eQ`9rLQZs8EVx7Rlva zWi}wB^NFmozM#eAFN;dP60=$5+MCq;NwQwAK#9DBg$wpUI3OU05Qt)M1tr4>h`hw9 z_qy%P-BvHEE{3Gy=DL=>EG)LWdOdHZr#7~2ZABS6ARIW_A2;F=J2EGkn2{Gx`qUZ> zjYRSvUkqfrNBwlX-s$}9-=>%6uQ=KdJ$l}3Z$>$zM@NKRg~Du)W7+xP|J6Ua4M2>; zHr;Z)1#|ly;ryI{Y2s;eO{JEq%rb&?4en6VD5F+QjmHt~R>E+Ni%>0rKe7xHu%Hxs z(9J0n@fMJRIWOYp=iz7z6@=T`_J)dbZ@N!M#3r_hBC}o_5-vluRuzGmS)<_5e>;%8 z5L{ZmbMU=P^_{p8xZ+rS#-4@QdKb^hJMhjfAT?Vb!|G`@><@s1`$el+_rE%2NJxkf zy(w5gzy=S;zn%BN)kqeCf6jO5C!6#+Z4Cfqy*%P0DiLSZ5?Z-Mt&S&x-$r}AfkM(s zF|owcjS_9F5%x9al=27Oe6y~B|CEmpFd4&95T3Y2A)o2W(G6%EBhBC^%+&eEg7`hr^C76Oloc15m1r&k6BY z9+(N7=772lFG`rY5VBdbxs8yRTG9>lkMAc-#1RW3Fe;GnnjS06BIt91Vt0;Z>fhvSWEu$t3>n9$UJTT z5h*)?R^sSTfObE}yqR65#U<-yIj=A+XQ>XHY<;Cr#mN0{srlCz^6|Q&Pu4ge0Ce0aJ6sNMj zb(v|p7stcdvcL~50eR2qa%Vj*JaN;UqXo<^<5Alq zm;&}NHOZg9gP3ag`kaM12#_AUXvSH#FjG5T*8+co(FMfs{suevsyhKaKDDev<6n`l zG)%b`R3+6s_qmv&K;qxJ$Wuu0VI028XB_T)^APm{I3MwTNCNy`1*`cLuVAQ;`9r93Z8)HJ2+?F-$6(Yvkj2XJpWuMQVTSo`(c!?1*k=r6Vou%5HDqAnnI z(x1yKo>>o7dY^T3Mj)JewMjG_II0`pA)NgJj@aI$dNgcV#-@n3e$cunHCK+fHk&PP ztEoo^&~+|(_NcUxX(}ASVWePW$@A-V*G}Y#yV0Uw{(Z2_^p|@`t1Qyfaw~oQ%VoPo zE8dz>nIKU5j$wq?9|!P;y>i}QMi-UC`VCTVn--ISK78X8MqjuG@1enq=i@ti=b6If zbZeQ)ygf5M%T?%sPxw4-wVsm7f4M%PQsM5-vrZxw!m?I>V*S>phR+?f!crHZ2P{Q)mat7r$G{;8pc&zqvyu4I1L0@kN^Ri91* zbpA+2<*sV`08lfeD1Kud?FaWv-0F5(8oN-E^E$KgC?hoLxh85hDqmF=Sm~BoZd1~b zPMuc%M$D4T8-CiHE`5ShA3UwfuCgxM%%4t;?~y|EqVkqL55}DQ8Zi0AJ*=9vwKUN` z7vpR90AZWo8Fp%Ud91v5?#BH&HC=on(Yh#ePZClsI#crOHtMLIweoojm%r}>mE@s9 z(#^~%CP1XUIQ2e@{>+9<^5kx5P_R6?NXsjkYAJZQzO=F*rdd50XZg#QR^c%MGn+PN zf(chxN&KoXk}ulr^9JSi^`u$66D*`--%3#4N3ULbG^^K0tUcg#K_vQlfGu8?9mh}S61-SiWal(^$}K7PoMt2#?byR zqQQYX1FiTPAb-Flnm3)`E#D80_d>BsJ0vHTV9NT7K+2!xs?&cs<$Lwpy)U-9XZ7Ac zx;g&Ywll1#mJ@P-SE^8pD=`#V>S8D62R>>)ek$)?w%@F{GcQX1N`}Ad*?N zSn(C#^!`uLf^4AyhX4u!^7(Bz|EFlNHF9<_b5b<2F#C^kd4B-{{m7x9ppd_yO@SnR zxo|~V{+bYBu7A^@!|?ucf`p0u>C4TPeY#qAPrrD!E*{?itvlTija#i59&ZchTsy?#1duZ zqfoNog=yu*EP@yd5w?IBBN0A>?mLxXn}+)1nqfFJnTPj7_F9d?cWTsx;v z#szE&fx?TyhYOw@vLu0KgE^^!&S?PzeUNc)N3jQpdDIBT83Gb>0q`TQJk`d7CU; zOe3(K=Z?276*XFa};|AG!TWENhG6CT`|zk~RR5p+7v$C%VgLT`yQ< zy0Oj!X-!pxd|}=%E`avcyikf2oCP|Vad#wS4tsErw(v$u&}7z-o|4bwMi;z8+%|2-BEQ)vyV>V; z9<+B#$8i)XrZnv2s|OS;*SuO>@~W;ie8hNbD#*E6ya&Iyx2{oKc=A=e`K$GS-8W=$ z-JY>!ZCzt@!9r+cXQzdE?9TD_GH9Rez1QfcvDE9w`1+8#DWLTk>xZzvSL-_x`gK>c z>&rjVsWcbpX3a>oH3ax0<>2T`-?!495LHduE@NBxT&H{7+p&lKmfgI_uZ>-B@LHGY zYl+^0lJJy%UJ*0vJP9xz;Yr}bmrctJ*bd9cIm8P#Xe`xb7w=qLjsu!_* zT)uRiB(xE2Q7Z(!uzS8Da$=oa`|TBtw+till4h2&g6pJr0zzgZ_~rzj&B}VIE%v+R z2O#OV{h0L`e@lj6Y5Fb%;ZK%Lvdswdc@Bfw82Fp@CW|)|5+jBTr1RI`6>F%C6K{KY z&XR7PAHRHErte0u9F}Ki`_ZHdH{_aha#9s+3-$>ko^e8J@I3=W5OX?ZhA|X881}5^qe_<(;;ozEL|uq7$Y^q3&7li zgBmnqRlqyuvKpq&Sv>ge=mhH`{;9ft9kE@lx@)Qax9@?VGAhLEKx`j=vHkyeEQ ze!~snIjr}nfKG%!=wyCt&_9LIfAS-xOLIitS2Xjr0>|S2-?L&;eLR$X=x+^t=h)8 zS6SmV#m0o>?cy{KBIGp4nOGu(Wk#`3h+{_{oH| zQwz$comm&$cVz`{bqxkFE?owoK`2rP;JrZngRvDCaP1L;F2%=YwtjkL99_~actRtFP%KKR zSj(8b9EMt&cLuc-!f|>ZX3{g#+$TMOUqlmC*eq-!kH28@7eZU#Dy&-kRnIUayqV2WXK~CHbi}q z0CAXUl@R`cwobsKuI$DE7Y#A{1DUEu@kjD&FuW;>Pj<(V$N;ji<0Ms*vInhLDVF3g zU7|3Jn5Ynwwd|n0Vp%bSW+b9STqG)WsD8NeQ&FO;BPK1qUX$=&)2tbYj5~e{!i)eW z?Ni%d6=GcLGWQ9=wvT2Q(Du@**ifXzK`NG8=(3akxXvh~eO$pS>P!{h6zsBi&3>l8`sSZ_$r!cscpgu6)Jzh(Lf(7D*7{pAwvrSV36aH^3W(@!wEwprNb}|RLi?e=a`7NxU7tO#te%H=@7|- zZ^;?Z|B^M*BQgx9xwyFPw}!7>@@$ z?gp7dTr%f>U_ba5q4|S;idn5CvC1|UH<&=^AsN^O`XXot)`)0%;ETE!a=l)98=Yg! zdAX2y_ll?eLE{TR1Rwpo3H6AACE#BZ?D%1e!0jQfe2U)G;80rK@%$*Tp6fI0S)W|# zclw5Xs*vUN%7GB#`?V$k?C#y-%IwL;FZm{*v; zQ@mIfeVB*w*lzUGgKuICBNqp-i9dQyF=9SyPsTqjY)*u zIrD0oIy%mMXN~i-xM(IbVEOXeM0i96-a5fZ0|zHRCX)4DF16eib9*t>T68<0fMCUGK}u3o83Y8>@4HX=1M0i})%KS4-GDkPO9+G1%;27V4SN(Pj3B?qFbV(F%^UP4{e^9{ItO<^*6+wdsjAp_aYng-lH&fQ#(vSU~ zLVX?{7{kO0LRbl88XFg+I8l>xpH=m7JukHo-}qDgwoA&gwY>cFkgal(Re@g^_MgHN zD*5&EySO9Ae~=Ip6JHY&10+O6MgIwj-p79X+XBN53BLV~&_BlozWw`%#0h@i{vo`e zG*|Z5>J< z;V4>een#u-doy~HFI2WJy`2$FE5xW2yW0nkP@J6YDbRU+u78dM?u(eTXw1r{ob7T0 zA4dLOStSNlpeC{cZz-(1y9-!*H$j?SG(WYzB!2KKJ@h!$#+d^CZUB0Dr~Xvzrw_7k zHg@Qn*Cl!F?8WPM7aVW!Mr$;jP%K+%Z*UhyCWxrw{MmMwJUh3IY)LWqn!TEdO()y1 z?k=Xe*d3c|=Ulp$t3YM#T`AJ&!NJlMs8ne#ds(AhFL}wl8vnp3j&bzacG4vQP=L`qk% zycQ1`pk^mj-c1?AzHGU-v~GK9FJJ%Y03Q+Wopzz8?xP$1C;^oTbGipv1l}U?y_il6 z9OWh33`y_LIDbSkS2tnu;C>5a|_Nz*k;E$ph-CA@?cDkeT>+$|T!k6m_t zn3AS%7PF`WelYV?i1<+@OwG4sOUf46TmF%z8(eu=b*Zb;x4=jtSa9C(Q#7ef)vc=w zbv8mf+{teYiHt14ZOV#is2yvt%QApPKUVWn92Jx(sE@RQ~i^!ston z<9xiA?yY)+*C5`s<|iY+iV?cP*$emf-r#mt;wxNvI5Rx=Yn_FfI$!y6VDd`or&w8J z^vA4~yLk5uJ-I;8Ef~MM$Gts4H8l-(Cg}j@(1`WoB0A3kLEO=1xyjQ^gi0(ObkMx)0*@ze+ zYNmVJ`JfMy%s9aijWf;b}FAUWaP!IhUO-XYV$zl*46NI-W@Q&dnOVlfTf1vj!_ zu?ju8;X3|Ej%VO|(c*dX0JjnHTo&&c0C>x0E?VkMr|wkj{tmE#0!VwE45NH?}AQe{YiCzRo+6SN@96R%+#rpK{O)XS*l->6h41^5F_8)y`Uj^+mAPc z+U2-Eckls?lfDL?Bg!ccg`jaBx=f)U-s=Xc6A41w7ER^a==w62m`NA8kCx4T)p41` zeu+b>WR}$Vn@w-+g1?DrFEU^MH>P=84Ya-{9_q^Rp zfbUcE*(bdib6Ym__r1SX1L{{$b1EO7&sWExaWBO0A>&+PgY^0c*$%jes{|T(9=SFT znjZ8rlzem7ht=8J&FSq=qdxj8Fi|&Vx-)(HTJDwBMi=1=9VATf7d)WN?>@1&U$id3$RLGj2{D7^_&;}hMW+Dtv#X)XU z~$W-Y9WH-fbu0}LQv}8=WZ2~w}G%;?1+55_Vjx`)eYTKv%$q3{&@oTD_o3V zzR$)B@D(iN1H4G~>McZu;1imf{FMBX8bI|U5+=H8$DX0A6-G}swDD&rC2skQljO@h zPg5NhmBsIQI~wt6i$~w}WkRdt4i}gM@(xV%E3Sf4bYD*%@B2|Ra;D4JX1Bo`!_dLe z8eE-?P)mFn+sXa{c8a-g?ZKWQskRn*hnRm9Qz$f{ulxMA#^%+5dVH8}67SPcBg8Kz z@~@0A?t!}>MZ_9bF8xO;c$e5)*0l$vn6f8-&jD?C+cpZLK9ITw-4VOA28zhP*s23k z{cl5>W@j&bq4kAMd!820s^7(alF1Obc3&Uu_Ok#%pJnZId$JGW5Pd!{o4U>x%b3!v z-02!WcE6!-Ou-#F2L=-(t3f_iy2DXi@N1+8+yEDTw6(72#ujVEo#5?hnD;qBpr$Ij zpyuP7&kWa})rbC7YXn<`>dD!a#zz>TGP<=)Hr^*|S0WuFFi3mJPagbxm>`1;V1by2 z1K}Rux!k>VjJ;t40hrWbRjK?-up{eu#L?^dl6d(Mb9Og6lDD9zQzi;^n!6$L_8x3j zhI438yiAfdpH^|&*rwEup^R>O-G-#0CN4O0hO^q={^uCV=&Oa0#8!EAC=IS22d*#8 zOv8Gvltb=Ib|qH;{vUO3p+vOGO2mpf`Z9$}0+Ij&U=Wrs-9uKOw*`mzGuaXA z9%Fy<8*C$v?_OlFo%!367+is}MQzQQXBQK_>K~VsXgtEIU#FXPJ>ii1fo4AWeJ|^k zWst+0CmEC5?CewDwnk{E3xYEScIaG?gkCa_QW|!0hbsS_CDRxL5N#ji)cK2D%!}fG zeDsX(80xVBx==nJ8)Lbfpgc02Evjc=BOhmxd*V_C3+Ay9PneOhA8Z`Zt=i4l#JB(& z&oA+w?#XD9c7td-wKJ*wZkt>DYL)yyI1)izsK+%HxsPMOLd}f|zcoFCy}Gz&1o?)P zx?~G&;8tIJBd_<)rpr5o=_4k1V-a%-&f?c6i|x$W6*KJp4J(40Fe7$wpOIxo&FoJpKUz_le{c-&hrJM z8^=;U?sej~yA!wCU!Zf*e~s}o4r8ySOc)~A&IZ{Kxq=ATOfZT59gCzMTD7*K-gYzH zV+iiYCtfV+;rG}p*3>{;4?J{Z3=lpuI%;7UW6xWheF5%>rYkAx0yxKa?(v;MZ$?)I z21(Haky2mQpj$v8CLL?h4cu^#1S2a;4UMqu;N)Xwwn)xv>Gq(v(4dM`xpyZ)H`pB( zT7$tPI0o`YvkBv$mF?J8%hIFSVDBYf44>b~0h!~3#$p9CMw@9vYY7xA$gv#pr8Kxb ztye|n%u7R>Ivn!EV@2wMLrk)4Yrv4N8=1oZDAHn5Gm%}9eod|XG*pmD%IrKo+lxhb zt5xH3s6yIrD2f2b|9I+UzsEqU%${B7M$)yj$;~W{L_EK4_wA|C83RvIF>I65$CXYH za4)b7U*z=E414@FMu5=1ubx$C9uHc{2}im8Ah%Gpuay-b z;wkyXegI1DY83!W?uT2b?0J4QTm3xMxBmAUpH4G<{L=2P!ax7L824Qe+usdYVEjN!&y8$id1R3rdrjOechy$E{B&N$i|_+y>5=| zEnFPYbra%y%V_cS40UFTHRvRD4%{TS*#U5bpj5^wqlfX4{WhOv5Ef6EIHkOO9{wl3 zgTqBXsk78(;8WrgdgCj890uCj!`R&kv13TDs6Z}R)$40)cS**}w`34u6{!8Wef zQ}@yE`;n=ZVA|wQ^fa}&4zs^pQ%GQs79#{8lE$%l0fTgu;jtC^HHLpO1=^jtoCA^> z0#h()MEZ;*TTO8D`}W2)EAS}TeNjr&u~1g6Scx-q$WHu*g7bC@>5b4@V?$#$NEBnC z7oTx*zIq-C_&MG?NB?iKMt?qWU$F{uZj1DV+|+h>RqHbZLi>67sMj2apC|Whn4Oe? zQrsf7)0T|%mtB9=BR%=DFc``8vs z*WN!gD*1Z`su8A*Ut(`>a-E`dm@WiDo?=eu%#@QBti;t9y%?712u=s%r5b+a_? zrF%2ZsZw8hlDYqw*jA3MoVpAQ&AbziSFv5PvI&p-{Ng^aE_UR;u-;Dg6%?B}+V7q3 zIE1&?p-5By+HUimVo~4g%h|ikUVDhLbn{oty-uOn9!bnt`-)C07zBLK9I$dxZRSbU zuGxeCAOuYI(>uqQ{rTmJdNftbHDSm^3&^ab@YT4n5B(rpsMJ_Ob9Uy96(jpEv@(VC z3?~KxD7^bg`oZH$k7)JVO1%6*lrS~z2MG{9J2GmN{QlodeUUWk!|$cb5gFdNhsyR9 zf`tZ;$WLTTYe*>=*!AGDXk;)4Q;osM9 zbO$0OCNEkeY#8uAA)@QcLUbcI2uRJheRIVB1rh&?9oB#=ef)2B2qN{ea5$xJ z?0fM4n;n9S{D&QCN?fG~SZ)fUjWll^Dw&+l^#{(!kwu2=*UKoC2n!(_cR;{uGn?Hh zGh15ndNO)Q3%Rh_5(N@P>M#`J^R}^lf7@qA6xfN`6c@u{vlkX~jkua~C<23`EP+yeOlI?IL_!FX*Vzr`> zwo28_c98lp8$)Mf#H5yjbJIS*|2La9CugonVV2=;!gOTa{;V2AtT9(lQg%kPz2P)6 zyA>lr@6!){9u`zBFUMvg>#rXdIv~fVT;)vvY$njIslg|2@<>i=QH{mdlY`YRdFo4z zC)a+A)lHX@n^6#cNebl#%V`Fz98C4_roc3=8r*`xk^&U#%!x9V%3wq*Ng?i8Z@b(_(e>9)$gB?kG$ub4U(j@af8BVD`V{Sy%-R1DHJN9V; zj5j0rq3nP&6i_s7+ds`14&NAPm35mYDl)5_yWCxH`wy(8rAYfxk@tDAW;XFsa~ zynjNaQF89>b_Ue+xfKF)Z@v%c7NxbAUr90_@i^%~Ve6(<{! zEMbN}vLG-KhIm;NnjlSm+q~6AV~~B?Gf3m6_h2=bz~d#$M>RC~H!L$~;jzYZwgnA$ zNRfwZDo!_4kZVxnYlL-H#Nb(ZXi{+)97IFImL#5>EyK?^u8#GR3w?CWN4Qzx8Ty>s zzpCGtMq->g=g+*hQQaz+z&C}q6)3pEZJQR7(eUX-mhh4>-_UP}>XH+}l6&20ZW9mq zhUlLz0@>wXwe(?rQH|4Q^QrmlH0z(A5ngUBE%sZ|T_kTMztFCbc+scnq$YJWTBBEn zs0p!E!B!Y0|GGt*m|8>r+bsn1y#fC}Hu>)?tA@YkpdiM>U?9lfQUB+gg3E50G+ec1 zets=Nm~ci?7A?$_I*~a>e+V#GRrjau#jVnc)QXyl>x?tnMAL>x7loIp$0-+0(Ir7a zv7cx{5W4x`)L}S3(Lh_v2$B0_!HhN0R3Su@fPd^CVrhtH)od=(tgYJJiuC30q zd?(!}IXZX=CEw-zu!LMgCEvXYfU88&qHo;b8sfn zkM)Qklc}e!<@e`+rAB^Td9T%j$9s#w@+cdLT#o0ieE+G0qF?qWqr zvRo;9bZ;#L1x{v1=0@f(j-%mBRC2DujO{c*KjSnOz?Ewvc^3iW9-qO7XJ~!OhwcYwfzF_e2!=8Q~Qp?>t<^1^ZO0z z(W)Jv?Cn;Zg-H&>yWeBXNA6Rq`-lt)t16q?p~63wb}Q-y)6yQ#`zb5eJXSUz47J5f z?o$-I41W2&4syZfvv@rk{MssSp3lKA$b!rabG9e80^VLK$V2pu2+Vqz zFr76Q?7CL8A2!z9$9hzBHckiaJ>%)ycrS}N<@QGbXvFt~GK$WVNstf!3|`k+iYlf> zeSRb6a+`gb6b4p?SK*1CE5v3raJgS|#B2%|d1DtMW^tSK`(Isg$dfdCqs%MhaMm4# zof+`oS5$^yA`%1JOLH4d_hv2Z_;OE0n@V%IK7$VKk?44<1Rr(a6?ol823Tg(UD8Q^ z(p`%JCRkE&JL3kDMm{JLU5=sU`42K=*s@PYR}&jbOaKec^7nYC`~hVj5K4>gsSG*| zj~mU~>bK6EZ?*a{5tqz9bQ4JV|5`t?4&*zWR(9;cZ#;<$KR+j9xZFj0-sO~MS{Zj{ z1st}|WDvX7-k|3B7?8=FPiVQU@}Cty;G_Hy4jxYExh&TI2r$=WCn5C+k)B}WxL-QD z8wi}ZDqnxlDp{Tln559@dhIx$zE$Fc%gT%?^BqJLN48}7hIN0DNBFx2^$tCM`RC@g z9X;*rc%9HGSh9UOJ+euWQ5a@DZ|lU8F6{VSWVddYFGCc=2zBTFj@uEuu%aeoQZAT= zpd%}x+9~DKPWDjp0k!wK?>~fvZ(sGSAkWV4cq+2CrczToum*FDH7sG;P>D@Tq!_BL z7>~5eE;4OGP2wP`G0^o5H@qUot`QJZ=2-N(`!OBSE6l#oaX8#Wcn5}8a#_IMBqwsN zo=fWYVQei1bW76M^K5WZx>A444Si%(hO|OehA&63^6johw?ZH3ihAU<#2t5ui;*m2 zrE`TkV#FY#6SfxS=9-r;&AaLzXOt5LpiQ~bT8iF&@h<_HJ&Ci&ZY%}heK7XMKXL+I z5G-#7-=#cCRWZo!R8g*)b(C&KJ}8)HJw_OTM0Xn29Q)lrHZJCU>2sX#Ono&9w+C+| zDVA5?SkGgR-N#O3mvX~cq0caj*vC$In~)53kDNfM;@ZT6h4g~OPv4r$E!yW*uw>YeY& zs*GKv4GlLlI7(j?Y-z57ONI|ApG#j=@Imuykmr`XE6os9p9I}W@0Z36Mzcn>h?T#e zDwI()!=2$ql*^1~QY&#Bau7Un$$?I%Vj`V#pg-uxTF~Cf!TPT#NiH(J7~I*6g=_Mc zUHIGi*KW{xP>el;OF|1H-iUZ1J^a9Df5^~$k-lBwnSaSl`%Qvk66A_@_{7su>=u;^ zsU49vIv@OCgYnAKN~BZ7z=RY{TBoic3-_qz>U>4cYfH+o@H>iU1b0D6viF!j%|HUk zYLenO_-Y!($dAIXWGB=f?CHMpw;R-F>17%|>crTW##!a7;8b8UU*t#7?#?k-2oE;%AJs zUGC<-Z`h&W6Nk9GT_lD)ti%|JbotPgo9I^W{4 z&Tn_Jo>JZTkIs&?ot>|&G{PGo)*1Zm!`0z%v-ZC63GQ4E3lo)RjXkN4WV?Z1Z-WL8 z2z$b*c+mq2r+dP5os>piY^okKb^aH~Zp78l`1ny%$}BiPg>s^$&_`$A=CDib8__Nn z%*~%$T~1I5`{92*niT>#9$PO|m+jQgYQ*`*NCv8%$Y)?hJn=ojE`bk4f$=l@5B|2S zCUI9TA8g#){WPWveJ2EGs=TrGyAQUUc%v3dYaKq0?X!uq7%g|vKCt{TGTwS)cHMRH zbv>nnHqzaMvAxQssL>+lTF|9ok4m-W;LDnjDAogV;s#mhdXL8i}oWZ~BTI^ebl+ zt+lPAJZI1x4JCF*@MenPv<->&nD^Vni!|V&>(Xos;T`u3;%UTc|3}?*^UwRz9D{s#V#Y#LLD+>Cn&a!@{xm zkIi45-3RpTAW!I=F1=2BoHXx5ec8MKrfx#$An5CQemzq$UZ1|Y#!ZL2*xWPCwPgg1 z)9q?Ne;E`^k3;82Mp_#nq!TLIq z>sPVO500ZffxBxJp(y)p*;8NrUQB2I(>&pa2VZMU^Q38K7(uF|uc7Vo z!x5e;Vs-Q8iTX2QAy#+{eV@Cg*;Y(Ew0`%=i39Noi#cy6P44)Te1?{Zo7Eq+R%2!& zT6nC|CAxJjE%d(E;R0D8HR;!&u&T*0mT$f={dS~Ix76u zm|vBEZiayhYDLfs#1Vc6qB5hZQ>Qr_i;pj5c0K*o2%EXMrCJ5x9{f8Ro1zIc!jPbk zU94es zLVfdH!#X$VLcd#fW*n= zVO_azaY%|V0K%tLyAoK0U7s*&4}ub+u2{m}^a@tpPMFr|pIz?6z40Ao5gEAs?#1X! z;of9NioFr)ga&dn@$Mu*uwk z{3g(w#(2M+<2ms|x+WM;8a(aJoZ|(X!-q0RfOkfqH|TWrmR#sO@1ZR#0b3|ZZ)Qv$ zWb@5pybI=bEDD>P3#T>t{Le9p#rWo%d9-+i;=(urLAf!cBB`-bA|Sn7>G+t%9NHoD z{L+TIB{|;T7cEuljrd$4 zXcB=$d66DmKr(sY{hl|5Vs=*cSd_Caqx-AE#5^S zL(uo`=)!(~aP~Q-AUMr&DypsdPM$4#LM)IzBhnKVBlJl%)+=>WY;yO-&kYJN=B|Hs z3iomO>O$Y)?1(w2h7;k>CDDQ0SuP4XZw=eONdSvKK5+bK4NA^cvD;nezlF| z<{1$CCHMw^v_4*Juy2svUp*>bIlY12+qxiqLIJv)P}u~EB;tW#_#(apeEOTx0wol4 zUIKjKAE0k^=LAK1V}8P$@xUbCzaJK3tqZef`dvUUfVx+>uV!b|SCBW&XS#3D2g9Su zAp=Qo)R#08p`X}c?Ly#~fru~FXS8p`hwB^GeQ)Fk!W-AUAK{KLutRTeuo0KytscxMNL_-~GsaZ*hijI6E(3O;Bpo5`rk*-s19@UO5+WrdMkax_@!nEfk|Vv1v@0brm@!|&fxC{aYr0~%uD1c>X?9}M!~W18=BLU zVrLwEe&y|#(ILiy#OdOgfV2k5j_~RdeV)u2%NRr9Eb)%?Dsivw;pQp#VQct@8+Wf8 zzfU%OnV!UspfA5qBK^=ip3BdBo-^aaodOx_+``V&K@T9i55&z*ek?JN-d5;~FWxVg zzFJSlJ@UhABjV%1h3g*266c;_&bE1WA)2^1+^*Iq#IB_F;4|_O;m|<%8@DlU`G3&3 zP~6u>eEfFNxWeubJ8WHORZTd&n(r{aUaWXaAau&;z5>;;I${%Oiz-P;wC8C(4@0ZQovu7GsgwKPA7Lip|HH{t^zDO#X7a#aAavA{A=9KvY>VUQc)~#(}V`o$W;o8ME&whq_3fkXLf|m=QujX{f2Z zXOYmpg!_f8OobmC|B)NP8(tH@!<%4y?Uia;&_iv9p+a0S&RJlnnS^Tcnf8RnAks9t zct$#Es*PHx@{ZADngRZ!c(LQSN=t@JnVNxlhBiuW!?3YlFrTR2dwGv#dAAFnm9e}e zLD)$c7?n63O@Io&cT z1sGfAgI&bh0#d@s4tJMvu8@`baWZ{|*3zM{CC=qToqDRGfln3gW7LcN{*0KjgN_v3 z!H5~t1utccHBm)eC@oE4c2}DQ#Qks&z8}T)4cIbZ+gR|{B6*JWTj%hwHr($F!vSdf zc#8rLA=*j%A@PT4tgKAf$ZNH6%$$bmgR&Rg2UOw3)|xOk1FFXVAXukBN1@mgjk(S> zMT~8*s#23I7lc@9N;$t#G%S=Bq4A%Kj7Bk)C}WAjDC%jUkVcxN4yPcg-2if0=n{oe zHVdAH91q472H1k43&Hd>^)fZZG8|lg(<*&uMmokq<2_?gFK#k4a))6*FgAHga!qDx z0i0;mx^!tcBV#E?S`mv0YzE3`?s*=1QIr#uOPIziL#ew%8zeR+VHtT+IGAY2{`NRM z>}4xCck3rs85AB?vQrc93@NMu?R=8S8kM$^qs4gUL|6EYt0hX+pBEQb1D@%XbrJ+) zmJAyW`#9q1PkSpmQO^*bWCD8t_GE+4*lkpofN2~hv{Fmol!bQNrv!pl)UK4ap(_0& zCcNH9%J|93Xalpwkn&1%Pjq7rH`7?V^uj@5g_Bty;hmf3K;L1~0#PLvkV`^E7P$nR2tZ88Ov5q#_CTphMH-U1~ z{p8?^kL4yRf8f}gq1aIo*u3m&4cybGSy5AkzfJIk^zek;On} zqnDH}L79$Ft!k z85wNzS;Uns@@T5boQvQJkwcZ1#)MKi7#(Ez~UKPyNun2=*TtDfd@Ib_nhFU*^_<-wf4Er0b)&wD7R(#wvFg(=%t7PV< zSy@b}S-PbaNjm$2jQ|_|MB>A_XJ|2Mm!O+OqIW|W#h|ppXt3Cb@t#sKEz6Z9dKXrJ zyfy|!`$z)YbQ7f6idki&-h5UwDb~1+2EqvI=AV%OBEzV{v4wO2D0#58sSN}hY_QCY zo;B0tOye7)H_k?|PtMn&4_ex*t-A4FNt=*p3qY{UC?FKOD~m1X90x?{x1=mY%S9nq zPyS_L6@jOunGVISLQbH!FKXD`i5HqU~~aHT4{e|_ej4Pm6@dl{7A9iNA~XrJn?V!Jtmu`eQ) zme=DIYYi9%;MQ2FXB5)cjW0IH_E|C8V&66Ok<0%S=}Sb9lWz>1ZF!_y3%W*7Pb2yp zcE<8+sQ?a>a}6Sz^`W5to)+#G@~tEj<%Nas7K1F7H!pUS+@K>&9rmf_l&SfG>;J{k zRYtYhG*P5LaVYL>Demr0ad&qo#ogWAA-KD{ySoN=cX#;s-gA=YXOc5_?#$hr-C2M| zgtX=lkQ4)$??it00XyIutD_{qA%ut>4b)=`9$?^=QA5UU*(k(GB%&2w(YqRZ=pT5{ z11ee(u0?z;w+z zIqw6R`u@>`wrzzyl^Y^8N-aKBmd(#VYq9dh#{LPdzYAsui2FJDn+f51Z&h+}k>jM1 zLIh}T-zB(m;G_PJ!ZJ-TS1#5!(ahsnHflF^!uOX$)*{}fEHf*(p4Qb!`pNwd(Uc$c zrDkljHmcW1sMb9155THgH_{Zr5ZU!R?vrNflBm7uxMo@6@V21Xw3MZ zaaynj#e&xmK!bZUfqwQ8_M&NQR@CS3yDUs4O$KvrRICCD5g%36se5yrkUhpWw$kvZ zhFB!=m`5ZaCBr-uY#>g!tb)V*Q1wW!1e;8GlL6C!q`?q-56CEdv@xYeE_m-7V3B58 zvpSWquaI5Kb+bF&7D#i9?>J)M!oTziB|R3y?xQ|ptcf{}jSyLqN-y5pvpAqX8G7k6 z(a#H#y7Zq2$mwg0G(;2n=8wc$kzk$*YdQj(BPNv2%3t9xeYhvVURlhJiCuqWd`xXj z1FSHNk7W;%F6@#0iS;tfTCLtx7FFmgz0Pb)T6-!#WHLBAKsyXFxTKH50n)M=GL4Yc z_c;G#RYueEhr5bl3Fxg^=q50P8G@<fIDU5{ZqB!U*rU07Qpe=_K?c))hF|EEz<$aLG!Nx`5FA=vZdggps+ zsWyCoMo@!pkIh#prfo_X`5r3x*F>w#&>lY;ftBezCE$zNddTgZ9*jlfMX^r5SDBfO zx6w&`e<&v8KxZZm7<4PMG9}f8M}8|yI6N%D21ckl^~@s3doeakg`aK_RR>BOH6k{A zUkcFgeu1J6NT60RT!b*HrCvpEOQPm7rD69^MF>bVNuIveK~vW^xK~nP93YeQrTX2p z)@?Fqq+IwoKCQZoV) zzbzuL$&mR@4BXL1;5k97=GczY;B!9}(6SZiVINk2{uxYsV-Kto z)dLm)eS^8Qy&vwu?u@KF8-HM#(i&+73xDB~>BaXDUneo8+J;cT%d#0>Tj-TFw_RI- z#_3rFe)up}MBG=^r0!@URhvuTu+G^qfO?l|My!MhfH*Kf@sIw+ZqldZ@gO!RD4*3( zkW}r6l*XCwt(8Q9jX)3rTGT{|VZ7?Fo*uxW+`5|$sw<+V#9lpx-Y4x6lHZ@y9U&@+ zjB3&z-|!U;FxCfN=hkku8YGO^H(6K*G7cJO>TDHoK*;HdO~vjriJO`a=p(Zq_25Kl zM8Lx%9|4Vn0db%F&6}yGgC1si~+f zR{%Lb%-IalG>n-7DY?Pm6I$Tsk47bu_G`a*kHmVKHpyw)iI~-Arl(koXse#IW^h@J ziw)EvGK}w{0|UNM#A9$G0ntC}OY;=eVOTJ5p# zZAPh)M05x>Z~6a)Qlk)!1SEieK+9!Vn2#Wuptwcg+qIiT`|a+FsmhFBG8%BmolZdN=>#IpZ1x zQ0<o`x-c7zx9tRkE?J9UOQk2^hYesrP);gi+W9U4+xCqV2LS^3m4vGN-|C85 zsHM~vF*g%&5OuOfX70p$m--nRb${*d`lx$)MUO#+rh&!l?=~|t*?ipFYKEfq?+r^u z7&7&N9G;A1Qe|O!!AOV>Y|IMEQ|*j7G$4TOBx=8L^yZwF4X}VXYpmO;CV?$AfS;IS zQnfukT6iEM_L^RRqyc;)GdJV>@3jL2)opM!eyBAl3x_@k6QiUGokvl1AHlh}-Dn8} z2mk0-XjX>!RpN&z8wDR}?`&Ub)ra+J*yifqRNM5UA9=iEWj${y1VF%{LIff)MFe%V z`Slr{>z50q|Wi~)om5>yG=GSd8E$x3qeTiV`V2d<6Q|C&(-Qqu{K(GYF$ zXCJ8FMNe@MJ?e|SSIdc3dQATWqMI?crWw@00pTRDulNh)sxiSGj49&KLO&K2hAxC) zKI&;@9+;B{P{Us-V!|FG4sJE^X}ZFCXYS^=DQ;tkkLqM81TeMyl!U4f;fkRo;1g!4kMwqm1norO_cbha< z0G1(>WeYd^8gmnnukm(}SsIyM&)sOQk7|d92n(UM<)IxBc)yv>JV<(pKO~FEr_WYx z&Iy_i(1wWj;3WMu3C#+QYFo<%GD0&EBDu;FkbH!pj#2>weLJOHZQ$$q2gB~OtT%n= z#KcYA6fmZz(FkDwJpRhWypw+*=6Ln5UI>+i2pDA_w}riF{wEp#FN(ZRn4VRgR6W^U z7XTLt0gRjPCXIq&&3ZEetk724Gobu3o;!5p`1-~H&^T-LvES*|bu;&{dLyTQPJsLU!@$WrhS>TjfihBV<_C}NR%1=si|gfN0tR3s{(x9 zRK)|uQO=n$=()suS1t94)18o76Y;m1Fyr6bxQ7p;6gf(;ggm6dBKmxQCcI=>Cg2Xy z^DouTo$CpxL3x=Pf%+OXv1Pb#dQ}0Izn3$qH^;!?i@`**5LsS~`3I+J2Uvrc5aR%{ z>T`^F>Pg%nK@hgNFBDxLwtFv@1B3U@PchWL2Dk$L^bknEq}(XPt!63?fa7j)*F{YAHz0xvmJhIMr6s7?{Zn!8{5ku%+ccvAQW_v0WtrF_^BS=$o8{IR3=ztIO8Vr08W zseRVLylECyh<7(0)T+nqkO8z}^rhqwxqJ+z4q=#JW0uo08WGQU9kygoi)a4Dk3qE5 zA}olLOCCpsOw3$dLEu|8EuF7dZAICDY2?;aPr)p&G)~1|=Sz7nPGmN0QS53N(&ScgA4^=#*5mSy;E(TZ15+{W*pcMAdVoTPHM*iFMbb}l zJ|rOX=NVO?OHmt1bop}aUObN#vP3P{_be=s5FM~WC9Ou^((76iU!oDF+Ly@uR&SYD zwmIKovPT1XCk!697GI)h{a19>d79=;@S2UVe|EA-5$wF+&wW^^bCjy#$oI^zxKH)= zqDLwFK+xwLyvd9T_+@6}t3#lQzXe1}hU{%yEK&`_ultKj5u4MilR6P`UL8u#^IvLV z(qHRsZb48=(h?^nvr8~^VV^%fJyH$3BBeAmp}>CA(vd>BTJB81NHCg9kcNqlYCDQ$ zXGB8;tgx5&l>OKGN8`}^*(X?{(Qn-I9j5zG_v>kH_rsxnzd|I@ZOsKJ7)v|78ev(Y z2Q8ciYSD=MbJ_|+e1H39@h>|1)WeGJF6x+=zzdp@E9nAE=g%}4EOjpoPe891Kk4{a zmM1X*EcRLp-=zl0USs`RDXLKrz#>6tIU&K%hAjEM6C1fQ^vV39-H?E^AD=pWsKB$P zV3(m5ZJlVOvg5~Y;p{!z;592%4Vdq925p7fv>(T$-K!(Q;_1)L#p2wc-FvC-LQsd{ zS8+HyrLV?$fcB9N!EOtwfps$<=`jI4xU_G_5SW|}fu#HdB7z-}4dI$Vj@9A-qQRQu z+4V-MGWV_B7JW^5NVBbMp#~V#z31(oB!4-r)-jvZtK{h(NSLLGMW#MuTPHWq>Pp5+ z94n^H)19MH7;M7K_kNS^xiRo`%&-}~=}1Tr#vLRuHD=G(-xxOY1mu8ZVv>8^msTN! zPrJSy&tc5VLrWIaZdKpb+iX-I^u`ur%kdBX%i1OMrr(8svGo|1%e%0B6&UarT0Vbx zc3?YenB=<=syq|XRBQR;`c@qOh9E4q93_&CnLX173Sisq-T3wuY~((Si|+x(E&j$- z)g!h3Jc(*^;P}m6U1VFe;Idl*H7IbcwGk6G^O{4XHh+~)OaZv;&V9TS^wezs&uqMO zTB|1feS*Ut^U^jCyJ@VeZ*n)Tztz%n@T|<@Khqe6k{FbbZ=Gu8?0h}(q8flOhFLPr zu+=U@o^-a6^xB{$`MxV*$aaiBRb1%z-LRKnJdoiJ-8CVt9-aKmJ7G6rF7AJNeh$`E z(+AocYzO(m-oFs3L-HCQi8s!HKmY<8J=`8WIV76~SOPLQAlFwqX?~j8mv1H#*Cd2 zTO~-1KI5^eW_oi4Lg}>^Uj`3j*5vbfJTbTrh)%Q*d^zMBdoG~aL(M71cn99m$e%z! zn|z_@m0N(w65SL?hCR(=r?U7QtfUTs@&sFUbQA2r8bU~oso->fkb@}#6{g=ltkVra z**$Z3?P^$q@)ON)*~AD7A9FbBoWhdxtk)OsCeT=Q_}lim8h6WSkx(nT_{mEu~=6k;a=>yuG36B zUa7L7e)tGM@Evx(Y>}H(uZnsoyEW+$g;(K;+d(~?W*%IBVfyIYwMC}kf76!~2jm?h z+B>5Bhr#HPnG4efU>Z+2SdTPCAoAGJRvo*_CU}Vo3NSs2q|}bz;V;k2>OUjr;4Mh4 zw(X-H9Q1nYstZFpEV_rJeR2)He*TdUh&olML$^VCR&hf=g;^MAoSmAw?&q2C1v zXb)5aSv~}DU%>wbvng9#L-o1qSt$tdRNuY>3XJzU`hnL!iiD3M?3L8qs?y7q(m@!PWfA3t;{ z{6EA%S3&PJHh-`MDDcnvR(yDf>W@Xg*1_!}zR^f{B-Y=?yK5eiBW zXMtemVOwX9<4q*w-Tk()ba|{Io_XCU@`K7HgT(Jiw^Y`acZnYAL-naB^Uz z%qLB>*{gJV=0We&V%IHPnBmXFS`%(it~u`XupKXmd|JQ1y6gA8P=4vb%Y#}U@jnNT zZ9=ruwZUaxQ6I57y1`X>c};oF-hw%Kqd9qbhW4ffY6!v%0t^R{1?!$4NLm{Ow%pJ; z)=}fakU$;Cojbh$EC!qht{OTB6z8Y0z!1JUtnCoH!Bt=5AvMx%j~)W5g8|xy;7A*K zOr&a&_Z~fJxR%!UpsCBiTj-xxbC=i8oHxa{`~Dr%T!lpVKKceq*=pafAgg`g-ab64 ziM41Sllr#3k}A-zf{a;N2ppv!-QGLZI`g(34?K0c{#46R{=fe3O9XuJ!N_M~jWS+} zDSX>go*0-2VS?FcNo`ce{@Wk2eXg&^W4<4gO89o0TS8un5Xoc$(4BQ(w=fFrk8SaA z?Gz_>bJ&A`e+q^ib&!YFPE+GPlKvK!>+A@cQom zVaCh{x+DsyU{bHd#qM_j4GKu1A~9*N(bMOomV8=eOnif)rWx9RfheX%hwI^16-E70 zmos7s_qfdd3ey;fA~U}z|B}ob`4iH@r|j7V3=>?4(NjAf_~H9&d-{?msYPHslHL8a z*Z#icFi>jIf`1ViXE+)fRj~)`IB*bN{u4JOQ$Y!#*!2 zO#HJkn7Vh@D00(xdFr-q#!yU2yBsb0Jo#=43z5D+vk(?sgkX2~U#c8t&^968Ji#Dh zMpYP4sB&rL5FUGI^_{cG#>yBzKg9vOutk=2 zm^L`9HuO6z$d7DEJ^k!&%+T+ZJr)uF$3r@I!IGwy8t zm+~Ptj2-u!O0aUH8Uqf7XB*6?TXwBgsDoraP-5o820;PI$?5{x znVu5NAG|%l&<9Eh<$_%Fwk9_AW80&AwARu2n;|>9Cqc&-QD6iL6NtXUjOOTJBXO%R zF{3;{^?^UysQP|E1HznXMZ_63`ZKOWkrMaE*(hJiWXo?It3oMRANpu(Y8F%yapF)r-B;zfrwf}nc*w` z;>|l%t}q?z87ddJ{lC7s zHD};SV){12OMKihs1h_raL>Mi5iGbPhhxUW3q&Ih!h*cREC>y5+XPMluh4Q!3^7&w zmnmNRVG_b1ee~d~AIDJC*?wXU^txx~XZUMc$Te=^CH3k&)a zXFJGmhygem7m5T2jg`kjq5pT<(5Bpo!oDmyH{&!wwxfz0vFm#74*%z zqY%+cA%zNlB|uA1`9d_EPY$isK;*W8%@3W?nkXlD7h?z<8WH(Wwvz4c2RXeRD1nYpg(=ZS#0k1z&=z zkJZT#Zio^A5m8@I(`m_Ht6Gvl4dr_@ON=N6en&5gD)Rp^f_{OSCZqyES@*EXVekn zOjT05<2}X>@ZLHp==)Xbkmv%vzG@vgI%_iYOWTrz6Y^b^@p5nI1+tLSK+lFConoNe{)ZZ(6|nf69IHhuQ!Hni2jI@_%li?>hJ+Vg zR8>{g?uD&iy~c4yiIA*{;Ed#y%go(uWmA1->-qvm=t8&eSEMy4r^-g84xRv~$A@VH z_2P16b9lwR0O2i)%eM*F4(SO%nylWJvZN=6z$cG)v9OYHt;yrh?dZ;zNPkiWJR z{DMKHlEBsChW(#f!g91BM`$Wzliwdw@cMo^7q^}mhj^yrobt5$@TtF_INBygVL z5^6DUgGDBd`un%gF6nW6$>v0Of_)vZ9IfsN(oNO!N@4BI(Vm3@eX$n$!|8>6#yp4t z78eR+a7;OYmUcTEBeUH?WxSwZwi$}8lK)4l9YKsn+20SnMsuC$0pOa$Vy`i82fgTEoGLTAQw+WvE|jBp6{C5mTfl#d02 zE9F$bvwTRAd{Cye zSJ@T8#5tgI-L39$f{K$-(0=u<1rlWREQTqCnpvTY6R*80@BqhL&kvU8?mWD ziw0|B@cP_2Q)Lbnxxuo~$iegf{c};|FjVVm z52Q)MCkIJ8gDt>z!IH9$GJBwkvp^p4f|gaEn|0-i>OGPw)xgP5AGr$jQs8TF@FHuT zRWk>hsS!)QR_ZKsTWji9U4_>vE&FoLvRhj?mO4(Zh)tR*bUgP?Mh`5?>uO68mK`fg zEZv+6INM8F++`YOxwT3LzhPq5D~+X4EV4Qhe4+W>Ei@@}pR9{-O}B#fD7J6ggUovb zFIbvAf|zlspR0pwX>GUaVNb&?tqmxDa?G3C#)b6|%vH8+fy9tLreEw04iKP?R%mF^ zAQ*qW&ERe>YB5c>NOTspqE=c)3sbT`U6Mr#ZX;uxI=#3cR9|ATwqvu367|t(u4`NA z$kE8qIzKkg^bmHu*~;GBTvtAy{4#(ZUt!1$!!E1}SJ&1eVBb*>@xZJQIJ})%z82gg zzG9ViXo)m5G%Y5TCLMn5(>y5wh4vp>yi4Kh!ALyMncNn=Enc*T(Dwe?6ZUp3A1ox( zC;xQQc2l_ic^$q?-k%=+OK;-S?|CUGA}-hM`iQ7AX=tcOTd(`Qw5aee_BHxMLzlXe zj??7~vxZ~n%b@TGD0}%enZEfSJ>BhOxN}?DPBvqJ?b#eyyt%2wquVEL)NO&rvrLcG z9~{9=FM$f~Z#?TXJZ0H4m0He^XUiWKTHceJsbxv_ePDu>8lx51Cu{9B7>*eg>+r3M z0;3E5g%eYu{tyFwS8}5K_+$pK07KM;Y7H?=bOYL@z4x6!SOpNXo`Pmh}7u)hk-&a%9em1Yhr zz$4$1ea+lf=qscaleDasckiDed*qsle?;!P!w+;Sw0P@PGct24tgkI6YS!2-oLsP2 zF5Q=JR@*Ax=F}b5*H31!dH3l53nsGNlb4Psl}&Z)_MI!7VmCV|f5i6?d;P(AepfIy z$!`CwZrb$;d6@3L(VG{|@zA_0%YL07kCkz=@kqn#I7H`te;Q2qF+m*7+jx6TmicyG zdCu2-xIy%B)Je4Y+3nBwd_3j#5uW^Uci7ebwxp`#d2U_x$@3BI-O17FKBXx8d6Bw# z>G{xdsQc7Mq}#q@Nc7pCnDsWVoYnb~Hs$fKGNtYO0p+m$m#F7vD(_4hf+tq&>-{&)1|Px@x> z?`xl|AISl6!=$7nNHT!vi;#_&WPQmSzgI1ZNSG-3i_oisuONhs2_JtN}I%OI|-bL&-^l}0QUKG4C+!&BoxQ-;m+a&lJt z`SZUv+RxQ}z74m{MLuiKbhFbk?vtDD#k?j$KZV0Zp{B|;jaG+^0(-i3o8wl=Hacxr z^QD4B$?#++t&kSxxowWN4%}^UP4_3L&v6fY;LK4R!Ye4EL)R#W!a|V?+o40 zRdyI#GreT0<|6N)T0=jiKC{b?DPPDkM2hB|G$gWejPJ}_gDUf;W*hD}UNAERux6hf zz&pfEXV>o_TT^Irk!S5*SUr;o^XiVN-S{$uh_daENjRgU3IiPw2qcH*Y#ksn#GGfu z>qBIqX*WbK3p(z|I1@1qn?B+?g*NjJ6NsoDsccDd{^(D1iZqcUlOt2|$$LpODM-(t zYl~Cmzezo}+`#XX?8}a3VF)o`NRE(u%j*=<%_b*wQC5*xQC3lSE9$6zRJP~52|X9x z6f%~csXUO&QpnCF9}A7{j-riTCYUB{Qn@FZCYBpeO;Joy#qB7pg-JEdoQH{CQ__)p z%Xx(9x+*;9-Q?N@-Z1R%j*=z#{K%JIsR&4@wkx<1FAxePmnSLokZ1|(6x1!Knqy07 zpDjaA$h|S&x7f$sXBst4v`n0$SfcQh5T~GeAAKH$8Vwx%I|`E+e(Y+@kE296isBi6 zA;&A6Jk9z-{x3)J*zSe?pK_%tZ`E41R-uPLi+qdtbM6hv{@AE$LKS7-=u(1af@WeG zV{Tk2`zI&cr*vXz;faL?i;`kVX;PYeU1^0xsib3B?TLKHsL4XnOQK8xyc0=rkRBe_ zdOt7_%2 zqoY-26aum`G|bCbL8n0u8&S9jXK#*P_vP&k5l-9_a?!1>UAMQkgqE^da|3%551)n= zk#s`%?P0V{OY=7jNm8Zy=mU9{#|lr8+w)w_j|v{(%x#3H8!HzNaLA2P!HcJY2xqbh z^EPj(5&hOZ(VtX$=rx{Z0Oxt;GW3zS-#wQa4hP-Mo#FQ;uG&T%k@CuIMV`H^T4!BD z2h^Pta4>x*-FR@A{+v~+JWnbz5`dVVc(^l}5xpm>o5t*EU`cn#Wa4u)Y_qy|+_BXPdJ)b{ zW^ip)0}r9}ozROrbxED{OUBS_DSSVBGizmUYxX!?K9^H5J0zFpZE==8sy;BaTs^8@ ze48wp3-8DS_731kYH&Kan;q`OXK75Q>s~D;#cr?1jm6$wlxus}Frw)uMK*-8&17tL zI||Li*(+&*g+v_4PWi_l56Cyv2h|x{njIcn_U=4B6HBtGyl4*v z3)p$=d|gZLuxh6yKP;0!^0A=f^42Ihv)1TfenqV#;t?r+|JJ6O}1S$zbe zH66sHY`FgnS84LlM;%GlTC2x;@y;vO#8|o$AZzjMLb$fR&fLv)WOAr){~<$m+{fa; zfa+q6qbVh;t
  • uA_mV2;)}4_VA*yF#}$66;E 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

    K}jV_R9G=K4(d(+o2EML%s|jjiOU(ZhmdE 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 SSv> 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%0AIz8tz@EXxp%WevDUm(F}v`8^LzZVNCyQK|M1g= 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⫬A(4;&^vA|Dg%MKP%$xU+r^Jwmv%=o<5Y$R}+Ahbo4m3VHV>GyE+eOJ;E& zB~4J+`nwH$Xbl#Wb?rr*7F@8@qf)?Xtr|TQTn~q1z!GBPVL){tVOCz4JYe9s1eGC4YSpiVr`Q_oyYsu!d5frwTMb} z5AGgHsNUQ{#;j0Zt*OSRYDO0flYVHjQfJXFXh=~3tW_FzU?T5t&1{bV(Q&O!rPgz` za*knj+d#FCVYB{I%^5?#(y6Z9P%N6-U^0y6jcPLJ-_goiVEujUWyB8sxn=~~LBFHA z47*!Dw;-ChMlVh+qi)luM_HLCb$0_by!E>O=daY+y6E<(DstND+QKSVw#DhC)u8p3 zLQ|V=#XukHi!2|w=*C9NDypR!Wg%kiTUT40n_!fKd3#kNW{Vk-H-|9SbTU~%=`n>x zf{aT>bf6vgjiJ*s5JKx$+xWrd;_l7X^%a-8*}CUd%er35AJ&MvilN%N_Rg)G#SKe4 zlPJG6?d;fq$!+!Rh-jRN)U;2l48nM~eaLmje`s?_#F4LA?IOlA0?k+b*KrS+D4q?% zCgT_fvcgqw>^@PRIM8EFsn8CD>M&KPex1C&CcbZnaA{p#-w5{824Qb4`BPI@&rCG2 z<*)AR4eODFZlCf;=;vL<*?9b}PKWqZvY~xL7?M7-Eg}HmpezFSSV&`h?Ie+XGn95K z%Mn96EjKG>48`c|s$|oIa=V(Q!Kp&9PC0c8`)I?mfh*)&O(*(4q4Qc3`<)s9DSu7`yS&ivG%#$foe=I9FN15hCSV7W$=is}hrLErw?W$r?GY5|5 zMq%IfM!#IdM-`2-mfZV2k#wtLM zQiii$VcJBW*-vrFJdm>ke~WgOYbEyJX7W^IPD=!zMvbqY1Q6)<1=j_4n7PT@p)s7& z$S2}Z-e;e7=_z5X>pDfS)a}>z?YK;1Vpf}W)4yYnY3dj^@e#6h%=H8a>|(7TK4Mp} zJIGw}-yDGQ8vTI_(gqse^TdpV%JKXj=A)cTf>uspqLVO%CksC;!U6YuZb{xiXxC2p zs(<5uM=GUSE~1jcz*BhJclW3Om|*+}lFYKXIsC(pae8wTV_ zOyDb67QR+EMtI%#x#*jCy_+vAfG_{zcS&%E=%*}dLI-1o4ny3=WXn&I?y#JoOO!0u zOYTl8mothcq0Qp@;0EbGd1WmsCZDgU#>JKX-3)vZw@m(lAmko^-Vh)0#M~3)EIx@QrdWU)oR;P+ zsA)mdXMv5?_DqzJo~K}6hHfXh^RmPV;fsN8Nvofm@RY2{tzP<6p|SCwpzHvgoKOsiurLsVY zF7XEEi_{$6#AnK|zBh#<<@Ros(q?6!jUUrWh89`!5l=*Z+Rvy|kzC%0)`*Tkld&G+ z$(%>HY2y7<4Z&T~fQ5(`CC{5Ni1e%JX7gNGi)N_hr);+DB?2!y1D-~WgZC2J+daa+n#-OQd*V9xn4Uzg%iL7z2 z?h#PYJWuz4@v~K<8zyRywYu9#7|qjNtv`!Bpu14sOqi-WokOLtb$b(+Fg$d#B7SH0 z>8Sp`K$0%oeWci;OZmmOKCRwtxuyS58(=x9?5jI$(TXoMkj(G-Gn*RC+Zg371!g&6 zD$okHXJA9W$YX^_MvRT*uh2YrAYVT~lja<_1S$hrr zt!-+_0o)Pm$IJ;Ny)`0s4$ak)6Xwi3XRh{h;g2@{blW2uGR(E{(N$CXJ@u2SZ}x3a z%&48-7brSipV8aGlQw4cY@m;5&ggN$*S1dT7PfjI`CUhAE~5{3c^0#9+Rp6sT2gdJ zU<`vgyX|_&EhcO=`zG;Dn|HhQiQJ9HY<$0}&C}v_m#d!-u2mpw*G&B^8me!e8o{e; z#10^6H=6PN?f40;jeUn(?jmROzNoRHpY*yF{f(3Ncu(0#eAabv(nM-YXGXAwiES78 zNO{MsNp3CBQPXLMZSpKbk2Se+#>^Y~=&Ca_lN4WS%rh9`X?5k(Is8ox$RQ!a+SEKv zPx$iBo_`hMC?a<1sk&ZN^T74eEX?8l0~uyQb)QQNg}kCCCuldLvU7tEkC)YU!1V{T z)x61J7yQZS)LzM6jI1?zaj=N>Y7XZIYLav_cO`n6U@ec1WwYq~0DLg%IsY8tJnA{H zlC-{Io>?$J+i7m|2{IXoWuZ^UUniaM|EC{RT&FUu5EGk#&4^n3fB?493~oiToT^d2uSx%ZW?JgH^op$^MWlkQ01O^ahOa zo+4c!TIE_N-y*YRsZ5)wIppP2}-t- z<%jsr>0#6B)4A(8yGzUXfjn+zjKBpTO@0o(0LKT(Qs%8 zXp{u|w29QR)PMNi3Y!YuG78J(6Lb{ZCt!>MLr4HRL^p_R;0}KrX}4e{!;LZ;1PI@# zwZar6jdl)ls&8b_p!=m+tVYqR%nHsvNn~s*f0Q&l9k-{G51g#WV@g>kJ-crJ9Q5Ss<$x%F!pd>TJ2M~W!M@X1;w`tp@ZY8G~ zXQlTtzO%)$v#}GoPhn$77l4z8`y>gEDj=8Vve7D=3dMv&R7xIc_93@O8{rM8AJW-S zDyCd|hFga{BP*m8;p=2u@WF)N;HcI?QV+bK_ANyu4=wSe-IVXmSjD`dV8kYJ7AkIp zT;}7IxjuOCvnt%>hqOy=>tADd-;7tRRufweDc;E%5phZv@CtIaawPk2bcwQv@)UDl zsmC70>6HgsDhYhmn3^}FZdFq;otmfGm;o|W>cChwTdPKfT6sdX+2;(HtbXe{K^ms9 z`M2oLGM9nIb7 zFqzII8&-^W*GZw?st0WDw2#kZw+_X_}7~ zfQ-Gad&C_ETYS(d>RfyIik0;Zy}n{v!?PX>|9lgz`#9rFOKJBM;t;~OYXvF~dABRL zL5Xqdv{VRitGFM0(YP4l(bv1Qa zQ!NTfy)#BW z6l69IPCLQUH%kZak?F0OgYFnV#QUiQO-!`I0Idp#&FGgFpzzQ7a#I7zlY6#JB+`<) z?E|eWht6@{WBFZe4KANWbIi8?%M`=YBGj65dEPc{`=KW>kb2iyFOl}(IKWQ1fji$iG;++{~lG3+7sU0MpYgtM7W z!=2z783TwiUM+K5J(6F@9#OU#;Be;WJQbYep_0}Jr9egG7LkMCx&J}&8R1H=O4(Sk z$l0vufo)aN8b_LvHW${@ztHDFyBLoc5+0j*j+saQ%G$|lBFfkc*+kS8PA3OwT*_U- zT~ry!d&YOkPXz?P^px%36tFrfMfgm3G;plwy-4E~EA5viI?hm@RGMvk26+!F3;s;a zVS9@v(<<0Uc-QIG92Nt^Kyz`#V@w9G4jsXg@{1bpv9|)PmCf8FK~KJwcMW`;>IEE! zC{fqI<)XDg<ar1+@*`m&r4g3c2z9@^JQF0_`ig1_or`JL8 zD)^eyE`_Jcrqa>O!8d|y<&}hO!YUC!yd&JjcOrd+!WlG5A#|L$kg6APP?u>Z#IB7} zMzMH*#TMo#Nl)Hi?5k2JWjfDOhK!;C@vv)BNU zb9Tw^MG5#`3R;kl;H=_{*8x$yYRo_U1dZ+dt13m#k&~pKP%q_sgyEPX`D4y;>^%7$ z+IakUMI4?;n5&Q@mXIbWj@9oZe^myT<7nB+w!8_91g_JQ(p4H;eURd9tFJ~NS%aW!<_gXs&uNyj#poOjnsOTRhX%ws<5-%uRs>oE!ftPcG z`p8g{yoNc(5FYgx$5sC*Sjn%|FZO;YbkUc(bVyruHvcsF+@|`rm*S%4zP9r~ZL4dW zi1`E|v>qcTqsCih7&7{}HKy5u681VfTYe@U>RK(?}k=U6i-2kCwCnlzUu-1sn>N`|&m9Vh)K-LFxSo(axut%1%7T@kx@HNt7A zF#1Z!AN`&<2AYOlkMb0`;~5QIqMgLbiX~ziIi$cO389Xd@&R}gn@+ftrvys zNSHbv#H2Wt?GsI;Zq3^!dQ0b|j*$2;7e#%LYB)K8k#HWr*?m|+hccb@sw|1E{tm`* z=VEV*M)AJlo%vJviwQ-H4*-fdnbZe-BlThe1WU<(H=DsKYC}!4(2Mqa$s^%Y20CW~ z^okXhRg)FA z{G*i2n7~{kEMo$!b=(!KTDG2^#ct-f6324#xT8?Nb7Qz4n>ajI-nXi){7N9E@F=iO zpv%yMUf{*Jxx$%HTDY4iLZtVvm(V40_jj@tvbBz@l$({d^My2*I*UsXrqS;53b@ng zS9tH~NsMQFGT}Az1CWMV!5%GeY>Maj3GP*?xMJ{0;e6g_$TdR*=tZe<2f%nSK75Ao zp+p%lPE3?VdeEh3;LncxmHw(+8-EpC7rRYqBh_ zaESd(_C7<&T?Ma;yUJf6Zw?<4bjcqExIqZTIgjg-T;+48aq`=0+x(PN;gVqounLcd zhd4_KbKpN{HNKZe(; zJRacy$W>_pR3TP%!827XQ5&5a6fcWc%JyaIKax1P&H zyR`{UyWss=TYop`0J2m6n*TfMupycigo)OFBk#pp^)xIAZ?8wSIum;Jb@kz-e0^T| zXG*6&y}*v{s!vVd#2nD4#Jh5m^zjoW@~-N~2NDFg^=@8HqB!04fA}l@RcQ)8Ar@LE z@;)N}uuftYp$jbMNPl9i7B`F@=VZRv5`-T#Pph*hrkfkf7Lt{w?|E42H`A)L{S1|f zIQbmg-!w9OEzjOKKR_iYHYR#*gfP&MHZQ;Xz+THOk0ns5ndfv>Hp*x_ zKSGCFT?Z5SXAzlGm$D`!w+-AOUqgNEe~h(a%>7BN6L8Lb%DQ#6U-{m%&XU=awiDUtH4s zo^L1K)7s47N(hMgq$VIg!59u|?A;*m9Y; zgnGB2TKttR%m|WPU?#?yrB~U5;kB~o+$%l<@=Tz`ZMJeE^vUs#ng!cj4g?&&f$)h# z09KO1Xr~2OvOi%Cm`h%Zng`yZylRpPRkWCzY$$+EELA~w82fV{i4L-AQ(uTrbAn>d zN*?p_LYGT_0+HSaU<$}`BPxVqk|S5`A-C;6dGXxO)G}rxe;f@#{=z>=kH`K1Hqoad zCJ1PZWet--Z|1ftSMWINMA2d4PEJ&o1v<^$oIFbOn4ce=EpZc!4xTSf16TNrlnq1Q z+$PA+N}f6_QN304{^IkUI0R-rE1WB2;VA-M9ymwz+;9ONuWOTde!fa*w%7%RLPG$=VHGWa;kR!CO3cE}a7a}K$xeM;N-1L@44 zoI`9K+lPCQ`kwuh2jU^_WZr3{f#<^C+=%9n1Ny3HK)AqEL=`Z=4OubZD&f_nBH<0_ zP83BnUhEKp7w?eBd>f>H$gr-v;mh)5`>U#1Dx1p(0Mb_g?d&6r{Q^EMo4Fkvf#1!# z1r{JTvR{H98Wr5J!i`lDUJj%$((`ADlvxPin^>A;0m~$fQCEaJq@^JrMLHSa`&n`c ze&-e;`>uc-#wy>dZT>L8IqC*z6DO2*OeCfC(tj7-C5&R)iJl^#vnGkq8l9z;C=b@1Gfw-8yb^K%goD>k}`WckV~4zWs-`h{)$ zpOAy4FWA|X39@$TMry0IUWG0YxEhZ79TPq>47jfspZ#a5rpe`cTYieI#2o1u zLED49*8Y$ff{$rupiU6*ZK|fr!~<>NH9yG7);(p-lzY~qymq>e2h_%LUM_>4-!ImFqH(=&;zo7MCS9UKWT)}Fhw>Pb>i}K^i?~I(OcKA=BKAiq712TS zlZ`}P#Y6B2)Kw%JuE!`E-QjsSkE*rsYy7I>sd9kG%xRLpB8R6wQP3#&C+}6lTeg3z_ZWG|V>gE%ANq4Q!><9w%sRkP7jC z)=!b%B-T}YmQ|8A6~)M|QVO%W?E{|2t;sl538gIGXFFxaU4B`?GkOi^Br#GZ9#O0(n{hZXN9y~+JN zVZCf6|7}1ItQ4H~{31UJsa#A-vSgY4XY~<9{4YLrB`}teODq6BGpjImg2T+enm>bA zm|yDnLKEwC#cF5@`({z1$e!~h>zL>R51$e!e#1XHxmxmE;2J(cx*uE|;4Hfd&Gkx> z*GWdXgeuO+itSga1xj0fknX@^bIM4w__f?7%rn4;`@T6yfaH19`h&5&r=@=jC-L9s zorS`H59wW^FfcUHQ5-2OiTW(@hq6KsNWDb!{m;m(l77z*avxc*Gg+}xPOzV>E?1Fk zs6!c2GR&H$iWF9yhF{pv9@cbZE#Mx~>`zJMTQyH7Qv`XMFA=N3Yg$C` zMCguoug`JG7+sWWfUHuN`VXJ3gMRTT9O7H!5W$7?(s&59hZ1dMG;O7}8#J|M+TR9T zIhnD{kWui0#Wi?lIdKGrvB|4=Nd5cC2|$_tWW;*VNB?KAAC#>B%V(EZXc+0*AU&;L zZ@*Y^T3_{xPwppT+rsc+q=vR2jM z>&zvI9Bzu~%cMYlzNsU;LVz;W1&tFfFgf~+5sx$;aE+JBjUM(4h1g)zpO7nw{+(ZN zXGu<-r;xSetj?^4FO!-|1(y!34kfC)zsF-smW84%K&jmR8F+<1eh>Pdwc{qNYfiWAHS6DBL0IpzSG@;UFJ`$pA6Q07vg zJ}EljfY(OBHhl|ev1l);7gr))PTq=4kfcxs8kJHz%BAYpQY~#%S+evUJ+?p~6EhmK z%3(+5y5t@35jH;NwY-b#8a_smz)$ttsJJUA^&Rd#U7EGKvZOutX_x;9)i=M$G#8b0`XIi z48?xwJEtGYukbDVAoV__?R<)x4BX>SMvWJ&1A?0q!3JPkO@}Z6cw71k@)F$7&xJmN zmohk_Vd24~MdBmS@ffmXnrLxEkW?nN28YNtOYMDE%Kc^Q-RCI`@@l65EO!2^28tqu|xpp=RLPz8M|>=kN6$FpuhN^w`pLlIwsi(Mc_ zNj)Ml5~TEesH1c}?CkFcr^>k=Ir2@49ZrqPEaj)s7>!2nOD&S?3X4LUKU)Ep32SvAIK=FrNVdc=r|YX2izZdR2(P|2^CAGD#H9b zWqHbckE8HqRjt!zgVH=N5M1T-OrGIUrwC*TelHXH@|FVEO4H zXP`onoZTY;6w_0ef{T^o;>5z=lrnvZTG`i8Dp=$`tLI%AO?zV8OnI*M&DiJ4MY`l)d<=p1UB3@O zqhHehY`o66qQ6{oku^e}Ql84@>Jth{oICp1Z1F!aKRWdV|8IR(e6pZJpBjY}PSi(@ zUk%;SmjoOW-`7*TlBDPK`f(58UHZncca=s zXRximnD5l+?tO^As9(FqO_{X6yYAJjqHpO6E<4G1)j3cgXJvGb$b7+;cSw?7a}(NM zPd>xD(~gaN1UzY*Fpn0Evm3Q_im90EIuyjGNO6h*wqS|vD3ExUet#*itwKd za~i2As$qN6^rk_>w`Oi_f#FOmqP)zo8}WN#x?vRxopsKz7_%{TgkdXge_W$sG0{2l zf`L!o8~BHzf^pp2V3^MS%M~)P0bAvlZG9}%`Zw#b_jRGIrHG}v48+-nn>s!6ZFRa% zhwdpQ=#1EL`B+^qj+1dsw+H_%DL{9MxN~x}?ln0qVv_C-tt2o_@61Aat<(#-Q(cqw zQn2^Ge8Ljd1;lyu0rhcIU&~?jJIu)XKn)J_rc$gCuC&U#f`Y~$cDy0JF)O1+6 z6JJmprb;Jxm9JOvh~}bEs`;cRIc2I{l;SD*s&~|f3B&3-dVBPr>O;(BVL_S*j>4~4 zGlTcZy-=GexZ(UmyIN%bUq1R1yqEyBPLoTBCmSxv50S1{Qx#QYVVRf0NZDCnQS7I_ z&mOIGrzfXPRzi$b@oeQwmNE*dQgfuCHL5SXbH0<*y@C+;R86z+iPKDNxHRCueB^%V ze9GSDwK6PiWPONi4efj7EjWkHDOm!~Wf=1j@{!EhnNQ_>*3J~1{5_{3R<7vgzKX0= z#`4>O9x4wAFg`?;NjTr_vKkaeIF)It|Lwf?>)GlizRYAbCQFR0o|+SqKiRbM{Za<| zNYM`IZO*pb02!ToY|60g8}IMLCU_1|HK|jcBj^mDBEJHz2rN*{fso!$ltW^cn?SWt zDs>dAjj(WZf!3_H<(HdaQ3cmfcTx0|*HzUfuH)C1GR0T;>+{!2)WF)z&C+PW`jnN@ zKfv{IT$xUIY~p@67}`8O9zHMH9dJ>8M?&*nt{frraeb$Xg7-P>RL3hwb_i{+hW?A+ z_zc3nU1%4t&$?B|X(Isg^YJ#{=`ZVrO30l?_g_ll%Cxq>m6~jM*^5AYoxX(oS zS!KFwuQEtg?;ub$sk7~dG{f4$U;Gvi0G7>fPzVCyx|&gf{qVf9DPRxWUC=3H$wy}$ zg^K0s)B_?{`HOf^^hQCAdMdu4I31oKbyiY>R?F0?Y@a>wBek1bw4zCU$Kj@OsYYsd zOheb&TpXJzJW#o`{u19q6;loKFRPGcj=(WhL_w!uzY5HH3vO5KPm2&PP&>rGf!3&z z(I(L*^^EW}l9B4C!J*OtjnKCm4$-`KJ1AeMg&pgaqqRFnd#K;&Y%Whtxg3f1PTd7= zye_-S!gJH*m8$row8I4@K#2Bx)>}c2E;x+_R_d}6IKp-vdQu5=OvjDDi6`ka!J8!~ zb?baD$w1w0_bmBny{qE}go|Wu|B#~xXu_8K3|k)_!%4~u`}HERY`w0>~fEQ`wX)j zHz|S*xuc!c2E9!`)*xV=v_7uc$hKJTRpfDMt&58TIj^kYxofx|EcY^ed0#C{ldJfj zES%Ux0n!pR@h14*yfGfZEydY`Gsd~pONazSF~rw?E%iU{T?j_HErn; z8mQdb6H+CPvYhlEDIINb^(4qHn$hE`w9x^%rtXm8IXb*@w{Zmed5PZe1PkPc8Lr`mGrJAv2(>BwhIPc}ajk~AWXr@J z!+dH>=vc!bgW~hfuz}s=I@7Qph;c?6_JXVb%Wt`@8;yx+xTIT;{k?{+TZRuQ*XxcG z9E&8n(?niwp6)2=eEJ357D{k(l5Qt;Q7lGxjh+$tm)?#^2)VBh;)MGg&?9+z*FW{^ z1XG=y^!<|miO)@XO#q%>C)aEvj;Qj`>>?$W#%P|A#}tHV9#HUEPc(0+tI}3$-DvL< z6SV0JIHpp|Wl<-jXg6?X1Se~s@%?=Qba?`r+X&q{;YNo;x;wJG|MDBSs?p>TH5QeL zqNr$68K~2XA=Lp|X`Wp5k}l5Vs6!dcQd`sr=9Tz9^=x)$v|9a=%MXv!)bZ;BPHR>R zXx=5-NZ|!nlXjap#o?H4f^6`={5nv6ijJr{s;FcvF59Z0F_#uOC|0tPa?2F2*|{0{ z$~+D(d5dxucSYD5urc(l>JsSVzgSHWzW3_TIEW{^j?(OxRya)3BH<1H z<=3F#QS8|j&tRDITgexAA$LcC5q`kS&gROi`K4(W<$D2UVzeSzV2VjpECM%2+*i5? zPXxbI_KEEMZmOEar#-K#Bc*d)%GIA>q&;4P)jFZw5@NqfYZX|H8o;+KhsWkZrVlj*R# zG%NB0yj1!kELhHw-3XeYsDdB*u2<$L0zIl!iOTYEo$7EEZ!AUqO8r0ncvXI)Q&M_a zkGN14UqloylP$?*OQK|lGVqe^a79X#G#5S*cR_kko*P{tqs#Y1RKnE?AVemwP$v6N zP}Hj2Je!nNsz=UcDwO)Su@}`v|E`QSJ{n3^=$9ua@~wmyN&{j>7 zNj$Xhgc@nEc2y`t)~LN3kOeQ)#dx*JFY7=TqS8aR(|)NcNOxe=J9+wro&_Gd#eFZLE|y@OE2V zyt}a7`gD>W8n#Lzoy2*TcjKo@R#;?#Yh|J4J3e#ZZgZ8}8~IJsaYvzIjj7NsQxj%j z+1AJS-Vs%B?c2VDYC>gpZ)eS`l6gHx>N@fn-Jcp(XHDyFY1*5X)wQDKb%Ik@2(lph zTBi*CIy|nU7e79*yL~qa0-WJr*F%)%;_C#5#rSFj#5-gd`kOc%#`TBb{4KCY){*B!t#KOHh;=^ zj|El^qroM}n!^6*aK=0X-1=XB{rz^&CT@*edv8lagz86`+a;t=9-&QzI+&T= zHW?#Kxof?P8yg>Kh4I&-6Rlyy&0+19i{#S*V=OgvJC9DwNEX3)uK5q1okNdl0IK_+ z_-3@^BDYt)vFt==m3^}iF&m0lmP)KScZS6W_c3Fo`4T~sqB3_8FUNbEi^%QKt!8^_ zRoG+GJ^HeMJEmEz#hw(ChKq9!GbsUqL#1(^=;i;!w?5;3-0I57reH!`X}R$xQC9H4 zc$rj`lVhAm?oSsR0m|*q4-Fe6>;C8e9i^W~x?gr#{|5yu`l+8mU68j`KaWPsO3@F}SETjp`xvJauj;#* zUnlR=cd{2v1oU0p8DVz%+5G;1CHjSebzV>PdxS?^^7WrZUG|&wS7g!u6W@ZhgS6t} zkJ@weJq0n^6^s+vkF~p)hIEDY7;Ap=2kjs1G1{-Z`w?$+0l@MQuC4$i z`n}e%A*NT9ZjpGN^F7@&X}W!a-tAv!j9<@^2kLI-p2EZGgKXElH1#r$N0y^{A7@|M zLiI5BkHkBgas1%PA2eA2XW}IdM{qZ+Ni#=S7!<0x0Uh-vYg5H5JV5OvUqHR;j^?mEpzSmX3co2nQ$=Kt6`??9~ExBoYZhK7+Xd+$vM zA(0hAc4qb-*S2?}A(fVthG^J(6WNq9A|s+yHs|l``QD$@)z{TvrgS#|xQiY>9jNGGA>$Hg=_xI~8kpvpDy$JW?&ZNp z2om-d=L`vQ_wGIPG^o?3iqSUsq;Eg1Nbo!V{gf9`9sw>C@#w9AdE^46-@^(1<=%C&W&tEVC6bQ<#C@$qJp;UbFAIDLsPq%(u?XDbSI#~bXy{Fp;Mjqz;E|x=J<+Iy;C`~}Xc1KNwgz-9`nUJ55aL(q|5Yx*Z!zGO zG?hPl;4ZOG{uY6JLNWf20#o>y{O1E#IBx~01evhf1k46aF);)_367x6401p*Qr-*R zk1D0`2yQ?-ldGdpnEl(8(YzSX->#qG>lS=oF5dSEib0yjcLe1k&h1BoLJPh1^FTH8 zVg0Jn`?x6l>CjrNCH{TrTTHE&3tk~$T{tOl?n5#3VyVc45|x(%mkmk z4MD;L`JF?-3ItM;=-}7*^53rS?R6<^NS51sd)NobHgBV_VKJ)cpl=~` zztul)FW}Yb)VeO7(b%he;eyGrZwf5QddIV59FmS|4~cV}x6t_@#GS~gpUTU2j@{6d z?L~r(aV=A1ysBv_HGeG1l5fxE=rP-;JEkM&oY_g^BiUSk`}b2cI?tzS`W!Vm->YSL z#36C=1m|JeLLrPpCS(|R3o69V8rpN?;*S_VW{r=tFlA?W7#n%|1!Z&$ znN{9yuc+EH6Fa&ide0`2@K z9tdZ0|LysfYUg4P7(7?;h~+c9q1Y8eFg_-SkC8p4FSRMU%H)%%b+oP-TEI4{_4Ft1 z!%=D$`K*s3E3ED^9ElXLC8rXNaJLuSb344-NsEj;Y{@l~bbFYf=Wox)KFSnDed@U~ zZ4`?sP9ZWf`Sd1Pi%8eg6A}v%%N8ag-Vq6wFZkOcc&+zyO@~+7JY`i0w>#6wARfNk zVITFuuwbWm6jNc8F1}=MLtETwNu)!r`uz5MKNYKRta-drc(}Wz*5Q3&16Ge^_J$Q& zhln?ax!RNqqr*gO7x}3|7wqJ?s6w;t!J+I>N5@qLrBL3pWYm{Ks$CuTk%a`h=kGia zqU-sUgq85z*ZkM(AGsUKY{Q{25K3;_C>IryX}3=*CFG7>n^;PSpZ$uEUC41q8s0A< z^iGbPG=zb(qK7C5SuQK|ON1!5GU{T&F^`&kR|s@oO*`NCOF*WRa zmwF)%Y?tdi?{{p2I}hhGY`KRSD=)Uj^FCu1w$*zxtv~j?PXOg4_N^a1#RKe+eT6CDfqCh7>%cb5NWhLgd$HRBEq9Dz`GTspF<{RI|Mq-KX-8D5 z=Pik3)Mc-BQAt#+_d`J=)H5F{-lM2GpIS~DRJX4?>ps*cKS?H0w2(g!-AObyfREY| z-5SWhZxllwq_&#@qZVwn!vI4-d2D@wd5xz3_4*S1!8U&TMM3Zxzpp}h!8ZOe{3O9> z|0Zt6;EMsr*sX$#1KzO|1%C~UX554_4pN~NL=^|EP>G;fgLC#)qrFiDDM1xxTB3A!9?&wVTCS#Tl8j-WTFgNFj( zITFhFBsc^$OZz5x9_>t3hq6ZZ?DIwyV@~WQMKfXQcicb+W7W6Lqvx@|oi7qc1AWo) zqPGIWFgt__;i+NCpA;B}N#I@%%*Ir6I0W`#Ru8=iV#Ufa(FJ8Zz2S8oft$Tn;?$D?fVanD!az_=}o4EMg-U z#Py^F7nAu7PVr16@fluZcRf#ciih!Y;&D?28l8j@b6bkSxK8T_oKz zld?vgaQ&@*hG$ll_AbTf3j#U`a+S&SdM;AQNzVG8#CXm}og5WJCuSM-^TeDRI@QW< zm@sWd%QO+cVs3pm9ny>_Q5SQP85rt?X9!3yf< z4;T!}mM4lC-juw1uGDB;)HPx0REfY$f~sj44_kcVX-;p^CmtPRYFx{UQ8|-I7FCxQD|rQHk(C zhtGl$;T%pRy!fyhXEjdtFpINUhX|pIuKJ9Op;z6&!K%=s9*-$?L!Novqwo(A@wq@I zNoe*{*~*ItfxrFxI5NRuqK+L>qMN^lJEQUmT4d zKFRO-{*QRM0N&lRxG#Z@JECw8gYIor#+3*Ec6|vs{2kBjq7U%~UJ^nvcnWVueg-_V zcRDu;_r(XxUXQEtHDy`FUGx)U)WgO53(;Q0MFuEPW#YmE#r7S-=>#e6vcu5@pCTn- z$52*VCU84Yzx5ZQUN}CVPN7olh;J8v7B<^2n#UAd>^IF(fW77)&dQ2K2XHY(VJ!k$ z>6Wn`fj4M$v7td{4}@S-g2gFxut6x2oqMqss9};8tSY)`OFT9ZBm3+1g&t$N0)hqj zFgF5KdDSsKfiJmeFfNt_DMvf* zF~n4%0eJ+b0ds}q4W=5)za<$Z#+mj4IvG<;eE?mHrPzNCvlVNCxP zxsJ2?_4#dXr=plWf8 z)TU@AJpKM}=qS7h#c6a6UV3K_dJ(U-BM7q<@4M{~MhyS^^*K@eYAKf8e5uADOLD_qeOXfY`g2V?u}#+`wVnxtrzY!Y za!aLL)3;+AxP0{FXBM?ffkxlxE?;Ofm80ZHx@)n0cUK~(&0{i59Ny`-pWObH-%PH5 zRG*PcxITRBv{cZw_~WW#CRcs6_Y2-jJ*cD1%aih6&ye%ThQ!v54_TDEdKuJoVal`>1YtxF=dJ7tfa zu^{0RFc9JSc5%Uwl|%93W@8%W@e6xQ1nABu?=sUmuyj7nLVkC}IXasZva&cnN3I<* zF=t$)|Gd6@@uddcFS1;hc=X35b1yQUd?fnhLcL+DU|jOB@kQRl$s{Hw9F<7|X0$A0 z=Y`Da=%o|&EcZ|*oRhPT-eVE3YD)zGDEmGHL4%gN{uP?`!oNkyV{W|H3ai+xG zq-`cfB6a8cO|=9j&mS-w=c!9nH4orOIOl6gc4%|L4XZAC@Ay<(Dk_t>bUW9*>anDb z56Is}XPv!3k{(@ECKC`0EGCez3)7jHVh$Zc+_)cz5!?koFug}Zv~*)mK0voO+{e?6nlo(KYj|H~7>&>4U7evae(t2(LRApD5O8y1hSLN5}A_hGu;$7l^hKlogxvJH** zt=u~kQsb|(OD$w;Km#cgK|M%ga|*sT__zBPqPxP~+((77!&*Ig_{+j9ycl`3!_Io8 za+HOxdWW)lghu)hnD>TK`=aR6LdyN(4sHqw^pB-f3lR^9rI;op1s3hZ<39y&CYi_U zqc}IC@b)P5Z~3_@w9xytfPScm&lqoTNQ>_yF7=R?emv~^LY(}*v($x<`j;_!5$*)U z(=HKQ0-dOx2=YM!`wIv=f;a6c!bb;>kzdD?qnbz}aCmgb<{sP)^vrMh851JrPvD~> z6a-juI}NB=4oi@ne>DVX-4v1F}QdJJ{;&@3E(G3Y*8U zIGo0>*XK#ZO`yMVQQ@v*PP511OfV&f-r~5i2bk)yQ&@faGHf!zSTUb`4TOSvUTgWZQHk#kdTt@*g-}{PQG*Ju3fu#@7Y5^ zv3Kvjef#$xI6z5BMMX_bLv!#TEiD}#Jv{>hBO?B9TO898y6QJpOA3w zTw>z+^GQj`$rmnMym;x-<;y84SFWU{UcGwl+V$&cX*X`%ym{-^?b~)YRPk>QzfiYinCudwWMmXJ=PecXv(_7I z^!C1e`|e#|Uw{9=z~JEf_d`R&!yi73jEs(sjg60g{5UZ&Ir-_+)YSC!=g(ih%*=fK z`t95I@3XUWbMx~H3yX_OOUuhEE32yj{NMWj-}?XG`v3pC{;u{uqVN#dv~}Ad7z&$y z|MgG4-uxfG2}5SvR+4Qywv&_WBHgoNFWG)_%AM4^4(_Jg!$85bmt`O8e)a>Ll-yLj z)ciDp2Zd=x>BQ+J8KfCyndF%jSda%yp%;MV2Q=RL`1#D7Y_RPeNr zg|L-~jp!LMdvQkzXGs?+H)#(UFIgWsKly;eK?*2Ej1uk$K{-? z=QWd$U(~v+edWYeo$I>oENR8L>N(B5Ggsff%Y-nmF2c`UJ*v%!!B2vn6pPb6w!M z$ahKLvQUc16|q!_t5VlwuFItzzM**Y$SsxINAIYoAG>=zL;If2eZ5SB2Zj%gADKKh z%QAmrnQfh8`_%54!*iz>XLDWi-19vPybFDc{EGuif=kh5*m8VDNM%@6M0He6Ol@3U zLVaRGQsae}mzq+VQ(s+cNo&2?cDp^jBctfzcC^&^d=O=GXdTR*l>bWV1EdOg)U{qA%Bm%*8#uOGgRejlHmnENz8z3^r6 z>(ck-xs`?0B>;ZpjKB3uf76{!vzs+GU)emdncw5tU=Ix%_ zD@iCx>`C%S$w^O>KHjm3>@0crF6G^iDd_fw?fY`zG-VyN7)=^2Ih`N8;75oF|{zOHzV)8d*^k+N$QJ1Tvu`fHBY=GL<|#5XQ9*)_Mc$hT&+ALzh# ze(W~tDSso-d->hAKKK6KLACce!%QEdM!t_(jlZ0bn!G)=XFBNfhZ()E#oxJSljp#^ z-u&(P?+fY+DGL*e@{93{152Vyp-WxM+{;1BFISjWJXR`JDOc@Qa{(DJ1CPMp`t^V7 z|Nr;;0}%94d7wTY0Ox46?=R5+IGoiqYkmp9sdTGrJs7C>9aDPnP#<|D_k=*r4oK(; z|3#nUqI#mB=0%3|#6T@Nhwh1oT6WpL=iD!9Q^wJw2UVtSe~$#zy)D~%XaO)D>0anw zfm+-@(>(~lNu9BaopHY?&u6PnZ>U@51v^auFn9|pDJ+aDWn_@7;WM2Gv#r2y!?3_xVDj9jI_T3r0AJpSdl*oecwH4cb< zBkPaoP>)q00PmXDI3RI>@F3>$w|Q)oH~&{Stmhk9f5d;+E4yd_1{DBE;Flh*m|5fS zU*&P?=Bb-KsQ)A`i1!CEhyT`o_`ALl?TNFI2B2@Hao%<@%P-95*ii~n5?#QuqWBYqJ@)*sP&Q+wEXzn5F%K&*e4%ep)^ii^KEAm=Bt zFaBqIBkNAA`BRR<01T0@&jHc6opK{p%jm1foVjjpo zaU0Y<+4dUxc0DWDe+U5k&3M7V_|-G+=WhCaFkd0}xzg!5TCy~8_RZ47*m0oa;0bhw zHcfOn!oNJ^HR$HR3;mqh$oEEmpFDPhdvMemQN;fmheQd9g|fMgH7Qjtx~gPj9*Bk> zQq-$G0k!Z%b89QyKf6xf@0D7Z4>H1een?xe330x;_(ARK@$gM8$z$xFtbFpmC`@rr zvim$;EdF%#t-a?}0LI-BZ6mmF0q~)4y|~`U=SB*^O)sJ4q7eYnDnzqNivH9T8_}AQ z#y|B^f<#7H>6%_!k?<-@1>lOPoIn*8fQzI@lP`1vcqF?dI3sq#{LPDk`qG!5-*q0#?Q4jfVXwElyM2grTC%MA>d*|= zC)KB3QSVn%Kf6DS4hn!gJd@&l5&@X-h#l~NXUv%6ze^GS>-j`<=|Rl^cgfw&h%QRM zoZ+s%fm)1ia^#J^oxNb&rYD$vM{yyf-A?k|Bff>qwz|U)o*i0n>|EAdC^eox)AQPF zu<`gzTPLr_a*s{_>!$AO!sAPwh7G6k8^0c`=czqfb>s75c3N518=pzbJNUw9<8RXGe#riJDYD+{`CTY@8O)V%O?2)}n;a)& zvdvFLy$<1Nxx9Iv_AP~g_w~4+O8?eQWb>^Db4TCrmfMm!Gk5L%g37gL`m>=E(}r&= zPE1P-7dv*gIrVJoet%tlBDi*24?f#?%DkANovNa1IwgHe%Y$x-iIt1d4bfw?W5amW zipb^gNp-LL+3;-s$l-Q57oMA=w$9HV!?+kO`*$g_{u}w8E$+!<%ZhzFt2I!5s3P*{ zobu39PT%uIa|J^KyzVL2=FNuP`5UhP)H(j?lM<8Z$LDNjJQRnXuubbN>giV09PgJ| z#5gU#@p&cxbqwu47>(fMxREA_p!WB9a#<>>&jRV z8?$qH(cl61GlS!fvPUpaP7|yB_){OK{KWcqIUsRB?Ej~4fq@6i0iip7>gf@AX5mnU zx$Tp~Y~gVkbIQ|Q-0T-f=ej@dS>W!O)@L)E_rOStmQ^F@F;?HF)t{2RLOI0we9}<(Q;?F>ZKotFMD<_It?Zb z4Z6`yZ=V<(=5=Wuxv^69-prPw&jNt{1RIIAkMJB_vdeFYfaj>inbIm)gA6=FbUj|{ zaYHz)>mNNi$*77q`>8IUw=iXeq}DfF}Iq9RvHn#?DXWg1?- z`^>|1tD?L+vn{&eDJQj1q2HtofJ$@&Ul}6+x_WKhmx}>7P3UEG*MJqp;lW(XSO6~U zcqd>EPsztky>BgN0Vtt+=W8wxPe--hREr95?z>&@OKaWlXQ6*9+wt+I&@bD1T!@vJ z6EUy9%i+7@_bbeg2&yye^FmC$(c_a@i(SkY5(hrsUCL&jNp>7IT+wFzdgovtD>%vi z;c;gtth~5Na&>AA0T7le-uE2(lN+j9yq^w$>R2N!-WmXHg_d$_n5|8?db$i?=Swi_ zXxB{!;GSmtcKrnap7(U5>-7Ur{jL3jF03Z|LfdLgVZ6+yye_inS_%clZ$;MQLd<6) zP6&tf{C~}#ZDH09=lh(xkj8X4T4&OBiIHh{^x%lriZ;v6i^m4vuO_gJr0RFy0N~K< z%@d6-0I&&Vur$HWk^OsCOffw5`AGAlAHWVv@?yD741BjrUUmEZVCSG&`f9JK69D?} zJ1%G+1|V>%rChTTRw5m*_N&0_-QUw7t40EOq&D_ym;q2x*W`il(1-CdLf&y}LoVy^ zA?CCZ2V(zY49mBesuJ!G`mEk$esCeO2fped%j==F<^Zr>y<>-H)gyOssaAy&6xRyVi+6_6l z6c6CW08rRgg3COWfs`c1lLOvb3jzN9DrQO`r8PP zMubKF4rp% zCFXI%6#(w}JoYOb0EiziZTItsc_O^3&>6)e&k!%nuK zJ_PZ77>K10(qyof$!%e82sb4qZ zQ1}4u3&jlA>oD*0RThvT9K7M{D_pDTKsX$M`^ENU{dQswM_>nkjjAqnBMwS70AzO6 zks>_Si<6DGARPW({t>+eJ8mwc+#MIPU|zUUvK7?<<3O=0hM0qDGXM?&jif3tPJ#^@ zm=O*Nwg6mKuX(r;2Vx$?T-J*dVlGJCfN=Ql`meeR)$@Ayl`sH!=cs)UB(&k z8pZ>r;-LqO3%RDMiJu%!1K_r&q2RyE;a`mtVlGI2TrUp(u75;pZO71`xjN}#{TYk@$cdTqf>_eTR{&1rwqjolmOTbu^oF~ zKLV>?X>G6C38<2$nYAB(QQ^ohwI6;_p@jJVP{E75wZl*auGZELL1npZQTt|1m2VYU z)WcU-yji7H3$urOVfESSIH=KWXR6^DE_3B|N+mpHB_9k#mwWu8Nh59LR#4A;wJV3! zxC|Kpl{^1ky5J!v13(q*G2FiJ`xX%3Dc&N~Sp=&W(@|mCqNO!1I?0k&<%fUaB6V`l zZ(Jm-)obA@D~S*cYe#99QjHLwfvY2%kDFb2TBMCg3c^^M~K**7YObkpjg zPZdTB+WPlU>Cbf44?;bFZL05GhJ^-zr7FR>#2hw6_&Zgp_oQ7?FS^VHVzCBg%Vi!%nIgpz9j zSm=v3l)x(Z)V%cT3iv)u+!g9;W}tsMUACr~H6B`=)`cxwp)&YuyjuQ+$6p+@cBaa_ z`U1dFLV0H+d_CopEy?vJ(Eq7^+iK0f%i*VgEhTtz*N(5}o7gY0woz&r0?_0FK-g9; zo!qT!`4Zvbk|lJa$YU)&90nx>%Ha1~vPwr(z;5}pvE0?F2I!yZ7*o^tUwHf#7h237 zw6DM#hoAZv2QAWD&ab8*53N_18(|zMvVE|t720?|{6l~G|C@e^_06D~0{|}>>mF*t z4x{<$8V6*5AbAtv;b9{(Qv$m`x6R@MWzqngjgT6uPzAu|y4=yKgtfRZ;5e$+X#GoE zusMEg+5Bf*XzfYf@e1xo9mb6KHWC0%1izGSy$pcr;;?2TC-m99U{tfTZXEC{!T+zb z{Wz&?06@LT-}Q?qvi^vcgdd0R<<;OC2V{RBJOZu@))Y~~uRTRFOUNM~4)LTiSp9ic zNS&|P1%Ts6*{Q0NYijaTb-a-d03%zCBTbgjFRy7_3&}r;i~X@ZufDIvgWi*dnf4mU zgZ8~is}bY@&yt3>f7gF+rAjjVelbMX^Np-Ku@?E9$N`}B$Ng)1j%QD4)_7nQxO{VA zH5`=7_q~7*@(B^KE`GhH0b8V$%3(LWY{K-KZ#zxC30GiS8eNN6lJC+Oe^tgp4JR4p~3_jANhF@PJ z_Pdd9WZe-({6Cr0RR^H01%QNnj=fLF*A(FrY0I6H3)e05nxH~q9_#|Hh|m__0|28g zIaLnxX7Fd3@ygq4O3cGn>xf)kD)g&lbgd0?)i-ej9n!zd&mr?LaW$TAV7FnMJo>r2 z`se)1s1d9Qx(Y_pjbIFQpYA8ohi6d7rLIUln7i8tyUR|%GrD!SrS&)m^kuk_Ut-^g z-lQ_*g0I62z@;4avkzC+^t=?i`y+}q9b5WIewm9IM-{wz4)g8lD>3hO17P>6K6%h}Z63xN z#z>zKGWYU^-I5-Fw*!c_?Kgb@!0WzBb^Q>?5Gjd}CV3e|>(GfBn z@AdlsuJ*F_{yrFs4W&~^2ZngD%5-Z{x(IhToc>Qiz_ubZKO}%6BhYH@m z$VzsT_or^jq+|n`=0M=yJ&x&|qX47|3GXZVzBUJP;f8cvMed(-GYR5H?$yDVjuO@@ zZEpe57&cp}zP5!%4COiT4{38#Vcd06Be=1d0N$CeQ_bDv0q=mrR7KsWAM`tUspP2# zjH$6CWbP&Vxh*`q`ob$6PkSc)5W;<^a#?_X8;AGcZ34XnCDK4Rc+u{(6f3 zU=G)~H-}h%azOm+=TR}spASTI`9kRd#@o?HmTgNWnaE>S7CWk$8Qz3`Uc^@37W-cs3L4-0wDhteTEZ&lNz0tpeG}%jC-FCWw3|8#FFa8ly#1i^Y5q9-c-M{WoO^S0A47wgZc+g-{oczz z5uTSHw>n29X~B57g{Un}5+{vQ&~$J`%qeTlJA%0@b&eT?Oa|Z~_aQjXLzJSgARsRt1JoY~GxFs}kcv*!j8r zog8eNca9hUM-t<=o%0tyCFX>*R3f|de?I9aqn}*yH6g?$qrO& zdlb1&ydCjBL)oymb7feGz}?6ERBV{{j{4x}g_@q*Z;L;&#Kbi=eRUbv^-e9n0{u52 zip(k4@}i2sFGjRUke zAL_Zctsf2+yCuv$YptMt?A1N%))PR_72r8b(mT!Qgl(M_f6K%i9(s5-ZlIrSA~t%? zd#H-bBe{HTWSERkJ5^)u=6Hb+M;hrI*LTIkMi0TK_9b&InyQIj&Lsw$7hMO+I_776 z$p=I)EYHhCPYm4&R$c0>jv0?aJsoQrm>ur&!Svo-+B9<9iK_|ji=iCkKE1hh2|N#b zpP2;Z!u{}ik6~RF%spLkI!7MCP}KJ5)l~;1@CLF_Ov~l~F|6?gTqgsm5hw{^2I94$M~GRC;rPdZ+fGT1R+d zr=J zQmPC6e$?vEgEdJD{->VIf}C2|)>C3$2#25k1K;pa^V(3(xeUuwQJ$WhOBl(f`fe>a zyYS&Mjj03I?AR199hrB|?5?l63=3F>nWTA57Vo&eX{v>ISpPU^HT0O#m>DUCb< zc$(7%jL*Sp>0x(;39KGJdG|D$hy!_WyxY}qeCRG*|J(Zfy|8}lpgWG~+z#udM9r0# z(9bIwO;ja(h35Cf`UfW>UI>Su{zr#bDQQlX%s(B=JaE-meqq<-K}uQEfVr{HS=68H z*}m(}-lUW8k(r`dv|~6!FdVa9_G7M2Rv(sGnP#cGa-vrV%&~30tMn3{dK?Kk_7$*F z6S!We^#r~f8Tm?qRCq!ijc<%b!){U2q`3jP@2?9_In2SfMs0ooG6P$lAJc(62AZig z;i|XfyxMXMR!;+(&4$OjfzaIkrru+H)9~zR_CGq+4{Nu^MnpCIy5Rn43PJQIpA9&z z$6>*2viN|ukXH7t?6HeXfl@TK>*R5z*bx0k~KsFQfjL zgXji;eJLxGc>W;@R^+nTReWBsa#U|^I)HG{gq4}^P;-fDIIK)|HFP0APgjfsATO`h zUqKtXs;#+x7*?P|Ox4vgFl&A+s&r5|3bXYm6y%D!{_&@!Nn@#i0i2m2Vsq8X9<|9^M>Aw&{#n6ENJ z?q?wL56FEDtO(x6EA$Ou7^BcUnQx-K@Qt)CL;Iuko*3~eZGz69~5CeiC(BxCcfVy3p@D7 zl$E(+(0|pHQaM2wC++78rw|_NaoLCu!h@K@A8|0altsm9E&1`~N)R=V0|9nKrw%6j zn04j@Kwl8@tl9toCZlr)f84oXzH*TkxzF|D$DGvBj0l7S9!8&pVp*UU?5d?pD_&bc z|B4~C9*VHjHW{zgQ-D>I%WzGAJlrSYDb+@DumZgzRE3g))x)jeiv8k0_Q}=KA$}Nd zJMo*S{Vs9Nvfv!UL%ri1!0=93UJ9mVp-y-u*-!>@*o%BDU1P zQ;RVtjsoFP^A5&^Ov+w_!$p|qxUjkG-mv-;W-3~BgxOwFtenYQ1OWM))xmP`ygYrc zdY5c1?A$G?WM$wvLC~*skPw2Mi+-7#IIM>5aFy*Agq_f%n??LQ@cJ*3^Gbj6Kos(8 zmMjQbm&;#@a6uH|@w09q^8ZO;Wjj@u-IcLZD|6InCojZ*PZa=~;CwN@} z=839wj%av}aNN$RJ;M$F@7a77!wQ%uG>Yrg`2Y~lDx(qJ0`o&h(S!)>CY`xU6b0#E zr!G`@gMSw0iM<7{d7!ULrFo7#egIsX%nRblg!@A!@7mwyu>l{12U0&F96o$qji7Em zYfkLH1?DeWY5xXd|HPX84d#hmNkK^qki)BVLnoN;xsJU67BIefEAq_@U|l4nTjV8Z z56{b!h3x{6tND#W8UC99IBhSufp8FjzCx)A8TiHE`9WJ?_>%+NH+N|BV%FpFU*&@2 zN80gpep5bIw&ko@@H^^YhL2VU^+b9{QnVGZ9mcTe7) z^*9K?d||6o@QGg-0Jri2gFiSV!+Lvv!KFVq5XS{Ej}5pG^FiX^U-gS<+75U=EL^=o zkb}O}vUj_jgueN6uMqo3_5-s1KlcIbqPWRLFIVbTL7blccEY` zAO1P_LV0-}>~Xkln-Axf!rkN1k(CQ+aApsPzDW5+J3fTGfISt@@b_&`VO7N!x9Iqc z3tkVNOwR+>(?xzkSgGgHebWU2+y&r?lh1?bSU7(XtWdWOP6+czl4hUEf~VVYV~*`vZ`QadneZ^>!R#+ycZ9Z#8=iJ4nl=^tpk6hatT+Jmy18%# ztb)V`Vs`zw-zEM&QKC!+>hLA=G8iS|eb)$OQUHkVOXnzo)rRQST&)sVRf#NCI+PrN z`sGzfi7ezc(q&cD1ArjuyG?~j@b^2v_7y{4!h+wJ3xnX-u+si<-x*Qic}i})PdA_ya~Pz>?=Qx6NmO23HZ%~4@kaTP26$w9Y{eK8A0v(_|6)l=&q_wBjo z^5Cf_b>Z;q3JR!~RGBLFLcOA!Q2}?ite>fV)mHfRJwkm21Jul@T@{Q_A6-cP(QQg) zrFK`atnm=P`(k$)c2^o^F5(64boRD2Tvr8kIq zEbbD59ejcKx4lBJGAlSfwObIr_ktVi`G2z{2s2k<0ph>CR|r;UMXzD?Lc$h(uNhV| zne0PZup8D#aXf!Yx2DHmaJS}>K_2{qqJ>YOZ!e{`D)^pceYDS4L4LBn1~XN#3OKBD zMzMMZejSWUtb*NuEILlN3RXd~n4~9FFpJ1~-*Ebm@86$aRSEZj)S+_O@-kRm&NLO3 z-&mUm5|btwtoTRHO@kALXGM-lk@MH=h+Ct7!6UE|i}ftk2?=}!*kmpCrv#K8PH z%4zmO6rOJM+#$K}we-pao)((^xGyPuvlwP`C0Qle-{z%==f*^X^J+)`$=ujq^J4NH zC10wq|2YTpb3W?O!i7ru_2z&U5~N|SuDJPCS7H|cWkw^*BKM&muwLA+=YNfZFBfZn zdO861@$8L{VYg$;$q|{O3V>xY=dtH7UQV}go97ln9ti^8g>ZcgHw&8=^ZYVL_t*T` zAM;Xw&5fz;2;JTYy{J&c9jk|VP-W+pn)(y{n=x94!NmuIA_0r zUC(Du_UAlnJc#GV{+O3yRby?Og34ep*!Xd6F6P({?;}kkYjb1B9Eir$9si~d$it!T zc_ZB0it>GxwMy&F1^x6-H2=~^D+kZCs#~qXQZ_IyCO7hnXjQsc0*s%N#cxDmM^y50 zjf3Af`~Anzk9RkRSvIVXJkmJ#J!^sI$tu@)uFKkd3^FH#%uShPOVpIX{9!~R_qBTa z+MEzF2ZGGe{V^x?*Bpq3RV}v32LNT3KAL*T_2yxaIUr>I<86u(jHx0 zcZA4`lwrJ_5|u4+`Ezc{$m|HHXZa`dQtQltoJg(eYlZttW9QqnCfT)lm?LS>U*F6o z61>!kUsbwE!W>(^XCwa)vn3zF z@ACv8u9QVN1=fA>s)vHo;CjZ|uxVt#{Sr08Hkujr=iCtSybv-cL_9Zz%u8tr7+AFI z_+?(|uei`*yWG(R^S@qurE~i`;(3_Q%g5n5ziJxj(}sVi<#Nw^Em*t0nnmVa8WUCF z+1s#M*`fk-QiEHy_7Rv{>r%@q4ji>l;XcOQ;CoR3_ZTKskWe`C=e&?N`QcO5 zb8B-k2oIgZ=5uYZ-qaEE+0h2;a6@zwrpt8gIcxuTP7X2$^S132+)F)=+H;Ky0O;<2 zdCUOTPMy@q+z0X8O9AVTpZGT3enzhh*P{N!V=V>P)6{NzqAd^eMz!v}0y$V`RlPzK z@tOi);#HeuahQ^;MX!FS8x;ybkmG#XdIK41tt!$9w{F@`cr(I(PpL^MRxbVB~%r^O*~~fyw<-ERk1Ofk8$K>w`N-A*VQwYdMfZ zG9$NK?j5L$!bgg!)}Et6{M;DK>d||RR{?NmGMeu;L!J|}81AEABK`i@7^nB<*)L;S z745FDMj3HKo_q2r${w!8dp2b51JMlkQ}9gdiALsJQd#xt0BG+F+M*4ax3v4>G-1!z z{LGU@9rgwKfjd)NBE2atV5Kfkn0_(DY&oW6 zf&MZsV)=O~BSTR*)nZBY9tJIf)X#a4do`0xyQ94qKGg*uioPhmc)s=;r*+y6<u>yB>PJ^SRW03w=~DsL;t(YMp1cipFA^^K-)q8 zJbDuWS71C$9lsX<_tUG#8fiWnFrQvmPWOSiy#Ac>T@>u~>k}2Tu|M`h0;2LSqX*!A zxeSD#lpgH%MXy+uo<6wULviUvbv{k3OUe?y`W7vnckROR%k2jX9&u9J6)snmfn*A7jM6uq&#HiHDA^)OF3(Pd)~OM zlIo*%$?SZ$G0jy+^I2TaRl0rNF0~WV15%M*pbkx7|ALa?f?Ce!F9<(r~b-WM;2-XQ&;8R!j*@vV0bOt^x$n!B~8@~#% zU5foUojA8DNPm54h-cA9rXc58yZth?Mq*`Gaq&{I!F1#DE#1Y(R(kFBe$DghZX<8h z9ri78-SdC#V+v2$UXj-iEH3=G&-6Cz^qE0;X7`dAziNhDx<4WFAKK34@LXu=KekkG z5AN@1m5LXz#%s`5!aad?XB~s=`G>FutfCgLy$5T6GA?435>C^B{u>be$w9V@caQfG zy2S(UUQ;-z-d)h{SKoJ7D|KG{!<7R(C-2V_#&jqtO_b+xAD5{ztTJZ7jMKq%SLLrk za}*3GFp*Q|78RJz#?*~nUi!u=nr6^%yn28O_xRx}+STtO_Y3q2e1VVLk%|xLv!Fut zTLU3-2;j8EUnN**08tb7?lbxV@T9Tnpwod-UV6Lrs}_8>{q8N{Czn^#7pvRpbS`~> zwM?4{GWVgr+641qlZfigng!^8{D@8&tZnM<$*KORX{r*Wxu3(@yuwTLNxm4YAB#lo zb6_o45>2cKm!BNA^gHeHl=4~h8Ttrw6qzJ`{1*f*cVz3wgA(UI)kTE=w^S4e>@k|M~U-0EfQZlt!L|kqavkK7st(>9Eq4tSb*aZ}#IS z5VdcD;qFvbY{>ZWxnfsWhd7e<&68XpOozKKpmX3YO-<2)> zdfs)eh9XDx;up8&od>K;7(X_xs8e5bvKSlyRI~+wH``(5!FVUO0lCjj{Q2gqaMie+ zbE%Q}2jp|!4z#e-maLUmgB%RT8$ToW{pDaK7e`yYTNY;fjI)(s;OBjR9$2a8R31X^_lv-;>mf(+Dsumg8&=0%6uHkhVP*gB z(z7XI<=Fn=tpJ#LT$_s5RPJQ0HPA6n$A<6-}_-`*C z%p=O9vIu+N>`e%dWy_k_{bx_UM&jTnhk$tuSt0MyucXUkyE7Gv$M3Gb+B>b2)eG|( zWsZ$@EsRgvkzf*J4g%qk50yFN;;E}}z1ghpktV==$YGux^nEd6E{GyLmOeG>P`pr2UpDz_O(x32 zgZQ5_T&5(~6IA-_y~?^vPeyJ0I8dOFR`2Y9`;xNQ244=lz=IEb1uEgWKsy=CjPOA2 z`=>yEtPSahk@<%oT_aa#uH}!eT3~y@uqyYDJ6gqGko&#J{Z2l(&wN4)NO%?jh-t}d z=Y(BkiqVTmPMAM4a-Uz}fcx?Jv7Af}`1fnyKf$v9_|(qzN9Wk!DKZd{QNRkToQ0qCJIBgi@^s<2&-$z8J3S?iO$Y(CUCJ^wgD`(lEFAA^GJ+iH zY@U_v0f4&EMYVz*@*wl#L3lid)fto9xybncN7-A)McI7+|FkV4D80S3qKF6>sHiBm zVx!odh=?c#N~uUUNO#xL-63IM3koVAN=UQI^*z@uv+H}g`Q4x2U+1xc%g&jZ6FblA zHL#8;O`(xzp(>_tNmSnh{+H)x)NSmBb)lL*ungDNx{>u;fsA1WXVRP%AYPsfOmkC! zbz~xt<|hYL0)Bhn8)EQ(^#`&eP7RM|++Fr_FjIwCo4+cu~xUmBU7 zfnmFXlU3;~h!4k8uF@f1Tp3J~pvU4*iX{!uAb&bI#d*`9JNBCveTxQFQG{4@4;9uG zV{e!-#T2R~mEa@_R1wt{!N1x5fIQRiEJXeP?1!f#z5{WQ zJREpr&ld25YIM^E7#Ce5Ay0c5_@N-xh6ed_i%0xq8m{DA8T*h9`~SrJgl#k!k4atZ z6CQLn@PcotzsX@$7CBD9tQRb+H^7?~;x+5c&n&wu*kKh_C~ zk7)kU_}{~Lg?F!igV%+#a<<+pgs3WFx}zue9{53F_ex}uUy`6(mLM2AK70m#@OLsk zjOWk3z)jo0AJni&gB5GRA7ycZ8nAxkg_4YEYEVCkNB^W2V3?sq-9)Jym`q7mDv5KnEUhCQc19p)Y%YC(bZ<}(l)#`XgrM7h~v`fPt#;NR8;KOg6h z|L_YMKbr4}#ygR7eij9XT-%(Aztpf z7=DN9gP$ZulBqC{Cn*sZsqpi2O5xd5=pL@E2;0r}19X%38pE9_1F$YM!$imVgKK?E z1J#wkR@=xMa% z&C$>+(zfNe#lWo5P8O!c!0MnmR}aRff#rX}6Ad*FP5Glxbk$#W=l99c;5E8#-;1cp zf7yM*Z4ujWDiJCzA^3dq(3xx=uAxH)imLAOp+n^!quF(W4w*XE1=%0-=tdY8_x@`S z9XydR`_)l8tc)bcc1L!Tcs-%_GWbZb4S}j<(|W3UICMX2yl6LKA$u>|Lhnw2u0Z9= z3eilQbJ5fj%Rb8CWK?e7&dam~d+*`hOvqv?mX1d zj`J{OsdF+8jptz$ykFF%fgj~78=cZ1J1E9>-cN<-tGu!IS?ZyQIGEv6%4eYy8R+9x z3%cf=s9mREmQLnQ0t8Xr6V6Z5C7o%1^3yWI&cw%zNIF4p~LXs<|}-vZwNtPE`g( zW0kgEclGK~0uh%n?N^O*5Bz&hTaN-0UY}|CDGxg1W zMdPpIr9*|DXol=~KOFF+iiJT{zoUnmA6buKTbI#}#o*_Ut#pwD5e!@IA(zg8DrVu} z3h`XXp6Zo)y7|xzsMqZD$X5Ydx33_79?rcyX#R%-n)~=yt^rsnuNk>}@Ynv5xzHV` zK25jJhPhLX$+gag?oqX(@>+H=jO+VrdKT=L`3hg&WkHmhf998M=60}ly@narxH%wh z9;i)78TLo|r)EuM$fy~QKh-I~o=Ho3tA$tMX=X1U$Uz6lu;Cs*#}8+p5`TJxa{RDY zftnf#<27)g?TPW{@KU-ua$yYEW9r4~#rbp&FQs0+`9i)jhnG_Sa62=9F~=WlUW%Iw z^2}DtpFEzAS|HN8EIWn6MJ-r1ES&j`n~VA{4(RnmCHRc#UC*Nw;=m8x75C&|t)~Pa zJKhhMRuh{&z~6_HsZ+yXJs&ipMn#_CaC8&#QtGAJzw+h&g_pX1I0@&a5Fa#-m+}aj z`OoijaY5=k-wouw9nVMoI~VmcbOF3~_EhfiBM#(c;yhSWSv#u=6(P2#?=0Uh2bDUb zlG_g@8Z_vL;$eQSekZ>5ScgAn4fP-F*Q4%K|45imqs6pUG3p#n=>N=1jd5e+cquMU zikl14D15i3;O@WhQUAk5Ar9#0Mm31xxeM6*&)E18|533`87lXTJY>23fo$$&I#g(h zxIWA*k_oPodA5Vn8#aZ*&mFg;X+;0U2_b)Q^HRDGHHHg9|BaXW#2Z!i91AF2Ma zo=X4tXN;3V90*%K3h8EX@nK^;6yktxErQ&VXV1;QaE~9^0$*jA_e>(P*>y@V=jj;7 z5BDo%3+(rBI4Q)>o%uvlimu@BLWmPWyp+KzrRt2M9A0Yq*5zAEy2tZUh!0}xY;ki^ zNJolGKk9$ED8vCF{^e7tW)xIJm56^S{W(7e{4f()?r~3KIexeoOSs@@#o?rkb*OhD zydiEZq7kEA$MZsn6WTYbhH%A)zc?vw{Uk0w{JRd!$3rV1 z9+aBBp05p+d-43L6Y3D7^KudAl7D(Wf1NgTl?f)G955+O*_8H}{c8UI4X5jvBJaAB+czkT=r(kxf{j2pxa=%J6ta zYp~FbJf1Fd+!{XDBX81o-%T7ohMSYQafZGrQJ%xcAYKUREOB#FTRT=CsW|!<7lU-R z#yF|<{q859!9LsQlQ**#*5TSYACFdPA|9sw@>+;lRjZNS$%|EMUEsAn;y)1gk+)&_ zCs-dl5ciQaRTFB!!u^Q*NX$@$S}*%dOo$51X{K4|h;kj+*}<0;z}IPaJ?)i3Abvpq z;5=74^L`T8JEUb^unrtAl0Ny$a_nOsig@5J4j=Qtfj&P0YSJ6GfbkxY=t%S-0@l0Ht_8W} z?qituZ$h{85QhhG(<8n2oz1aMLX;VS5Q7|6P(MWNG8$z56;)amU65@oAju7Hv zb{N>GzFdr1?a5EKZD<*!91UzWt?PgP@BqZxcUk4v_rd(V<;`X6g*^X;mKI_F@$i-L zMBE3mA>@_5uufDF_u=(W8`e|NkbAE>#HxH96G<(ozl!88^=j;feWYP-qYi$}gZeqZ zRFZHVVz7U&4ATzwPM{h=&*3@ZAuuc=ozU+52I~#oL=1J`fMKE5&|mkA=VTn6<@p%3 z<2jkTHx~`%`63-1R?bO*oxkc1{g%F1bw8w@x6}CM*EE}2t)`|cwO@H&rDkUo3PDcW_0a@6IhGCp8P5X#CZ3Nc~`UM z5A%2nt(%r@(;4HLee`Bt_jjsinssPFM#GTn^4Q7>>oUcMYu>+pSrV*pc^RwotH=}U z)3ENFkJ$zthdF5~K>8g>-vemyGCHZ4y8q=!O3ppctoivHBhLl~72S+32+XWvR$nj^vNRuZZ@zQ# z{?*MG_WAqKj~9C}tnq@8zA5COk34&?T!-BI=D;q6tFVR}NLxxx=D5cu2kKh_sc(q@i_Hrm|Hw?}rSkB1o&9J`QZCo}~EI<5K7KT1g!qAK!0x>Q5Pj z1Pr}BRQKVSdBThG(dVDd-{)t<+LsJ@4HZdwOe+v5dr?C$mP<+>#6C@Db03m^5fCpL z5dXo=eQb=s2Q^-865>A)_p+?^=2{rPx7Lr_@IFN$OQg)9w=2j(R(*{H0~k`TY4$yN6oeuiCF(0D14N{qAd-3oz_8 z-ws+N#Ojw~NWWuaMJUvywZ&`0gW&h7d{#%fGGY9#I*E8}D|68LY7cw9C}4?*?N1nY zs=C%A$j5nQ%Kgp|volrXeI220NYkX(J40Sd4#d>*Bc}T=HDTJ;bj_Hu)C_%(KfLSx zi$ z5+5&`{vPREN}6u5pqujC$=+~NRc=c|)v zi>mJ?b~xO4Qs#T@eMer@meOyBHw^7>o>W(Y^e(o0JcnBEMG80fvCbm}dfn>fi2GQ+ zH)=o3|KO7QVc?%aKEyRFd>-r!bvIq*Pypoe%&Uq&gYfgrN_v(r#M5LgWZ8b$`})|_ zs0GsKd;HE+Lr83Q$TloebkQy8e-=z=I=h;1dRy90yLNg%FAzf*xaut7?b;zut=lbe- zQFikNstx#xuAK<$3qA6(vUY##z&58BB7f7FA?W|hp zkE+yHnBmWem1c2sABzvCK`oH)fH;qNv*I9+Wd2ZSiiY@-E=JFaCcwD0k)_pzL!69z z$M!?oXV*y!h`&aDH{Y5Pr1TSU0K*5`9?!5@Hf6ZJvq)Hejo6?-|FYRVs8)@ncYmHXy104JbYN6iXSG%LUZ&#gUwgz`&#~Uj z{eEtHqakK3C4AF@n}bMH!7!?Rc;Hj0oNyl59=xt{HuI(hRDWttx#338xocS!8LfnB zPH#cEGCKFygw^e4Rp^Si2Q{c<>l1Uo&%XrOQzz@K`Zw%aUuy1|#XL}MVfkAY#^?8CAt*sQ+Mf^@=sbS@9kSljlAK=dbMWnF(z-p-%x+W9P z_Q%+{_h8!4n&}TTj{i1fS_xlYH{8ByR9DpDKtWSG7Cm?L0^f7kUD7gl%ec?|BVcwY znIV1X+}{eiCWWJExtCx%=Y7mF-3?WYMtgzJa_C_67nC%jbN|JIP^l*7_b-GBF0?RL z0zGfb%{?H_L8S(}(|0X(4?4e>S8Rn9m1;y!X_b@D4o09b& z)WESUbP&66BdH$ZY$bC$wFrdYH()eUJWWUK z#4oE+QDGy!tS>fLt!Tl)bo>Tc@n2UWD_~sG@^^>OxqlK=v7|QNo#=Ug=dBn<^N;Pl z4(mYvUYgu-0}PvgCF}i87?1jryiyHV4_k{1j;cXNdt5#D-U4F`vs|3BL{N=GyrX=G&E8*ba3zfBe@_ z;)bEu_hYdAFlI-W)iwy}%jB|L+RpPH7o@WieoOMro7^!XFl-|@SFEu|chqw73OV&} zFwPm9byRC1YtPQzC&)hcALAhM&cV9qzNy7N_czBda%sTX)6g~2uEa_nm;!!yo*cFw zI(hl1v{l-$j_2oOw8=vj+^odtms<{3Kp` zOR#brdI0f~+!XNb$N|V3JyE$k@srQqc-vL;F-$Iwv11-|rt@lHzG0rXnWxauxj*6` z*ysLGMLY9E3sPa1`>RDnqVrqsbAB?s@0+83-XzGcUtW7JCBZy&IC!ol-Ndl&a~^W! z)fhH1-IHfRKg7Nj=HEGUnCUchmFG6kzQLQ!tGrtLslTeR&jL$C`@TZ{n;fKoH9!`g z&RAxI&cnGmh%}fN@#~kayTIp`-S~)hCllgjn$Jme{=FXJB<*3W6V3zDJrg8pkiFJR z#RTBl0@^VmkOE&ZQprOTV7G5VFV*%%(54yd^?5X#Cx} z*cCqEDJE?Ym-yReyS#_$bjm)JlhrV9GfwLyWWzq3^?d6$ZvG(-cAW&xI12F(Cg4BP zdM^V5A@D;>Xyz)2_tfF2Z|w7bh~^vpBWlKR07@8kc~STjN+ZO}jiJF5sFv(*L7anX z(DOr392xu;IuqjDT*xCieo7?BFIj!wGQ>QnE_2;0iO_}DlU()?pv!tscPJ-7-fG$J z@Put4UjJO-bd1|Cte-!HcxUmyK;!?h7Hi?_m{Io;#v`~w;`{S2;D;kBPs-9@J;-R; zWWstDw%Fj91NG4?`liIJcd$P0?34+yhxOomsox6bLH6{cxV=#2kqUg=*7t)SE(BXG zg{p;mGJKIL?gwfVfg%BM;eOz63haZu!NCobWe^`W2lJ|kRktA zzX|9g!}y$;zOTtJe}NzUcu3%%hzH)&i3LzCUvz&(oDT7Gwu>17-v8My2PRh&-uX4snFg<2<4U`+^kc`H2Eu0_C#LPa@>aZC)<# z3BNIHpQ#HE0rKY2-OhAE9EP1NcSuo09aj?|KIPdsE+oKy zD$jD9InGaG{(w(qL}+lnj$zA>L;bT0=QS3+iH^jrmRK}&J2bkkeKdSZTCV=QIOtWW z&gN+mu)3(O4~8OGVBH+FBO!WGMcp03AS+Tl{5(UpfQ<}#6cP;fSc9DyDx7 z)=!32Pxnu~h|^T`mVCuzsCwwKrO^rC2m0oEN}?)^>*a^-anL-_dB54lL)4`=cAbrb z-ANzl^TWRfl|MMlh~t4Oq{ zeeR_~1sG}aT9^v{hNEs{`hG-g#o)(uHEGt1J`{~@zQ5N zwvmep)MdDWJ(m260og(>C-*rc5UfzigB0k}v%NC|LAq z;pa#4+I{B}CSjNobQ%eP$o6R{K&DPK?vj#&iY&3Dym0xhHVzS{?CS(s4(_NmK;CsciyYBz|JngY^dgypQNPcUQMjCWU z3TfH=X@j`BP*MsdKTpx-=;J8K4Bt1vfTZO_A+x?k z{7+pM4aOSNTopxwiZ{Bi%!vwPi&(_*!UB_oN`z6}DX#?m17qDd4v0q%GA|>In}b4r7{4AaWXN_sQG+<4M%M9b z$FPG^iWuM^qV`IH|nn z(wX?W*Zs6ILy*Hq{Vx}V^pKD)5aNNjIiP2w@~|$_1SaBNkUuznFs8_Udjc`$1V4GP zUp8bhe)7wJ1P&*(+k#3Ad;Z_N6gM}f{@mzCzACPlbhjpV`(M1&7$=4FlT@>cZ)ZdG zIj^jKeHL`>DhAERGtZCbqW;*4IH3RHUncTLQ2+(rFT@JE8e>`QhcLb~ugJ=Nu>MYV zkShc3ayTL64{lxx=}T#c&riyp^e?;=(v?EI6w;SMx>9w)Avjltbfi>Y*PY9*;c#OA zs~h#ZdI9)6dlI)E4jTVN{7V^G{wu7Dvw2?>V6Ua61K*i@EQ&$gt#fBGc`_M%5{lr;mp5ysWEO$+w9cr zVu8Q(r6%B{5HH5&qw0n_bEt?1LL5+2=t6kUoDjspJUgSh1N>t0f8}4e{W0DTSIx*0 zeh?=v=aCr!(7jyvM%fiC%Hf3&C&aCirPHF00=$;?UAPT$KfL%-4?FBK`xQ((g=*xIsh+9_(=}c|0R-T*z`FGuoML+VK zIsDl2t$Wt~;iAsw{IL&`{@ADCe{)h=NiQ^UE$Kh^>LFdEmcc*gvq%S~PD2~#gffu+ z$^Vu6KsL5nj)mu$=-2XI_|22y4RY|A8Sr->HcQr-L$~)ZlCa+qx;;BS(k8F79E&&^ z#K)M}(Zr$;ad@E9N?{V~%kj@l0KQ>NRYK)W8d6_0%7S7><{%}!<148@@(mmnU z`^dhv7}jFG|3usevWWZOw(gE{P~+ispEE_`jtTtzCzi5;b`2P2zmULmQRe8SaC0&b zEGhY+Gso-dAYRBQPst!-7KamB=b=?o3fHMkt$O-d-*V@7lI? zGjmbJIi!D5siJ3sVbw3QMs=aKsrbYY(uo0oJVutA`v|?N0edZB!gxQBp(R zb98mMxuJ6#6+fouarCA(gyYXCj+(9yFuYq)(Qm!a%l1`?!*97Gti+$C#ust-j!xtXzA{%y)Y5?;dX5c{t1qfifGQ}wfJyVgMMR+)cg z@+ycU|J)MNo>p3o|O>f#$rHz8Z%=GB+j zy&P)7CGr>evKX<43vJaC9-@hx0ouHqw|_=pKdD1$&X} z18mSeL!xxR!X70O?(xj zs4n)C`O&WAx+Xi?LD;t+M9sSQK}>$DI}!JRbU!BIJ`nH0ZPixng4#a!620Q0HS{MI z&}$^kezaE%6G*QRbu!#G+LK-(R&b=9m6KN~+H-Ibt01p>j`s;Mrb_X~xe_O3mVyYG%l-z&KiD{QRAk}8EmZhE(Ds$>V8*6>WFd@^CpCy-anj+#~+;=*)ZSg|? zbM2>73%1+~9Q=47nQ{7Zn0)o!81FklaRQlsK?yz=8ONfY`|9L$<<9fC=Cr?6w=Bm< z^DOk{A9@dzoWylM{B}v5fjrtEz9r`@?A`j3jXo!%FswFot?Q{97*_RUb%dRz_bG_IMNv!Sk3k<=P^`Y|6wG_xJGEKIN?`n3k)@wDhd7Z4xg@?<_~XU{ zqv!LrX6bFxXA#O43iofQVkVS66LH;69_gvp7LnUxF>Ul_TO+JH$c`ts5?= zY?^!fWcF}IWsG>``M1MPwl=@1y+-dL8E>BP{eYm!5M#cM;l@1||@|8q` zME6N`-^!eiMFsCENG?Bb)|luMwJ=-Wbwlb^j~+&AMoHe(2VDta-_t6la^Lqdj{6A4 zIgV#R9KDn4<^OOGzf2(p7lk3Ku79l<#{U9Y)x|fVr^`O9U}XVuB&~tI)xR4>j zi%2oSeUAo(UYgGpI?_Gh@}gAy$JsO8A+L6lM6U(6Q{DzHxO>Z``9h=mnk>7WZ|Xkp z-{-xH`szNX;?VG~TWviQy~}r6Hg%{j+G4fr&GL@IRf|1^D>{Eo z-h44)dFrzczI|p1$DfvcvpjPn#n6WSCF{=PR6~nzjpT4U#?;f3zO8w2y-0i0(+`*M zeXnO-vKjV$litj1$UW5#+}ww@RtW6#qPObifl$Nb{a$G63$Z%q_x#4E(4%I{Dc<*i zUM>B;+!8N{{i)XUlWyR*#1LeuAs!H4A~%2^@&%iv2Sz2{To*hlVaV+Hgb6((tYJ=X zdNyT?;uSUrfqfxQ-=M)58fdMVX}VH+_{6UlvuyR34!r6!7tP%>v-@nnw|L8$9nE~d zPm`bDKGdMm6S-iuQ$U$%kJnO`e@=?~Zx`KfQSkveJ^h<`lFr($>6){5P1@4adOyQY z9L;SwM(a_^Vkv}fwihm!iI&fKI!`2Aqy&g?lmtbVRwEu3@eSbWQ_ zkyc4{lcz6>27Z%D9%IFg{edb5p2w3U1}~^B3!Uu$b0|uaH!k-v-|*ZOrVJrtqanMs z@3R(dO&rqQ#weP!{`Sy|TU&EAR;P~eg|E+Efw%{xccFc*eHzUBh(_ZF=wS<77QCv3 zUN^@a=~yV;DS^0`F%NMca(X!PoLbA~K9(oLxD&o0OS_Z;JwvQ8DJQ)j!+h>zOUu6T zx=fnHI{DQ~;IU{YYsFVp!Rr!=%!=>!LL~$N=IJh}$yRdwgSkUy(}mSfb&IlA3%}g3 zpu4(~iclRa1)P(ewVQ&;`0$WM5I)jz7r%+*rYi~?|w6`6z-iJq7JKf zU1?r5I`>zCs>teh1__<_%h$px=t`E zuOxoj{6^?$qdy=^J^l{r^9UKlIgtAspneG4LEik@62qP@kad0rJ=J4VwjUh7t>8@; zN@TrgyTBJW?HKD=UxI+OXw85M^TVW0s^gDs*y8E&OY=X&YMd3kbuzd9L8c*wNqOJi zkIwzwVf9fK1zoX$*`UTm8ef7>L8l}fKL}ldToof~EmVE;XJkpJKy=q%k@-^L0d(}5 zX|LoBFzk+U+9Y(|&(=BM<{rj)2f25n$yh)Xnf7KF-XZKd^>ZiWm9WE9k@h~=_vgtL z_$T%kLzYzZ1$rhQKVt7k==D5GW%=L3y0EKb`$6n$6|aGS3yaw?#G5xsbcAm>Ltw$I zc=owJey$g~Z1(H97$$OHhj9f|H)79@)}ZIx6JXUz>)mtknF@ZOx_o~EtB)M*|I6I% zA6<}+WB3!j&ao-zx&P(Raj8_LSD@$q5`IEY=_oJT{S*B2xLW4O zS9on5%5AfTxsCez1x8lyB)|>(0eknP8WU=tuZ_(~LCu z(DU%zx(Crv?MO|(nc)Ooo$SvibW0NWVe?bfqmS{EyAZuy(Cy;i)6k+!~Cbc3%)`Izn7Z?q;PW&tI;Fq?Zml*C$!v)}<7UUsmlW#8o>JnR9J066;gQ55whcMZBtfkC})2f_OA| zcm|I#kMXqeX&?^bHB>RvPG}Iy4uBsdH<_Vxf8>uy7?(u#wK8<>k5{cEqNnSD-{6NC zfw^0u>!XZ@X`tu-6$UU&VIW?QdJ@C7Sx3l?JNM6kII%CJi?SX%eaE2Jlywl*CI!`y zp^AuC3D6?rPYd|^86fU~m<`?73->HG_b_(8Pk?ya|J1>c@C)~Y{X5y+Bc>Q;YbdMV z{|mocm+c3mhC!Y#zFoslx(GaeJUl}}L+g0<@bGkf#$yq+$q zbpW0Fb8`^r+}{SO6q$TmClmO5gkR1-cMgL;UitK`(E>kM1rKP#{LvOgUZI13lxfjk zIM=kZKIAGo_oqOIe^EF@n|`5dQXg`@Z9I&X^+QJc~=QmeuQxfcF2(MC(NdnEn1Wf>whL)SC!izUUJ}v zpv$`VU>(aSTh;7?u8_FJHDxPwOQd$+UHCd6cLb8~dvR#z!Y7gOZ@i~H%_G0Zu-(G} zwPeT(hfV!s$S{tJS$T!$=yx)s!cC%!rL)_SEr6~>Z^mEm{3`wZ6I#-$Rl}yC20skAr$V!Xi{mVG-RzY$`b64v1S!(Oit^$}PP68>J)R)`a= zfq|r4$d}$eHe`qoyY~3Skl^zl+u_NO9^&oq>Z5~akMm)hB)%_ljR~w`1en?Hx(ryt~R@v zq)9*={*hp^M-tZ8?*P+YDCGZ3SE6M)MFQrlYVEbR5)fZr9J*%4w(xnr2btJFl+u^^Xb0J8 zDU}%Q4y%u{Zy_ldYEsJYWg=m`V0%|dgu!2@^lhYv!D^$Nyg4-(vN`#=<+*@RurD9a z34q;4{_0j5$OHDcuiaB`SOp)0g?y!Ox;8u!=S#?ZiGseBV1-lT{owt`@_9UdH^HhG zMffqmZmRBo3SK4etM`2hyN49hFzllWwyGrxzhjov^t0Tn0Dhj`pY1c3V<}IdE($<) zWIYA?Oy67mnPkXR-rIWSlHs-Yz|R7bC9c8T=0JoM=Qj7NFcEgV+xdnUMDUac?An7} z(k7M=-8UN$AGjr9*jk%E-^;F+CN=rOuGjcNDGh}xnUK|Pc z^R01DaBIbje~(X7di*vTq7+Tn!!QQ27?t7mFcSVY^-J*kC|I@B>+v-a5VNWN8BLMU zZBUbQ+ah7rQne~4g~RHh9(>Ulj#H=&pZ0`;pQvdaXTxCE(Vp}R;pfe?pb`Gi%kcMM z<%Ky8x6z?85C7TCM}wUlzPE#i2EP+=;=3tMScZvwv8BS!4%_r;#Xsk{$KQlgpl%Au zdHIkG6|uC-=2_ z9Mpa^oiCGPAbZm1b!A1TbM$fk=;9zAh^>Fa%>nJD!MJ0bxH+I_#T1CxVM^${pW}y< zi=~fS!am-8iFnyr2M9k2= z_=BmVEoOG{o$n$H>Ps^ zz>UlY<9R8>jmh^!G181VoRqwHMG500_`~5{BjX;2kNRIO3h5#tT_D5(H5ACt!7@{W zCep!~$RCw8WLW$DIK`YUxyB6qemau4!PSqWA9UzEDb!~shnqtD7~-XnKh!qLePqDC zR=KRXF!RoMZcN3(?9)H`Qizwj@4o6EUW$v8LcADTKk9$DD8xgtIUpi_lU(`@q=WNc z91zlh$*ZQpoWzME?jiRPPOJw*Y_Ys4;bH<+@VONPU#C+X{h(uVBp>gliMc7nORc;? zmra0fNad2+w#?gq@luEzTXCo_`{ZA|)TSpX*_Sx?&mm3<=|~|zApNXATomGgCgOk) z_fqmo0e(MSurN^$I$VY$H~)ex@<)yuu3Q*q!tsNN2Eop026X=wL=9Kir{}#%Hr|#T zUI=khhZ-p+!C@SoDWtcBcqukNHpbDZ2^gNoIViOmCULot@6<%CKjrQi&q>V-t2&dl zoui}mhlfJCKu8Z~A|05CxR)$Td0Fts7vzt$9dy`(DTax@^k7`KHr|2?m24DrV^*!= zx)*O@*!?>)rZ%b^y%?k;bY&OG!rNdxFNF9hq&J1QDeXALHR*f*(%Ty2rPN=Z6vOYK zVe?XmlN!^LLR`=v{Vb#lg!FKp%cz&(&!r*`W+MKDoBKe#2e*xUsQ~Yj))YpiL5Cji z0bQ;BT(@&DF1v8);`{JkHYG9_Y+w$ol?lfj_i#8FZf*$iLWrN@=BCE+V`F+_OF~Uo z6-t7QaoAQ!0DC&lvY-q3fwgOy;ebQVS;PS$9hgc34ahYG7D)djO-K!VoqI3+iYmTN zYLazTAYW#FM0zI^aUb6I|Ev>a-5%3nZW16rIStKOe*)s5y{4401Ta_(C^){U>E*P$GvLLi$2TX9;mr+F|Oq@_IS&m&BU%NveML7% zeDs#bzbSC)eq(T~HZhIbk!3LayE?0^L3u+v^H@n3(mzRiz8vCRNqv&M)*B2f@<8|7 zaC09%TUFb@FYgfV!OeYe+lMq<0hR%Ei~FFM=aCl}=4vBJy$A3s;U_3gToO z6bRcKSR7u+x`fp2Yd$eIg!F}w-qcEa^+kC_10S{=JoGp>vGbRqn)UC@&>uIBZ;Iv5 zsQ(;#BBp9DL*?!0@#!6`{LZ3ZyZDA2%BAD;^k9uu*C6hL`<@qW?!)1udLj6Q#?5;m zYo($T4ddU4EQbT}KP2+m0P=Z&ySUm#n0J3&@mE(g{?Z8<<3l{#We!*;Ow7x0b24`{ zsH~`7#0~Z38ON^{iW6(?yCQm6B~j;dmsymxVWQjz&6}c;K}qMIhhL4TFw2-;a_Exu z*X;Zqafc6T4AfLOsf+OaR?$^Z%FoK>8oIE0m!2%Q#|^pa4Ed z>*x3(a<-Vuku0PKfdwXti@iQt3Nd8k+{I@sAjf2h*Ij|V8FNBX^7;~VkIHyn#;=~} z?mh+GGt{5pK1cmvkX(C^o6?r9pyp3goHNdp1R1})-)<*fsmExXrh73qn zO}|Pjx(>Bm9QZb&Z@T@` zr|jo?OUja`duVS#JOoRuLVf1*HHOTJ^6pvU`ijhh<+dW}+igaeF}Tzo*q{nmmnhl++*Mp+(fU>5w?;rvLY!YA+4(N`X7 znOJU@>Br#jVH=W5pA9qZ|f3a_F`4~;AwpiqwZtnJK6WWjBy`pz09Bn zt8!xNe$-usSX|<>gkTKyKtV3I?#aT>SKi_ruFB`@&@*IKD?Gmru{wRKoVW$_$SJ>Q zJ{FImU&Wt|mz~r~cN}#qmz*+FNs<*(>pgiRy@55k)?n%`)tSs4FQ!a;yEv9P`+30( zm8E$jKF^oWe6*@@c;H36aD(3EVZG5r&iCswdOw&PmeTT<9*YV+WW>;*F} zvObEwS*V+LtFLas>p9yM9kmM#8*C42_$$VW)bBBt3zqXZQa;aCHjH7nt>9ajX3P#V zzao|TH5t>6{A4us2o!y1>wQG~LG4=M_MhBG@*U_Ib465VT0-xZy;d>B2In6_kPZyp z%kDDNPhQAUZ#vw!rRDZI?kx201= z6iS&h-@8qe75&|usA_ml4$hl^U2zVHiJ5xM5Vir25p zrlp7;*#2^)=Uv`YbkE81^rQ_KR;tCm?_~n+Lq*W*0?fOHe3S>ovb0s)+y}CVgQ1wX z7vbN4gD+Kh2d3=8ro6q(dsy)I=+XB?{=!+WS&WYYg1X`l5C_5B*xWz)iJZj9w6D5T z->CMY`!R-ef5!_4uI2mjs4HTw|G|qN2Y)G1zFp3*xA?h!LG*(KMKT??m!EL%NGSig zd2Q~~(|*n!FlX>h)fle!RW)+RDM_AFk<*S>+VfbEWC`l?}4-kvolh_;$rI+_!w{eso(eQ9<9O zCp4@te)~%OLGhZ*q{He$BiFF4IeJL%LRIcH4`y7I&nkpkHf=LKDsL{V z^Y#h3k9G0TyT@#yCMUH2qlZ99g1iw{OT<#4XYd#v=`8N#H5IUCx_@xs-6f#Ue(oRf z5L>%n3$75S4-O2sOpc`o_Pl1@nD#^C8{#0o@MA|sO$?{hvxYB86kS=6w|9VFcJx6; z%+|qDnyT9(&x0dk@*9JsZ1*x1m8V6mH!fz9<|oD`?t9G?)i{<<7L|tXZGgs4mQW zclL4Wlm*_b9ZrXnqvQ`_R;iUKZFK0O-sC6loWF83Vt7gN8>Dw3_xno}*b@4&*U%#- zy0f{Di_c(Ou~WuzALV(lUP3h}D!4*J&D8KC3{za3zFFly zbgGf*_vx@(jaZ3m+4}zIynjsR0NrcBzRv^cT^QrMP_!^L_$#dU$SK@3q#L z4D-T>8MP~LWpo*OCG^Bral<-A#=PeI-b|&IR^I&rRAz3g8}BmypDd65a$Y`u!vQhY zXMr%WtaeYVbBh1Gm=EyRW=5}#=GH%mgGxjy>UOv{WH;Gn`+-OJiG-}*CZzX&4mwl3 zFGbJ&BfWq5A@GB1sueo-r(qa&%PT&c2GxLvb@VFsc|TORb@Aak?E5Pa_b{e=L7ms7 z1@UenTjyc|?gMcTgnNy+rs6jl-Pho8>*dG~BR5-gdH3_@GV3}CJhi;cVc!uR-W7cP zofNE1&|I?bGi0Hu{Hji`V19)Ut!Ea&suR6w_%IVXiaAavFXJS>l*}zbbnb5*iedQo zT4oO52Md2ubpF2?I(gdpSYD*}PglaQH5U?W#-014=lr{2U08(rOd8L~2)KR_K~eSWC65aTuD-#%R3?8&>2 ze;0Fij{uJ)kN)6lrVdX&?~xA3+5+}-p1y}@G&Mu5s|Lm;d}0F`opUFN!FpJ6CfsK} z_!7ozeu_H0umt?DFu@Z)WmuOPd5sF);3 zZ`kMl=sACM-j8$+U>+*0{4OJX1JVufN3z#(r1OAy2l86ny61CqABcNER;uMQ)DL&E zhB7KEc?rBh!=x`=ynFcCMoxDN@i_7D^!;L8=6TQer0oRw!C_9s8|Y4_7^++?fqgu) zWSu;E&OZV6uh{Qn_g$enm9)FD={}50rpmSuo%(Qo2hhqw>IrxEBCpInp0dKAGA`?&oeY4Zc(%Z*h-Pb??&hTm-qdnCsn;0 zb|q<+=VtvHu%o`I8dLBm--DXy_&3qpA_9>90XZAP4x|OF7sT)?Yf zM_Z(8z~&w((3Q@!3X+DZ>f^0@Ul8{obsochudonda}T^=^Gu5*I&i<39u@`5+R;U5#dC;ya!Ke?SD!}=npc!?0) zAwC{-(kJY}u$`A3i3HdmhwYyH#{d1Cw$nzo4hF1$E9R3dS;&fxuO2>=0ss2v*yu~+ z-Lm5SU@3^hX)Sk!q+UbU;eO|qBy{P|lg#cSzCnB#zxDV^%Us9~EoJ92=5#^64Lhwd z_d0fRXv^8X$Pc~2?Gn5*czE7OGu3$Y_-kIwXXWu42=vwHV9R**1!Ky1u}qJfRjLo_w^}O&;tO zR}D9qU81F*mK)T*gwMg7@jG9ME@9ekFe`-47&+%2cpaOZ=?+nsn3}HT4qhTo%X#H; z9j9OUgC%!U3WW@zlTqC-4># zGKa%EWC!LGAp$!_^pp_cvpMnq+6RFJb24bxBj6rXK=#`%S%|O?U%YuG3oFYW%C`e1 z67Ni5_34$${IY|nvMTw{ecp(VSu{vu`6j`x?p6~B9p-Q{RC~S45g#~w4CVBLmSD*G zl(SEAgCV<9uDZkr(;mQxb|*^t~) zrXPUwA3SwMfp_7x@w@L&;r+=TtuLRh2b<6%?K7rZMY!B~7YH%O75K%Es>H%Au!)?*6C51S^-e6!PqT`NJ* zb%0!=6GsemUyfm#airhA4{$%IutITNm`9p3BA_>+K3=^w;vMdfO->Pw9NieosLj39;q6n#?gzRoXma_41S?lmud#HIDVkWyweVv#PI`FzW+oZR7upI zBho>xNDl_-z;xtOppFh4{oX-={~J`&>_>(j>;DyTFmF##Ac6&kzuJvgqJCxdXGu_* zd-Yay6N)j+8Q#ojzr>4c?Ho=@|29F(0lFu>3xqajh=$A7k+yk3Rigfr?Cx)eQ?Y6t z5zqhD(OF*+o$!}_j?0}l|8Oj>4<+HFVblOuqe#ua_@Jc$QQ;6RD2<7SLxVZGIaK)) z>9C={^m4{@a;TF!%JFkVq>J;12kPgiK|~B&%I1NNQejVqsv-{PqbKDJynevV0o6H@ zVJ-R1M(6z;KO9>rQGKl(!*)x_-gpG_v89EuzyaoG<2OR1a|l%bONk!t!W=!Jc?_ya z#EHLjg~oU(q$kAYr4%g>N05os6-==vGs8LsSrCN1Q7>>xDRyB&-Mc^@hViT&~u)WmngXgS^A);Opz@_ z-#v*0g2N1sp3+3T6fH+-ZrokmYLnyc|IJHnpZ&kQ)EGa8c&RZ?iaHp{7xkXQNm0v+ zx+1$dexQbazaO!Zn~UPU7wf+`Aa4GJ+aDYr=7Ow*s4;xrBYR}BY{Bn_k_53QQ1$QI zK`3&T;c!#P9~1FX^xZ3C{^rKyQVJEz0l5Dqdbd(N0BV;&rayTJw zUTSF*B|C)q|G`U*abpwlQsX$OF&!y3A2r5@jqy-p`bbC@iJJrB=3XZ92hu@7wqQEm z(fC0%c7NBL-6vq4&M%Q3eE|9G)Fs(nk9KnOl(@MmIt{g{5gK0yEj!O*|K@4F8zi@77_e+2w*`C78k9J-S`Q>7Q( zTg1^3Lb^&9w1_KRFOBDgkU#Y1Q+2{&?P(Ot@ub}TTW{-+?wE?%k^O(TG4rZ_UXO87 zO78JG8Ou3*)E_1JrN8AUp{-S@@1%^F3 zCaQA)KEL%biN_}JIjlcQzBY%h?A~(eR}WzPceG?~<4>C*UI^VgcB+Zwj7vq)fGR)L!s@6_9F;KL!y;DDl_+3HEighO| z2;GN-?g7epH_r(_pPcBPn~As&KLPn0U`a^-!)uNl?1hvv*Jpq73)J4uBFzR67asi* z|8NEV&%;d;Rwl5f?5I-a7DXKW7{m>s`<2kWTS#XJ=`A6hCB#jsiK(b%?)r-#`-dAF z>R+X6yCYqrS9Ftmv~kMa4&GhC6)R#K+LU*1?kG%L@@m)S>^^2jW8tmkn@8#SR!H}R z`<@qM|BL%Tx*y2e98$pVIdH!J68}ah0qSG-l_DD3VZ6?Db6w79;ysD@l8X@UpJ+(j zGdVh*lR?}N;$-fIzsnd(e`+~dbGDhQF*5kiE1B!ZaDCjnA;JkHT{pz zX*&(??LI@o!o*-aFXOmN#>l#Oysix5WNvj+G=lCj6R&QStBfH3YP~vdoj}l%X6H*c zj2?&eeK={Fe!n8r^p&5POmK48$EptFEqTJx+64s{HoV)Pv_2u|$d_N**)g8Uo9vnX zv=yflDrvwN2Y}!_3}T&O!iKd7&5$!0C?=lg;6lNj^I~~G^ z2UuggTBd{Lj5bHBJsb3wb(Kz#zx&>6Bz}E*(9QL(U1jfbu)-7e(MPRS;L*_j%}Q{-`oW!J+rYQ$YY^T;xqXuw=;zZ0#jORP zmxk3IO4o3ESy7<^udCvfesKtT%W`drOXnG&E`$4*W4AbHGvuubCbrKT;X7`Yv#;A) ziSQ8Eq3Wh3L>2PPaCJOK(r%BLC)MtpMj9(;?%fLGPB<1dbH6f|*Y|YQOj}tVzn`(@ zjD87&z!U4TA7xkDCD%IFe(o*MS9I~{YtzX6dPv^)`ZH=~w*GMN`5NZr-S%qH+lr1w zCxi?oVVNmmz6FajAH+%d=R7RWbMoBo%=78zjcr=0XZ^;q9==u!KI(>HPyAI4At>L_>3gcSPbKEOLI1j{kg5-(?N8w&qMaaF>-h}VXlIGTfds_BJa>6hc;^cXW z_2%Gb1vnct1M3%gGIqN5?7|Y6Z!>juGOR31Ni*Jc0<1q)?3(^j-@|#vt0FwT{J|#9D;jcBLk|{l+3bHf)p>W2CrSIq;GG&t@|a;+_r)6LWqM|& zZ?kT9Z%etP@xrol>wYPh?z@%cVP~QPE|*r7u~_%ToK1UtmE>2MNQv;zNzJ~WIptfO z7JWZ9@42mPtZ(OF>GYveuM1<5_dg@PkALAlR*f4&y-}@%4$lE4QHT#k+|U;MB6k_s#uLV!91+;vho($QyzI~p$}r0dkYs&w< z$)ClAAfAlpFV?c{UUP10<;(kvKWs9beDG3pNxn+#57(z%JO}m(cTYcEB4VgRe4p{` zw*1kvmz(8YJW@8a*!Xbwvp1SXp6@DEo<^MF4b#jCe5hf5Bw9JbruMprWBfB8a;198 z(bO6Hw3{yXmgMo7a+U;jekoDaNK20ydr&K`@F@yn*S(bg3-_@s#~FI0%1o(BSBM*B zDG2w1_)q3b@f9AByK^WrC#zo*qgjG5rI+DEZO~7?o;SrXKH!o?{22ej zg^V11Td-vH=9m2jZ!hue+R63F@BJ4s?jvVf20mD?b~dzndfe%9W|iOF zf~2=Av>PMk2L2{8ILUSof_`wWs#?xoaM&|?0wA| zztrJp)c_y+`;C;()BQsH7c|pa<9kiSV$Lpqs@G#CZ*+;PTA^E1QQK3l;AOY_4$H8u zaowMH?pKdz^px+&*Y-@dG{61+nyG7s=!KPUqe7pjXzH(ilV8%58mD!=^V0ioc_k`= zt)=4v<>c8tCo*Nt5W`YscNO=8y=zP9=MKYtKmUK?KAt8yLcO#|e0vJ`SB@Lv0TEG4 zIfr3!yU?6>dd(YM;#wxQY1cQ2L}eyh#B)B~(|v}ahOK&fRsT7r*L>2`T)#fDoTRFc zubRMEyX1`fv__~L)2ah)CkJovpE_~)>6!suQB|{pw^x3Bu&mB$X8~bAcAa71?f9+V zWfikxrF`87sM}jomRer_dU~%_#{FZQU$!34&5Js0+Q;RxIV=9a>AuJ;a)#bstNy7+ zLg^z)q@Upy*4l9QH^Rnr|K) zIc%nTMSJ7(QKs;pIfJWw#&?xjW{*m-%xJ!gEj%N`gwLM}KF;!8RJ20fSZE^t@VOO+ zT^U7tUJ%d6eB6h~w|lY}mS`Z-Tn%=WFf6jP2I{BSN7UQ3C!r>EL-Wnat~M1S3&X|9 z8(j{>^ylO$pYll_nHm@e}rLEoP17{)pyZ}Sea801s0mq(^$xwDRj-ZmWX zCT%d%y>eyJgq&jE7s)ogPUu0v1uvtSg(A=5?W}Iigo#yTOq_f)vq^H{RXJtKOoVh~ zk-f}fOkd%0agih^w)te(wFrs5Sd?2-f!yr8-w9_K%xDmU&a7J{V@mQiu8*8b#CIX~ z>ob1tM6};z7VqKKxEI6X4d&xMkfaSifjAMthHxO`Cm)|9E+TSIoa&S%YB6$6?)kEx zD9cbY*)WzuP$Ce1Nzc4vFkDpi8M?g%Dq{9;AnPn%q#%#x|FsaEd0bDV7eF^e@-e>` z0oPA4ao_3<-$J_QaJuO{fX z+{?zs9t#s$2=(IypS*~N8Db}14H^()2!v6)$uopFf-K_we+OOOf=S7qmx-W8;HOere6 z3-SHqPgPzjPF*(poIhA`c4N|#S)K#Xdy{IsyfAb$z2Z>~V&EkczY@r^JP-5vE?#$O z!nreN_3-EXNRr>bhhEzyVN~Ve3!*f^c&x3fmbjl`(ZtH1VualU!tnB`FhVKuSQk`b zP+x>L!lx}Pk=4L)FpD24R-t_dsnD_VRT#(wn}HsNY#cn`_Y_a}QfsJYg<=CEj3A2B z^h3`h{sZ*fKmN3#&iz3zRxU~BXP@)`Gw&C{v)-0?-r4;Q2=@Tj z*E<~iKo~lLNrkYN!kLrMhlKh53-3U^Gyr$ZTN?2`2)yorUhvZBh~0x;q8^cFOt7U^IY8s28wcR(NQL0@)4mJ$w*>Qum=#AZmfn*ZFt2-ua@fp|t?@OpFA z7>C*C{OiEF*`mJ-!{_GbMikES96(k4d}Uzde4d9{+`}2%K72-J`7T_bc*nfDD1|t# z%wqxh#}~+#F8QRG9=I}#B_qRkRf$%_#8IP8Q=$fO*_i*2Ed&z+;fKYPAR&!V`4Oy( zIKg@z?Snvb?i8;EhH};8(m_$s!&vYM zl{H`&UEw!p_dq~4lgmzu7KW?T$c?!o40_X%jaHqV`=fmifA%~GL6?;}9ppAU??*fb zfA|e%aSsr8y2)-vWQcyF&W=yW@cYSXM?b{#K;AwIk=OBnVB{#|5j$7D+Chj=1_ws^ zp1BbZ5~fDVAW!Zk+#R*}K27i<5C-igCJ2rMLYpPnL-yiGH21&hiD8Rc*LW0d0lV-~ zQi;8aVcaKI@Jv@lH zECP3D#h#c38sr`IiqLM_atu2m7jkTN?hp3v#2ykY1XYs%rC?1V=m6qM{llqXH@UVx zj1+i(6}yKl`5A^iY;e&eL#On5g@d2qIt=TSx?G8P9t5Cz9{pfdM*@49oUuqC@nP81 z;tQE*?$3>nATTYnk+7zxM0tYj@OZx&;Roag^`Du9iv+?qxrwiYR083ZJm?{BaZWAR z9}5#Tyd0u3tNn78Qt`dI z`D)1SLV*FEB2dkU(87CZP`zxF4o;>*e%XKA&lb05-THuARETm$k9~ru&>h?6_$5-g zz`CQn_EVrbioNb>K>@oJ25B~Z!(Bw2fyzbW_lLhGfyrG~El`{ogQ@9?Em<>N`T1r%e^WXf&KzL3de6Jhf zClnG0-O&@3gkIv7=V1Q~1XkA?xX(;i`8Sk76k14=3Pk#dgl>n6d4HSzA&8gD&W9L* zzmv!pZtXq+{!wl(t-uI+nDHE44snm#-!F#`LBQ_P_nf&}&Ux1NOgQ z{2)=4fv0KxBsWo!Ve|$2)C%HyMwdHEST=DLvvmo?dB(GxJV^RNx5LJ~_P7P;nfiKn`3Ybc#Y*^Md}eluoJg!2Ku|&`IGA!~YtowUXN&y3?v-bzES7Pq_|ga=`b#Oy9GZ1N^k5 zZRf)!ps%Ls?QKgS?)5fpSH&!qbCNQ8k` z(=wE&!{D^S8arzuan_eg2gfjov9xN>!{Jc#)9wVxg@f18o<=i=L(NWWjJFCmrQ<+m z<(4Z;L!dXN?J9mBf^W~!C|e)$9lRy0=6fJmfzXxv>jNQMP)8pf^NR$DH4pni6c%Fo zaO!tevb&SXTL;fV-z~hrnyC9n%RO-`J23gyQv+T{hCJ9k8cl`%%SY#q9 zkh?`Hq8Jj4LEewMmH@qg$cj{+*mrb%jBw_)P0@Sj;9~0TY={QE2)9076Qe}O!w7Hh zkdB0CDtvt4bU2=EmXESU;%sG$Ff8i*NT&#%S^0(ziokcoq#^zj#Cw8ddyp_>kSNX; zFJY)qBDxxD@QpzslMOp55YgRNV%TvuepMr=Vs>Pb4>~d8EQpZrz$-U12rcx3+H_rz zFh>OR_M$a%MyYVWMeiznN!12@{D^3J-7`LFEQ3UQy ztWVofk@Z+hY!BjtX(R~4StIs6RG>nI>;vaKaf@HkCXCPu0&o+lgM`zPy2ENzm#P-)2Pz{K_w7ruGb|m`BDLNIZCDBG7 zrPMr-J0lp9A$yAs$ET%f;CP?3J<0Fq;DZov&OE*xk+Qb|31{#sv`-GL^@td$yO*U@Fj+=j}^WV4N*$&uxMV&=Q(((fA9&38MusQ7|p>;A)FL* ziep+F9UnA{lWM*jn0kZG7bNQZF))RH4lc@da(Ciega<-+D1-+>cqoJinvVl|S}CH2 z|GfpBAIZlpG>C1%a2|aTK5u=finKP7TV25a4+KyG-QUphQoCtF5rK}-6*|(UBA}Yt zkS(GeS3t*0i4ARF%bJ;kmkK^moD11rY|8d@Hr!XSX?N4?)pWentUju8oHB9T%hB@k z3=&-rvpBIodJsGJ<4uanUwEiLI3UCeG#>|qcyQ+9U;eEJqdGoUefXVj30cAs^nUy~ z#nBzA;zJ9mE4|?VH7*MI2OjtvKSsw(Eq{{x0@uTq6}c^R+?a%vmUDjD|G-QA!Hvzw zNzLvRD{Csv{4{5O*#C!%LU<^I1DfRn`hx>{UM&W(D`WY;a6t3*LB~hg)$<(JfqZrL z2AS%}0`X!m`IQU4KgpCT;uZZjZVKVY5MF9ouh`qH;5m3Hw0}+NkV<|jj+46Fn}25x zUJ9~o{$n~$YL-t5;l%#v0pY{`e>@c81)7fon$LstFZ|1c0a5VPyi^9k06fTqU*uzmq7U?=tYfhk=Y$?(|Lr>y`pk>K^LccU&tUJ_ix-3;+dlJj>(%B zy3OSs`wurJQDdG|7)a-rl4ywHE9{!XtA+Tq{_to0!9)GollCth(7$+Jsve2s{M;*$ zEVC2GJ2a(|Ct^^cXWl?EzeyDIm;|xJYaQ3t0}uyXS^0BKpq_E`AdTVA0wW$FGY86H zH^|#YAE{S-CFyt}?P+0yC>c86)W7j#2uF8<_@BIdbS}RZ;???tk2)!7-P3oidn8>} z21_f-K>NWE4(Q&5WDRs!>htj~XwS{nDhaUNt3Qy;6_bE?T9ANby0-)e*pFIfusFOw z*E*>~6l^dJa*E#wXOJfTHwt6EaYKj;?iA8)GaNq_ArNm3w&UC&*yFH}jvF$0Ahb6? z_HVop;+sOaslV`JG8!s3ptg~cFuQkSIgS_ezjlK*>9dwUPrRt+SIoAMx{tZpLrb>P zdQRpX>gwNeb8KtT-o_j2gr@>aM-lD??e{@=7sPLZa35*+r69+YenEJTg#6z;Fm;Ic zBUV}h;$mS|_(}=r$O|5YCE!oM<$zy?v~jH81%Bb5#iy<(26_?V`)R05=Z!%)nfbUO zw0FzAk`@uRiO#o#c$SbpJS{28!= zz(&6BhM+^g8ze=ulXRSnZ-U_R%dzx*QwTR?d!6PQ`jL(sLi^eN+tWA7rOvt8B=1?j z`XP_ghjS;pmYv+}UYwQp;ffwprg~a(v-`QY+sY}QUqt98wq3ZAa<^DJvhQ4hYtc4! zi{auju|$jY&6sM9^!)uU-V^fp^S!D6;`u<*>ASQ7=wTR1`xYtC=M93hngrNUKE#^j z$^Yj4QOsPOhaon{Y~>Etf;bRa#PdZLzAGw|Z>Jv5-*}nOAVG=C7wC8y#Iu9=hMd+2 zKZx%A_487id{~TTkIqGd-9k~5?~j`0oVH2mc-?HB>y{Y5^!Xj@&&g{N%Tg`{HxV)%y7F2iE_(QMt|Iq~dYR;$DhFiUP!od;9-|_qg~_9%`Cf zasR@7*!RdlE-P=k+$s$@p`7cIH@+Df&tECO*tV>L-(|(Ke^l<8<;B3VesX-+13r}A zz}0@Z4}M<99jFC$U#1X`f{rE~HPJ{FV`1|Z#@M$F$a2;+$vTj zIp}vQtQSVefE}0Dvu>3GKe;W-`b8f6{5JEV>NN|nj@yiEJsa(?kt%8SdS&BT{t%PEj7^pT7VPxaHTypmpJVf8^e+iS}L8-<32>4gUk9fKaECS~i{ zc<5K0iP60rAE21`EYv1|Iebs5SD`{cWs|m)Fi*y|2c`v8H%N@!rJZ`prHwNAJ>> z1a4;%BV@R#&*)f~{ZEMtm?xim6zg1)INxxtE6! z-B{kve5#Kiy0BctI35i$FhZK#^>hcrtHpzu@zZlmQasu-!%rnxXjFq)e8{(FuUUm; z`^SZzo?3iton`;PLnW?0)%p%fJ(qBATn}FC)w;a* zdhETSle<0dq^s6EH=Xcz4LMVh=F%AA=c!s!7v~pMW`DGpx56;-jfFyfQL}son^t~G zWdF!D_f2e}b<5RxdsByR z3lcXl#!NqcK_l8SXU%MV5f1X}OihCtQHwbhJKHQle6)}@Gtk1!FwGt~iwhyQDl9lE z(mVL@b?{;@`P|PFuVc8MZ8CVL+HzlHa978xb1mmqUe`{0@b$Ma$LhJHfrF-UBfzmBTvak%k1kz?CetSeTfW?xNN@QzIG{deDFEzJ5L(Frgj4}{M@sEL|r?;)~m(#OOB&`+2`GS8A=8XeV=SaWe$bceQY0I{zYH3;@-y{ zn|4}9=WhGBLCwuQEjsOe(f+f6@$OgJ26ZlnwOA%JcbgrF5;L=Datp2s@6=~+SXvMm zWv{imh2f=D%H6$RUv_<4lQpr*?ymFHuA)Y1t{YG%mbFQ;T$KPj|A6+p{Dt>Gk`@m= zQT9u*Xq;;^bGI0KGW0lUw-65qZ8%vPpL>rv-MLM?z;I$JzhyJw8-w|jXkHre%8 z@g37RRqxuTA>4C{Tydqxe`&dyK+cz5i?vKnjWHa(;fkex@!mGw-*=dVFSZEpD$v{) zU3%QKqwR!RQsS{k?Yo_C$4MX2Zud*)i5@?2V@c#q0_s2@_-ASn`5SdC%vDZ-8U(96Xv6H+dQ&-4E| zdi@T8c!pRy>Dbywm|!5x;vlwkF%oqc6Q_m0TM(Ww@K1$}TM?WI$49W~F~)k%{2spv zcGfc4H!Y^WOgR#iN*}6xALBDSw!eb&+b5x4`pMb)->oItE>A@o4Yta~d5d`U54Ns; z6DnrKKghbVF)H)q#(_?ysl+ff*@4D=X=#EgkH7U>iY8iYJNbQaczXiZrgwuKH#Wx0 zuF)N)wsI$0$OI0TOtog0&hlNPG(+v0X(^`n1oB448PVK&IDg7J#PczW_dt>l$2P~F z6*j4Yo;Yd~t@al5BjH@s;wp%@zUrfab+3p=h=!92t=9=d#2e#%pKcP5Fw{;8emg?w zA)1cIj1S}UtsfScFM}SNAS6_b`4eU6&G)HVHnX)0pJud)W+CsG&alE{{GyU< zrufpL@qp7IsmijP!B~y%Im3*?n7PWdy`^X2YJ(7X?EWI?n66q zHPK_ds`oB&GlT4e_{envGl4K@JX1|%U|Q5UjbV)6xHH?Ja$GPi`SW=>c5HFzX0X*Q6{L+)e;+KdHvD6A1a$>_UIZM_wcnZ^3{C2gRpL|Ak@Ii5zohbzKi*|2dY9N z)T7?)f~K!N!8hKUop*n2?|N`)9#q4gNXZ*Cmw3ECBmwTnP}|LD1YEiTYQa+n$7{m0qu#Gj`> z$8jEt14)Z#=l*b)t=>nE3*(4w-xvj9I9>L5#7#8sr|rhD*Zv`GG|=m}u%Kz-8@N6~ zU(#xRfIoyJ%<^4G_w9%CKA|3Khq~E20r7qyNr`#~^`!^1z_PdJG3?^2Sv_p*-bYj? zGL9bjsX^FEAPo3Uxf5!LE@mQg<<5qjy<{%jVX6LUTZ+MrZERcZGx&;xH>vi%mU}nN%$rV)$i8+s8Ia* z{^K?g1eyzUYF9%)(BSGlK814&K_{4K7ZfK{2GtNpkQf!b`f;e=9x7Bp?*_bdC}5{w zxIIm1gz1fwvA#-Z&&Pbc2f{ndO8IVho#TG~k*?zyc7X%wVI-mVEm4d>7+&_PfS^Sn z^!}Q@MtH<+&>Mfv?T*Oz69j`e!iX4b;s}L{jXhuDn~%a zs>lfJTrkJ3^+?x$`=rqPA3gUk0@aJ8Zgi^9dkj+}2EC=JVA!!|Ayq{54FU1znl@+gb-*sRZl>hCq`KTRiD2b1Q^EV#W0fMjAdYk0J*;gFuj6$&qmA}p9J&X3 zV6*w90`ZM}*{O6bKEY-7Y!rj*q&WpC3OQidiU|K=N;HP;-tMvRUvqyl#KnM}&V%F- z$O;|K(tcTk-5=2O8~lwQc-0 zb?%_^BODBe9WHmf{=ypFi96u@e{c}rtB1G=uL*=VPbSleyBU4ZUKGTCaUJe6(+&QU z86{vBAC}VGAUbpEYjl}I{NT1Y7IhZvf!F!W5oM@WNcSze@V^2G3S3?(l>v4U>QqG0 zz#T)#U;oPjW-ni+XuHjGG(7vRIBZap7A4EDrAFg!5I%YkuQ^ zD(c>gU4~1*KA!NZNwBv=99gN{%MO0s{AKI2#o-v%7P7gF4PN(U;X1G`<*R&m4Ip>O zyc1l1`7T&3VP&N!+*K-*!a^^|`qYKWN4y{!Qj2yx^o5#?T5osUw-jfIa;x*L1Gy}a z(F>wKRX$R~>m$gOu@~`qAazaZEidpU>e|c>uW^v;udsN5?kRqS2JTOBS>ova45WW$ zmiu#D-hJi{-cD|;zu^LRjr^kVz6)FznX6UX0kSTcy?vJhL>s~5U#)E6x&^T@E{8QB z!9yJuAUVb%2o;Qd@-LF$W02HoQJ5EAom{UA3-=7;a!`Qa2$s4UR9;Y zT#%>j6r$idgwMHeh$6x3YJ6+L;qzz@!eYah&cVsNNp24ho`a83x#}5GMaRX^w5oeU z!CHi_K6DHm1zFjw8MKOyhY{lVzS0+ZDIwm`7<`MR5Lk|1`{+TMHB?-ehbCyCv!KfP zyeFU7gg{sR#qVoyyo~>*HY*__yzgG~ODg={Yv`qtAXvy{_`IV@JYgr`zNs_|=vvia z*p^FzmGw%UvnHS`a_+aMq z!1R5ifquf0I=E8TIU>xi46)$-A`AUwVkPMM5VnggkHYonpH_);qtbeFD#KsS;mtvO zIigSaBXC|E>!y@Yh_*tHyUzu|A!+eLGr>3>20S{vZIo3Q=S_P%6etWf9H}{f57NJI zK(l)I!wd818wEbkO&`NfX7YHS0Ke1J#(B}8s+ka&u>t>A$siwhlA+_JR=Wua`h)Hy z%!J>@Krb&6wr1sToC?BA$?tiSgztCCwAN2xor9OU;=_^vJ)nqSbWbc~DG`YTr`Y`e zfs?AfRS{iB*TXDdP{@~qq1<$Sp#N}D^YKvs!T~iX;EZ$8na}NLP{D-XM00+Gdw4{m z3}Bci#Ex?dxt|}0?0Pte6l(!-ao;_G?>3N)c54V`+Ci+@)8 z3U7ILJMt7AABJyOjBWoH9_n8>p!ql$#DjwLLB~hwyKz4}4&Se(MG7+qe?4?Xpx0&} zh8=Fl&xrE_p&N!LPBa_8(<(|fIwoJPlo{dazZ2b$$Y;uq6`pT*|y z!6t2_dEQiW2dkoWi&fjE;^E=!mIh#k(`INM;k>wmU z!Ea>9?JnR)>RD7}Z;0>Pp9m%5JJAt-Ol(kkB3fVZ$NzaCw zaR#K3->Zy^b8u4Y3m2w4&%ufP(ZhfEut|zI_(S^I`MgMIFWCQudqKP>NZvNa|FRXo z4auTQ!uVf&6zO^}@#L2zW!q6YUg+2+s*KldI&Mnk z7i|cNvpKwDfAC|7cMRdiCd>|HOU%JbA%3lA1?E|rbMR4!H|jTE7Q#c#@*(}f0sUXN zmz&mN@EPgtNS5k|LC#5EQq&>}XGnHIGHRq*W_1Cd|qMXyYC9=m;B}<*;g{y2Mkpi?^Gr|{Q6d{ zu6hS>mUQ(y`f4|S9LhOXJiTu9gh}C^`FNM` z2a=FSOO6HBOG2%Fort90HA%>)MTZdH!@EoZI{2$Dt`idR_+CDQ|M2J(gW50)t~b<% zZOb~Sy@C@tI`%;A8OY4F@xWs`Z;amv&o|vnI-ib@AAf=gyxwyo>5FA79XDiim!j(C zO6MCoyOUNFc6Xv{-vY71gje6+?OUwWlAPN0{&33anWTaDohP|n+v77^_n-Gkm5Y4v zV(5%pxm@JX6NMAk8}yRpYa+DIwU4E2EMn3y8SuEWHMvNUWBkW;!+@}*;BzpA!#Qg2DM2R)W=C_3u9y;=0+Y|;;+U5HK-KFx?SMs zkvyD%nlW_#m{3*jP_1R~GnJ=bH}P-0%>R#*nLcRGM!o4B`0eQ>r?tHP)b=eF3F;^O zm$q2LDDdBIn*vyq9*xr%RxVxCdD}4RJpp@S1Iu2 zvLi@d)c9>b$B`6UbpZO&bhzIsW(!or93jTC|Az-jllqSrBmFe{N9E6Sz7WKpk`~J8 zuNh3=CzG_8XS2>x$U!l@F=w7n)kf8mG)<3xRSP*I!);yCz9`Ui3&GB<>8`KI0Z|w7 z6Dw~PeFf*~+BjEt+cK|LWhukP?`p2y05#m*!|HwOAWqbpsamgvTwSZC@NG53;_8Ie#jA@!s>m;2 z2RZ+y=knyWkZ;NlEIqv*Y`HX7Vn_pg{+g47#vbS;3e3cqPeAX0EZM{l_LYu99UG1}0`+Iu( z`|M2Q_1Tv)6!amy(!ITWdqkq|OQ+6fL$T{D9n4mJ$j<6M#HXVgf3>yDos?1hsoDjb#ExR`YFk(p<(^jr?H~Vr*zNK_ebQPuPolEsCUxnj%ohb-bIEDH~4Z@Pc~Y&=Z0mO zT4=c{#U`YX-L84v3-pW^jB^g^_RNo*DsB$P9QTC8KcU8I81{QgeiYB#zUPfi?oeCt zqFJ7g%JWd`ROBL_6Dhf~;O{r~Ae_s5DRI;Y&QK5|UTpw%_>~6;2O~?|h({s>HrpcL$TJ*+Z=>s_oqT?s!rq zZ?&ZQ9utj%$5r37>uqU?L**&P&MxKwmy0YM6+8>w`13DCviaB8&Ro&DRvLQCLLyV) z;fJW0)5QrpKFX!M+kPcD_}BTXCWz-ldZFDk$fkedJxG@z2jrU}iTF>%nlItZ&zHoO z+JaxCtBY)R09%Mt9+$2(B?=JNO>KU(hj@%hcq-^oGSQGJZCdK-DWWU0@hmD?W`nD)s{Cs=Cs|Q?}E9#nuUR@Jb-J<;X`^(G~Yc+amHosV_ z$glgcX!_~(-O^@JX@?%iAML(;BQ&?JQLn>kz%`-v)MahY(>B#r-$S}36jcBbA*SAvbCj&vA3{|*LS16E(quG7vAF!-wBdpKHd=1 zGceIf59lk>^pT{kjfPq$#CEjh<{sio!sp48Pos$^7|SN3pZ_9WV3L@MXu3!gW7M6# z(JDh2W!!}LF(!H5a}qt7whyVbb26KAcJ|tRDqtO?8NE^dc!XDHP4d(6cPhf$)n3ajZcf|qo=(7 zdOiow-+R0$`>=n=@%zuX>JEli9xQ#N&~YIucgy!`mZ1Y_nHt-aXXW zD)egK_3P#x*JNyUKV-0fTCtjH78QQ4!({VidxHDGM}ivW-fFhvow?>K-%6dFHnMI@ zsQU52mbcEE151vrY2A=q93Xx$vn}>^Qb5F>dmmdqIfngI$Zc%;F_qvVK3vZ+6LIC8 z*p-{Fpgv9){doiON1BT0>!KWpcU7ViSD`mZx*)nJ2mC*AP~;NMi5tHh;XZ_^Ir!hP z>X4)c7ee3RlRheX*OF*Mtes$MDIyYxJ14?gMFT&-o(`m)>9J0 zX9(*EgrP6vXNY~)!b1v9R5p3A;oyM-WTK!&1zYNdO9jVvr`}R^k9UV-+`{k1O zGoyuJ0sT9c{;+xPLHc5|`j_iti_ku*f{%B>35Fg$6^~%8U01rR4pAew?zH?YaIrL` zaQmumukangiOMQHStZ+p4l7#plNua@bJkRU-Tsp?X0aIced&x{8jI+<2B`Uxszr`I zIt2b5E24BCVtd@G`FIcEV`b0-M7~G-CqkMxAT9>1L6V$S2A|{XfaaUyn_C!(Y(&N} zkq$CZg?N5^ZT|%#1ECq=Aclsf-x5ADeEK{&^_=kt`-|plqdu(sk{orBLm5kaHf=8T z{r;Y3pGHW!)Q<(E-m|$OK0gJ72-c2n_kSviHaNYqv>J+$8t|0RJ@w=HG8=!koxwlc z)`W#WS|>6ju;YF7zSVL=lIOF+OXUlG@_0Cevn>7i>vjfLsI#Q{sL?%!uq@%2X|A5s z@H|oS2no)aAwubao+YM4ShlSa&dEeO+YG%+=%Ih%J^qqhci{Y9`vi6F2w<44`55KN z7;!Uk+o;fcEg~O*Fq+ZVLF6ZBj>L~#AZ#QMzAu=j5gsxybroV5ag0@`?G%>DG)1y| zbZ2~Q(dlJMk=HWPUJhWs=oIk}d(*6C^DZ$m&(^kKxs1!!0bEip@ zC#n2yFZL{-2&VM~Us$O$$tRW&zfxp+N^)aa9GkGhl+3ZzFhkn=DdWqFLk4LQ)16UK zLFGbF6_rN@u~FY*SmPx>PQ-73cphf?E;!nukMLhOi}OHuhd+B?5bp>1(MveL%Vsj? z({AXopO9RibV6^PhV(GP{7II$ouD}K`MUwW2ju(fiB$w|0--YxVqW zxgwlaaeF3^jeAW_W<7>2`Ld%eWCe!tJUlsu`2KC6vlf`PDc0}8F!E6+3Y!0K18)^F z3wSK4hhZWu(YI*L7^ZM2e3eibh88?W)vz7xdzA$aM{4!Hl{kmTRj2H$8jg7h$as3(fJnn3t@ zcjyPfoj~YGnqnfnCg!w2r%61-qW%~vXQnKEt_n{KTlhrwUN&f*Jxu9hFph^YK4$9{ z^!qvYFk6V$B!LUpO(2?+Zdu$y^Z#AY{ZW>=@vLXWFzC|{;ye%H*`d3Ip!?ls>0dMZ zyt^%QYOFq+@qHE^2fWh%n)mcn5*? zJy1hiF_I!XhrkXnKE4jn+j&W(2ekL#yT|ZNLK%V3Q8eXGT*&a@RWJ6AftU3Wn)~N! zVqX@0UUMTV7wlla>I9nmJBr@{3sTq)J<-S(UBfY-kB zzq!B3um9%$XHNXa332a%YMw;9@EpzmS4M&!1TSyIr*V|iu4QBk3|kuLq$+S5e{%Se ztKhajdocdY{RN???O>OE%$BH4@=KhSv6E6SsgpGz{4i7ZM0fC6k3jHAee8(A^QW zSk56mq{8R3ybw9&Z;xSYg&Q0$fjw~CR4+6P`)wCOx+{L`BV5hkHxEP=+6y9cAM`-I zyhHFM$d~pPa6HShK%000=#td;UEC&+fMLgUtUr+897f!hoTM^{m#G#h{GboFfeR%5 z7RV0LrVcn?MCK}!RK9kw3p;~uK3=ekqvu6=K=04UC!=`ab6RFjig3TfuukRUF$niC z|NLCgZB98I3}H{ee^yFEI1q$`=+F8=f;yY_N@Lj;C zHhTAY^Pqb&JuAh7Z*f1a>%s$eR2QaQ%Y72VUUeQ*;D)ZDb^PcMCq#j+cnw323=Het ztG}}wL>@qI7x0L}LcPTGdtV4qUMN8fS7eN=mPiKxmbtC94{vRjMX(;gux~e)DPx%8 zTb@PQ_@0#z(l1Mh!h&a3Hrv9t2Xpzbl-CAfM4+VjYZ@VO-G*SB%h5y_-u${eByNx#p@ zToR=2uiIvjO-Yc^&A@B$%wgFzc8&!3!BY2EBnhtBl00~y1fFZr@@+kd3p5+iXGMYt zec@pDLVl>njoDr=CPC&m2QBY$b$<6|gOGNzvWb8s?w zo5Xx&{s%rr$|b@Jm(RSWe4*N+t_YR!YMq0VS)CZ;^>q$DX2VrEZ4BN`e_s{^M`MOmk zsS6PO<#PmFtsyE(rISOPLI2du<&M4()u_4a`hB4)5<0xiKLF=tIkt-ua0;&y9qa?1 z(D6b-*1r1#y76iuJlPknf!Y$?>^nIJFZ2f|L{%u>=M6O-b<6GB-Xgdj9*^L9p!hcm zyF)cWe$v_I0#z5e{(GM@R0ov6$$mHG$+y%kP-$VaJTS&MveuJ`_+LH^QK~^c`0$7V z6^qB|H_4O;sH-O$hRJZRoZDW62z~=SNHr*sK!0WsrH(~#zTP)V$4M#XkpwS5^xMQr zs_4};~KZvSS<;P3$ z`6*THb&U5;IzJ92;OAYp`uTh~13f~{&{w2dPj zc{jLULW5H2!I0I3M%I)BLsX`vZwU>9Dw>v~{yGe2)vLJ78TOT~51N3tPVmn;c&TNH zLLmo1ZpeHU;sc)(RoD~=)w)nx)s?{8bNGUGyt(BKpHJP}zt`)=d|cFgJk;l}G>F8( zhdM%q;64XSwkFUB*xlfh2={_;Ku8Y=|50!K8&3vR@M&&N>RyOW}K9+OvW65jF!_4R4#t!VSi3Gb5*0rvL z<6yK~F1=w>|ASv?9$pOTL8$oY-5{t|gotmJ`qj_DMdibJX7^(uJk)1b8pQUn_XrO) z9|wf=fbcH}?||?hb;)F?gq$D_o;%M;+6(r0l$H0#Ir!ayT>gDVkj3^Skq8%*{>G23 z$)X6mLYKIdK}gO&U=Dul4_;~(H#T~-DdzS6z>odeH#Uo(L;J=4;G<|pPXG&{O z>geHMnMp4ZcyGihga_(dE&`b{HXh-CT1X-%Fw?jb2nRGD_cC7(NIs~cfRDR@@7TR( z-?a_0xlTT>!s#UtFZ}qD_2E7pBJuycz>Hyg$4OZh`~Jp{t@5H;`9N1FUMjpU5~^L{ z{?+SapnDRDQeGN=e-3VpaB+7maSncrHK;09j=pzII5Dp>T6~Tk%wFya4WQ%0MAlDw zMN}f5sQEY`v=8k6!v7#ycUB0W>1rccrAmc3=?(ebVawvg%}^JdeaO4~6nyqcMc&Wn zpa;>B=Zn=32Rmuz|7O}l$C0UN3+CH>qvNJ#_tAyOeu#%|LL_`cYkb8Vo~T5%9c7VUbG@p*2 zLbxfkmv1XCRoff>e_5)qSVYGh{20Q~t=u1*gyVtM8}3iKGY2pAhgV9ZFQ*vinVH3j zO}vwi>BKt37EfJ{4?_G%^Kn4`!oA#*5rx7aX+ycH$PfGp7Q}mkWZ@LP@iJBf;Xg9^ zXi$HI!a3a=+4?rZeYcb1%-pvK!!E{hFFXQ1Xp+VI{A>fASLrMV{~J@NGf!3uthfkW z%+Uh!8pn$mwp*Q&=pjw#-9mg@qO~ix;ZG;b;^-df+)0JFEc(LgYicyera->bYZC@i zu377oJ%{a9ysLf}GxalfW&WEDk)wmIt89j^Cwypsw6tQpFDH~ca|vHZug&dhvR1L1z zYlK5#7o5vuGiQ`0KSx{2as~*5$b% zoQHSXZ#>ycH%akxpf7%e`|sAum`hM420%&~qK z#7pm3&QQ%fI$p-}7|$*pC=A?o@#dYCrQ?UJUkWf^B-3$2r;@28FSDPj2Rmec_~-XN z-tVI79j^Pq{c!3T!SJG%`V)s;_=9P$E}nHu*yua*SoRdDn8B~3j!*mAg?BVR^;}GhN{LZw`pKESF<5kk>(s4l*Ii#qLJeGcbUw}lNyKkqTOc6-9lFJQ zX|qxs?rm;{U7#rRlK3nvCXOXu7~(|u<^Om=!jAoi6AE3)zJBXnI)4n3K}R?PHNju} z3%EWXo}uGqyr=p0>up6mJHMoCnrROmoV%Au3Ni^{ z-~4_p9Z7>O35Y8NXGN3M!GBT;A(lL3{KbvOl*ENGGElds++bCfgFY+yA#1<95S=ds z@uwt?f_^~P$&@92YG5A;LmcgU^ufojaIHU3`%^n)H~-_)J)da-t+LwspIQfeekg7+ zjepkRF}6?aqVxS6H>I;btY#{O99~%8bMPb4^Hoy~zXC8q$1(M`0g8%NYl_!7py~GH(%pJbAr$!4|RevwKvqYZpOJ z=O@(j2A2qK&HJ)G{RwHYChI$&5L~lcdX6Wft6&LOo ztne?l_;{%=<*wIOw_(SY7*Y3uxDW0F!CKC}*Y5l3d)>D`RL2-pdWqBgQj1Qk@$u=C z1>O4Dx*Kn)_fNbic`Xy547FIbwIz%v^)pw6Qr~mpp zmjVkfIC`9Y?HBdtu%}I1PeBITx^AP76XZhTEWgPgDG{j)z1!6q@i%86Z{}&tN(nu% z)$D#G#r)4f@0!Vta4^Dm%<+xbuSc7T9f*oV!AXl+JEA{R^wg3&jKnBrsp%be*@o-ld#LbI#J)LQs6q!{is*irmveZ*o zzvjXt1r0gtduP_%mo@0}_Sui#y=-$KSalnEbGbJ;GB-J*MmV}KAuw8@+93D&W|rXG z>WJg989lxm&MVwNv)x?|RxED4oxjeQer)MiwY}xaCBny*@L;%& zMdX?KMD5-e=N4xgM^)ssgsC<;3?JP4%uVNjUuyoQ=0el8;j5D?8-|=ZqkAGG?|%rj zNz@4Hzc-ZCloa6|eb?y-Z_2pS!Fq+dq^t>R`CI%ibhdWtudccCl~h=#lvH_ng6UA4 zltMZ5fMu4Fz6YSjJA827;(U+m`=G`>kcjJ^h$rvWfWE6h?8$Dxk6l(c4@UUTp>0qr zwT^XP%SUtxgej4xBZw)J#MGLnGKdFL&UD~QU4#=kh4Vrt&b(cL2oZt+V?dn02KYaG zMUn`FPm`azS8m z9$p1}uO&531dFGnx4Y=eZerWGsdcH@hJ=qUv(MT+j;Eo{X3vC@&!=p6K%V*RH{N{4 zD)m|amGHEKCL^uwZGl-H+96FEUkbPNDU{yz9(!86M53++>ZAji;@{2#F6=Fu=Xv1v z<_YjialJU_F*pZBL1IDWkPCN4iatDneXcD^lzt4($u?!7?WZ9gQbfl6?=&Fch{h!A z3kzf^;p^n3wjzW?=$K6Gyn%2Lc1@Oi%tI`YPvfjV90+e94y^mikt_n?&Hny1tTB8$ zn#+3qxvon~-5mHVB9OaEsfzJYmXTvqC7O` z!+!PN*m0+G?-uDUO7Sz!?K*2Kx8;V>nKzn|GwB-)E_WT@QIRI6=lS+r<#?*74%>&X zP21CI)eC#XdOdTNEWXp`Ii^tXZC>A^=Rr2?Zw;>RA;x;m3;OAjfB7CF`!7O`u=O== zg}+s$LQS}fVO9+`emU-k3CWjQh%CW+yy#6AB0?bGItY{N1_ud|1i}Did^e$nKzLg< za+8U~RNA6Ae3dPYI(+9x-(K#qC3nvA_qGv-we}vq`=fvsXKj|>)^|?C!n-OptWQ-+ zEo34*=ZA&dt4(39?Y#qv=?T9KwR@MY)XFqjmE4B=j-_*7;M2+5)wI(nm&M zGxS99=NP^X(DTNZ(8U^|MvU4)(`$g=7<6mi56gQ(5o-crG;?4IJ!J|MWtm2XV3CHSZ%i>5Va+qH-D2ZIH!Xk zv}tngbN_e!EYU_#b&w+efiaC zb2gPvs1D_f2uleNf=+cid(vY@3uL`riAU$}`!AqqdvJ^q16DtBBz9ED0=u6~HWpgl z5AmODJI{A`-orrAn9uYlZ{bN|UgEkRg4^1mcM5+-`_>Bh7}81!d?Ajap8XT&8;>K) z2`wWVzFx!hANrAzUP2Fn@IH2W8lf_+Xczo7iWsrR{(JvlhTU%#D0&wFYV)%g+NGSG z<3Tv#_y2))Ov)J_cd!;s<+Nyrm~?u}!vm_EvL!C4K&oO%2vWEmzl&Vv}bGW!yR z3t^u)`j>=c!f)eoTU~?S`-c|&=0W&G%-wg}*+VBwZgwZ)_x~#u!4Hz5of6pG81Xne z27;oC&&1vngmteA2u~5TK~Y=hum(Z+z5v@WiXc0RCfbC0(DbmsDhJ)9@j_K}Ca{kB z4Mopi4iv!e`ze5iZ6iJw^ZEv`+e3$)nEvHEkXYb#lwBcy?@ub3Y{vf9$R9n7{Y}ja z=Rfq%^m$@DkaxagS%@fs@Z{M{2eO=5sRptu(-ofgr{VdT1BmhkJ>Z9-B?-w-=lpOL zpMT*G*_@x-FxEX`PX9n;J?tAL*~@fw$ebUpDW0A4!#m;qV4EU21W%&ql8X@z^Ybv^ zIql>Ei>S~=2b2Z$QtMGPHax(W3h|Sr?cYUB!KPvP)2VQN&RF}cCwD=YIpyw1CZp(M zS?2>JSYPWGX9bcviuN3^&mq1<(P1fz;raFd;XB~^AH<_SAI_{ZOXl&w{IdEU&VLx} z{@#f3g5E}r+9Qj=53mi+RWek^)fFy@ zB#49C$`0R1fPzn)99)UeIk){Vdq2;6*o&eA0w%mT-vM7gu7AOO7qhE6{`Es=_-G&^ zNgzC)nLa`Ifbin{k4kudrt3UY*o_^_6WX&lzzr@(WvSpDb2=D#9;7*cd@urZBKnzi ztDDd1VdN`7e2^R6S;c?N>0u;Mu^TEzKomtEMVGgG>Qlfk>t#K1DVXB1hX)TC{Ox_f zeaE~GMm1zX5x3%b{R>PBSZAEn~gck{!(=}Q`m@!O%O*`!e`KUBfCxkhFDA5qk! zZ$lzq3Z|H?-_8f|7~8EM&xd_d?zp}(FT_!nx=uguA*dRAbSijWLwBXF$;YDr=Os<@b%4RXHYu- z$U3T%L>IG**fcb%y&s@It$z8r5QuJCgSt@2TCh*GvqS9RRLAQlgeSu5i8$#{@U~!C z+O7zQPC?e()1i)FnF@JBVKst;-8VzE;ro8>iwMQC=49!MP(Xd!*s-io9tZxM zc7Z1&#HaBf>HY#ghLImtU4h0uP2xnDmYOHP3%BqNf9r_zyZT_)#>D?MDcd z&1me+uP^9^P)At3KS6&EbyQE68XYR2sPqm8jF}d-_GPRf{EoGQoa1&$+Ay)bBBtUy1o|Vl>um?idw0@)v zfUR3UlM3G_)E;M%n!4Z*q4!$@Q^C(dTHD2wPhvcxeZP{kVEx+v9!vxd!D;TgR z@#w2H3@5PutzGnT@C)a&e)?|k-|YoISiR?y*MlsrV?$+7n0sqoA~Qa4JIAxj8}*5@U2!TSZhM6me_ z^vfR>$H2bOPmYGg!22*D6U56;j0lyY=;k{EABDi@n?t{M3IURAUenWnRjA32-`x^| ziYhtbUmg&ygM$0v=@lAOGJ#tmYt#5-^p-&ue@sH10S~me$k*JUH(hy_D(eg9V|g4c zdn3fH+$_Cd6V#@{c5-{tUx0N|x|a^UuCT{ijtoF=5gy}XS?U;DHd-9fBVD~!0Ios&hgIg*rRSkt90P zD;y7qIrcw%s6Tw5{}&Gkx41v<4+=u1648yKZtA?D+VFg)FG;%g5bp;3^ZrJ!3Pcqx45VN$7cFZK@C0=FX?7<_r8V;e1%{uZb%nfSFrZdxu3%py*cn z&$S|eL0cXFI5zc>U$`!eS zqB-t3?*-=p&D%fzsMlv;pUH-*CC-|2MhS4-iB}-qMjEQR3#3){a9+%!DVCm4br_aY zIemH;cvJuK$3*o-_46P;M9oz$7H&=$$^|E(s6)07mK5h zXS;LP{KXT~ePWRfU6hE)m&Mt9I4|s9KGeTFpr;$e;JtT5{1^WRxAm`tq2t@K_Vzwu zOyTlLt&R}n_++R`5}i3GmEb+xjfqVb*!^_@NzvYJL08HOp_q6=%$e?|o)2JI;7#Fr zTmQo!!+CV5aZCZkgII;5NFm^)n82p-f@cf7v3dSn;hF9E5r6sN&pf%`^W$drio@^P zY0%Fn4$r;&D$WDK=Yiq#uyDT1{Qxn*;KJ>9zKeE(-=5$W*FUM57Ci#-QgivH2vnfC zVpThY;S6FppWMY!CQpEF_X?3@3h(K&Mj+A}@_@$<(hH~H1$`-;KV>#Sv)f2sn9HY; z$+(kf|9|kua30-h3%x>YuHL1frotD0&FA~WC;UBkZ?;eLW8L|@d(#)h1lta8J3CF1 za30kwEbTXx$o%=Cm}7qZe|SLu@?LPh%e61!a0ZL_TvieX+}QIC*FCw=B?g$ZOS4k_ zcO0FeiUP(LaFq**z%y@!+9I8eeM|;$Dt;61n63#{WANJy90ifV#0{%i&51$SeCE;P$|2ai{_I znC@hGll*eBfhUV|`t;Q| zWyKW~d^Xh)D%HqU>o(W@dQ~`!{X>EN>F3L`8ag-VPJIr@?|WjQW&1;|DE!U~RrV3$ z-rURDvNO|Rr7Aez1=lyh=iKZ&DhYdc#Bt97NecK$yvRcmo~bl`XS4)h;XyOp;{1;s z7jftii;A$=U^QV#F7SiW^Lci!0sKq($ooSV-eYqHUx|U;0&i$jAnBsxQxpx2r3iau zF7SqM-6fnq^;?H*)?fOZMA1I3!BN$|_2EUduNgW={qzfL-zA!;q#Nawy^^ui*?&CK zwRO4W)J2K3yyvUUCYwyNOCG0NGQYXMt*Xw=Q2x`VotziU*VGPt*mw8XBgM5-f=3VG zd>35bq~NF&_Q{O0TwN*16Xox+)1|PSA>^#G%yAo;#^TMl2I0eNBGQf7ldpPkH4=@fO!HP4Mdyf?j+?AfUQwj;c3<*m@G&lhjB zGUksWK5hxjbzc;(TE8SXKK^=KZmsb~^7e`Zq`KJOq1-e%sWQtayXIC}?}-~8&CROW zQzh^0MZ4DQlF6Mg+Wdp{aBWWYw#I2{f^bHg} zU5DE>W{Us=DrP0LjId8UEk-9xuObgPpwBIpVAW>;?j1H@?H5@JXUmUmpSU&lsX_LB znbQmUDf{n%f1rjhx$~PJviA)5=g6?A$+K}D~Y~3xd=ydrxcV^`3 zy`HuYEmF6dzV;Wa>rGzlu^~wG(uLT;h|0*Y(;s5Qvs7Xoj=4m+9%xCFIk+<1{=7+Q z_U@|S!u#8@4rcXvKI_mgdK2kn!QQ*Stk02c_4CP3RfgJj3eY#y_-Sw`K;3ZV%PP4g z5FgcjE92$i^(E;gGfQAEFI&aiL7q=soY~5(}r87t^2h=&2wjfiS?hE$(7nZ%$W)wa5 zn5{@0@UzmK{kzP8;k@!`o<5a#-QN%G6P#IB`O?0GM{dTX`O)}p7Y%XiPjv@&T-@-( z`P@Z;Z8ENYKD$ojXIX{}2BZ5`)08$xMAh%oPbu835?`=QB=PI1sm9vwR(__xy3`yZTV0oqjcM|L|R; zdd;y3z8$y@jAWeMD%jf*+=}bDLyfyTZCvYA5ptA?dB*07C6dFEIJ^Iv31Yy)^0TRS z9TLdujPpa#jBBTnZyb*ncr&$y*u48Om#a!_*XR|Wn$LUk^2tlQx^wm(gS=9)Y2PVT zIcx0=ci768tTHzGQf+m3r=g7P-BVll=QwWh^f^S?s};0& z&dHy7KT>7x5a;Dva4R|B1z$g^BDuyFdbLBZaf|a{#G->Cr|mp8vj3bA;zb}#AH05u zfFir`xgawdH#HCk=GQHS)V(BmosgT+H5im4@l@av?bRvCOA6nK+IA5gtsC4_vT!gPRaB;UsTyNnmKI4 zoqPJN;m#dvkrf~s)>E`%dk>xUf<&n&*Oji9u({|ONYd9D-jS0SXlB6=fQ|x zjoO9vC8P4^0}vMiVUqop6=H}4P1)ToL}Hnlrk>tKk$7gSd0xol2X7Eh7Pb+=2Te!- zf$-(@{c|iLEaP3y_jx!&$V@Lz-wz{Zik@#cd;gR$MLy%E@Vyg@-B$HnxPNH%EaAcxZ?-f=b_8lv1|FV_6ZMWd zHCb(wDDUEW{PN>#sm7-7OL^Xg<$h7$zK1f1>{%_nGLQ4;mE*_%pL~x$x+mhhQlN+2 zGl5&Np`_1{8>WO$V6|kX9nOE4sJuIl#4`y^KD_@C@n;H{mTuHQl$q3VUdY(#WR{*lQPmxAiNKKQqF43#`Egnb7n3zfx_m_=NbZ@V!n6QK3mTCsOVh1wpl?YT2t9a_Nyt!ev8|ix<0kGd8Tea7MrXRDqS`+EUF~mjjaX`W`sn z!+#g1h%YzK_rR?*HiLVIjA(8V#6i9(&VymJltAy3Scdyy^7dl_!bzx}ENU`F^pUfZ zJD!|ET$zNX=&h*;15xR>Zbgv;1j47o?K8+Uf$+wtt;94vGuLOb}Rmzk1v?jGF{yhPCOl67w0$bpVwr!!6qcz zd1Zs7yGvB7qr;jWdZclG53KdJl^gedp$L&1Nqvj~qhs)!950T&_ugn|MbLLd)iNRjgsWIU&OhL({iuA^_J6h5KGE(k^BKq!NvwkYX94@e7vX*w(|d6Pi;L0PSIOA@-dOsF3hedBi{2rG z0C6z$-2$m15MI`OUCqQqAUxLp7Rj2+!?-E%&5To0II)88S%%L@@zDOdFToVIbw;^o zzuF2FSp7&|{rQU|s|y-(`qLgc8{Y(Hm7Y;W{*4g^0p0N{#iRYzvp-Cl_{WK@`t*L# zZ)%gLYFqbMdUf;R~`8=VltecYX>b8{e-zYji!o| z7UTQ|T-QQ~wH|uir2RsK+t8mTrQ>`LhW(9C&@(yH&s~G{$EeeZwb1)UnNv$@v7U0z z{C)RC$63S(*1fO06LAKATZJb^ekJ<>pcbI@rpXonaR2utM(0Ny4^as&f!$^jjdJ26-)Dc|o zLvZuM_h1WgOVhaz^;FOW@{M|^sok#6`$6Di0AfoZ44e1)V*H2i`$s<#01rP{O!6WW zLPm?l*ky#3K)5F~%EXk#^6Wy$*jhG(YFD~q!i~#u$-VrgQ*ZgKv>j3+rppCbOm9WD zO>>cT?C*Q?Ozou9x|x|bOmxwH`rB*#7$0LS55FsJKRza0m6Rr=Jz1*86&t~boIr=r6mqlD<`)4OtBMhFV#&o&%43eBapqTII|g4=0}QMBW9&{`UF^rJSx?1E!c ziRfr#z2N@u<0u*-hU+@eM&A2@CD5$jKrg(Jg<927jG_SqDsP)5iu(Mbay`!iJ0$S# z3G|4z-ShYUcfZ}m^gzBn8oq)EKt6ahVTI5M%i7px-XiOnOCG$PHYHpmEV^VlGtIPv z^BgwGl}${Pm47}x%+>6{Qh5Ga_)2QnaUw^_ugF$ zX%uBh$N38GL{T;F@bB2%3X8?TpJ`iQm)tgv(X0T)N;fjo#G%@e4I)u>ph~{wJ4|Ip z(Z+{9%@p|kZv(t%DbU$XW_z{a`VQ24qlvIy51i*frGJ9gzABWMPjC*r6mZ=Ooc}>Q z-T}YKf`s4u|Cs1+!RBAQIW*JsMcM<-5|8I0|&JR2qCci)bFAMuAC>7cx2vx7R zOGG^lqF0+K$c^fcqLw^<$LH_6q1xHp79c@^Q(xHVV}Q-EIIiQNH-F#%N9SN(-#`dO zhZ^l>=J^hPEP3@9^dT-*q@sQ%c&$O&*&76Q8L8ki)ESP_M6M4qC~CS4zwiF4H`s;U z_qGd+pF?B_ghzX3*ANDn)?9&(lZlh_OgVI7%o~a7_`QE(!Q6efbaVuY^0=KIvHMvrtbP$MeTdse_H+E&AbrqB=>qA3hx%%0ZSc+gCfi=Z{N{@pFFAH7Ni8-~TTj zp1c2N!RKL698pwO#j}i@f})zQUH6cogR=;9`9+58=Q-;VKo$d(+wJ^}1iQLrxw8go zC5jg9vri^*qv)wjyG!_eKM{VuVV$`HKb*^UUy~R7&>4U1HSy+ys$f9ZkeBZr_~XR- zGMw*#>woa>{xyhB=p=Au%mR)o|M=Grxc)<3*vv76m1#YG-@g;$l0}MqWHUq=YnIUJ zaLCFWMsoI;E)w{`(+%R3n@!c-I%;ML{Ah=_B3ml*T2{b)pM-zUH)L`uEmWtG5*ArSfl5> zqbPb`T-SgX@a6eAt)BULC-6Q!aq8(@`%tvcRmF-E;-oK6$rRVWU`<2O30EO8oCosc z#l$_rrv)95>NZpliDC=?mj{vvmN}WYJpkgEIi47A2m8SyNj{_s{^8J;lV5xi{9&!k zE-W*rACpW}oa2SG@nHP0BF%IjOyOL3wII(;z(?b?TQJ=Y6DDmxo@3yLrEA%EAiKF7 zTJwOr3;TI=^Z;z3bgZxS0W_dk#Xj|ff2VS$ zw)y;k*Pc0{o)0jaH|+Tktjn%RPl#rUV{wuvtd3%HD8mzKd5U>?t|y!t%7#-so{$|V z>#Hc9X7Ii{ugti92b)*d?+UdYIlKOYD`XSW^QH(VU$D(DESxZudC+y(NdYYJtEwIB z28nCf-wv`73I21u0Tw)CmpN8J%7fR`;ngH~Mu)EcMI21d7_c z{NN;T0BmX7QIZsj+Cz5MPvBX#nibB7Bj6g;TCy4fPi%`&RJfi}<_)=qc2izAgmZx> zBN(Bf5^lS|j}c6>xE)>!_D}*bLjJ#bGXKMmF+b%N1n5aKt~wP2yG2`9djQi;rD@zR z2m&;qDL+dOg5HRl+WFmIP6%|fIpwW;54I*-5^S4_xK%|YP zxb8`}6>U8>ne1%|4e~?Kw)XQ>cxHd*Ru(E$GJf}-E+WCnb_6st4(85QgD6!#MTB#R zq6)tR>TMzGNTTG=?wJ0|SsHU7R6BxxOBRP?eh6I|5pD=JdhJ*^oL;(=aefq_09`9O zG+K7SA9SOP@@U9Of@kttBOvPv9xt+rfPED_csMTtvMg=*2t*uHZILZC{ZeY$or zjb;wwKv943^9M+KKFA?IPc*}J{b_p1yI{GjXP5f&|2MyXm19wvf`e=HCtuu z-jXcq4ErV3Nh$Vfgmp0sw?q-a5|_P?g40E(s-;H3p3p_t^+iFIMPFp*5>*NIV~kzw zTCnR=+M^*3=o_-5qT!s;O$ytiVXp*B_cupCEl1ZZe-;h#D7dRKI~>qMFt_GzI6SLh z>cd;%P$klyzt|H3u}oXkT^|JJff_!v)9)F+eq0X+*TKPgKp)5G;In9+c^=R^!BFTY z3~)UhTo2}{01f->cHV*?tj}^MsX?{A4&gs&0@bcYfB>^4Jdbh^;5$^g3K`^=?vTAD z2C0*Q5a)Dmxph(4I%8mONqFERGKwtD=ChGKGIzhNTkjrFB*bvT(8r5Y$MvAk* z`B3;AD4Y-VFAoUUKf(22aDOygP|l*L_Y%O4V6Mg$aEA1a`1hIs8tVuVr!1i=UA;}9 z$`;~wIWxweN6{r8sp`HE7s8JOr?FYs^ZYR%)!Xrql^7d!QsZmEZn9h){{`&U@VEr% z3K#`RD-yghU8U^)ge?pDO7u^q)v?-t=_uhmF6M5=R^G$4+x)&^)C;oxmpn3BQmt%xghu}Qtpv170zTJ?1P6O7flKN-}E70*LsLY zqt`?&GdRENECr6+JpEt(m^_2FD_9NIW5ckCH~x!1hV$s?#;23O_d;TJyOQA?2`!JY zPWJy>Z>r!{Lcw4BIh;55uOD!J7}IER6!$DU1F#|SCC-P!b&+sAq_${bs4O$~{L2Gs z%wPaMBtFM=U~r4`U~Z8Gxd2a~JMb3cA}K+(wbAEmT^|NjT>$?U<4f4Q0%EVFJyd&n zBx?ugqE_dSZ@B@Es*tG)zK~Dk#09@ZZpHMRM8}f=gM}`sw52@zi${0Yf-4pFQK%(& zO{(W#{4tzI_kM43>X`-J9L^JC1h+8aA#c(zeqxR>$LFNY^P%*F0sk_`aURfX9udg> z*`ELE-~7w}!RXN3Nr51QoE5xX;1HiY7rWjgrnCfVS?9G%5aBkdI4W+}g z3;P+FWx%?G!yHd$K->r?Mk-{$xe(4s&&)Xc7k}=}$sMV?|KiJ0T78oM0~z*%uJJCo zP880E!snymJfOzvIX#b~|HXH?;UEm>C({eJHB@1!xH3knQEbvxfR zV)Q4;|HU6;(^Sd=%ogD@YsiACPejPSDl2h;NB5gQH^V8SeatyScf3~gRZVrK-58U& z%d_{XJ4T;K4D@lN7xhMq>rIB_mAw5dCNXQ2Z}n12YzL~b^DNH)!F68#<-1g;i2^3) zE8@B*75yR*gE=Cnwut0|zYgH`aDp&&!fAkCY2PrtRfvrNuCpqzPeH@HZrac_`Yq<; z*M<7f>luHDvEBl2$U%anVjs4^pTc=$Dsh4@A^~@W$A!nYJpGG5hV$rZ9LjSr70&vI zzMP|@M$$jCTefucnJS(u6-oW^ty`Jva!qo>*HLBdCl{00znoH)`X-th^?E>QaKJAo z`l+1)GO~F4hI{=|oRj0b`fz<0ocD6JRvhx??wu!oio@O%_29NlTkIEDwNf2y^6idm z`-{aSz|s#oi$bo?H{Rtd0%sr#&TrNWW^0V4o>aj4&0OKZy+~Y z^4e-cmlWv5?_&(O?u!!dT0nkq`$>|shxOU+py+!-mA<~1=Cu)GY?U=VdXwb8{ITh6 zqVG&~ayJiMS~42gw6*vPqRyVVHqGQcw^r_fHA#tYw(4BFFdi@4c}sU)V?_MDwomJl z-j%1sHWD;zJ`=J|-nyjvxvy$lfAxtaYsTIbEk5HVvG3QmlD9bDe#gC@#S5c4=|I?xO9u-8vx(n71AFGj}i3X`bT?{GgO0oW=^GaCVk*9aI6FPi*Ek zSqZTgvzB*C*JFV<6nuqPV-d8#8^U#$aQ@V99@%K6oUKe!PV%>(YUzd_w-k3vX!rR# zrL%O17*3~TBzd&VnmH8n#a?~lX?C%~Z_~ZT9VVOZp$VP!V;g2$+c&q?YOm*iCzwgD zdc0Pwci(n}W4D(xMk9)oi#JQl&Q6x!DUg>0>@5||MI@mHDmBV>kQhhNgFA4Wc}oIf zwd54e_xRT)Z=9Py2;JFE7UUNvbo;r&Y=<$auocam0(8YaBk8w@0n4wXyBJzB8`rqPKNh2^e;W z@~;i87l*S@Jou|)R{(OC{mcR{W@itpF#~c?!56lJ;t&rz9XD37)}A~U`eXc#-gSLl|2~Ox?{(W( zZMU-xa;uEKeP$_=NoZZIIYK=A-LFu#{})T;7uRcxpkJzF#`zu2ucV>YJHzb6CJk71 zk`=dlC#9iRIXSImDGfF7$)D;on7+;lf2qZCkdF_PPCJ%-M4q$iqv(ENrW08AU$Tzb zoc|Iw%a7$S6>5=^FxK@9z6Jf1lHKh3QW<~Q^PKCJj*n^VIL;flD&^z%t%vDG24n3C zncRzI&2~2GrIe}L*;d?cPHZ-zI457#iT&Xc=3ZPG9>p4x7;vUsDk3}WM2P;O=V8l= zS;9m1Y6WjQUAL)fXLO)p-Oa@PSQhN<*oI>wXr^ZXeTmIqYj-pSIh++}i6o!WaF=t64lPgr(6 zm3^c`ysJ2VFn>8CoRqI98`KXwGSxb6#XC3?&O0}iT6h+9GLvu`(UMSESKcPXF^JUMm^X(13M z<1R8I)=1~n<4eLw9JA5%=1XUhZ03nsq`C_^z^eK4;+3UH3EK+P=&~DfjNNhCgR>d6OFoT36TQ(nNiZ+ZEO%J(f8`m7N zImPNhW%3W_*PANa7`fjJn}XxMxb99;c5ys&M|R>sSjEhpBgrsjYBu%lr~MXdj%;DN>e z@;xLHLI4-{YvNYCWn&(!TS8nY)CTh84cv+aL_iO@Gg$aW4D^DTw{RZFcw{XXqCwD~ z$h+|cp%Kw9J0^#Mdy62oB zJU^O@Z+a0$1x@ZgyLm#0D0Td5PhEh_qGjjLOwDB@O^N?X5Z%EJ07dc_E)lpB{<$Gb-6Pg_1%2g zevQ`NWY)DEyHvlt%dwLi%PpE%wfl&KL{<-`zxZD~k9lj60QKXJY21od#z79u9~Blz zf*v7l2hM-M=c3?qK_<@Ce@7ya@yXVix{!2fLmIg@M&Q|N6?F@D`KV8*# zt2kuPP_-hn)h}8>UFrny=gib#S@T26W5~834}*mo(pgp^Lp0Zc^=E}DI|8`Ny|6t zUfH*0%bzNWjjrS`?0mv2zf7+*Gogv3GHw2Nlh>mwnr|F!y-(D)8@=;b?r`VMu&amv zdb?A1PQ^_7`dD4NOV~m8-DRqD=j+MgfIx$bcRt)cys=s5Y2E2o?v3Lsq^^Gaq!9B$ z`qg>K5hN`|B=+|@dtgO=DC6MUl^-O zAz#Ejq}@3xhN2XXBPih_4n5ZZ;eR)@%@QQ8n4A$9m#vidMPTxAkaqm~~_j$)KUBE98d%H$8_Z%v(kLcCX8P z%6W|B`$#*ZW%n%?zmC<8&j#DZ0z{UvHt>9`2(=aOx=R@rj;$6FyZ-5yc4Cjv{)+=d#zFN zmv-1W89v;_jW_`wvb>u`c0(MTdB27U{L<{*b&*MsK)7?V>pN>RTiI3myJH+>q~KE# zA6D}q;%>$JK6H@;mCt3}@8+WKT9+Ch^xji!VnajV;M*D*SKCzkCvQG2b#_^y+y1&l zRogdTeN)E`ldQn6t4?*W`X>6Mvm3X{wi@?hZ;IU%Vm*y;AAA+5$MOBlwl68{?UWZKZ+kCuN6Lm|hkakp|7taR z0#ENQ@+N~l!8+e0=uzfhoi=?vC_H0#z_9r9St(7o2g-w=O5`mA9xtB#?5QIb*s)mS z(<>Ky{|uS-FC{Vk{_@fzUpMWH^Svsm)oXnArO$v^;t$#bBkxIJZgK^20uU)xJS%y1&-} zamPUcQITL_p_M~HYP>;G48kzY@>Ae(y4i?WNJ_w2LGRI(*}=Y9G`4ZiGQ`t?sylhU zPS$;z!a2LHgUvOR{Q1}Iu?Dvqs`O|X^m_hO;crkA`)X67x@jotB~FQW>j;)ie$ktk*G$Pl=lApX{n04;(7>ULv>rv@Y_Wfe-H%SrSYIHoorJ#I z#g)8j2>M5t_47Q3{2pv3Hv`wZ5HNfLJ)t#Gz@P(aVrzE3`>l~Ex?cWY{zKQBk$kL9 zYB@BKMwo$f5IU|(7$6X;hNqJW-GrG#)hNnD;(VFA7Dd^5Bx<&ALqTCl( z<@tHd-FJ8Yd;h;``P{v?rA+YL{Xa7Wx+CEoo+t^PO2xqG8tEE}nrwIMBNd>icbB6i z$p=F_2RjnH&rT8hLjnQN6$x6O70|}i1+Dt{U!Z97x($o@FQe#NIg7^3)I2J5~CBU ze)}OJ0^&hcG&T_4pMB3F7B}d;IZr6QwB0htgK)*~|5x<=_JfSx@B4r1+qwJyEaDJ~ z$}F;sBVsoLYb{<8p~E#sE$oO8z3x)xSBSAF8rEm7g7G@GY&P+lpLg-+zMt*Fe#iy;{vY&`tF$S(AX>mw#(kcg1xcaJ~bsd%-P(S=D~_nQ8EY%x64Lv}KPY z2xB1*=I4I=iGwW2Hq1%H+}LjL!(#HSjS$x?t+YN*cpkQHi3?8F5Eo-h@{ItkxLH-5 zHCBKh*fifPE1sJVq9uBH?tHu#U`J8GyO!^XfLe>R&DImeQFKkXX%UeHqLkT`!v76L zT@P&7%@6M%x@rT3AF@Ewq+t@DA&PFV(0jqR1iC2=z4g4X4^=YS&v~HRzVTpf2oIdg zhMjALxgpBi8r7S)N>TKStV-m+dPDcl-buL?FqB3M{9_Q6(^jeJQZQ;9xqS`0c^YB3zXj*1a$=eGk=cOyi`y54sW7i$$g|Elk zuQTR_b>>9qyyAgsxHwwVg9pBT`oP*xJR%SmvKm{t0Uhrcs~K|DqUaNAm0>P8Kb=BK zCosj#FUJ&IIpBT!KFh1I1J3koN-x3nFPNd)8fNgt;`%uF`tkGdFaHDg2d)F+!8LbI zA}r3sYYFmRC8$nW9?~vKWAoP9B$8-=2OO*A$QaLq%X0ZIPCzBnUd04XI5%QD6jiwZ zCsvfnOs(7B{^nG>pF(`Ka*PVl4SHzjFKKsBG_r6)LHyAgR%8LYPdv9$%L1GF zOHdtuL=~#TH1uesti*`>>*o_OtWs=!!8MwZrf}FwY$LnLKT}sVE66L zx50jH_W@m-RIodbPT0Wd7AQDwZG*9z>gsxJ$%+pbAca2-gBPA4Qe{__S#LZ@Ba@z%%j)KoZu9Z$RD5B zy#mWV)?{}K=fO;Ik^zxiGKM~rI{;zV_qLO7L*4Y`iv<~w*KOB(E%JV_!f!51m4;JWk8z0 zf^W$`$v@oz-6^-1NP8E8ZBTvVeFM{L(ca_z8BW<-RTLnE=B8Fsi*vcAIPas&0R~t#&oG+y8EQM z?`}{cqNGbxVva9n6R?4L?o(r?6o@&m+I~4o0$A;T^6OJRB0T;IkE9dCPU0P*lMQ!!s0>oD`6?0-uSzBW-sS zhUcsne(4RULycH=$*&b`?8*VZK}^R+KM>Qgp{+1QgW&tA$HO1`1FBFf6A$@gYI|3* zq64JBUfrn|um~*2zB@jj{_?}*Il2#~GBsFJ?}PEDR@EzbVt!S8uIT~Q5;^Mqc~@8) z*?*Ygx(L_Bne3uKh3Pek>*4frQg4D?-+hS+vEqOK9S3y}*e(C^fN&j@=0OU)hX-lF z59R|LBC?QmHKcfkG~s7dXZfu3AXXF|An!x=mTD7tVGF24*Pxv8247M)%EkIY^+yv` zx)=n%gC?`ODo7dQGa1_l1z@}$Tk9Y=H#F-QosCdk&>WKsH%h?IUCZSU0Q93)7rhAp z)T34$KJAaiNBQYEfABwb|JC>Yu>X`#4+%a{HBw%`)bim4E79}P1F|oLI63NJhU)_T z7a!{X#RJ0q@N9?zXVyDtfgfcP&Aw53C5q}6@_f?NfovYYXQcNMs@+z8#1N|ZrJTf# zW)lz}i^ys&>;BSL5?t&SH~{vcs&9zWg1!>%wYh7^Hn0OBtRX`SI!iRS%nuu(TBNz} zO4Lw&Lp+>7Z6c3lumg8n)O=K=l8 zd%<}?xIdasQ{n4=x)18faE9H%&rT-n{?gKbrI&b=G~Q!6F}yo;0#S5r0pF-0)LJV( z@t-qEUf_?3rI3HPABE?t777f;_*!=qCNaJLc^+Mo(VFmVuo*TP;T2%_MHWO5F}_?% zeyH*Sk8Yknhx5g7zMN`PXAtBuYVy0S{;+mx=-5)f`dKYO!1AzSoDYTbpyqi%jdZ}p z7;BvOg7biI{>y_pL8#0_$8q~Gla>p9;j9~=!kPDl{rB9-c1ax0yG1c~sv6*gi45;n z9r$+x4!$*d#S6SCH9i3jOE}j{c9P;8ptq9{r<(X-JTG^#cVV;Gyffv>aM*9Ukd|1~ z=D&DjYJp7A&`r?S#jS}}!FY39Z02}#WqbJ}*8SxNoGXj^kdQhPBrg^rdkAl-?%dsAcv7j||rz z!}(+MON+&0;O7~EYxl%Mj;A-7-^AvHFw%T#6U1@-v7den-@MA$hOspwx~1KT$A|Wb zt5;7(e;oKKvA=OPGI-#y)UMAfH!bd6|L0%c z3(j}J^-geGv0n(jo>F$oUkLn?qFJsYlmdQxb@%}T_B0OgJNXL}ffKsl=w0l#*vu6_ z87_V$sKLA$+<|IxxpyRx7%lh z;fG%lC)#W)Wl%5lTXUyJ@+XL%F;Ou5I_T>o!K4df&mI?vhq{11>a05SpZxTz{j*CNl$EL7b zOFaO;3~`*12TTcD!^Nru`Q1;6r)F))0&mD+fu}*ZWPkW$)AZ{JzhaCP&dK-gSVP(T5~kt>%g_E_WFnQwT)=eD!v4NemS8XTK^zqeM^hh z*H=5k!ybyS+4inH_S22mD-M5k-Yj_W=aQPCm02C9^2F~=H5XRnd>5SOQZy|F@ldFY z+rqV?Pz!Ev%P$sf1e=N5ZCs*q;HRXma>9U7>9IdoXRSaw*ufv^KbdDq&?lr+uuh3U zj!m{_HVh&p_%n&0?EH6O-|K=(xVgwrO#|zv6@Gn&MEy z7uRI&5{H7bXg_XK9*bkT=0|bf2W}JPMF4NN>P+3(hA=6zLB7u^VYcRnZggug^E3(a zLUsX5ISuOJObfOn;&BUn8Js_qz{_<^B?sen@|3UTfw*brW75r;UF*F^z}Mnk?<%_| zqDn3eU8~IRDsgyOzIbeMLXRudvQf`G%5_)h-upXj&0}SQL~pKf;LF?V*HZKU5%%73 zHU8oM_b^!7bSEvro^UCg#__klL*UmO9i6owq+q>A z*>PO)Uh*#3=_ih%`oHY4d+tZJ0nwh!{zn(HPl#B|1Dtj5Vv;)zcyG=U(mZqM&m5U- z0{J*LizuUwa#R7nzH=StrzJ`Y&Rc!BzvzDYpp?+d>a(4BerR=utiS7$zVp#OTHC$V zTkFC`tpb;cH2w@-?pGWZdi8SHc$`$&Oa&6AwDV*{dGUDg)*~TNkwu>Z<;zS~judwK zFKWzQYkNr5GqJa0Q$Pl4m+|7%?y2NXqlS;K57JhAQP!OgI;9`DO$NBlnO+=yEo9PB z^eo9cQyQCd@!3XN8hXUj@n)zDaNEpRqiF? z3bwAFj6!W}k$BFtlS3%Opsx4(78&^- z3-8vrO<6iG>|Ztnt$%9s-L<~zWc+2{RbKfQ1Y&2RzXd%$VHH!qc_dunNWjXu+_lS% z4lts(p4q!fXwSFE$g9a~OVTcc+`XHyu_7_v{l_zbj8)+UmQ!Pzhg$5Tmt=k&JyWRD zwCD|rmIZE$%8p151jL*ZEQz)?_93}?M(@Lud=_JK(B_*E;xopPYZ$+R|(IcA$BklaQ?F-mYkZ2TgH^Y5>Y9=#s_4ak^L<`Ta zyqG+;=455anj;CjSM@cICborH2eP+U>FX0G3ExbAdX#e@-md7y66zvQK%( zc?k0e@?~=wnXm(3U9apX=n_l5pQ*AW1d@g( zw^XnQM-k+0b7>*F9VPg2?YSL15(0Xiw@(Z3&&&AVcu^QG)2^ye{p7HhMwZ^lh5iGJ z%ylez3-{-YxfeTc*x!|96}H+Za97Q)J8>5RA8a1jLD{JknX_JMYtiAUl~QZIrhF~i zzIxq?pUL7)eeuJ~wym4%(jA)> zc<>gE5@-CNFWJ8f*T0CrzA+xHI;Efb zxF(8_O4vVlhAAn9a+a<70AfZQU8>9kY8M-=Uz$t;@r*rAo|KG=%KV_sbn{!EWWKHc)`Fz*kIuC^vkpJ@*@OdXVir-od`69vykt{PD zMH1p6ucj8^I*=KUdTH!j>$e_4slJO~f@sgVH*^seBMIZ%>)QyWu>P{zW@0R?pKx_O z@gstCn_bPPeCJ4Mb)~?#2I{Cqc#Xc$S1*>13c8&7%4~sf?`Pn~6%)7LC@uA0@RT&)wf5U>|t<5?}}=I-he?q6{_%-K&c@NBv7 zh7SKrzRKl{?1zDL_qXL*XPrW>IS!RvtQ`*XwRSq+)cG~aR6p%>_E2)%V@02%&YxU2 zzZc^?aO3-}?c=|79;f%@VRz#F#{cG?h_YouzS!m^vV1q>gVa#rmW&g?9YX{}4m^QA z{KvmK5FDpgvdAN42v^*!+jGjw(_x_BzDd{t#;Ry;DaC^jPI5aZX(EQxh^Wv z5ka2G_mmP3AxO`i-nB%q%dPqzbvE#i+9$mxoQ+(O<*WLPs3iWtQ@r=WnVY1z_wBsj zAXKEfZ|jY|a%p|T(D>3GImH&MywK4u2MrUa7MD96{6?ML;#Ly3rCi?xZm}qDd$QtI zz%H|#+xK>``x}|mwht99^}Ap!f0tG(;V+?oq$9WMvA?0}v*xFR8NsnKN{tmC_N*uu zLTiVY?VF(G0p@Q8Ihf)N*5QFJYzKzj*r!dOj#)^orwV`T;8 zi?I7Yv{~oQTtv|zciaxsgZGoL^X!k$?sE`|5M)HF-=D}0`5^1zG*JTlfc?>0VjF_A zt?5@FrXxuG#s{_Rtpx2#q`!vKoyW7t=J6{YD}ft%2M60|+%hxU*AATFf3K;KFz{4Q z?D*2tkp~`k$lSC(?Q!i9r@|ZOMW&e#cr;afa&?FA%h`=CyQK5*UVGRj{|>Fo4;Y)3 z{4Q$D_LC2J_#RVFeyCQN;47!v@Fc%8$WKsV)5A+coBb^$cJ?HX`2@EJ%y%Tr-dk?O zf1-I8ibhol7&b!Rwek=?=Yv20>JPwlzArUUFCsGermDiRlMz0*OTdXjw=lXY3{li8 z<98hVcfL2CIk1+{iXg+5&wmoGfFI~TKSzv&IN0>;8PO0yu6sY}#B^d+)lVwfZpAvfs4deBw1E{&iS#V9sZUQ0?oOkLv>@_})FE%*_WDux>v99uYLgy4B?l_<+^a z0h~Cf9iR8X5^m-~(SRD3KvN`O2{Yl^ap;N8(q?MGPL7>;Jm5Nzk6LfD39G>m#^1^i z2?)|>{^|{31meK;#b&}3f>cXC4K^o$UgHeYp2sNa{()hP z-LvHW3fF&7rCXOluPplSeFyK{KB^G*L0uFY4IrFDklWAS=VJ45YKPtu3HK4?-1x8- zVE{o2G(T4p_mL_y!@uUTEin5x)qXusVMxoa**Z7PrKz+tZ1Y?-_d88PcfxE06)~JL z)%bFQo@TA4%sD;EeD501H~obmIOI=a#m>xYEb{DSew$5lDD+TgUYdOwx!-*$Q){j^ zwbk_sBWiwqe!25@dhYkq$_mG1TF*jHhnoE%?ELrDE8C6KwOh`kPVT~9cglZKCAcHVwa;Ty z*nMjyQWF~qn-Jt^`utu(9El?fvJp|3b0%5;*Bk^r?B;il!;83=L$p!ml=6HOem(y$ zXcLaA@tib@(^dJYPu*qNEz`R&NHXDD0IdnkG=#AUee^Wg)aHC(oWK`p7!ZPG1M!tJF?b;)Waz1f70583Rx`S zv{ml!dmeIuE$=gn`F-ABg`zFWOD%bz>OD|28p7uraBHFHbi9t%|I$0$oCiLo*UQ~B z?Fx9CTY4JaNqdNLcz6&+6?&$w4C-Qe;kOP(Xl@w0|KjqNZ|wv&LR%qr4@wKK1ipSu zjSQHMpL<6_*UENZU?kx6uX!mK-HO03_RD_$_xxYp>eu{(r%b0`=l^k3cpvG*mX~>f z1#7jMqS!v$30s`{eeRF_cb#aGzzf-Jo0Rb+&m^#A3*!VHZRo1i4Ce6jelDnrZERYy zTws^Sr!|{7zoY2z@+GT&>m95iZiZF3IL$D7D1YKKnTM4q4^s-~p|4PQOBR~5g&p}k zrTl6uVa=cWKk#$^Q)^)T49>ni>we97NXF+r{9ZroD=CS-ArROrX+3?lw`ZAQ!~n^+K*X=Pw+Uv z^&esP{zoT-&%tm}|8-x?Jp*H~Lyqk8CEyp7Nu_l%`M>63u=Ce}U-%nd;KAmC6ONMME=q%PvhPYp1E?Gu~DsFsLawYi?Vy+--0 zv=O{^c#*aRH{d7L4hw9W$+Whzg(ar9Fsi}y7SxLt3f8bX>Vx$SHjtgEPg0a^Am>t_ z?2{pX_z={G)@Rc~33a!S`w3fCs*xkD z+%=)XfPT~6ahyV5fuhcz-UZX)cbqd{UB;AoZkvZZ=^**?JanXZ|OeZKys7s@|8?3wwOP6*cr{cDHT zdz)P$%g~z!;$3&cx&ua++Cdef{hW_={5o&VFoAUs&)j9az~;k!`p)P8+%TfVxCF?J z&wqKI$%H-j*@w@8d7#3CNbw%Qbq_rROp)mXwz1-2UoH&$y5t(ycWtOva?5yv4VzF@ z{4#H|Ib?U%3wpLo0eoIt(I5{dtc#?o>kahoK7YMAb?-Dy$gVB$8^r#;{$%rw8^i-{&&VSJ@wuPdPJr{8J`biO{RL?1)m7` zJIO8So@BsveKQ{5_w?&St*+o-^ve@ru3#?)R1Oa}d>+p4IXHsY&1wP1-ik9}PXZL4 zOEDoM`qw-yVnXHiPktoJ1pef2j_Vz8?2e;D#dWm+pSaE*Aq-hv=ONd$HVH*lE4YjG zAbuBd@z$HGWA~ZRq_Jwq_{jL^4eMq6l#ld=Y|Ol>QR)Y*ffZ|TDG=U=wbAxmU@~Bu z_u)YJ8_bUh(*D41SZ6nn1v$d&pXu!Zn9k|j0TwnlfH`@x%OCulIa(^@4{^nOS=;Xq zT!*RH{MZLmoyPUMdpyA6@13{@Hic^0%$UcTAA6Y)Yks??7%UZF8Z=xF^`@N#F&*SP zXu}5#H;>TTT1WvC8*t~<_sTu%|Z z2ZqPPaQ7emm`EyphYO}tIw?T+TmMHt#){Ic4V1_9J7#5p!I+-MX-f!XV?MjsrJ=y( zStk;wgTS7A0o%huOW}2SjvIFG4D0MM%^;{ctfM6YK_Y+I;ZfUuf3PRB^HGyO*q2HD zaMT;(iv^!`+3d_}7T7j;JFbU%e~BObI^yk%1U~S!h^YUi1Nu+*g6n|(wMUx|19+7; zun2EGHZn^TMXgVB?ob6Ank;aQX!ZTE$C4VJ1>@>J`Z1v@#v3o#M?R7$HG~StRH+Mr z_40M;uMO|~OE>n;n-l>t%=c{#5&xu%2S&S`c$=FKVmj<1 zj`h|oU|a!^ul!?30W|pg4qlXAMc7B1*IerA(4(6vb05(C@<%s?&)bskq}_7BbTG{< zn`Qf89b}2aA((#WwuXIp1*T&$R*B-l?n84mkAly@Ul{p0>KvvETQ3`d-J8a@P6q*q@fZhO z@6wv_OGnmrvx^`0C_1f?!4FI$+7id=r+iSmL*ssaUn@aq{^?)KM4|U4TnsP_+ zI@BU<50YRmJ{IO>mX3fI#Krn2UOAs6vA%IAjf_@ko}P_w?c65>r@sqgod zz^?g=VwIzA{-vX%?-h*X{%Ocxe5P=D#Wy|yx2tECThDzESl4+t;^Egd0^09#BGjj! z2`0@`R_2Vz2)_8CzQ+9puMi)axQ+{-1BB~-@cW}W$l8I%47O6wJ)5acD^o?rhVKMQ}+0yM8fCe>ymo{#X7$v zZG7G?BwYKwdBfOEDIOl2=tTqR6 z^=d(Gb-u@=Yyfr7{65vx5`IrlnO5omezJHGGu0QHbHyWEv!daTe(XOTotvPGZ`K-{ zX#g#I}KOfc-^gBaikdP9rU^jeOFof{0%AU~ZCe{_F9 zb^n{3Rq-8tO3z0;<2Y`3%9>BOCuUro6umq9ar1mtw+PhutsJ=C<+sk|zj-Go7es)A zrY0O~7lC@4NAlF}*1&S40SESOUlFqs?{11Ty674IadcJdmFfP!iNO z@U;W%UcwOHQQIh7^1xL?k8?(=l>N~Sc{uUhTl(_P{d^`PbZ2Kk1qMrb84ou1N>p^s zs#CG9)NLlZ| z(xAqdAs4$+jRNki2q!c@(7*lEYDGbPzDDuuvNcbux|AfwO_D~=FGvQ@Xl^q-6(?r? z^ZKsHf^0FUu^AuoA7D2i?>dsZTMRf)`oo+rqQDW;4rlHYg*ubA4M$x6v17OJ9CWn4 zUmk4jC+4w3*S58Yh;Tw5u=xSlqY}HTkMxrXc{0h0-9s37bYefbSn>q;&`(OGqAA#? znyX$D@<7mX9wCFcKRPPwOuD7B$yC9Tw*tw*HSfceHI+BUt{kk>Nwy1IdFA1erRHH$ z(OKP!7NQ&F!++d9Z6lpM7ZTcBVnaTy6%^luT2@?H92!vXZIRuU7U6I?$F%o;RrKxB zWc`&dgyK6+Gu4@69w{ODYH~BvQ@bB$pO7Ff9L#>YtM7kw9XtKS!FO|#aNN=$4z(#K zK4qmi*eA;u*L~o){-G%3=Iv}#pLZ~bjqI8~C3b!#+~Y|7qZ8WhO)TTN_y_TMI{18{ zjcOb}1>M+w76G1Do zu;uK2yUMlTy=mIOqxGBjY3j<1bZ+0WQ(38W`fiRxl9J?&g_wi$>xv{HPv*bI=X=DI zN`jB)HAcObgj$x@ieu!5|IvNm`VT)|aq!*DxrsBo^GOu8v$!tiyZ;^N&u-vi1^wasuzk_9K>H(=zvjlH6&{@bw7NJQH$tx&!;HnCo;_vNG2frQ$c7Ymf7_ z8oEE6TJc^c&7$wl+3;H$%k9US+=Et|pK;TzjaoM39p_VCr4+;;bKZBf*dnlV%j*Ej z8RY=)1KG=d98d9Mot+M0Km63&;A(TE)c!PgT8CB4`E++%*C+co)h5p`RULko9v^d3 z?fMt{gLZ+r(yxCOpJMq9OY5NM@dnR9Y3SjO4|r%vL47#7-_A)2de);iE&ZinEk_@l zL`#8BADu8rl!CP!wUdaH6@<0z`*?Lt4_^LnSMVBfsw;201p*#7rbiyXW55-F!RpyY-dVwi$tLKXi3I z@6K1y|G7wgVWwDK&0Tgsik?wajh2DF>y(CqnhfNH6IC)ZGQjzcD@n)6L(Ct!F8NFm z?2)%xlB&82{9#_y(iUQTd&(H^;ZMY11er)W-b|Q8kk37**Am(g^{LS!3qlRDWrq9A zV?r*0caHD$2Eryn$JdFXI|O&4_^kEmjf4!sp^qm|d?9Ke$Y5^12p63%uzPs#7Jdnt zgqvgOw`4q2eXmIDc&Cx7d#&W>mJ0K2ro@v=lh?Vm+x8tS-JlvW<(iW@9bdZE-)Ha6 z*tqpO4+UhT++3ZNe=THuL)t2j;+DvBYe%Ezt}R|U7v>gp>aNg+D%S%ZH=Z2b>18}& zcX0Gjj)km&e%H6jV~tX)4WJh;aFsl>6!=!Yox~7!WAuSj5@MF%yZbnB6!&$6`ne|% z*TD!s^xlr5$u+nR1lK`K-Mw&+P=Xjw>lMoq&LPoXUY5iY3JBt}TBS*ZJ%qx~Va4Nw z^9b_Z{0CC0az*7Q_NSHvb)EMa)WJ_C8n*tVjiyVv1?mRyU;2btM24iPblk$v~MT&k1B49 zlXhFJJy(|9Al|uB6Y9dQ-}v9W6S2gV_h8-fqTSKZ+oVx{qx7l($o)ft6RXz%M=1Ya z>;Dg@C9h;-=Qk6PHCM26t=C^K%VPfjM5}5W@eQmWsbrBD2+}rHSwb-)b~JHTZKg)> zBwgXGN)yx&NGi3h_$akSTH*NY#cZW5swTMsCF#0P^q%h+IA>`!Vs5|Q@8q;cqMg%< z*`ozv-EJJ=j3bBF-|$=;Bv_!g=c7-J@2C8ir^x>19`wA@YVN=+hnifIwl(3FCj0h; zKjx3ERvXx@FsibVB;L4n<(ynvpP1if$OF4i|Eu#5VmO32hX~%-Xm5bNT1|Y0`U`qv`^OV zCEY=gTf7bVl;woewMGqIGr{i>n{$d`kQ#*G5my^J{lEyVtn{o+{6*9lud- zH}pbD@j~f4pd6Jo~Kb=R2-Df3zl7j}^qYiI}lh=TH>Mbm14V8sPa=)e9OBvs~wzpgT4+ z8S!&hw5WheDRA1AuK1h}{){s>0Im2&p*=+-y!dP|{YR)1pXCXNn@}@G%gLY6JB8x< zhcV^$U_w9Sfy}!^qCWQA``rj)8RWy3ZZ+ar1nI2mP9Q;iG+yhBB2FX7CHh@+HhBcO zAawUD=TZ*wWAyF;p7Zoed-)%P(N>8}q!vHi%hHxxzSiLZRXAbE>X3rI9?94G-Y%@3 z5AvpFHbyr)OP73du+?7GDPR-inxf@=cQSaR^9zmm&QBYLoQ^IT>>A#;!SS?OWcTZ0 zKZiRi8~Os8Pdl;}&vbu!81FD5;o5QZ&0aSd{=ydD$yI*)SdBN-7w!g{uxjeT--C|e zb3RzK>UFT+87$sP=nVr>nX9oA8sA;am~w5vWZGmo^i+pK_ z16lVgh~D4_=?^{vV=lv~0N>5qAep^R+EG=@IyBN~l)P)SUZCt3x_Mx@VU3eE56$86k7H!W_zG5OW^YRwxi3fd-|mv1{9@*bt_`eX3|3Lv;nfwf^UbRsND}- z|G{H_<2i~NF2nT?Z?C)x!sfp`wtLY{T#O)h_Y5t@bT3V&gB!4VQML8yFwqV{PFg&7 zCF;WZ@4UArk`N@#eIk!^mcw~N?^GGP0bM<&X3B`eR#+xD`Ewp8Nh-_idwZY3|H z?vD*rQ|+G$wjagm_f4l+u^-t4jyi5+T7I%qXR}?wD44Ld+hFa;;GT2~yJA^I-}zZJ zx!i(-c5iAR&(_SH#`$Hg?2Sn}RcB79m3!${Uc+w&&y@|g^NN1=o5?X8_+L7Q|MU&` zoD1HphtYtpJmdFIqNs5=uK(Z`xC?bfyBOC$42Hb>jOko@&^NCLoe&2RuPFrJ30In5 zd?b88kRqM8ErdA)Ip{QDOQ=GSUD{v82tkCwjY>aSq5qg$bLhuY(l+X;2+kkJ*s1(? zy#~L%;n0@2Y8n2uo%6ZkF|FluM|pTPUq~IA)1sO!?W7%<>);=-%%vL6pHgKvsiTU| zhgh2$f8+f;pBW@-?8=+@&2fFqQZ}B^@8j7N!w4Sbg|ahY`i9*3s8Rh1-Q3^L^%tS& zTW-zmT+mg`cWBbN7yTH3b&dVjIb0isxX`QPZg>yt)vM+fdkJx&-Nr5Yd;{PuPVI-j zD5_kK>mMF8jtLVW4qClO@(5>O{VU#YA~eGKpG>^P{3Rdxx`UuX(Au>bEhUmUV>U#h zD6xmvJ$4*LNt@_fa2)`4lEv05@XQ`Mck+-_p+0m!*!ih))h`_YMd-sEf^QnvA2zkJB{5+-~J+D3MfWZFeUqIyuRUF&#`45Q#zvf_E z$It)q`3Jwxzv1(+bqn+uAz+6AseSnQzhus@^M5wR^I!L3By+>(6kO0#;<}HbOA552 zxuA+!&1t^k!lw8*X|CbgfugZB8pB+xQ8b01kUBfyJ1_kU?bVMoU_jy08?smQ6 zV~%7LeQ-i{2M5??#6#AYEQ_L_a>Wq2t6uE9r3-AN3{~#58=|EA2C9Z$K zbwHJ0W@*?w3|t5F|I$DBr~J}^titC&m}5E-aaN|bDA++k+(hmg*kS2n388Z+%6U?? zhMNR-AZa^u0oxHi?;O`Ogm=Fh7xG9nc4VCatF1sW|?c zi%}&t`fD!6Mm}J@6obVK%3Dk^pkzn^{}Q_+e}V#b(u`9~!W0NrW{LuoLn!Jgs?bJ( zZaDI@LIlSx6kRX8=n)6}{oP%Qwvm5ePg_YZAy1*`IVGtdz*X#msA@k0@%shk2HSP1y?jYR@>v~3CX zJ82P$?s24!lYlLpXrw+OLKj_{$9#PO*Y-p!n3pi)F zU;iOwIf3|jgOz|H8x;&7DtIKe_!{H_N^M_b0J)e)ChM}nDL~2G=LUIzVuvXP(DQM} zo>0;?1zdU7Ru{M&cXVllE_e_3@~UmvtwP-4SC8wm07Gtc=n?^!b$rnQD{=exGIYQ? zoKph}ON;?0-YzTw@8>l5q@WDD#Hq7DR<2(lbAqLm^Jf=0VaL=?PJZWX0Sx@u!?g+` zZ~gFfF5n9qOWsy?mhD&=xQQT36BLR=70TA3)S<3|dmL-dREQ|6T*d$G22t5aqPE#i0NF`ZMT7%OntO*$_AUFHLx|pW*?wN zx{xJA8C50sw58i$`j|zh(k+z$B}*BWuzucEwV9@MfKfMpn4SR)ySv5|vMW!;QG>Avd*j3l8QSdDi&iRl zsAc_NCRHCW8`r-)aOZ_S!*uLE2bQU|p!ylUBZbf*3rV$5rj@Y!DfV!MYryBF9pTwz z1pCMPQsjg=_zAT@!4I2PO+BT_VZHH>UWgWKbKV}R11-vJwLN$%ZAYTHeaRnt(DtRJ z+rRruFNE9Seo>PRW}n^?Wg8zr;j4EozWmVzQF*&*7B~Lrfp|SeCrqJ-=5?IEWGeHc z4^tRg2v3VsArh=^k8hwcQPlSEdwnW=Mk^LR|7B2t`U*vD%AdTYLPXeXd3Xv_q}sUN ze?k=lyRdhS^M->xz;7+siI;eQYsg)Lybj-!uH-zg`Urc@o?A#8ssQg}-pA(G;dAX1 zU26?ln0ib(&l>if=Bg!N2m43oH1~5-24pxIIstc~E5|B0bpmQ`pg2vy&t-05x5uW6 z?N9Hp2S2A}9c;A+f2O6K*lu6*mmNB;l5KPWZ#BQR;RodDGqHepq_PjrTR?W^b)7Ue z)yMV$MXi(PQ)%EMb{_Z~oRKfsGlUKYUI)^k@;ayw1kxe1IDP(C2Xt=`o5W>rg6luJ z!l+O=EPz8;wSgV(K&-6g*e(mzO|g_Rt^`?4YBM)4b}JTtFHgJ?WJj77P0J4Anl>d{ z?g)0F{ZN1I2-%I!W_Z&H_JYo1b;d~#P{943(+WV886kJ40O2 zm*#ppgT3k6#}l2t!uxD3HnoSmLQA@0Y@Y!P*jxNSl%>&by zt@pa%@d?v`#p-$5|D~flkuL37h1uoMbvG=IhR%DsN&cl1yW5`T3VDG}A9(EKfa~LM zT^O#18a~Q`+#V42@+1>}$N$s6bAbNUy>!SjF{Q45M;Bun>;Vas0hQJ3UcD@R4fquo zTI73>a2}h=WhX~wih&=SPjal61z$2srVJ|aK`y<(c~EuxpLtujevH1KzTXAb!*Gyj z^ni6Re3u;Y2>DA#C+_&#hl1(9BIi*RF664b+dpcw^^Q@)Kp;|5572j_aZDxlsSkL&E3Z+znts=MvnH&wXi8!EWpf z_PcS21$!GTa%};-=`d&z*TGcgGa=4=+P;LW^dnwnhn~Z2lC4Gna;@`gGF=SvrquvP zf-KY%lXaA*N??1v7A|x3>OVR%i7e_`E8qF4})J?rbqS-Qo#SgYwZM0NsK)2q1eO2c zl>4&8HZeso3e?_BtGpPJ3Tx|ar1eqeHu$kl!PP|G52 z;8>}~2em801jnLI7Syaj<>~s^ZejyF#JwMhjh!U~J|oT^A`HE|+f6c640s;Nwrvn6BDr0f@oav48b0#he0HP&8%;$Fu4J z7XXi)J|_TnS+VWda(?I#A{RbO#=Rv@u|qer>L#sBE1G@tU!8=v|!kB#LaVz;afFiiP+An-4~MdrgHrE~rK zb3O@S$seu6*kcKyvv1BWs@yggDEZt#aor(`U*ppr<=EnQpTsA}l?xijyrv#$sF~fH z^A7KcP?mYFy)3wmUt#QZVVKMH3>lZP&?xDe_o4@;PRDUnDhhReZ&;W9uioX9h7kB* zqJE)@5Y&@|@gs|cATK7IJShF^-Zf7gb6CITPH|3zuD2wKvkfdz*6|UBIiM!5H6;?T zt~NFe5cWGln~lWcf!rfZrih*WGiS-=B$w(iJ3W5hQ)WGB4dd+qE_p$kG=q%9l zD9ZBexl^KFT}$%RzP(k?@Xj5t15NTeg7?P){I2{^`!V=6^ihS0!jWN-kJL?EBpWtcTp#qKFR7m}&Y_78C6y6MIDo$QGb_j zfZqkCPR&!zNdFUqY8&2;ui1JiSZ;nIc$4#<6JpI@`*x)6QWS-FNL#tBRTSz#nnz0T zulu8na7s@ECil0iUOX&llRzN&3m0!}UWyK1B6XHpwfDHu%1viy0CJ zTwHa-MbYdJZu+2Ij+S<|_Fdym^-xw7Nh zg8*efn!g6_?~7~fEzjTgyiqi4Q+IXNcjxhZOSN|Kpl$hAmtKB&c7<|Iigxkq4+%$h z%qw+%n%(+j!#l~KuN`}};)cYb4&(&Knu#|9`bD1>hmJkRWBDa<=v}fzaSW3ahq{_Y z3-K0a8^q?4kW}V^LeT*@7WQl zA&+k8A2Swb^CT083Z(&V;{T-94&Cl5ZShb8@fn$b!w@kJ?q$fhZ`(Bm=Q^V!|* zKaa3`-ahfcEBC-jcVg9Ie~TO&=l)x!A$Dmet(EUt#Ofv+8Wq1%+|&`Dk9gOko$9W8~%%ZP?@HcyjxQmh7Pu-*S$T5VlK0r8^b4oCF1WpC{kp_gR$QJdh|V zBd=Cm%f05Uy07lHa>1BvGtH%`XHud=UD+*qjy6RIh445&KJY!+!Q?aEu?AhE7c$gM z8x?)$$cMVs3#5Vb9E(uiFP(_pd@i3U4gJ@V_fprTpa(cugU>&al$QnGweO&Ko-*{* zS$l-_ErAOs-5rU_+(Ozz9L04Izp?R{8<8DBCTa^AgzpIQdH=D!ggIn#TJ~rgVVZD# z>`{R)_J91>`|`_)PY~qc%G^v&As*@WR1reM{heZxRdPWUbE%)yEY<4I+})IB zd`x$tfV6(OQ@81bz1i^!%XZtmOKXWey=u90%a;6@j4eLy;Yp(_+H)WIgv9qOZ!K~O z=#IG>UR-@YBq!v`vcQ(0Rb8$r?i=qpZIm__w^w=Px1FYP$#~P$s%#O7SzT<-hpU8< z4sg-EgW{VEpl93jL9Aiv9u&=3CyJUv+@yUMowtG>DD4%lgAv;A0rpF*#@9U=b)KDY z^)GBV8&0_O2R|P^vkH6e{r$buTtpKD84NzLlGu$P_rD&SCv8WNj*27SxJo!THpw3f zWwG<^saDyqFTs*1yKpF*N10#YOQGEEmxjh#D{~8XytaR~G~b@av_39-YTz;V*Ma1?!maoV&bQC%;npWDqv(tM%+ zNS(q_&?_VpMc4HHul4_fpA?F92~7y{cK(7n(G5YKK0SMj*p48*dy3AJCGUoWnMm_#dt2>W6EUKLD28>~P1q9@T7 zL7r)rc4PX7-tQ$UBz0JSPO%^<5Y~UP_!t>}uGXOB3a<{w+X}mq|mRGi`q@;RM zhd*nrKOw@Ey!5AZa-8s;BSqT`gIw1Hd9%^2E36A`m;<58^ z!teF(yHr8Ah#(*4E;9&^5#-IzOPWM!1R3zIQXvvU2Y{OBS_`j%Qt!FIa<#hyVT2fjIrwI-Kre1MIu8v1C?ou&Mqq1@~uKzZKK-S z_@Yub!(}=zBaWP{ww+v>=qGpTy6;tMLr>k4-Lbkho-UV8j&0|%<8s)4$~ym&LzlJs z@y3#qPD@OeA5*#>%%CuJ~XGCAHjIoxyIF&MQdCOd)T<5@L>sw3fFV0@5vo+8wERAY7VtY$JsyA`<)*LUE^H+X;qoS4P8G!OhCR1`;6!G7RX zK>`f%JR$7)He3htp093(C&~$?og&;TdZY;*| zvSs6bk{W^(lN%c-dWic8%O+`FVJ?{i+iq-UR5O3>A~g34go)i)-_fEk#**iZ`hJTk z^IFZsN4Tj_DMXjgI;8%(PPVC-@$$NI`Xet}jigfl_u}R;r5qK`{*dkO>x$;A@*B3tPGN-Ry0dcJ2 z3&F6yKzz;zi*#BWIIkOvaC|SIH8cDK^t`@qj9Z0JH@$pl!-eT6>X?b!VMyp!1Th>z zp7h-kCsrZIgWD~_BzWEPp$#EE0zcqr^CcZYkgM)3RwN|^DG9yxiX@I8C-a*1DQQHL zyr$MYJTBZ?=_l`c(A4>4Hac}pF<*-ZuiDz#D!5t zma0*v{2DH;I+j6}s5-0FKA_7YUCpy~W}SxFoXS+&NT$D;r1Hhv6Q^xWlavS@-Sx4i zqVk8^xw>qOUyJ8Ae;jnSxXHh&DPwH4Ln2eQA$P9RbrYlS3iMN6g^Zp{cK{DCR4esi zzw;T&WzZA2=g@O5UWMN16g|7d81OKazvK~$TD-$`AOnv(wh|vA$YZOHJH#o-2ZXyT zh)^%v?{*4fbAhgL-{B_lAxL>y`%025f}Cn-o5A!k2XEdXP^3u5GP(McIOn+6C$D%| z%st1axqA7-G#Wv)DI}x6g;^?_=pxmhAt0@^ZE5*ERLn>#Sh2EKLr%w(Ag|K^WJkzH4}k*l!Z z1LfxjmZ~y+yHAc0%=PI~cfw|8tlepW%?r@`&CmjFV0SKmq+YxJ4MnYIX})#PE7?7# z)?KxM*CSNnYUqh9=6S5Ep{^R*e0kKokC2RH4fOV2BxXQ7sPttJ%OMVodQW4zsK#YI zzQj`y2Vz~7qLN+lC{!%jKly_PrOR zDXN<=$KQ1e^cb#UQr@>M=`d(#hz_5y71O^>XN|lHQPEeYS&#N6CF{mgV?OZj)6=Tr zZ5aP@K|@oJm+jNNruFKfJer@^J|e1J=HZ_b8FyB@%-uN7nh(-^$X)+t9g6Bz;`#<| z;m5$6wd=Tr`ndpWxHjB_zFVW3YeSC}U?r#eZQvEk=O!YaJSOBINT2Dm2Sk4aX&HIy zh}{oW`{i*baU+71COpz0LS8%;_iPJsGlJw4zP*IaQ`_P)K0pK>6@Te-DK=+qWz@7S zp#kX$vHY@`IK@G7FPa`?tET3f#ZFC-KL~zRFZgWD=_y?zAvw93dtPOp_weL*)_v{M zJk?Vr%E=m&Jj~64GvfA-XNJPpZcG_BU}Jp;5O8c>7uSPo+}fD5u}1O5Kh!YkV26+R|&A+ zdv|_pAmk#*HqKcy!Xd)_gotk;gc0_#Rc$|Z6V9?%hwWRCCzO%3eJmD4h};~X?erGp zNCG@B^~HWDvoGeKQF!s~I>$=M{enBbt>a8p6yfsxF344U5kFzTe?Bir&~IRYiV`qW6TQ zQpwOozMc}d`mJ~P?|u(l=fL6fX(_DtDVhJn1$h02%r^r3N$e%tqvwDE^Ao4uHW4C# z7pc5%B78)UOXptJVRL~_t{FX#@yY`ZGj;?gSpUG!F2W0nQerEL5=A(FtT^>c7ho9* z`#`+IYv==6n3PD5cJPMRt-P{^lkj>C-BFDXMcIT|>m?z3kr#=pFqps2|7jf9ldMXz zDIAd~x;R%>gu@9%P2R|qVE++wTQ1|p0qj5ert}+ZB4&!V^ma15@7{I^KC%Ofp5YgN zO}0eQONYgq*pHy-&2o|b?E6r(|DH%R8+`vwEnmoQox^z){T9LSBw_MNl;KD^^9_4; z+7{P;5PBydpHd1w6puy|HUKZY`0g5^4*0_-|DFSp zjiRn}Nm249U_TxbH-FE4xCC93q9`{zu%ZGF!Cp47f3ZK`H8wvKt#{=+&E|okcdhx- z@q0cpuu9P=|#rWUJwdaecxus0V#x1j1zmIsR?li(pNZ z#C0I42Y=~-_Tf5^|Cs1zzG6_KG#iIOp#-#YK_=T?vR=llKR_t)!j zZ@TyFwbx#2?R%bQZOBg8IzBTQb$T&KV|&=OWF3KLJ;#YjU@92Z#4I81_d zqO_Y4Nt(oQqjp9BiJ<%H7#^fi$nsMRdlJNfB}*Avq(N98B!&d34|WS*87xu{j_*mK zPm>@%9NtI&K?3`p%cA#?+Hw3!6TO23)lp$6rIWM{pDG`t7Lfw*jny_(Ns{~A*Jpi{ zIFiTQi}$gVZ6v$7o$swEOwxk6)Sng=X?@7ZJ~#DT;oQr-B7#FTH$9m&9@9LwLJh7wH=94aAH* zs-~0|jx!zT-YT%l8I`Om?FD~vGM1X%M$7)5nRhgOJg~LciFtm z7`&UgDJIF-8+2>@UE>X)k;i(B13<&mc#I*Mag|+?)rbGbRg$Nr53|WtSnQ%tbQvnB zT&-UM-#=M5s{?x_#?LpiIuP?2mY=OOT0xB`gfyx_zu>qIdAyek_Ro49BZW*@afWXO zPB8gElX^BW5m5V1KITQJCoDd+Gl_fI!_C*3U_0aNS0|YefsA80c9`oo6(L=u!F-F` zQ&puPx9|nf&M1OS84nl_w4LF)wM8}w5YEFk|>J!rhR@A)FDkk`*;q;I_YaP^w6TK)4R<3#8r%D!FtNGH87g)BS`Yp>? z;Jaqs%@!<(JZ2TI#8_ZAv(qnnh+fs212dPc&XK+n{mkVCC{bcibBKx4P7=Rm@=P!= zb*M?0%1mWLSiQ`4=`d4>`ph1c+or_$QuVnkAbPN}tdCg0Dra4F<7qR( z{tMd!jG*S>Iycm$zZPCY1U5Q4eu))_;}#o7%(!7bt(`c1a5y|rTOZMZ%y#|1IiS~1 zS#ZskuV0>H)q-Ao*39AsdpP|Xw_T3%(!l@KqR0=~khSF7AkRZpA~r#HRB9@FeR{SN zzr8Y@r#g+&IDLUeZMk8N?9%#g5GU%{iFD2JxZ$|N7Y+x-;ea^&Pt!6U$ka}<9PWd| z!8|EqQNa!}Q|soJqq4};5OZb9%<^(acXSOfUSds>nL)S@CE>A%#kLHw|0${0di zV;vCgw1|Z9SSoL|Ci)wF*PXV9@8+JidT0;pg@^1KXP->)O@2-U-^3#uQRe{u#-kpa z=s@sIdy=->!nJYlNaKaC1HZYPW7AFeQSmAp_?*m@bN;1cSSfH&?|pFm>c({oIW_5zCh1yc_9Wnw{h%IDa8$QXWcvA?=FCbPHHE=mCqlnI}XC zK1Yw=Jk)JI$W0#iIQ@`XlKCLBdv&~Y;)e=mLGr)(pC=1=AtSpzdNf6x;OBOd!@-n> z^1>X=FCQIQkb;&`uKwZ0tlyBCf)MXbuT#Rrz~^)VsV`)qYLkCPw^mX4Z+?vXvm9!V z{Ncxbb96y2eJ(75cUo%T;!N;ho1C3||8QeGACE^nrE$2qSpi=2;!G#U=}zA5PofRJaf<8>PtDl_S}f~4-N;#;edW~FaP0PIDKCpYVgAv z_ldvvkY5_q>+TPJSj&roihKCMPrQ4spXP&{?_oZ;EO;4qn7r=~CpG^d*aK>ByNhHl zL5Q)I*QuhCBY!wD#R5jQ7W})YEVJ4K;wsM}{z^wOjL$*-iF3>!j*fSk!z$;WpkWJd zy1?h~ZeL^WvV-8{qW8O$OdIgMIsDXZ_o%6WL*@#%w&56oi5uc>SBJ6$b*gT=jt|`s zWWEb?4eq}oTru$2U8v)S;PiJspR$&fLc%{YeNVkOF62AGSi)U5BIq}JVX5V#0YM`i z53sCg5`;Ckw3frWl#~gAk1zEoQWqEp<-d_BFaQtU#Z<`GKE^1<09(5yVas^o|2pQ9OWCXc^xHCwr0Xhw`NNU1Q@EwAJz#vM z!grnB|Ki6u936)zlwC3Fo<24$P#w9^yL51vZ5y}2+wgO-gwmNC9<^O7q_nSExK(_r zl`6RJyVAD&FRkjquK z>#u%n|KaKWhaa1c7GT?q_+0tU7HU~k?_1QHC2@J3`GV?pb@{s8%3caB9m<_2CEXL7 z*Qu`0zVB-PT1je5xk-(GRAt|BY*wLM>Oq})~3_p`6xuA(6E z>qBEJ`|^`Sc*ei3F1u>Mmca2aQkEYZ>c#c`nY-CZpu!m}VX(`ZxwOmdSR7y1bjC&) z?6c;6a+EOCY-?f;YYRb~3B3CyeB)be7)uzMt^K-;C^nWbLykRhS|54%->kK zRKK%Y!&$i8PLENa>fTaB*C=T5TWEY;PC2M^I$$XKr%d|Sd8@NCQ^b76BEw&%7K*Ck z)=^Fz&gF=pD8#a;yBtk?CK3-jwzBv)B2Z6kO54{d0z3arJ9f0NA$EtY{F1R*5$nb_ zj`&7|Vr25@=+lVvXbI)O_{Io(G=@r>77pKn>QJA|_H2kF_0XW+UBd(RIP`}f@*AhD z5QEQlo25%DA0K&T5y9PQ)X<%&nJ!u}@65YuwP4MMKGiQ8bsHS5yf@bw8~qA+;pJAf z&OA7x(w%kB$|@_a%|)|R!%Fy!&-{}`=@z?kW1Y|4;5M@Z_YkIwY>EaDBf+OG6#M}#|~|JDbX-D8Mk^}jRe$7aUG${B_MalJq_6-0Xcqea-f<7 z#D%?E171tO&Ufz;zgQ?$@x7L|+r`y!JjUe<&n^L27k(Tr=Bq*MSuB98HdMAd6*DF; zA9=d_8#+R6|1p2h0NO|q=k$}AwA>Sex==MnMRww_o|bgKjc})L5|(d175Ye^N@3@d zn=6y0Z)=^c5Ln`-sb_3h7`AAE#W~BeYpWJq@m%SUlAW{AEV$4yKJ&>!iLGMuEmQCM ztUu)JoRFO1<(Mw%dh_Tq_nfOWUPwZ^OTk^QMZEh=?DssAUwLHvPIL1Qy6dMm)am;4 zDt2kAQ%=Z4+HGW)0F`>~@~<5#XjE3p-1nV~%i zftV@Tc{nZc9Y!Ok4-6z6#MWUYJsI&wut~J6rF%EZkmvqTm%L3?P)%ZYMfoOWnMh^N zTTNjlnnT*ha-N5-v9vP8&It$Wx|W+iOF6QFx%8q#`q7Z(?i($f$`cj`{MxJPd~N^m zlChIN+>gdy@l&~U-+OR-)uO1|FMN|X<#;4N+8Ed$vUlF-tBDO`eoHK@JFRzwI9}Gu zA3+Yj(K{)#ch>ggZS`519Q;Ibv|^JC)Dg+GGWs(51P>t{PVg^Dqf(dUpSNXNiQF$_VFcgK&l zVRi`8cs7ZfcA0#vYWsm$zDfc2;*!|!lJ}(Q@*1{3RWDHCJ$HXgfY~XXgUMYHq0S{H zqY3vm2>NMS_wR{YleGG@WBiUop()$PoR4po3gJIIe)=z!yJo^^qK@g4(ww#qjW&h|vb%qaW zi6Fh$+12Q31ZlgQE=TY$ulde=!Aue4nOjOOwjDvL5|T?85oB8FhU519%Xymf8oMKcb5{{ENt_FVudK zHNvq=p*9W`{4egq^ztUs2N?h5iyu%v1nJswF%aE>Ag!A(TtGh~$SbXLTQErkd6ITE zpRmJ&f(#za8$n79)1NVA$;LOfq?rk7^2lE?PL-2rWgkheIF+DWC;Ri5$MJDPiaP(k z(ZkdBZ2g>V+y}Y6^2{pM9oaXs{IG4sDxN(Pn*tphSBURXk29G6(BCH3{&b-m_kz}4 zPPvJm9`1X$Czh2hNVHqKMfB;*WfzSzHqE`4Tpgi$a9vCPk?=Y3%+>oReWF`9dAn!?+ zf1x!n{-*2{be6c!amfygM39HV7g?A-g4{{X>L56XThZB)%nqzL_w1!M!D!a~%qLm> z5&>+Dlg#sxiWg-v59~VIrE^ZzG}j?TXGmLIIY)8`gt{w(golcI&2b#?bTzV}`B zQht2b%K?ed+oI*syC#OiPl^m}g}p)K6%p^vr(vA;MSM2FK0UmWT@slC{{Mk3wy7G& z*G_Qw55d$;L@zLIjve~%Ub{uCi%)B>ilAFy-M`O^NADv@lWg81;{JABSKeZ59r(X} zZWR#^$~E#{VJQewXnpNDb{9eNdauW@60sxai>~-ImlYa26qwsA*CW-w zLo26GW4?0s`rhnvV`Z(9Yp4HdbbDi<|AFCv%j)G-fUAyA(MbNT)!-GSms? zf2cs5xPSRtC;v011miz)!yofUklLj;_7NP+ecM}lME{H14TWsN9(f0D9U+4qFI>F! zfwh8s{&e!K#r& zt#wJgme2N+lFtRdw=K@;64htpz8v+g5jvS__w%e@li=ADsPUJ}2}~zvz`jaBVDcF3 z^_GeXEIF|fYCa|Y@?(%c7U^)5C-)@mksZ@Gc4+gtHHqdB@$c3f4E*A`U9mfHzyEQ6 zu@468qgwDzAGR3cz~NFIYz=~3n<{yYiNpBEOPne15#&r+Ni0i_vNy@@&MewaKkSjV@P1Ag zgW7i=N4cXiR>2;!gTsNm`dW4X{SNt0w%n268tRhnd1B|m4?ON)#`F-RLg&63kr!_K zxVH{dMvzMm<+B(WK~j^;cTpjq9&x!>%-lnD*jromh-U%!k0{TYash@v(#epQup>zcuYqC;i;qwV_gl4kceHd`3I5c*Z#-9xcF$hY~9 z>JNVV1H3*(iL*<;sa0=@`M>?L@-1PXoE;DSFku8qufPA5=$mxZ zwlbJ{8$tH-KQUo!rHXB#)gNS*az9zKzdna&o#4PygZeG}dEzHr7B*0Yd}VD+#-F>2 zC8*9*ig~(C{-I%*!sK-3`1?i*pf@iq& z7D)v*SmrO)jg$D*xThM|2^7_?_irB3p5y=UMV%_)#h*?ta&$KPiSt(wehAF>=6%sW8U{7Wg*DRmd8WrEAWH( zCku&qP6fW82`EQnTo#k8Xb^2`%OG0?Db2%okYGokp5a8{RrdFc%O^jK#(xUwrXrWf&`|w+flYtjxKuIQAYJ; zOgoBo%+T3<&kVCVc5+3Eu27KdFy+pc>*nuoPhcl&Ch#BbSgC_)mhfeMTI3j@ae_Cl zbI-Da>gqfPyLN6-SG~=By!%8_kcvMm{j=Dm{mO~V@-Ju09xFC7x%<{NzEe=eJEZF#hGQ7orys zXietJN#rR>swD zHsR;x1R1R1-3OU62K2!1^D|SW!e}+4{6$IweF>Ya(hVLak&s_taXo(rOT zDT&ibr>)r6$UkRvuEq${$-%Q#_uBET=Y+dMRQHc1`Ug4O86b%S<H>c`hFYHN52LEv(mQ0gelgvhJWz^{W}MQqU|MH!ER9qfiC98nc$7 zDNqHLv#bd2VUr$%4~5U$y^o2LI&nPtHvKCKpLfZd`GEvg!L3Sq3+V%nKM12Y{O))0 z7RTRL(C_}2J&ZwBC{?7@_|RB2^%RNu>-xwibY1DZE^Sg5f}E_!_mVPb-v90g@^232 z|KdOt)8_(6!*m@n{yCh~L}ze`&pk$!7?GF;z7BQcN`&t%<8`NQB?aI~0%KH7lJVS# z+$xGR$z-m>cpgQRWIxwoD@5@idCq-u$*07VOy_ca2g$!khI6-rCCDQrnYoqW*5sum z**Vu8IC%kyIfo`DVNXe7bDHU7vMfn^F6eRrIR`#3;nqX)7n0drak)K(L2{UDsQOHC z`OSfF_z#Z$#}43~>rgu5GSU4;R!)!@wVG<8AneJ=pL7gFRABbfj3&fSfM!}B5YHtz zjE%RY55w#7$a)Dqc)fLpuJko{UA>ns;RpICzFcAj@j59?B7o3SBmcZ#m7XO5-b1Op z;4QHLly>D2@f#_HcEeQU6Daj|n+U8L3Z=qF1ZJ1)Q9Dm)J*ay_o)E+`vfI0NLLo34 z$(=EL5aY0uUsL!98tpjotoW=Mb_BHbXCv7h;-Jv50J#^(MO?qy5S?;FOuoD%L!B*H z-Gh;dvl)syjmh$$mzp9d8*yB$=4Y4=7kZpRoc0w%W($VFb;M9&#JOR7#yqd32;O8| zjw;9Z7bjC@kf4|cF=mU^UR71lolXI&L<~9+R;yY-@GVj2RiA=pY(MZ1_i|z1a#gr) zTJJG+C9ogu^O-><_*`1|g?y#$pj~+zl{SHP6pJZAjHjvGkCOWZs#Hgj`$2Fp&8c#I ze{nGDCPJiP^%3``rMGbSmv3Hlu(?Xn;4(VcS|#Q4Rysr+75@%f`T&lr`@eUkgN@Zi z-+Izv#i&hk_>cMu3Vf$n+USVB9-2jg8bgR1Tg?Yih%21@lwAhjW55uQf?AYzg>9z@ z^GCa(_*pR)#WhYO+~e>SBG{zq$RkyV20qrL9CtOQY$CN*s&_heR(2DVn5{Aol7 zUs3rssKKDXI9qxr7%&%F6P=?Bs0*};TZf5zm0A&R28d@+wX~YHbAgZRn!fa-LnK!# zf1yT&Oe6W>hqg&6+DL)q?hz<;1s;(39`{-(nM{S`W^19Qbiia>N=FT+LKf$3ZX<&CH5!2f6X z9_QCwNZ29chbH(D!!zfNCe*wP*P>EQm3 zpQbh9xRTI>AVU`F!^QvZgTv{6(`w1pkK+cfIel++>w=*jTjg4 ze7Djel*)jbTzorOP;e=+)+pP>rob=0P`}7R_M`jr>#4wXF+^p1G$1Z8WHeuCK<&u&?Sxi(q95)|7^(t$P1#oR;DDF)?EqUziSWu#&{5LXyp z*=?G}f9$|;syd|!^TM!yxk&@|g7n0$L{(T%^aB&Bs*#+&K%9O+zj-J%=2h4?2K}1@ z;_yEl9;#u21!Fba$l+ifdvHPJrE`7Q*RBBLCqvfKDg`^71z#(|g8790*n`85(HGJe zs=)eW@Ci+55ZC!q@r^cQMXtlzz54K(T*($JeWD+dr}IvuTcEy+?is!P!;f*@+gYOz zP^rJZ)@I!{}+dvJdff?q5IvP#?=E8=e zm{lxaACo|Kaq(;pj7G;@NCVe+~yzaexcPtRMVUeEv^t zDH+ze;VY6qH3)nr3hV({TxC1hLjYotI{6VB#><;b?UaSJ$KYa-)ggXy#fV+jgPNV| zplY+;%wHUxtNjwAa|F-hdDaN#j2W~>(wOHjj&Ae*YsPR*%!rdejD7#&<~Y3E^~am_ zum8n|WsG*}FXwP!Bf+dF9Ji3+oCo%sgA(L{HRGWFLWJiojyrzm@Gf;qJg|?j-(B0s zJr25n!@qE}ScDY~pJy^q?5>RM!|>@ATL!93gP38OjZzpeKL%Q$P;)rupZP_--t^#K9Nm9-LKbC-Il+7V=IA7M*_s_B zIJ%=x%+h}qvu<7pHB+7#v{N`a_{diVR zEVkO#)y4B_8nb)dn!(GQ<#h~sqs9ws&?TJ1|2+A@>w)9W`5fNmK?P3&*n@VrgjW&A z=l65?mtrq0#6_YU8>YnF+TwK28H!1)2FGu2|I%OQ+3Mx0V;u>$OHhF}oU z+bpP}H0O~YuoM3DALIYVAgL4ctAH8}xCoeI3s~I&9$dqF!7;`-hNg)Z_L1hLacE-c?od?Z!(z zwK&{M*#dr;Qy;Oy=zsbM-MGQ{=Ulbz9R4Lwmk<2QgK|NV7bE4-k-m5u(3r+X(XWoifG zJ*ITf;tIianYvjJ{FkqbvCX2HQ#>xqF4%1v@#N5 zJ{pS8T^_R`x0XqGmHAp7csC`r?^%Y`Wb;H@EktenpFXWWS=ZCB>H#}GTUKDG^TUV!|P+egu zTysV-=_S>AsG?N9`0dQRn3DHWpFUZ*MBU63GwI*v6Ml6{c;1hMCEPg_A@!N${z`*t_^3HmrxR zyN6i9P@9Fe?b#{}c_Q>ebg>ZR*+8A1+6{GNHs;xDy6!3V8r#!{Q1;1qN%)$R{J{ z)l)>XOwYV}t`erP#&K<(o7RMVoFnpxt-sWN$vpLYS;jIOs_eFvl$-wA<7LBJxZZTd zi4Rtr^HWWj7p1Jxyi11dg)TN9E*ltlJ^W~IdH%k3e1navaoS}yqxaPd#!lW)aQK|Q zJTkFgk~ZAA)+6q#sM>T?xId@Q$&N`8*qdxJ-;Rkwof##%4HbdC$tH;?Zjt3U9{wvr zg+!$@Hq=Dx<9l2-yOPB)Hir-DwTzI$TCt0LU6CqS3D)^lX;U^9O7{Miw`nD& zO1|T!JM;nmV&wV-PQ`^6rBIxQ;}gB-R~F@Pn;kK@t&i+jbmaD3Z0 z+aXaW9N+B5u>*&T;b`x{?T@iKY!^oda(5U(e*MYmCo{Mp+6#*!3w_xa^$Yuqt!ulp zZiZ&T6l@d@X7ZgB+fn7U^oB&OqEX3-MRuxBwbZZkdu=tv49VFO9uHiXn$Mj}^;B75 zZY7hd>&c2(YMqhHcF)@P%jWn|6W7dB4tAai5zZpnryWD%zB-29KJW50cAkw-_1MCo zt&dIBU(2s3T|cgKwM%i`w?J2=bKg3n0~eV{Dopk5z3j0`5@P$o6K*3C5Fg^K9b_fa zK>6(I#5-|(Pk~jWcq`~hGcj@4)9l$I75fi2q{!i6e(QgDi2qX;?f(wrUeHmoH-;Qc z8hAe&`-uDiiFg&by`2_Cv3%qm(aiT+FzC+VuqTqMr2VgzhU`$&QO?b34B|IMG~LcL zE$eYwWU%0vsej*MeT!!aV*W~N4_fb!o4K>~lbJieZu1wf zuldj2YBpH8E~{`{R1qv`pZn}i;5I)y^Pcw->*ZbebS3+k(Q6FX$Qg}g9_Y|Wl7jjv zi6QSUbpyu}?@A6z!k+G+p=_=s?2+OcB{oQG!128Y#d_sozrFJfTfq$SXPDyuIo=xy zwpbZj$hva^k#Fo@;jNy)W_l9jQmx19C^K7b)K*8sW@tA*MdhT5j)0%PX~UrdbA}m zC~NZr+r{DYR(i+l%zLwT>9UkFg3jH+$x9k@+}xioDPPoG@@vs)cYhC!M}2{pZ9AMC znkK?_8sOHCx-z3gka0D<_f3yPdH$Co{fFj4DujHh4c^b>khD|23=5O}% zU(0*xq3crbPpelIJ@b6wI2I^g)!@Iwk{Ph)m26?xK@aCn#gZD-wx-{ZUWGd2=^ z{67k%Zz7&+ZZS$rBKm&3TAz9bn~xw*d(T7=`mi)5kGQ{6s(MNj13$RMeM*giAV?l5 zS&QF^5q-Y?BumVczwXrWqd5vq5{3zCiQ~F_3N|r}_(N7X8XF?4_7=Oz==-f^#U%KD zFcVllu(NWVnAMpjwmYq3_uH5(OxnKo_$qr5PpfUYS#yqp&eyjrE_~oDXMH@vrs|mY zFC*&>HLouFH>v$vo7Gts6ewZ3%K!U;_1PkkK`C>0!w+#d4|dsdsO8oV{#MCAO;`tH z;n)>W8;9}<_y<7^;3vzmLwCaY_2?!9X}x}Kkho9vrXsTwGXuZBof%E|!PC&p5X=Ta zD)Y|T5$AuDmSt#QG6-@rAwvZdMUbnhnL8O}2$D6I>BJvM-+g*GgDu*?AAWdg>IJz> zu_L>=Pn&6ckXst5c5>2`Pt7hw{KyVR37uO@s0l&~FPRuDJaTX{bgfy5SMs6xJLg&0 zxHcW!dgP;JmZSH9)#vkV_-$498{Rx;x5ni8p8b`(orSf($5g+n^$t?Rc2K$!{98pz zx0HT&T}2nZ64f^+zB*BO=f++bCz+!{X5o+@0(m$pn7V;DTalMvY(peb6LC0@wzNwD zXbXZg+g%hSo?ma+n^i;H*L|`ns}=+MRGrVdjX5Gn`Dj)Z!G#n_Tx`WQAjmaVb`nNG zkc)+vWx2orVnCh0KB@OE4e?9RwU4~GxKgB%cXDr7R+#jJNKO=<#iKGPlfSy^oR8i+ zWh=jHX$P(SG>>`+rs#X%hBsa2pYjSeHrnC1+o@T2dquXH0c1XOq`t9yC)i zsXxIis4>5%=W=xKgC^@oY9dLzFBy&vGFuajJ8eBph4&s99I5tSBN(^;{cLf7xZvsC zB`{91z*r3A%cb1Eb$kcp&858jrQ1K?_#!3VkK3N$xZ6^W9p1371fi`6^5W&?cw&B^ zW?pgohkpsoi6-K~z1z9mgddcA%6mY>$^7K27cfN_KRK_IxbK~&o>$M6kBA&|$ur~g zrCaY`kryv~pLfev{cGtG(;_`<_FYX=kdry=pPb9oFj3ZUS(YtnY_7T5t~e{*xm-WR zW_y;^^3VDL76V!2$SHkU)5@&qgCYjU4WDLZWS|DWbOz6#yMEr#OhYC!@BR{_p9)Vh zG#leAc_rLacXc#6oD=jrweQ<$_jrD{lWH^eUhDZ{k3yXE^x+pf!Uywh#|3Iw^|Q4oYdyeQ|r@fx#$ zI3RyBn&4ux2X1I#7>r*i|0kA+AjcW`-?-9{=W)$9;&`p;(b1(vV}c=k@?rhOY|(8Z zj{|CoUP$#z&vTtD%uu+jc+}jfV3}6D<~zeP`DA->J=`EJU)n!VPg8GWe(=TuoijQY z3KaL3=>%!^7Mx3U*Ey%=Uf_LAMq5WI{CYqIOY4L5`Ky`@bp7QbTXM?UZOml&X0uhk z4%;5)J)Omz3Y#~;>v|6Irt<}!YiT0HGXuYs`}7Eo+gEUuc`?-y_DVJb5jW{51h^-k zZ{Y<0P~%ouf+av4SY2#DjQ6g0@f2nR>%g~oKehxxa&vBHV7v%&)}u%kor3Yp-+E5` z{ei^WJd7EV#EzWu72KNir1k9;wS4KkO)L5;EQPFvPkOc8>lO``sIU&X=P5ZYH?7%R zI<9Q2QKL4m^qi%Xj*;r+GWJ45`-Sp&*|IQY%}J%4a-H3;G=>!u?@FgQYZxj>-2IUE zPOV?I;jY`gc$EcWA4)IOTc}+UtS$c0_D1_1Pkv$MV4{&4cifEwlNRQNtoG}7VDBTv z`j`iMK`Rkf>lHIl0hZ0BS=c*ka+L8jD;3AJw|y}z+=xP)f80}+i=9G{M{CL>2oA8q zue=cRL6G9}-Hsf}2b3Etw$V=Yho1T+AFnb~Zn_NneNH8$BP* zab2Os2Fcf$aVxVPFIra<$)_ez=`dUyAaGdZs{X5*0QQ*lZQ1NQU-2d4_e&;k;cn1F z9PWdov@ch^aa<{`>u9kF>Hz+r{&3Gf`QX$8Hjx+a2;HwE*2#6_`!q}y@<2$16v0EK z^4$}}s0fmvd4Dg#PwjH3Q6%~Zg`;&nlye9YZ1+5b)`~UzZK1}9b8gqM^ z*)`O2Hw!LS-O#X`f0KBt$lCf0aVe!NktGfLAa1&_FE@rbyDHrmj(K6W(ofM|X#Y#< z);R@+VD8JoBW!uLz>Ox>#hY>r{>!fg?u^J3@`b-X`MgbPJvaU3$F>hr`?$R8!}~AD z)-hD;ipQ5I#?y~KzJ}wfSLnwcLH(q9iGJjMCTIpd=`PH_>KWR=J=kX|rBi9eP*+M` zeB1rd53MH70jloCVj&+!RZSE1z)kI{WdsLv*`jhY!9%4rJai@c!X(u`a>w=~$Zo}F zXE9qC|GSrp806ic*{1DSAcFW0H%nu?5X7_UEr~LUKC=mV8$`>Yhv*Evjb}9R49RS4 zL0K2rGkj=^sqhw=o4lRxqO|yAkMoMY54SIsN#;@f5VvHBv>LZ}Yf{7+$x&8fTl}FY ziHFRBk9Fr(i|^-ZZl5Wt5R>5I>KJ({EOLku@`PL0rytR2g?M6i2HQLi5M8?T-DnB|Js0+C;k$ay$(d`7R8NFRjeA8m*7{|K%RRzVm z8C*RRRtH2^(6@b2TbRJkrG4q$yk1h6MO)REx<6L%81-X+XW9b+VXE)ol7er1S1H9` ze^y`P`9#LQHMHDeeI&pCrZPCmd_@lH4WBgU9VJ_Qg8ETNlx*G#aY0CsZ1xWJ-9r52 z<|f#Ov4_Z}FQBdv;=)KziDxaH-VQ!{hCYKh==Ut2hKFtEmRVfqM)Zd|g1y{` z=EMAtymv)m{v!%I4iOyH>XdGb=(D!$M~^GfZ*1Z7o<=kYL7b0&wk0?j^SfU(&?W@Y z+R{fxI}k)}d;epsgCZ;-Fla@wWqzTm4<&QI<#(Wz4WChX$rnfQ9SJgXglm_oJG2gTG?+K`$c+;9yA&rUymx0 zW7MupUL_@=xXih!1*C5BxZuom0ZOI@P@m4cN5$w2k`ErlEllYmS>RN;E{X$5cdphb zp4>}vn7cLq2*rqGKlgRH2xSq;6E}*?rj(I_@f!!)sevRL96#eh8T#Gtp$*6Hn9yJU zKJSBL57B7R`do1OJdoUf%Wh;lXj4<1)ZI;Cf&d$eXV~XD4lxVO=Tv9 z^o$y5X*J_V8lnEuJTx;vnxmbOKRS1dG(-;|?(Cynj6&8JD4mh_yB`J#$Ax7W2T2QX zT*a2^MDl`cZbUUAc|f(pMb#v^K=oTp6(fb?1L2RU4@n#G*4 zzE7~vB%V33pl<9Fi8;p`E`_}yanDZd_<+^@e{&%J=0E<$fs7gRpGV^2h_M^;r(^fDb%v*6z~k3S}-Pv ziWB$TfB2)Kprc>AP=ZD1>D_<|fWGM*M|nYOJ1kJ*9_@oydT0@jvl{wSRU5GFn8n;z z#w+k!@K&^(vV%25ocbeZN8Cfiw#fbBTLWI9uHh&66jV$1yCB$!+-tQ+gylMopuH1Xs=%1C)9G5|_H=ONNd@GyC&MY;$c zrjSd7=%(XQ(J8cv;9#Ee39TbIn71sU)qim?Cw|ECedBO26KBa*M9*{%|I%+kNyc&U zt=)-~L{R6CZz+2~CEqC!ood8J-ndd=pDp&`#Tg3NP3%S^6h#OeI!_{5L_^%Ti8htrOqz7cX?)ZiP6k9!j>$ zp!j2gS6TCu;8i%>5T!C!SHk;mUg)H##1g^|88IS#fAK;8u>*zjP(cKu9)pjM%JnN3O&oWx?s?b2cp1%(#)%ANniQBgN< z^O1%cpSp8jgEaUzb;k)s=?8y!DeAV%CepXy^}|~$C0q$VdXOpswI8LTzEJ|^nu4`1 z7HJ^-?5mv!*qMyOyx*VLM)W8U@BVgyI*sFUN}N78UA44RIIb|$Hb^@JTJyG$u7=~v zk2oAqqcaVBOu>X>hq|>?2GrG8KaZJ7VPjaxRF>RXluZS{7NL-qP+=W#O@Uv0Cc1%9 zzX-yfjr@{NoZSl7lO&@m4pE*uUn5ltq9@he&{V1)#?P=FmfHZz=bk7>a8$CP7v$a( zyi=6PKfIH6Y=gWcVUNRWrK>=)kWPW`LqAQ6 zJOeG8h?Y>Bwx<$jPR!%<1L|8#hfJfgt!p3M9@L`Ekq*A4Zpz`HINS?|18NAM!(6DP zKU+zhV5YXC`Z&=GMgGZW9t$rrg0UwuRBKQR%F!7qxe3xoDy%7yPbiI%4K>(ZYz-g5 z&F!Wy7KfNawGi1V1+^O0UVegjR+Kucc~K7hpGG#dlv@Z|<4jhBxJr-nl~N`6uMg`b zmE1u)w>2n*gX$fOmDd2(N#>E41J%lkmlyhD2b%ID3%Ln+y{UOp`UKG*sh=es$LWtW zVM)6W_~5^5Fh00Q7XZnaqPj=r0f*OzzzefV%aw^j_Wd9iW~lLg}*sE zz4_T1xdhj<_>jh%zqrDGc*0pV#@3|s8l>@bu9~xTn$kapnUVQ2nj1&HGs_-enpz|J z%)D298h%5Gti+zxS`NJlETfS=?Zxe_tni2Mc`Il2ZAEm4V|HZTHWzz)vi0-`UFzxz;+Aqqo@H;1||>xgjiwQRc~=o83dm zKIoyLQ!<>eo)kfC8+q;Ujv$Y)eXmEgXDBQ>U`NX&VgM|Bqt*K(U2Fw>jsSLHc; znyp{)IhVI1M?&vh_eZ|XWwE-8yEpKyZxGTs)-EjQ)~chkq{V{I^0SfN;EMyi&-%}s zCOi$~?fUw~BK46BFW=~ZRn3DBJTAYk+7^}R@<2S8cdfXeXFceyTeZBfe&+iZY~_I% zHD86pzvR~QIDl53t>)f^zqw%BG^=KT` zVm8;Lk@S%I3D)E+*dy}~N5*(Y?U98wOJ6Faq(bn9;tCxa=AcSO)f$nr?Oa9k7wUzK zHM5>AH8uP=P{6x*1Jh(p=Uu_Z*jl5O)<6-_<9dc+@2H}ivoa01-bRY%+!obKZR!`l z_~@+Ow#Htu#-gMHx&KL06W z=SBbKT`t%2K`rL~>f#!L4Rt?vp2P>f>K>Mn$;SjWI+@Q4HIQ>A#|}LY7VRKYF-qSG zpPyI>mNB%)!w<72ul)Ye)dYP{;h%_{w-F7ZD*WlYrCo{MW)ZoWk1QYvdwT9jTACuk zk3JTz(+;0dU zY&VLo`yh8XL)D=7sf}D7CXRpQ zZvnl}(FAk8EjaF}+FiX`o~(>9IQHQ1QeWl;BxB#OO@pnzpRqM$&55yfCA<~UjO67;+JR>W$~o2XFlpqRTycrdrf}Jz3h{T{xQ}D zna#~NRQ8DM(DHjuQT(iS*j)G#S^a`dvbo!RVeN=TPtBg(;nB-q`^==^<`=^~J2QkV1OXl{wun&$^1@rBu3E#%M){u5x6NcI&bYGMbTOP;5sZ$O4%8mqlxLVEtH7U+G#E ztPs05&>u2}9VXlM2Cw*qeZrn~4=vtCuBMc{Zg(ByUdK*)>}6LddRo5no}gK&(s3>Q zqDZ50V=L3n{N3im?!6|dxofQHK@CPpS;aPDn|X~gGxe-0<9-_3rdC??rmQy(JH(~Y3-rL!hm5Fcl9jm<^+z#B(X8ow z_UU_H?)&)M&-XZ<=bzv4`|Ew2MAus9+H0?U?blwL$$|X;)t>PaYSsY=Wv*1j z*-UU7KYQ-|eLS*T#CN8RI)-Xj%bLZt?_^(-siG3GcYCC5gHAz6(RP7Dt$N)-+S^Fp z_f~26@owFG(bvf6)Sz{5(nV8-$G1)E^2lprT!Sp?tIk<=?~^cn`1qV%fPI_6s*a|; z8dho=FZx(qTMVUTw~jk|Us84yHd;Oqv`2cc&|Mr4Qedi>jv%PF{3iw1{ppv3@UKXK z@!~nlvql%JUH5DMm;DOo)xk5?|LVL5s4HqdN1kWH0$`O+iC_`z00h0>9TJ4Cf}qw5 z!3Jmz1T{6BV@IDsP=i3A9~uKemAianS@}sqw=BFG_|9-xWCXY;OHB!GijQ&=))M^7K#li{>oFY?4irv;DJRa0(uyA#i)8GktxwR16c-t5kv zd-hIQlk2wGPuZH5?6=CcthA!nAGR+t)ieLl#=BQS$7XfJ$89dp<<9FN-&;I_1-;c- zmT2Ay{EHeOhkJhGchWuy;(wO!f!=-`Kh9wCFTA0vKn-+Qjcd^Y%rCp;nf8C#9Fl;p zpz4FCF7%;`h+MaP6d$@4g5Fw3JECC_)Se#Mf+j=IGm(fdMF0QBh;S>^9D-^*FK`k2 zIHli0_hI0PNB8bAn#2tL^0tPv1R( zZMvkIbM)!4NQV#FJO^L9cDj}sun=6|f>!GDFOK{2)medh;n)(N z#KtyYH$U(BO}4;pai;S0S%dY~A$hJ{+rfHtryP@q`K*408>KBdI}eth zyeIMp-$vH=F@@n`5`MhLg0n-HRY)SU-X-UTSM|!AK57!+ZDFhIuutlY$M%n!&m4xl zBb{gU*zH8THO@5aE!(7>s)*cUP;KeyxssM_ynCI;Nx9oplRHNK#~tt6u3yr&blcft zV$Dz-bm{7**c}sHJWx8)>y*j6vbTPI=-^GB&rV~&PT{|5!2y&A zU6CZtJ?HPZVnlr3ox`}QO+F1lsoSm=vZI*tWuGfA_@r5VLb>AZhYoxVR?#Md2?Uhy99Zrt=sP~J=Xd&u^?JnSbP z&l@>>nuw9!wtS<@MAOVn3@@ zH8q&n-+x?~Vnw|7`eVtx#D3>pkK{nY52aNp(S*MW-ljex_J6M<>6?*Hz+$D8`jJKf6zSYS>s%OQ$wvJutGfdo$-K!A+%lWCtPr5ER>#twt$@po@9gf^0W2Qh-$UL+%cG zkw@eWeZfmy(g${5Z;;>=WNZu1ZjwJFHnp}a(^FGUrrjtzUBtXmDanW@?eMMx%F_B* z({>*3Q$}^Jq}86ks)A~~Oq)w6S3#9;r(U|rP~I)SDY>QETKT)ALgJ>UgBm$Pr>`u0 z_@eiQD<=*a=2`ulJ^#|n*^O&2u;oU9`f+{KU%ehq+?^T1Mv1r$?9O2$UjS>PwbxiO z!kuwkUw&ZxMhejn=D+x#XE#)d@li2w)0Maf=T2;%JHb8VFXu}V`@0#wc?dEM-hXax z8PP}SVnMDYr5Az%59Fyay0CR8-`$2dOX#DALW(Z(sdD<+=ig2drtoX5r{9*A;1e0u z;mEI5=#&Xi=g#w3ZKcSoA)M!Gm!$YZ^=Dp&o0x)$@?yUA*(mwniU;$jB>5`AGDti7b-)zl-b5CUsNXZw(?l6I$C*6utTslTQ11kNw1Xqx=>|KrkluA~y@BD)0 z5>3V8a-3zQ$h(hH+gb5qqc7G9vMh;(`zL)=s_1R`AD1s{-eh6P{ej~;J}fLb&wzT- z-LkTAT+@rzoEZYvie8k#Ob{2c-psy0b@Qb~1kZ3!s!Wd9-z_^^xeAR$Swc)m^`S|4v!F0CT$-+=7z zk&G2`Xn5(fUBXT9(1Wh%HR9O<_KkH}Hezvnj~^PAM~m#|&Tmw2Iw;7+cCtR?ov;v< z9(LbnXswtm&EoF8Uw0($Q)8?2mnP&AsF7u0U7-+7jkpsAG@Kf7`y9|PCjUW3Z-V+; zB=%kHZ4Z-VN5ceV7R<9iX!+{;GTt@jID5apnhR6q(%PJT|{tVt) z<%=pp(COo~qeQ-NdENLC1$EZ$E05|)S0TujrHMqfMI6oVKDkcIC4JYv@}!ehh-J5Q z+*3YwU#?BuBTvcv6+)3b`B^($5M0 zZRGHW(Mza^9hp`y3+%j2rruu-^cIxjqW= z#5R?dGz{bsi-fjdqRuqf*d9$ThR-QQw?Cs6lYa{JzPQ6;!&qkQd-;WXiTfs-ZO3Kh zPQDd3?bjdI==0xUYa2H zrUi69X>?%^r51K>dF{b^mmK+y(ci<$LK5jPoOr+(!;ZIiEc$YBV)`w_8C?>l*L)Nx zg6TCS0fjK#hoFw)UPht&U_N0pY2&JYPxN^yO|3sfa343@>N1J{$u`u2VgsSCNzed5Dy$|KrY>gjF^PJYI5>W@#x3Yr|JsG*;48MkqmQpS6Z z+P1QNqU`To=gP^5C%5*Q2d!n*B&+pjB~;TrNW}wF`CT+NlH!niofxGQJNKpLl``ov zW;wK>uLm7MkMwH(SS0O2EW3vnH&A{fuJ7}Rvw?`~n=eFfedI_h$PX;XkR#8C?^=(- zhaU&yE94t(s~*`9ai4$pVFD@!@_<+4J(L525;-57C+3AvmFJI%I?4C`ivnU_{7Boo zUVn&b~Ryl+@MNs56RUcQ_jf}b@%dlHJefqLk4lj)y4 zkns2?!2w06wOl9Wg}_s9$B6zh9{k-;i2CY)(WlMG90ctY?!SUOh9Db*erE)%x6B9n z8HE4zGy1KFI#Vfs;3Ls@O8n`NJHe^*@PA!R{5y)&NFurexdpq8M>4>C4SP)tNNE6# zn=sZRKELk-mnHZ;@ac(-dv^dmIZ@^{4)pNPuyBx%;C;XDr+x*xd$Rhr7EtSHmOA3+ zEM{if9UvpvWbS)UGpr43{(dlR46ncsCPSxv;dr=eIAR8YOW=+{i|LK<6Zq=@eR3&1ZVEk^zj9f06|AB`gD*q2-?H*1tWMM z`=D=&2&lU^+I)M5R6>wp=!hs%4#vU#5ksUKa*(<``TzmrO<-iK9r1yp84t#vB3^JT z^66J4_Jl-%MWzS2Lcr%YnEot#6R7F*Zhi3o!&cL4HY^c#P5U{5`V=;sUh(Jysy)*a z90yc+PAp*)$;lZnS^)is*xsxw}P?;NqeT-&P<|APyWpC&Iw*UabA|#JqYW z;oD`R-r9qVoFe)#ZkrpoBJOM5xP9CO(SvLZw@!>AGSFLv%fH$Y3cOpKdvX+EN5ptY z(_Zi|7vOSO zX+dO{Gr|W;EeN=a!J{y|cs_6%k$?u4wJ(Vx(a_RzV)i+74Xm{iTvUp+z^hl9>*GlB z|JCn;b7t#GMe=zl5ez>vFex8Wy;K||LMBl~0Z4)do$Ok^NzoOy0U_LNh9)s_a z2blcFKRFQNw&gPT9c7c`(DFIBnLNhlyn?~sDFaLn1fE!FL@TK${%_|%M&da7&>+-q z`Y7^KJd!*y6P#jk-!uQXSDBD)};Iaz|R z{o+sf@vAt}*kV8Yv`dooYtbHlHozd|FImq zH%kz#0(`toCjJ)sj1$oH46U^g5mm(RUGgmIjXOavk=IL& zgXxDscJ(5Rg2?_n#LI?!!8~Uo*dU~Uyk+4N@(`7weOb{*#8{H3vqU!}q3g8f|Kz9s z6&EcA?}#1(f4QlSExn8b1iy1so8Wi;@>Bi6CmG;(B7HHQj6%Xc$zF_`gdc8b()ECT zF4bYA6aK58Wh4=PXp^EV0`2}}$cQ51ZETP(4)g=CGhlidc>#3W*cCJo*cr|2gVQ&S zy}@z5(ar!2d{(|PW*;0T2h^^L-35Q{%=E`IUvww%M<3G1D?Gg&^cLu>Z&;f`Ku`gE4uizETocM+s?lFOvd*lHYzO zgLo08Gr1RL9~fp|oaY0ieLzDV_F(zIF9HL54Od~Sk>c;;vY$~$)OVs(daDvB zekG0>Z;Rytp9QmUo#U|~cqi`;{x^glLKJu|0JXg`!E^4v{eWI=)aHZ<|GmlNSRnc% zjl3Xw7W@wvHeHQP;5fhM7!L{fN+^2Jk_=)=H1sbAB~9_cap@C(`JaDj^9YrO<8rD` z&QgdwO$M19%-yqO;74(7rXQHR*pDf>YbXyoGT9+<9x2CuEVOdoLuh31{;(#5Mk@gJ z-=`X}5})fN-)9c+e_`^nb=-CTFC5+Yrqle#fzIzU$gZjp=nl93zHgd_iAy zeSZKYYNlLS`}R=_!eiNGQpA=>qQuc#urw z#~P%Dbp-g~7|R0=u$IMSM7MJn{73(-L7i@X-T&YT3+%TFfqY7;a$6%T#N-L*$&}*} z&7yaIrBDk}{KQ6ne5N_w(h&C>ZKM_4a}wYG{VlDmZMWFBZw_?lPZi=B{k^o2k#Mo4 zZe?1-gqjrhoAq>o$pksJc3ryv%z)CGXU6oH1zFY3$7|^bj;lvJNT%Pwajo!sC+Q$p zYnfC#(PMxLmWQ!`xl9)-)un^HqWSX103GB@O=G4XhU5%?VtmN#*DeEpv>y#0U88#u zJ&ykTsiXQE`Gv*IzLA+iwvobC-t+#3D~MY^|MGOA>|3~_fqoEM&A0Mzu8?eN+$jd) zo9t*KAf|=8ksJ26ix*A#(l&THN#WlkSOkMpWnK;bX6=k0lr8GBVzaw0FRRt#%l4rn zSLV>?H*D{kwWZTO{NfmU6DyVQdL0|RXHe>9t0Lpn5M92k=_JGbTcgV0gR88MCxq0! zYp<|M&q-^2x%-o4bfsVa3$yP_aRcjNqK8LeJS+IjhILH-C0CzyGf=nm8Wu1v^yZj6 z%)rVz4on#F8d_ePf&NB*e5*C-K_8&*->(_IL1Qq9Up<fU?cl8T|EOs7 z9_Fcz4pHQL?aL>Wp`dW&)hoVT#ijE0?VS8`^)z|%b0NOhtwz$PA9L~8z0H*Ct+V3p z?B1e0Rz1uyILN1AU#`hkH2Oo=_f7zt>GYuC+uNLs&gG+~i#N|RQgGZXKF63%1INt| zW={R-qobWx_~$+?EG2{iKC|iP%MTelfbQrg*(G9I5ObzKm^v7_@fRkJw0ym~z5soP zs*DDiS)*XAqj*X-LItEZCJ z4rB_l-&-o!xH(ym1H$pmaKcOW864l#9_PmX9cbz$guNH2OJq7b$Yq-}LoC_O5d*a4LC*B}4V0n&CF$e%%j+SY3@Rix|7?B?C*6zVvtxFHrj0mh5H=?N6UM(5t? zZAR9Udgl*I%b{{~(~)A%x>DuFpYO42E$rYWoRW+_Emp^yeRJp!fNPgkk8l}=ZF0$*2UMpl2EJ|;`SEP70 zcSijE6I}I6wzSAxM~RMY`Ub%*pVt`WCQkF}etWsjI9`eC>?CQ^%S-1u>y~(I_eAt^ zf_l=<>VhNZeW2RGot#xbMT6`(OM#O8UvU=U`1YTtu5&ozxOGYY<3m3%JEY;SKmHdT zxVJMI(?cFI`JoYqt;*<4^z(@9#&$Fd%^RLvt%X*jKfCs+>9HvAd~2VRcHuoP&D#_w z`C5L5dRpBJxp&4pH6-q?R?4uo(6~@~K=q093w7l}HH}-|3#yrUq8btxtyG3`&Z=c6 z9#jdxCZRl@+oKYbwo~y#MTu&2;srVHhtk?IakEnCFFXuoV`yT2-92k}Upy!n^YzMR zvbyLz{9gL!oi%}bg)9><-=Jn$#+u~E&TP~bdJ6YSc>hAd=#mttwX7K^LWHxj@w2VA` zTukrFeLLynZv2%$&+k8f#FqE_Vz6`Z!3I81FSy=vr135RJ-*AI7rb{DPy1qCkSATX z+xGH;n#M(U^-Ug7qaBD~axeW2N4v1S$k%^rpU<&+%ooY~n0?e18-$;C>bgB9Ny98} zypB|m0wL{}9EXaD@26Xj?0rf)4?z!)?hIlHrdn2^TfXtSaDOStv$T-36phT%Fn_0B zDbt#KXszrTUlsfK8|F{!{Z&VzKduuwoT4rf9=5jijFftEsD;_P@Cpr|pe&P9$rai? z{wIwc^HKeirzcm@t9)0NpFp(go^V@8YHLv3@271~gjGuzz?uQJc`N16KZf@Yt2kOeBc7jKEL49`E^`9Kb zAm-%_;(w$^)XN9Efk<>ZdOjq{!HREwdG-Li55KtMDL_hxpy!<@14zXA-yrwfq)ia? z;PlbsBq<20wsCP`X&|u|bnbn}$HlSp+MQjol9>Yc6DjtU>Rw_CQL|gejep4A3W>FT zVlA#Z7`SMI>>X22^c~zhf6`GS@6`MzyYsW!M?EGjh2nDb7TuOCVzWvN1)Lq$KD$$I z+Thq@e7Ww1<<0H!dOuq{Y)360YH)UXJ8m^@ko)rW)nO|YOJUO)@)>7YegWVI@9h#3 z0w51~YlsL406%z%^B?3th~p4Wlz$R=Ff;!Rz4`J_t-GL#x z#JSanV!_s^I|S8sp0_6U|Elqz8Dih3)?u-^6_6|OzWhq?}3(|ob> z`@ukOKApI2rTfb-;QCh9Mf;E>M}xZ?&G(RQb{L;D{k%)6(!yLw-`(E$v4NG3y1uRZ zYhGIwSx#%2eiMgX0y{Pg{@i;Ym8ahV)Od$fc}&-VT6Vu8cg6-#SMQPLTCfD;WVamG zu1#PKy;FfB&}I(DZETo4Oy|aP`>&()n8|mX~wY^xw(2O`k!1KD?E)tHT+%fJeFEBpiptJ_jUEgbK<=F zjtuPE62Q~%SoZ7Hj;q}0?i(xjb_H-b>~;e7N;8%7oTXZ?`bMZr$tXMmssEhN_3Ebx?lL3z-vxW88?w{Ni!6jqF>+LLeQB!SR#Ck_} zh`Hfr$v2y&g5)>0E38HE}l5&-+;zW6X*EvcEw&L z`dgF>#U3K|`HJFVwUJ2>|J-qFh;yzvb@7$NpQqU+SR-#CD9-1~I9d)t5w;0dtnZ-h zXD?ha<|?O1dA7vo2ud-OT7;BXR~t^9TcN3sFeOt7Lu+EWjvHq z_Yf@$X77m8JC#>T9!3=@ipuXrdv!M^zBS2{meD(s2-)?>)M(*XM~>9U*l9>4 zx&@GBrd5t5)?Z4H36;NfHRPJJbeMEN!q$?b(uSh<n9-0 zF>11sds8HY4^q8zeTNKHnzQKbeA}8pnGXe@tQcUc95wQlUNWJQinShGhK=Oo9fwX z{(tzVZ8=>8|8o1sjfcn*1l{z`^&@zpOsgB4iT%06;p?qP8w6dV=S&gfA()cghcpBG z`L7?v#31Ns<*jox5FdM8ifR~wSj{%BqWkRgG}OGL*o|9?aaSv~xRdW1SG*)vv|rR! z$VL2hk(>6AsHxPRqT)^OC9EZCi+=2XCKf9mRNUlkB^o2p)d@Y)(SK#Mm@49XAVvm3f%kcu4URGgNnonNH*tobgwIEk-zDD{N^}_X& zIIiGF4a+(P)SJnDFqPz-u7=}+>1{W%$%G%uM{i}K8Xyh?Z=EL2`{%E_)lbC7wO{$E zM4yA?Bl#>uKZDCqK82VcE(G2TBl6`LzWfe?pE!D;xSWWOz2fC<cSgh#kG>2?$^nX}=(XPpwKKf~#6f9n@c zd74+%>reh%_7ts(o1>jPcgZeg5_6vgK9WgyGH_fZjeN6k49CSUld)T1jVzMDp3{iJ-3GQ@T{k>TX_;I6MZ6Ou`L96xZ-%>zbq1x0SM_-Ml ziEVBuW$4l4I20db^6uhr;H-UkT$P1~%#A&YH+Sb7;#_#F@6f?}oa5KyU+yE^6C4sv z10jA~qwIE129j(zzq7eKyX;%QhaQ|ZRABan_HIB3FefX?I6%7aTfmLZU zVgL2q(ka5uwDwYC;=RY&mlz`p5ENEYGD+k~zb(~r#P~P~-S;E-p#$3*GSJr$WaroD zOz;q!PCm@T>>$Xr;qgI?3xYI#n=-LP2$B_l(oWe9UF98l+DgkLZ=yFo7v`F#ePYdT z^;T+T-@)41_Qn8QK%>7jh$D&>X^*tq%T8iZcwy$2!EmOZdMO(e!zx32{z~=AOBRU6 z+p#u}O1np0^V;Yh3*{%}{;T$98l=bMr|lu{*s$MNbj$srG?F4R_Uys57WqEh{*>qg z5rZ6V1j=$4Ib8pN=p_xe)fN)Hv0Q$D<_lAocbQtrKG4iLam0*2?NPj-^ z^f?5frCkMYfZvhIcYAxldxF2b5&5wO=z|WSg%Xl5T-MgH6hWGXZ$0l^{7v$PLz-Qe zGD$M<*+$CTafH?=T4P7#flQ;CC}Nx^irmdXSs*BC;qD`XlL}01G$)=L{qcZKhtTp>H5)z0b=d#C=}FkaBIUL9Fm2*T8Rei`h93em})iyo@;X4X1Gc-P-^5c0SNGgY5M_K#d0n+jD^W4d`|Q|09k))GyV*4?W$| zQy%a|_}P2PlqfU{x4zDr3WN>dcO8Yl5+O(U%G0M4C%}AJS$mV9 zzCVU$LXgbe4;RrV5F}{WB}uGH7zy1a1UH11^*B;Yz~}QG4B{quj^&|wxp&}ms}C8k z`V3Tg@Pp-Tpt6IrPB(zc4edDr>Uu=%3lErXA%yZ(BH=gqcMD%@b3t6f6T^HJjX=A< zk3MN7o<}xx7yxY<^BYP4IzPxdcKP3m(E6b9@8J1g{0BVtdgcd+{~EMj2DN~os}2oW z1h*4r`vgKIAt+$F4I=pJljN6~2zc*@4!+$>{Jq1|4_yQowDnRKgWzM@Dn!roe%XxFTe$3&sk@{@3$Wh7Y6YH2aKOmu>=}E zu5JX@?{M@u-Ex6={_(@X><=d-ca-3M{KtoU=l<|P^3jCunq;Jd^&q@us`NI&5gE)J zt|8v9{_IMN9TWx4E`Iuugh>7M15*uuGk#oxoBsOYUmOUtFVdN%9xcTC-~5Za_!oQP z9;|~>KM%pnkc)%(q74F(3+ywOwjr#Ppp9|M9B?sNYgN*s3?f3|{L6vRmPX-e%HjW& z17WO4i@rho|BrJZ?8{P}M^O8}`VTHy^kBsX&x z(F%ydY-jlpy$}T~b!HfmhzQ5{XDtxkxObTFEGNR1REti|%plZ^7_@xm6T))c5v`nQ zM;L|9Ksym~X(O68Gk}oqrJ`9geIS=dpv5zWh+wk@nmn@}5qU9!7EXUaB)clmuxVX* zez+Pr_G=Hae^eN`{lggvn_x$vEFlli86mk!)|6Fq z)kv&XD@F46ImFS#iDI(IhG=i_r<_=!!voHnDUHh!aR2d9iu-a3{NB5XvTnHmZaP0s zo?EVki({n8Ny~!pour-QRe$*)7%scLj%@Uo3(AHYn>Laym%`yk9g1YLC4cyFp8FMQXb2T({#$E=0yOKz z2LuHg$K*d+-NA?rChuVS;R}V^2Q7k&zl+oNqMan!2@y1aEJ(JSB}36FrQ zJr^k5_))m@tOTWS>B-N9~>qJ^w<6q z2v}#cKK^U}zqDBhwgY~%X8K_$hVKq~2lo0#;r@VLMht#v(%sM)QtYHXx}G#bF`8M8 zOmXd?_|97(S45*IVGFAeXN41#_lxO>nI=p{m)9fg#(7lHl`(kG%8_bA@GA#y(}fAX z=@`o&zRANknGDuA@QI63Ez!Fh47=5gOt5Y`@hR0+{E29OdhK1G*ScX8)I@%fB7F% z6s#}Ve=wEF!PI|4Zh)V=z~o_={`g80+Jz>;A4YRH1<)O6)6Z1$Cp4OJYNi&MqCBNE z%ugU!d2%Tei~Y!I@h?>IWe-GHsh@gsWdt7AU7?2j2R9~ayOB=tEmB9M2(Af{^~Sra+_tg+SKW!FoL#PlYZ}_gEnwDZd?iXgy;KZ04at%ZEWCq%&smYz zg2m6w${DKDUmnaC^~7~<~g-T&GCQmo7jNGObQob%mBD?r8 z>ai6gge>Dujl^%med_zD)&J3FN_bNTo#?|PvG*rk;6FGzd4DtdDtsgSGbWGv?6(@K zk{(5WGqVNbFSKDTn&QD??t3wuCwZ{yHXTOf2uJ&p_4FnJiJKbZQ3RfdjM!EZ*Q#G24xbob9ePA{Y%yEV5PwM)V^S z-Ailv53Z2OSH7|qW9<1If;I1r;PM$4qgZ-$@P!SH(sl|{kHs#IHU2t6U zKz2KQ2T=Z$E5w~hs_9G~=AZuf>zCgeBypzUNF>R0 zSr3Usriq?4e|fq;{Mc^~EJo9SbH`7NqGZm^uQ6gtld=yL4(KgpRXQRgMt)z)K|fO^ zzW$Xd*L--PghX2l&z|HQ35iy7o|s!c;#-?v@V4I-73Y2Ymghp#QK6IuI%j+PZQ;5a zA&$tmQ(_-0j8Y}GOOK`Ew}MvSO$8Q^2lU-@XsqTq zZfKTP%&LXs2IDDLSfX%T?^U8Z3&>@9w=T)ipW(Q+{$C!3>5qTvKm79boc18vjp~i1 zE9RiOXzi@IpaXJ%1siEj%2TDwSOCCVcBUyQF8$QxT3k1LEqH z_XV%lR*3qPp!~^AlM*t8aXehF3Z$y@#5jL<_baT*X=D!>`mAo0`ISv%0@HO%JHsfL zw=tYeT+499ansVc7mO7gU+c@{UM__(K%Q7@8GW9y89XZntYc{7xJku7Ihg-V|LLDE zb4G>e7-~GypfQU^p;=>w;te<8`0eN%+-;E{A(MuZ^L=B?n6BEq+=Q%bEZVLkWmfnmLb%TGBxejGRPiQdBA zI+wl9Df}wCB93n)g>W-H zbHh}!Jk{k?v!5vc3bv3f$T+RECk~QjPi2)KyOu9gmKZA=Sxl2vi;t50T6;j@&Lt(W zs%Ir?0THi+FTS(VeGrE6$M(mV91rs38X9}JvB%$)^Yh$A>*+JrocTDuz3bF7&g(!Q zpIpaz4QSEvM$S~ANiKIeV}ZKuP~zys@vRus54~lMIan-`-Q%}=7Q2m{{=C;o3adlJ zJ_$RzVBPSy&QwQPk|50gwrv-QWCt0)=CSW1U4)<)@wR%TTnK7gv79FDf}rL(vtsHs z?CAY`J!h_9F6tdz?X=iwk%_#AswV2i@(*&%G^^LU%HPg7r1NQ4y4>5u!@4vYWhl;rSB_F5hhH{>!RUDOv-1QZl5l&Hq!?^22nUaurx^-!%RuvyNci9^@JS3$D! zb?oXbUWY{@`V=jSk8R+4Gg@uS?b67jH|w)=YF{6>H;y|Ubu!>S0d%WFJoizcdUoHr zoq-Blr*eaJhT~T=RZwo=_5uIoT|U)2TVYM`*DjSq&qzG5)tmK)0!R_i#ut?b`AI1d z)Vkw<70CnGJF@p1(f{J{564l`9tdh&y_1Dx13|Tz?SASi2)ct?t>w~Yox1VC+)Xr| z?|tgQ)#sJ>i7CdH8k?;)lg)}jOw?^zvv^nXdh#L`g^F7`M88{ff~o7cnK9wh8n3y)+q(k2;&D?0$%p z3>WOw*$nf=PHXQk-LQw(0YBgZug&At#c}64lTKcBpx2COyr710KCdUq6NuvnY{VdL zqVIp~U;FR59l~BBjQ4Y{izG9szr*XO04WXFJ?5rMiXrYhag!jOgP=zrT}?^85cGh< zl|r(Dp!*Uou_Orys@izapTq@0C5ii3DLD{yqivT9R|#D#rF{E<=qIlGms_`ZC@l-> zg!Nfvu2Kx-ZQEjpY4Ve9-i{tkazTpqOZqGi&X)JDkQg0>o}wCt8a8+ zS@R^dNy~a)t4aJVL%kdaa|7O{gYcBKBSEh^zgHX7fArT?>vtROa_9gl~07C?;)s+ z(<2TA_%7mHYi`C-RV)F5(i4wtWq*Oi#(q0!AZ*K+346Zhn1U`JpMU$VXgz&V z1m#W`0Q-C?Uu8x(y_f2TdPl>RWsNnW)mI8uUW7?ezRFZkKw3rQfFf(pekz<)4IWeTjsgd$8MR;`-I#qPKIB zfy*-LnC5Xm1^abYN43tLSBf&-<~n>?Q6=2)+>!m)%+%Pmd!5e|{npY@U3H+Zj$8kf z+_im)twE~=#d@8dcmFci_`88+Ij8&1JHHjI_i+T;4+DFxnabW{=a1u?_OhGp z0C{xd3Dy_8vvJ(`HIs{~cfKG&a4$8K&~f5>`|_2LK4M?HSTH1&=u3VpIJlPBzqlbB z98T=>UK0xrBhGIoJA_ywb-@0V&|>2JV&u*XlGHH>I(I3|jbjR9IUN%cCBRQ#?RF}7 zm4qk9-aUTjz9`l{?nPtlIH9O>Q12^O@A*e2a&7E3hyHJ z_sgTg0}0NfxZ`3pv7dR%@uDZeN8FeS=O_GeO+CVr@Iy*MIat~CDe zZ}r?xC`-DhGO%BazTdqEtTQ&WzKabbIEO0J=qtp&UdgHG9fUs$CZiRRK@k6+qE{hZ z!2Tn#Lj(tqrWT)0+$WW=IetIU{~^jRE*L2W_Or)+AkMLRx5j1=bi}=f!;GTjM&zuZqS?AB}yJA}C@jUU&KTtt#OkLZz3Y?x~7~@@7YWcpfEz zab!hycT30!vdV>Ljg%-nruSZWIj5n@O+OF{>L|@EEJ(;69M{=QKXCpcc(!5kAJnq} z8erXN+x$EJI_d*KrTVe9#JT3ex3OA(;(y20F=8JxOEsyPxIZXuUD7_nFA0~DTnRtK zoJ*1<><*DhM2UN*yz#3BhzhV@DDe)p5P}Xaq+2qE5vd(nndO}J^eWO&L1*Y`lGZCg~z~bNP00MyGZ@yUgFn+MXiRl_%IhyPeoNd{Wee znwt;lMGe5tuL_umO&gUg)TIil+!4uABR8V^^q@-%z3S1g-tk? z45h8Xagks$lnm-fks#8cl+DCBE%a(4@jVv)s3iF$;fMU#9L#!WCka1WtLd1g4y$$}=` z@B&JMTe9tNoO=F&ak?7O|A@)|TocdLB)GVw@*8)EdoC{fUpFWA?=DcTZ$jFE{be~T zL|+_FyF3xXZ--}ZXCV(D$U&u)L~taV`pc{d-geF2@;8_T1nJPLEYN-kk{hl*Mgi*& zf$aZ>u`iFOs%!h-d#$~Xd7fuUrjQ0g5t2lap^?%+MM*^>2@NWuQidWGl_VJoks+Bw zGL$l99x^3_ROh$W{d?T^^SPh*exLWR?`I#*Is3ZSHLY`f_qDP#*;EB$=vuP){H+Ojc2IpeVQLe^(cfh;c3| z)Qy{9yTKvzDkQz0WeK}xUO~ZAnvG@n<<;sNR5yJ*XJad*^5BsdDZ?)G5}=xyI=hp_ zkF0#=iR29=D^p)0JWp08Gx3?=r0e6Kzsl*O8QBS1a6j^c!wJQh{}Z(+q4$qDKp_b_ zcpg&VWP%3fyPW#{@C@b;xure5h4r(~Al(Jeg|YL_c!GJw8|#N$69k)K zsWoFGK~THiOz`Ir1S7I0MDZdZ8SiWIbz4ChBfVzLhH0>jVN-KqcL}LSjl9$LK>h|b zYAr4xeS#Nt;x})g>m7ANkI_B{?yg^-a|Yq3cYY4eemtGh0+w-Z*F8OxL5V~rB)YG=yTabYO1JFbYI;Kww#!U5&Nk~4AtSlsi{V#6k$q}u5Kd2j8D(j zq52F|d@`^@?+0Z~axP&AtD4$QV;)RR(|G6!gpXUy?i3@8YYlvg)*amby#3WCglF3W zt5KZ?^4nH_yo%7jrLnW~-}LYgn9TBA2hTyed?^FqIVLBsPZBTcCNN)! zccei9qWfT6eqT=85jjAu8S-GBM^x*y1ghJ>t~MK06o0_E)>>U}gr2Q7W|%j0pl$iK z9SFTz+YUTI=+c(&ZHI98=dPgfKX^fQH_`qNEbDyr=m55_?!vr9m`BsQ@a;u}RR67} zL-_MLe7lgngH`QBU)^8$cRf5z%5cHFFn^;0H@t83E`Du__g8a#C?}c9)?4q%WNB3G4E%deyYPK?aqmZd z2b8-7Jy6^Nf<01!NDt&>Z+tlVT(Z5N^?n}0#(~SvUm`3Tx?aYQFn4%o6RL~J)8Bsg z%KxVxfLsST;PjUsLNDZMLu6;JGY#B${?Xh#pnc0ek(d{?t+_KD?Sg7sXhH_Hwzg`O8*c)%1Snq zjM?MfVqhuJ@k{-Z4mkhccp!hyi}^bbUGMwj}0u_e} zpuF2O3>+k@05;p~eN5nzW;|8EIVg&A_@dBO^dvGV~8W0}|01sY024*7=yeL}_wvTKA z&uUx1(GhNNq$Qk`8`J_d9kHZNzZW#@$|9e4M+4tJLxSjtBq#g(2%@!(d^;dO5KS56 z!!IbVH42aqFjhs7a$ixro8y7Z>0=JN?o&~MQ&dy$HA+)PkgDiE0e>kfQ>|Y_;M+y2 z)XZQ%yrDghnjOxE+YEWA+0oNbeq9gE_AL~oI~}J=#^-~xt|OGmcqBOJ=|xG6uLFBd z*Td5Br$FygFx)o&0~lSu3!}$-fqL{7s5RaUmOcQ`WV{QgrD(y$6R|)prx-d-pa@WO z4epu{0h;fO;n4|mpxFEiT7EkVGzKmLZ=^r>(eFTe;1(G%?n{_v~-rNJZcrSdL%_b?yyUwoThGb#lQRu0n^qq9(YO**YLu^I$9+@(1u zlz`9vA5_MKJ8(O8je0Wi85sI*r$i^!fXcL3SUod2SN>}V8rBQvbS#=XdUYSE~DO1W@rzYJCQ{u z^o5fyQ!B_@ou1^T=}I8pTuidhZUH?Vn1h8%x327gS+k>3ha;q25ra_X%<#XY41}E=SbLzKj+r_G*19Ls z*;AQ7#y^>soccmehJ;fmr&-9}=o-pos*dbUNTpP!_mYiST9o#*2H93TL#>$lPWCiB zrF5p3k`=wz;m3(;FmL=4^cyuGugna>x4lW^m7fE2XgeEuj;YFc)+9)VGP_u;=Xg+a zJfJEG01#fRct_$hd92IX$#u*VbmdETav##u*x&W=Px=@LhGXmzw9$|y%o9wddq>wn z2N^4RVoV(_Qhvu+G|mFPFT2cGF)0XAjT9NGQ(WMPpV-D0HOKp@*aZl5 z9Z=Ly{z72#ycz|8xaxgQR4tgGHQar==;o*!owCPYjj4JJ?{f8x>LsJsIyUH%big?p%(BlFRg-!6DAJLLu5?%$fISo+52LT`9QgMKQga z$rSySVMzBdnUZ9>1KrMKO7ze1UlMcZT7-9Fm(Y0#SG6zE*+A_9ivL%A^!e~!hPOf1 za10!yOjyp3-GJ+P#TbK=vY<=qAdB=IuW))h@YX%bBKbWD_?uIVRpZYfzr8+-WdBxr z;Lsv2{?D4M=00(}^&cOxCkB1u?|m=HF?92-z|;D0PRGOsfr@$;PVHP)ftA&oTsoy( ze0R!hIX=D3<*_Ne#Qx;H39m=)4z{QkF@B#H_gM0J=Lh`V)V@M=_Y=HcG+u;AK$p4(4uV&oq;g=x*-?mmab(iaW-rD_BAQ8 z_dDJe{7@^z?c=dkg!Ro+K9#dCMIFlA_?@pCh^Cb;=Z}a_7d3jFDR3>#M`R@bI=@U_ zw1B~jm%ITbPXzg%Y4U8UY8Pft3E|xEalQ!e6LGe@E;sS*kM6Pg4egT=d*I2oeUeMw zJMJ*s;$LklMzP6wwvSpz^j)@l2=nLoFX89d!Vr1|9bv6wGL^eO_ZdB+Y*5wzcYXX9 z{mk*n1|mgDpetk>ISBKqA{L3^b@0BxO9tp%$)YZQj(hB56^FFeQ$d?LZSMPKw5VQX z72i91Tk(Uh%Z2VAIxcZKH%L_fl)OZ5_D(Uq%Mub{FHA*;Z;OiuJ&P3mo+u-_JY}DV z-t*hSn-gb+a`N;=k38h(KU_X2mK-NbN$UV(*3x_CoRJUqK8d6ILqU97@AETQsvv!utOUzElyqw8@ zRyA0xtFT)5j)90|KyHlKN1JSE%jbGhTO9+Xt&^K&zIm8P%RbJM^*nb%$|S){cK`Kg z$>;aEq^j=LitoMiS+Xzbo%rGyZL!D~4<(YLDuuaAm8JKF>+sjr8_Mm!I>!5=ZJyHX zWq)pq{;b7&FDY{6jhil4KHtG*`Sab%*?>YW9VS!%ov%1oBa>;EJI84n#)=MP6+ zk&3t)Kkw;7b*b(UPwBYlv9gOUwTKrMX~`4k-;1)n6H#sn*eA5G#c;9JsUSX&eo@`$ zUhX`d<1z+K9?y6-{_HZjeE2v|8k1>u@gN^hGQ#8gpYR|*G264Ng9rJE*-D%D+!jpc z>hU?AOLO0*Zt5)=`%!LF8m&Nb){EFy(!qp&O|cgD;4l-U(f+#7d9^aFg>a#+CgwvtpVS!SIl;^-awd5nRK9vdNWZC4U;NH(Q2bKU5}iTkdZGKhsjCGX1^G9R#hATx zc*nQzr@Cd6of02fZ<_^M;`vS?&p@n1gZ+WFFk z#Esgg_N?>~B=>}!AAOV{%Jy%E7>gHe+eD*%cR|^fJbE2Lyo}krl3qa&*}S&%Xhnj^ z2)DdIs}V$c>$+K5m>?3D7+>S=WO&62=mm?l@Md0rzT7~OU3Agqd0Hp6XJk|YjkF)E z50Sm>e_H3J{oZ*OP8Dk}KG;6*l-Gz>u+PZ6_a2$cE(Jf4e{`g3NyM#Q#RG>#7MUc9 zE?l_p*FwLn&5Pr9KT-55sndRHS0s0)LBPPnRzY%2$LKnFb2p*1k;|JhO!Nef{IK6L zqCX{o@~55e9O^3bM=_aOZL}`)Uq`4bk-?|RWLjODLG}v-P?atjRcXPxTThQ zM<7SCY2dM;4uw6p0OGP-W)}~w(^WVl@cDF?@s6dQ;i4i;g|iVG#J{hLZ{Hf!2MilLof)R|lOKv!0cG6i9UwM4E>aJN}*e$^CuW_#BvrFZM;j2t5D7F%SQK7u~YwF75-~XxY7- zQ*2|N8Z2sp^k z@7Vg?+~#ntqMc3ny2GdKRB|m=t~CyMq*h^SYF%b2!I? z;X1Hl1CzNbxpnG*7nKG~N*bJn>61u)fdjRF@SO6U1F1e_@BYq>6uN%A#jOSZe*e(V ztsnn>cQ5AfSKJT3{m9h~v=T%_?7<8WgU^3(xrU#My~O9j zMU}EwFW!`TX+|YQ|GMqsn?b6X%fDOgPI$a{kw%||enz=gw2GIxTk+`?C+D9qHK|`_ zFfO5Ce81!OS_Xf+A>-@M^|yI_4TX@rRy=L1P+e)hi^o7e8}nbdXOcB@q-Cc(rReA-2Ht#>U zNb8LlFh9LNWAztle^Ys<$xWN)6|OGWXSi=@Ub_BEC*Koy<|pX=$^ zMG6s%Vs?2wj8cB6d}t?shL_r>`Je1nizAnumAbX9s{X=qFJYA}5}hr2dwJDt-+Xg2 zyvlvkX7qQ0u{SqugYtvX%{k<9wl+X^kjBp3jOvMHD?Ts|C!jo-mj1}61wYsPXT@uHKgWEZ+rPZy@cfskcJBa?iR`}jV7 z@@1o?3F1VWFN2$tkaOMPb6iM*VYkQYq^aaXj_S>CyzeiV;fps-Jh67sMd9W8r`(P7 z)g_sFPmg}KIw{$8{nS2w9^Ix0nn5{r^8{rqqrGavSwZ z92Pp$$n~5c_C7vSD-cMtY`uA|O>BgHpZVEy`(;mXr>?ktCQ+$EK!53!pTEvKvCw6a zr#D(`lqg&rd^%y5p+up&lwZm*M~Umo1%C8dC-LhG!cSAz`y}AJWMAR<-x8UUUwz`9 zbxXyFf|H^}zhu<}OuY2!KhE#x8uFCxDp4xtaP_eNwr}Aid*rc-U!fY0I7qj%Xx)wH zcpq#9ZZ=4MGnQsolvfvQ%-?u^9P^(Z8=bYl{q6f*XP4r6A9wQ3@?!aKb)8kgb1rUJ zT-uHKKUexM8R9@yR!^`kvNgGL@`ZT26T&xoufmyiXvs zp?{pPNBdEymv1k22@a9$S-aNkoSD6CMGXXA!3~$_0Gqn?}4bC53Oz^N5tO(-qQ{X^yNsEF#z` zl^XTb|D>R=*!!q0S9AFWgg-@k+->0T5I7Z)nL5nl!&4d_U8un8z%h7Ze(g>^30C$n z|4uG`H-_KUjIZ*7mULz4kJ){q?)0zVOeF6SdiUiLCQ~e!-gT)9;YIM{;t?j3TP}NP za5g^A;4XdbGVWhS4_`lk{UV|-tP%J5ukO4~fKnvCNmxEeK=Sj19S8T3{JCL#I6k;* zT?@hSai8XOHGuNNc8{ne%m=VYiSb~3A&Av0Z}YPa5`@-Z>V;rl6iJ6`4BWj-#Ey!(4jhx2+0r9QB@ z>dtM+pK*WZodxWZylQa|l4se{xYX|X#5A)&^+ANjs6{_3ebH=O+;?{ zWB$>PNLkE(3u=p~1&;~h?6rs!f5>ke@c`T)h+}>c`|#`gMQr$d@c{ z$j05nU!QzqlK|HizRIVo4&-o3@xc@?pLPyMUf$H(p|b3D+`6f0vF{CxpXNObKtWime%0sCe4E@JcV^qzvb{u-(37!#zRdT{hs6!BIv>v^Lc?6-G_m~yWflwQGvK^m`BEv|2g6CuK z-AvhnpZ90;NDtwUBM8omnIX#S7-zU9v&!{m+3Y#Ly-=~LV9DcTeev2Ul3~GNnmy|E zmbPHO`%)~}n{r{h^l~)j2e`nRn?3eenQ&pL$Q;Q)^&F!yV@Ht$K~PH1y=rlvQ!{<) za~DC7x6-_aClE%b)cqhS9`e$Y(b-9=lid8+`{zY!9l0~UY$}P2Px80}@ws4s=l=w{ z#$Lwx<5Y9(70i2bKYC{`o`bP(YXXV=WQSbR0*uyn$?qW2n@M~MH_Rdkz56LWcn-)C z&$Po3#oGlS{Un})A+qjSHihn&ZFOcEEr{;7<|X9cPY|r9U#TbwkvCYs6fRk@5LB_c zy~?%NK;C9~SIECRo!G*%a$;-$;`;|Rrb&UfPH|9534p_d7AYi9q%JcNPI*~jN2JepWCPNMx# z`F&Q*i@VBu4D$|zOHg%Rsv;+`~bX&r~C+lcW=%j3h9+0nRkN~?bjjW zb%IbJy3Y&cCJUaR>$HGj(pR-TDa-&f_4rhuLI8dDd zLds{wSEFmTDq$70zObY+RCgR<(VIHcXoL?cO}1Z07+pE$;*0QJ)m{ zC;koprH^>F#B+GRFgFLtz4K`kwui%Y&secuoK&)GG1`Hbz7%@j#;9B$JQu~xHt!yV zK6ka>t5#|mK`eh;xROHpRF!xwfaRAAdTmIde9P}qw1sLS2$q)8Bo>+whh7y+xl!E( zgld$f@Op!Hp{m#poNIpRqV*XF|oxzs|G59$j~U>=;=mBM7oj35kSN;x2t zAT&3Z{KhglHrd*u5Nf2C76&6$^@^8+{jVzZipW~g80A8QEhFenTeW11B zhdR;=oL_ILJBpB}zIvTMLeBbqTdWZBHY|4X!@Qt|QI7`*r9XfRL)eZQt-|-9_fLI{ zjdw)&wb|l1`dld3R8r=N-`~v9fbu!0|J2)t?h_c*DR&?KXMMy-J+a2TFwY%XRhTb5 zHxFr!54H0{p$Aof{2}i31q#`j#m(Y=YAZpQX1@`qkR9m{y%EJcp(QWhe5DTj#Rn3& z`c|D%{)-O;57yam;B$e7KBNm_z6benr5wsXApYZajavvmHa6-Zy8@pYE!Gua{d|<# ziuSpn?GvXX+V_Bgk5An(-|0yJO@pak@Xz+yNFBnOAtG5VUE3;-=cEjO*n{soX!yD7t$&-3vUTjvc^vmG z#$BT@-)qIh@4FWf&Y#vwPAA$(YGx|)BWd*~4`j>a^Ue-p-{0q?%;}~5I`x4MPQ5uBI$i!kc_0j0C{5gYqfL#0=) zL|mUJ)U3EeyzUDDjSVQC^!$WWqYXiH$-=niFyc%*7a04D@?7&6SlEf;Sd%;u?Q|xH z#`EO2Ze%YF#biqls%zfdC)W;@5JYDqy9nh+QGe>=F4ZW;pv?Znzv-u)L1n93!jm05 z)D^99xVej>Hm$l2oqLoiVKY^DuD<{#?W%$I2TGy!fhmys#RZxlRR#TnGLX;52W%W< z1K-aFla+(<;A@B@pa&~KZA3g7HWUs@?k*#%hTejr#5S^hm<_y0mnUn6b-;_fMdZ-% zN$|Qt6|5ZA2L<(u0oTw*aIamSWS!%`bd3R?0Td5DyOT+SXkXCOKza|OdiZ@Ad2nrYOd+?A@eoA)AyVfXs`F|F$pz!64yev2 zxyH{BM5Pr8zMUk9VqS9I$mCyon8R*k%9%}x+W&WbbnsI}5-gNvdo=YzZV;AqMp6N) z_hEncPHK(j0@ymoo9d5(WoBg*>kx$79O5X(&@kk4{t8Wp{lTnH@AMw*imQJK(~LCt&YrJ-Aw$0TRASfvff3!Mm?3!G_L4 z^7-IrNDi<7x878;d}I~!?@y%ZH-W$A-@NA~mA|97JIDX2K1+&B>EUySiJw!*U&`u; zi7Dg{1usaxuRH(Z1^tsgI#Q{8-XGM_KlO2rN|)lMl)CDug9>AmR?kUFTm2QK-**;H z>r_%}1{m zg|7!eqmMyg90ZPN-D97g1=b_`z@3+!VBW}1kp4yt92qGGzMmq=g25EgDcUF!c`A-)&X!%qKM@cQts>hT?o}D)8J%`%_`hZg8izXy-N$4k>`kw5u_XP|@? zpn8UNq24YvN)!2wi`#0D(i4dC>06?$gOf@MnS>Rs`{>&-B6N6jHA67TfnnPm!;sD` zVAwSlGI}bq8RfO|EZnsw6i-DN& z?j7IFx-Cl`O#C$C$VguS4Vg?H&lGp4kMKa!B`-|E-YWm zp-CCdGa60vza%2;0<_C#AP=TJW6r#XH69h*H=1Syo4n|tJKC`*)|rldJ3Mtr)j zlK2Z^lejlk8wpCq7;@+|-4<57xqwZlcb(Ww_)j*L(P^2ZVHvDHre_z#TsgpYj>%M8 ze0dw&DTLgY%>Ou7YA|pmn=8VyvlXj>6SX+r%Yy<%sw{+94V4mLqcafvpsmpSOrm z+y=?7p-#dLu~Xukqj>}m+`1+@7$Zk^LZlYns~RYjyUTs3z5cb>;vaYHLS@1T6z;0W&bmip*zq<5owR8RL6 zjrM;M-p zR@~>UJYjK%K8@5*=U{UzTOxev99%+~)p{bG2*ha@%k!p1fD_-Im05P<+=Z z+7Ca9TD_C{MG*0)^=mnT374o<%TEe3*n2|q7E8%R@m~zwrZKuKT5O}g@lxBhQ{u%Z zS1&uf#a`ly=a(gu`!-5!araz&!joSj!tKbSsPng_!NGF1rW;RX-S$6QXckvB|NNfU ziicABmHc*e$%_;ysPEjGFKb-Yx2(fDM8c}+?n;K)J;C4oR>t|pKlt8F1ep_t{JeEc z1Iwej*1Q=^rscLd)GXrVW-`|si+S;^XEIHbnx1TJqGrj5MYCIy>3x6kU9zjUl>M>3 zV_RO*3P^6r&A;)vFHh1o+u`3;61Qyjqh<)=0sE#$R5U@{%eP6P_7lYIq>Z;JZ-R(S z-0*+{+12GRQ%cy0)%*;#nv!GV{^fO4Uraql2poxBsk+KZV!2C=Ua@7nq}Be4mB$^P zO9t$1T4CyTQu>m^TAll+%jdan&srWGk}$t#v#RF$7%qiD%k;&PkLpx|)@@VM&Lo!H zF}kg+SmdCcxrT8;Rezr+3vZ9)(^4)*);yp!j3_7=1*vhR3% zBYZx}lkEtL3F2Xc{S38%AmZqq1b%Ka=KRh*P=z3(uI)I2=i`U<+L_}1-{ouDZm^(z z|5@qHHwBWYuoJ;nr)9!9&$-5L*r-~;-{W|5UAOKd(be`B)`ppSO4e@OyY|So6sb=( za%)nZwdRo<3Rd@coss7qi~K0Z5AeTIY<4xT}mhpO6IgU_|bM~{nK~7$N3=5*kOvAAc)7$cY8y${&yG$ zlmJ@)X!8T&c>Zo==)QCK_w4KQoCMh9JD6_HYU~ zQ0#7kJ7=V}u-|f$u!~di(&cGmIiGQz2~B=ruxO1I2ZwBKd5Kljj{= zbF#`!OGmuS$hN6yg%W?E{^&r2p(oEWJv3Lu5bP$7pIiHr?;>?r^^bWES6x?uM1r`n_>eR1 z>s_rlv>AjEL~!<@jlh>6&c8mGfcyTZy$*iD&;NT_yLz)9BM7&lLstdX!Fs1e7YB)4 zHuLSZ2bL&^bN5)Ta*A2JTi~1V%RQX>abn922X|ey{3cPR_j32r-8K@D+FiS@AB~Yx zU3SRfLcn9`8yea>mtM1zxwFvN-u14d9J%1p_Dw0=3wFqQZ9SLIuk=X5eDl?+a@8oI z1lujmn-}ZySXfhEoR@QO&REei?AqHomsnoKbJaMatPY{|7vPApFhI!9CSh&FWG*zS z%-$zN`ylzP-4pTrhkIw-Pl7@uKhLpb+_#NNJo*;%9!+HpIKl%Wi zB8WgMcM;43@YnG$#k`0UzQP~hX?;EFlA@xZYx_m8)Vu=T99JxnnD_SH{HI>*+J8VsXFynfbJ=oX{7iwrZjI>v)-ads_%aY0jN{ zcm^d@^4Obp6Vv)?Z`d7nBYRkE#Fpg!(;!ICi;C^i^>3QXk zc{f#_hw$_3Hxf?>fd>R}t} zxc})CcruF})fM(3KD&6|l8IJ5zForS8GDTreCs7S+2JzFQ{U%r=9W|!_ioW#E@-|8 zdQ{xs#l}DuU}|N4yCehOs3L? zIo=0Lv&&hG^p68|nE#OO=j)7lAh91$y5T@U`@gEz3Ce6zMLG?YV$AXb=MVdu^v#TIs7_2hd< z1&9k@-6Fi4jYUG?+5)weT-nmkuH9Z;%G)Xh!xn6gh;ExKe$tc z60ZjYz30dj5Dz-{z1>=kSe*+;K*l}EF4vrL9MeiUHeL9Y)H z>(^u71wREp`>wz#48ww!B6+{VunUd|C&0}4M@%NSELnaA?aNs`lc{qmmgp8OMi6UKZydw@P+iFzV>HUQ>MRj6tSIitsz)8-MDdjO^37cSW3-?kXN-c1 z3tN_mVa%*SAXku3!|gzuYEDVP?$}lP@;UScCGH&cUd{fDZ{)64P$;V|&(YW$kwx@I zuIStIA9TP0j$<(z&p%SKY_ichMMIPVMzriw@92{R<6Hw7C+alu`EUo^C{=; zi_L{dZvwCG#4x%Dg1tBH5nlyCa36ZurW8T1Xz7JnQIfTp~$P7avis9ETsDiDV~Z+0qg+<4~Q)D)3M~1>F~m-~*3*Q-Yuu-#=4@ z`{={*8=KVd`2hFE`|x=HW_JfB@%ablcll?FU_80-w(YDg$Rm$M`b^V6!&#ms34kH->2{2h3=cB;#q||H$u(~&GWJZK^@364j)H2mL7O_9p*cv?0Kw( zkTv;D=4yn?lPz915Cn98Vq4RU^l>yvyX6t?`#)9~2>XlgKsqE0PD&D5x99jjr3@>NQH|m1_`| z->C4^O;p!Y>tAh4MEe2id;X$ytfxb{ow;bgM+xMtDMfi34CbbOzLjjYJxC~N)d;B$PS3~No*Gj3!ZV|^_SZ5Y!ijzr+~=wrPMWK*QJ@( zn70pi4nJOD6PUCU1z+`h2!gxUr~aE8@A|TJ1CrXdW?B6 zud_~|xI@h^sy~nHg<4tiD?AwC;?kA`^!-$FNkBU030-?Vo3DxW^*X9_80)*p;1fPK z<=1P`F5FknEp`~V_n$nFsDpO{@qXbXe>^+p`y4Dtl*arpr(H>=*dBI{C4a+n4{T1S zB;q+3W}DMj!&amRu4k(#;lKDm%MNDNVSiBM&-y{3eWqwrwg83dRG!5-n)r7rdMft~ zE1u_~Rs3=7m(Otk1*! z|4Oaa*#ChK^DhjSxi?@^deG4_B^=L-*>3u*2+xPG%*tq>0P=^! znZL0=tSQc1PocU)U-9K#3i<1jke5xAHp&ZEb4~DE9KpK0R}}IK_SAyy^kQ^hU9a8Q z@!Xf@(#68ae}TmtJK1`4pAnS`i_m(*+BZA(P&|ZH6)#OuUV+(ftT&<0gIN`0yYYEQ zX>XFSp_~ZAY8bcB{lb9SLy5QW|JADJ*JJ)vjYj#2zxXg9vF6<8 z)Bntexyly*8{4}}WO^xqJ;l}gE>{Am6v9NYhY@PRT)f?13Sdw8^5l)D$tHL0=@!*fdZ*BHsa`-A^uy13*I zxsvrTkH_ona#PF)@~F<-jN&HT|MvVY99MSKtUrwO4|l$k^}(+j)OiJ?cm-AJlcO*% zNUdQa@$0|wgKR#8z1fIA|3hj6>tDQ>f8xWqoqRThpsmcJVm#-?I;L0~&jH#P zSrrTikUcE_;DyhnoI4*$cisCum`xDMeIMNMIZ2}JjSbNMf0%8p-7jV z|27{*qGz!m(ib3luZCHm&o3Qti*-SmIOLIFgfM1=dWO%9avR^;wEwU9DF1O@&cF1~ zwu|NyW2IPHZD|%IKWNYzL;X^5gvKpLX&wz((9zsUvuJw*k7gU1)gTC{Hb17OjBWvm zHb=^DCm;E&Er>egFioClzf5sCj}qV7Q{iv72Sib)9ejBFE1}-G4?gxyBi3}Dh7o=! z9(HrWL%}E?bX&o7S5aQ?_J_LR$R4}%;qn+1N4lq=b{vws#}aDd_3gO?7p9M4QB znW#?c<$}5ex`cV}DX3RIL0s>h0qym+{|gVq5iIXG`OiF%il^k(FUWr9cn@>>_!G6L zAF^HWI+Allt`1(C)6<-OTI#6p+F>ALjvv!wIGRE?ogOCb%HtOf0@^Ql4IG^7t7>Z4IFh;2VYnQUz$-*x0s z3wN~wp3V;V!Q~0LvWpMi_OK-OcGbbq)3(Hg?ks3~kq5~c4;NqChp-hY-I7M~8p1^n z1PPr!D=3n3nAqL-2#V%t5ZC+Mp<;0-}Irn>74@ku;23EiBzIa<3wEdi!>({xx?h;wJja{rF@VQ?SctY>cDN$&3t`!-371}_ z2;)9AC~@l>;m~&lN+UPa{sYOPeuKZ}-_)^^frBW&S1XW~!>BH;WFrlRqY0vH7b!oC@_dm6sWhxX z5HE5_nSrJM3oq#Zs*gE785h-{TMa&cK261~Spgclj!M5c6BYW1^Izmw8bBBV(mjzKXgaHW$6MFQ7=_5mYCqekP?yp8O{-XigvhRWEb#;}+GU;t4(5W~s7e z5m5E>S?cjBNif|>QTFEdA=%>!YwRY#@!tC|c>gbQy0;qc@wiOdceBBR0jMtS=z;zr zD8IBv!?2quKYsoR?>=0Q@DsfA4BcP58ccqT>V(fi@Yq{aAAQP#`VFYwZO{jMJ|R8S z1OS6JRF_q5BWt?mBYS5h?FLYNUXo0TkDfwu2a@cQC{7f_5WglR2;!w9@ooa;o2(e( z+a&rtRFhAC7ee3jxBm4%>E%E4(M$c1V1?i3;%Hkl)ug%&9&C4_Vzp=BicV>2&ze}M z&~pfOY!(1TJt?qoPZ_Z9G=lGsND=*?tze5Us`FYEU|}$_=jK|N5p@uu27LK&9zt1| z{v6d|&D)?wF{)?Ze}a=$XdP=#g7>u-k)N}Hi1(~gaB*(Xw9_A^LMnITd z$skHrG6I4`5dj4e1POwINRSMQ1W_bMNsRkLE(Z&qO;56W;W+i;9>UjX0W@fy`ytisiTK-`);gbVKl=W)vo`A^Z`MgT3q$=x8{U2DS`!yw-ryGazi1nP<5A>!+C;0MoLC0@D$^y$o7 z;?|iWf?{_)-mzGPN_EPi15ZI7)E-W7S_bvT>0^Y|Kd15Urx=6{3f@pF_|tZs$gDIgL#MX*nIFd|LpE7pA{7JnhHi|t!@ ziht6YMK3J);!n(V(X|W4c=RR(WbbWGJjf65d1IV765&N?n(|>9PYlNIjI)!c4mXha zF5jalmo1T!#uUic+t`Q~hqqJI&(Lx4zB$Uyb9*pKS13hm_&BcD#zg*nIf!_@`5sf% zH7ZG<@iOu9q7aGo6e}+EY>Z@7_ZegVkV;mli9#2C9-_CDr(>!N2CK{p{^j^rOc79e zx+&JfV6Zp*73Z-+7dD9O#tnepvh$_Gym|%aFdxV&gS&(C%x5}6%*5K}Mu_WZZD`k= z5HXQc6We&}5HVlWAH6s;Ks=$e8zs!}5mOCr686k&CHmM#6WFF_m@>Rx;a5hwsI9?~ z(%6d#j*i?}(yJSK@6EO6fan2u^IQ3XLpG?m}O zd(Rij6*yo&eCUBp6A{GSp-ItBA`L;#Z{rDueZY}UrhXF0S4Ul$M!0vQis$0!;j)$# zTDLZvjBXu$;`9RN9_!Dn!a0iQ)lhq~ieP zC4-?Nu_A|w&jv?{Ag>+UsBcU({EhP%iq$y>-#_}@HQ0{zEm?B9~s^7GW9 z96u8(d7L^vbL+(2;B*+4<2@fc#JYTSyTI{iA?8(gc8Hejk)j=b)-7Wm+C@`crYH#q z>r?;u{#k8)hcC^T!O)EL6`-vF)Ysz*O$Sixbq8n?42H(iB8$;>JcS@I5^mf^R0nZ( zt634m`<$6Jje+wpdcuqua1KO=h|v_$3gjJU*G@oOK=UetS@`-?rS3I|4>+Z*bpZc~ zAPo}AJg`4rFD}`^1mgZlR9Ks%k6cq=B`Pa5#qln8vt+ogBbRtakc__dBv*9el5D(N zH8=l(SQ)h)qFiV8J(1cIrNa4q?`4T?$&*}8QA}dTkEV0y@6iycs(8-Z5xO9_aN1U2 zDOim!eV|jsa7RA3&g6HAPQNG)j(HWi$t@Nv~&SmrSk0i9Lypj$B*dcL;`&85Nd^`CuXxd8k9z4xs6p#FEvSY|_o|dp|16n5^NB3$In#vC)iYRp`-G*SB2Z9uF>1 z+7T+w{XUSWa4J5P_q%_$Jb!k+0J|^0tj>u>p;KO`BtJBq5vOkcB39UQMS88XlCa^3 zfr7L>6Mx2aZlHc$en)wypS6h;y;MgWo}rnqgZ{dTj3uvfvMwX>KZ+xP)9=ZwheDHjyS+k>nuX%Hh#)jx~ zf;P@;)YA`T3m>&-sHWwA5>vDMru3uYlGJ0<$MQxkt@0NQ|Bznjf2jOUXP*S^@{~rI znwGH9ET;EEc9CcDk)ZJ%(H{0K%cC1q1+-X!AF!(A+{pS6&=}Trtm_zz^9aBl=D(R2I`@8=br zcea52i6fz#eBgcHoD}CW`2BxcyOSR5b0ogrD1dE7kbTznp{&)&s?b@ha6u1puz$M+ zi|l=t9iGc3_cVh!BRBCIHJf0(fex>YhMk1@0>*U|u{Hoi< zeN_7HLqEeR*7p*OWoDy~EV%en2E+I$eOxjQoc~3-syr)$p}Rymqy2=zP}UsbbSZ+k zuhtzd!$e-df3<5F{v7asz~u$JcUS&;vls^CaFo8~80>@R`ff>qeT&RaZ(;a7eyWXE zHo6xbx|BO<1A0-|`kkHre4s0|eI^d4$L4F6)1utdid}$wghEvMM z1M2qdOqO5m9vb#?%b69~4%w#i#joqPS@PN_U}m6U!?jCRh@ySh>el{g;RCCmSSDvF ziQHH2U4QPlm-q#_pXM3$R?=mXbEd)FgK`}r-Nxb z;rFx!wE^02e)|y%|0vk+&6@D5gE)`0y?!(_66m|ApA774B#dqgfqn3O-?rsJ8gXq~ z0;C}veyt=?1li8**T7ne$a<;x*7KeuCOIbi+z{8HHe3ARJ*Rk#)o{&A4_RF`t^oZs zH-=>jkDK-Z_t)+0Vd^;4DHs@wI@f*uDxSAI46QqleZz``_ z79J8dcjoGz5;NvI>8LicL1LWqfrI#sD(R0by>|Rdk_u~Rxi(MUX)5ias@v@SsjXr{ z>9>gh=f7r!l8Wt?84OXk!E`Tvq66UHJ7^ltJ1FP~s)u|Z2?=}#`@7k~fdVM7|1{1( zJ=ot&z8+|Yf;{WM+rVJh_l#W*x&pu7k2b`a%3md19|d)@$E~mm(g_4{st%832A^a3AhMfN3B9nUAd0~I z2l18C^(a(?nG!BX+vBTR$m%1n6+UU2!)_}xxTkazGrO`RDWb;z2OGBtBSIlcfMth} z#Gd&>ODui-v3pJw$+CRpF${lH8^?Nvqd)9**FCm#tR}lpk7%)fq?L!fzPX!In#{8c zc|_$3AZ6~{^6n##Bk_F@*AG{L`fb8+!>kV-r!F_vIqdq|Y^P-hdP?f8)U|5kG06JVFW0DMFMMEnT)I;GSQ_}8mC}3B3wq|^hPbA9-uw~}0EuqEoIb|6-yrL@cN@VkHW20Q> zmdv3>1e2e#7iOy^SrPBEmSl0~+2fYXA2XjB=NCbIp*iHKy+kVQ(PAQ0e{D0R@{;#jwaHoi}-UuyrNha zygC6sk4!9ZIVFK0q>=o~y`UZ>?#Rb3fw~W4&--!n5rPn^j@(&-_gxJR_x}O!)0*dY zeXU2I5^S@ce(6Dz2zFWapT-EmrQLBJP!5O84*i;gbFli5C$x*$x3~ zd6ZHP@eToIDOX^e^!7ib3+E+mT9vsP1^KwGe$Gjh6G4n#9zF~E<(fB+U~nIq!umWv zxQ|QlQ+^%1FHUzV)W_a{=bbwq#|r!^byYbo4g3!C#){{9rsy@=-HI0LLgXyfzjCJ+ z&?m~es&k=(2*UKGM(-f7FH%RPV>ZMG_?7J|g8i?sQst^7KtG?fKMniik4ny-vxRdM zN<_xsK8f-Zk+*@q5}p-5St7xHPOe4Os&y+%R3WgD2Ugen93KTs$J=k4h3E^NU3 z5JY)HQ3b@mNNg)!j~O5cm(y{1>>S|ZddWrD_eQ5Hwb;8MKlS&d1i}0Dr#iIxfPB&$ z4y~_-eeZ_*ZV>mubL!4c@cg)CTm#GGRPo`cbAACM8REw3C!r!a@(Hsr& zAl0rt4`4sID&+#~2kTbXU4wfMR#%?Bw;S+ZRu%mmJU3x;Y5BW7ziEDBjsfiN{|*21 zDMt|EeOB;49z93DL%BF>9Va$&!`DXkmI zMZbx7{x-Z{-@NmR0{B0h8;>r6e3x*cDeg%+yf}CA6CQNcKD_@YT+F}lFe`h(A}k9mAzspVLrE>< zdjI7r32_icH)>TdkTtDm~@kmD-*D%38@5feWHelE2V5gIi2i)V*dsz|UotS$Sb>Zt*-3;@` z5ckmI;#dRa(DUAR9kl!2vE4vVaKf3F2d+Rq`?2f;5D#>=vdkIKvwe6S@Z)&=8Jms( zXg_C~&qMz)b!KJ)?g^ReGrtArgHZZ*J;eTmi}@EmDEnH`F_<^~760QgT9paor}M7r zY$zwoh}t9^_+2y8dKuW~Ucm#ci9DqY=i#j2fuvfR#&Nzs;eje!ZsOqgaQ`-p3C^z> z>N4kqegCe$L!v;xu++11t6qSgp7ctp4yAkBK*g${G7B{FT=j?;G zLcJew-}mWH_#ln*HH9~!|2TiU5yUI}&d`>2VBdJa5X%6_->~?hsA)5}XJ#hQcuPR&A>0de%R>(EgI=0tUk&&EyqW3Nn}K>V6K(Vi?o*nfSSS2?z3dF_i*_q{>?gai2-{^Kt=kh#nF_x1LK-v15<@^3uI|Iav(`_5R@Jjg2- zJJIsHivKwd}&+k%N2P%;KH&~djI!0ko&>d z$ZZ)!XNB*7#DP!<C_l{x5vVlLidl4%ud;;wBG1gQH^yF?R zR@(sl_1*VaQ5W#P_u{bH^A6zr1u&^8py!KS*pKTU!1;5a9k)R~I#Y}4-UWPL7e?_1 zAg`IaPq^}^=AZdrp{I=r8y@ZXjel5?!#~Pn1@G`r^7xBhERgYB$InRLieB6e#07Sw zAcyY-Vz(kdJ+im~n~wwe-F!JVmi8J@8La&%c<#9(Y_t@_xw#tbOat(f^E9lZ3!LwK zKNfYq0YPrB!5)u+_;^zR)3^foxbg~Zx&iECayROJ8|cNDI?BHYPP?z5p#JTs006pG{a~=Zu_Dl%QedHtH?;9>~62!3?W?Y~FTRsM7v#|sL%8`M$PY&aG1iNk2y)&4eS8_{$vHW6{UpfK`t%8xZ-9KO=Nw`89Pk@m ziv-&T;PX4B3H&dT0pE@U)^~dmq}dXA_YTC>hBV~$dmz8!Amr0W`M=BIpKuO;mB+$q zq9H#C>z{u{)EAk@*4`Q-?v>*}_s_f`W~hY`?#!qXlh?!%_RR1T{jKTq`S#@kfvKj1!1gtYFkKOf{P_Bi(0Mo%`Seo}i~l$7;~xDn?uiDi(7Rq#L3{!W zU*KViAO>JR=1qy~nZ9AXw+)Gbvc*Y}@eWtiS>}oCfFB>K3lZe+ zlOv=nOg4m%lUbxN=2m2GVu3Wsb%PK-?nP=7NkJ}+@sTnV;sKvMBtzZ%5I;Z?umqoX zX_;8yt_tk9jm*8{2|=_kf!Z7O8Sm}MqBW&#A|CG{&~6qe6MH*$(|s!piIvS%T75km zda+K5&fLt81y-J+z3Py~FP3vq9nRjsYfHV!g_job){-gG+>KrMvlC`S%DrLYs^VxY z^3^lq;UX_I|>CtrbAmH~!?k!A=!C;xqX2pa79Sa%4Ef@?g`^BA7^APuPHBc%Y z?k$+)k#r-1xOVBX1T*Z@j&2jxhp#VW3f_nJ`G@&=>f!zVp?>y4`2P8`G-D$0!xxrG zN2zd6fEDRBC-7^-%cN25>uny#6Vwk|PzTw>vTy`Me9Vr*%il=Q(Tp5C_{&{(wp3+& znZe*qPIkcm05l}N7=H$+lj|I5fWZ)>ui#+DFr{^HkHduvO1iM$J2hv>)tXGI@ltJ&wOk%6xN{>&d>uq=R231v>Uhk){B@PT^*x2|z7^14x$v z)wB3aE@3d_Ue117eG-3z7@j}1Itcc;&laoSgnakDR9}R1KDt(`J|OY|K6WU7gZPe? zudA*={+rAdhT;8^Q<*YJ_#m*;lj39?`r#A29>n3P@~$9X|f zmU`v*0bWzXi_D@&zY1vCSFvzqBSIctc`S|@MuOwPsw{4YMg@dp`j~AJ_wk!2&(R+q znBr|Y5=8$HFU#XyCdXX2ALo*8nqW1E8D&4!_mbT(TAJm-UVRqd{`y?$1x9T>MqYtqg{|xlbi!BZHx2=AK5e1yo(*Ic0{yQ0}=F zs1rj3b!cCRE(+&fbl=fwgK}tJt=&%q@vHHwUL-vKdOw{!I0vIfNk<*Zr*glhI-LJd z_D$Ub-m@rMx2hFyM39qHa))t{@079%*TQ>wMdiGOELYIc!>j_@;$-^0^fZwrO%;~j zWJ~et_1dia_8*l*ocq~SVvdVn-^Ry!KZ-8Kv^$pN#U84NQT%RJq1|&r<=N(Jl#nBW zoG0elJ9k#|EuA8AIqk^iQS1%lmGD>Rq>UcoU*4L=I(O4XIL}L(S@?djq@^1h?ZnIL za&?Z^=-e)au(jDGpa^4CTfJ_h(SU3=kIKlsO*JiG<)Ic6Y&1OJd;rN<2C zVdRZzUW0R44HtX-fL+oNr+(xZDLIkJ3Qq(W0Ixz>7ZmLwJ|^2EE@iuqPu6R_IE zC%mVvPPo`%w}8&TQ?XapLp(nwu1PanjB^IuW+-GCEwDU&qNL_w=)|nH?5UZq_lmyx z=aTNS`WW4w!O)9S$)f{(&B+9B(p@#zEd&MOYy^Jal&fP3Dk}uZsxUQ%bDGl?jcsw@M^X$7&2W&< z#QW-tFoz&W1c%lrUpI+2$WQIIR4Sdrw^TJ!^8mZDXO8+wGae3Zw<~H}owjh0T%uKF zeTO(x9rr4K4{PF{u-mh0e?lhjtd*bQK+X>VA+zUlH%>efp{~=B&Zy6kkkGp?v9&8m z2GJB1WgE6q$W`GNbe(>q(kgp}Ct$HnizxDiZR5)=YXk%?GynMhb)6&UH|AglW9>y| ze`bF`tI5$awZK2<3~E~262bG=Gg&jkJ>yj_R&EgIQ|51N2k{Tbk6Sz7Af6YpS!=<$ zw0Tq3op4Wc_7a9(R#s`Yye#W+ zc^Yva@5e?|i5aS|i`<%7l^?9)cKQ0})`W3XTA3JNwjrGP<^p=Ip3OX@b+2^p?>xyD zqkl&`Al5>rv?{3y6x zwsJZ|#hQDgRM?`&YB5%_xYSF!whTQ~bm_Z*jy3hG*k@n|GE_I2O+XJ6nRK*{GZ+$< zeYtjIi2tiLv%3Q4@s>r~eT4M*Yr7Zl-eKWk2Q7FnD^}JiIa|^;;@oR7a~H%eLyU=> zViRUvtW-{)Fy-B_pi5=zUCX^ea04@Ete)@sL#~tD9GVX;?r+!U*`_vaz7*BPo2x8n zHgSlRuSWiu>Bjtn0#Bq)8)sMU6=4>0TX*(!nOLRZEyMPKQb`3~X@ls=ZPHgb^z=5) zuaP%k=F%~Hc1)?CI<4*bIce22<&4I4;1@M0{94x-3`JeyR}&`K_wGSA8bZHNA>X2nxq@+0^LyQP8zDUxXEqxPByy6 zUFQ^2278q1hfRf>SlC&Wx;Aa`Yh-^R_ujcT!iVFm^dV>F%Qqz>ni2ZO;=+?nW9PXzUOPX0D!*tf}G02&1N@AYkj{kue` ztzY2$i?~2v9@yuK)%O*G{lCZhBYt)9`7iv#e^D&g zrIW#6d(kH1G6?M=OElmKdI;!0$97J5-iZ?d-tcw&gYCKy{}FpH;26B$y=Q0eHna#q zLb`W;g6{{u+UfG^{4eb^fb$N#&IU!JAg(%91+l>UeO8M>LKNUPOn5{1SwS4t(hqsT zc^#FLW(ytS8zQoc-wvTGKBNvxZr?Src7fh1E*Mhpz)9aKEFXHtCx$x1FC6N>TaP@# z%NrVhP@IBsi-d+9iKNguQbS4QZ4`Ib`jB<4g_N`OJG(Ro(x_{wLOah)u~NI4Gy@kG zdZ`Sez>aklCJ-oA5jn zWP@Hpc|?te1;9NY;jhD{;9Q7ZQ(*+S4=1o__d94W+iZ6?K-`0u@NNs(_jXwyT8@Ie z!&+_kLAXcDxH-ZN-fP#kh}uIvjUe))(E%)g@~Oqhb4;K#eyLbVxviuZLUyqMYl|{i&O64DibwUTN-LUvNvdq;%1c zQM3PC9ODHo2#Aqbf_rKxr=f{>1+Xm^gmxdF)u!=MgAe!f0Q*+)S+V;d z9xx^=7KgZ}NIpPw5G2$vwi(WM*l{G*2L<)-wy>BD5dYy-9&-`}@z!N7CI{UJ_!ro} z2>bu0-x5v|Kz*sRlsE-(GD?RMzrs00B5zZ;VSk7vC)E(*LWtio4l?gY5SqqePDvmy zR;D~Xo%bj|b8?=eC8(2W+m9-EtVIy2Uw%|Dcs?>cuRj*fjVRCUOaY&VCFLw1c?A1A zIa^C%AJ8X9q)7qZ^UXeTMg-mq&OSWy2KLi4)8Y3sgr3Zyr7Q40ZF=8p3qV~mvfsiv z=&}cwKKl?T`H_+K5FZxH8-D}Zd1P|@0Q8f)_2XtC{wGK)-U;Ggw(X631pED7nep3D zM+DjUG*J@D!Im}I9+g87vva931W<42il$jX9FfY?v|zZ8Olm4U3k7)@&v<4o`VH`- zl5LIyJwiwGGFZX?!PAR*#libbfhX!TL7hkZcs#|t81A(=q2L1ddeBO2wu3l@>7SH} zQHJ-wi(QgzVPCk2IXe;d?Fto&;r@sD0?h_^-+Qv~eJ{Kh-%#-Kq7}r6=2h@oxiq>6%7x=(TJ=1jNJ(=$oF8%H zB-aq!6ESttZXD<*T3E_92hN3XzvSf7$3Njf{)LCha!qN2eeONADKBAvf7kj$wrKco z{Ey52tS>0|+>Nfet|+i?+XuNxs3D9 zun#U!t=kWA6)$V9Twa3vKx*e_K|P47*7)8B&q?U4DS2k{TOMhHnes3$tjzye!T-3L z=aoZwtl)p_SPR5Z@OIv8E&hT5e?yu+@rDTX8!H>3!#?KKs(Ar8|HJl_pyD9JH8fOd!u=E@6_xru0P>}u;%V8IRE5oP#mvup$(5Vkiz%Sv-O-X$& zfT}dBT~q}>f8TWL2HX>2(c*fi7w})vdhFS@-#Czr(5xjm7bfUqHUr{dT-%RXph&5g!l(?^A~M6*Wg9-9aGrX ze&0;6^Md{C=2B00K%cZ$2K)U9A7tGAF69E88`8mB1o9vJN86)v7KjsS*Jyxv8SZw2 zUig2h?V%&kpYCdZbk+1vxR|@W1CJek<6;t@k0f@fY7F9qINPgM!#OGB zo7LCg_Y>Ip+PhSUM|s$2!VPg5=T2`DgSZ#34!>1!ZpVxE8Xa&B*sZoy6WG_k({|nt z`n!AWZtl=;EOxAh{carZvWm8W{CDp<2+yCdw=Emay$I?tt^l8l-|FFSfIm0t_3!3~ zexrNeMK~{HLs3S+_;|KjC8jg#(GZaX1O)hb#CW=WAvBuwHPuRQeg_(^fha z%5Yzd$#4aR0sS?4T}j1G{Kf<6v{Zk>E+fb));e`KFG%=WT_P^!o5_o}Vus;t6*y_y}Ura~O(3NC7` zM#C>$jP}}79vH}*6}6f+{KAP2HJRc--)Qd5XK{#U+thlG4DIuAhc`Rqzq$LEAn*^^ zhJH*D#=GTyx;i_YW74Os4{<_o&-j>ah39|fsy&EH*hpW&X5e?QzJ7N<5bvZD|Db>2OmQe1FHV&oIPS@(wp%2YCv*_mcGD z@Za%4EBK!cVy&wo-o+y0bP~kBn3i>{hjWn3{ku2etl;(7ur?0r(zQ}US-2GNi^@ZX zabU+HRYRBY_W#Qql*I7_UWgM^nCuoq0sT6ur~v2X9Gqm=fOxjHi5fi^M`|ZF89_N@ zPQ0@Meiu7DQRfKk9*daFaEExIps6t5xL@;8Tz5iTo$=Mc2&g~nuSKT9JwqZl?&U## z*=B@`Aj@z4&4pl7=|I14=VMcOzz^O20~p_b%FC_M^aG&Mjg$CxIWhbplhk0sQk!6}tC!AK>2+HNFGl@s*P( z*Zo8PIS%Ci75?L|dNF?n4|W0ZW<@XNEpX$Y7RWCy8*vjn_ZY4k5B%}XQe6EIu;UpF z7ds5{nw#3VN->E0H~VnmD&WUw)NqcbG@#Glum^n*CyRT6-PjdE;x*pxFTgxwIc;T>yUX;v2$|2cTXV`be;TjQySex@>~wlJjpl{6Ck+ zzxw@iMtH49KcYSBh9B_oy;TS@C{8eY#Q4qs3a#ZO=sg6V{~zNW{vwb0YeYpkH}vD} zNa9A7F4TJVDbYjsI-zYQj~HeWOV~P7L3FesAdDO3L~a*wzSr3BbJrmgd1O?A10OvKKg{POppMSxln!tHZtie8Z13xkP0=v@> z&Ush|?HL4h$-qgp`vUNT{oUxk%OL)o2_?LpP6m7?6N+vgK#(p&g7+MVCtdyov!$cI zaX>BAKtKEuq=cQo{IL9=aY28jbDqQmUOsHsEg|A1zBkyq83*EsSSadsgOB)BHkUAY zEr|F@wVGgcl|sCxw+6Al;!Nx@1J60Vj+kHv^4Q5%Vz@iV*T#*BoBTmub-4lm90s2E zQV>267YX<~ho49Xeql5oKavmX^wClLM1?E(xhM9h1;owaWbAe)`1!ewXl*Z?H_n2l zorQRhUX)`9r5nVE(U6UWfkcF-$@jiDj-FPP7y38MM%+d&d7!FVp5=*A;N!oKS|pF~#8uAR`MzbsuloPsZzZ(ExwxxKS*~OU~cL^-}>K=NoW={8;clAHJ><#F0UB zT%#!yL3-!WgKeO0=-7t3bb|V`^*!ND-#P?o-c2YR0(#TvM;N#S>ZAs3Le~|LpVw_7 zG~NPnu~vX!@c_i@>IcZHmq70-z9W-wfWItVg)F=U&zEV6+*p40dp^vp8r6mvP3XJ9 z%Jh}Qhx%MAC2eQI(Z1;pk{`L7kT^vqZKN$D&Eq+w6Rft#$+2M4b&h#t>QXl88J|3| zW8^#OoCvVT3j?GCIqzS6e@q?3{ozx@_O(HPej?i1fc)(|3qIuzo^Rki9=HQM*SP^) zHX7ug=R|S-lvxBh`xTeX2leGS0W6{#oM%@Ydbr^U;CBg2Yy$avgEg++2IN%pgecJi z_^BGe(+5GFTB(JxjD;dd`7q(i4WJ)oDg^nva1Qffr;P?3#y_v5OO@HGY zhANrHN#J~kUXrq?AU+R%CLLtu1bn5F=6Fwn=ckcsMVJ6TX(U}a2|(?LSz189&!NQ4 z<{&>jtBt>M2ItwwflK-s06y0<@rMKd*Iq*|PXPHsdklH$lm3^ zKU8p0l4^7SUpiFLM&JjIKOoz7f;_A^g-K`-)Dy?bNL$7`5v0f#FPH^-Rgi%mSpxLv zZGy@hkeB3163}mbs71CS!4UBMFe8Fs0O;NAJJ1jYgO)Y>Uicsm>W~ZBA|6CwSA)(% zcOm}cY$AUt4xZ~w8BZka_x5UYKEyx&#yNDd(?7y__}vPmFHAs=J>QAX=|FznOQZ@e zQ9xBl7NR6*zr=J!5a+tHh!O@%fHo7|Z9$#g>`6WCB|{l5a!r`gZ%H5Ff9u1OK7|Y>?j}neg(;v6U6tHPs9mvBk=wca<)3K_u9wI z{ALr_ky0@i+!>{fJO1S7+!U6NuV*m0oPtX5B?g06%gBS&!C;8aj&D_(hJF8T zT(JY5f4jW=A`bGJW@q_0ST~)TkaLCo{yH(4Svc>ZN<&%{2YOn*Rbo5DQI$RtGsi(4 zd2&S10S9^9$xu#ZJOcduE15*H0KcD18RPzfASVv7w#yddr3Gf3?s^ZH(sHVJysfh- zgj6#=pUqz=`N`9KgzdhR3kPj^Hb=OStM?z}p~pLsGh+R@YBL^_cklhqdE}S{c|2O3 zeYWNlWj1m%>z$6xG}}FP%%{#v)9-|_(*&kpv1o=kk~iMLSs(4(LTY*u%VDsCnH0MG zoL9iFlob4fQz+l3o;1v0h>5M>f#k-Ro-r8Gc_XfB;&2cBX%AKNUwb|}R1Uy%uk%&? zHTR&hLuD^K_fl8oN*tW;acvb<{5*mbR;)6^fgjF)EPnw9ap)*bW;5Iaa^#i-KkSp{ zx$>9eAWj{LU}K|bBS^*_ZaHBYCN$};fQsrfN?p96FrP^V^+{B?NQnIvTHT&O;c#ye z+V0R#f?YxV)SbIj1a$X`P@{Gp=DT(1CyhVwA@A{mUb^*mU+%@KTP)swEu6h=OKb&O z``L{LFL5k*?_~iMDL04vX`1bV6z_=3QA+TWDZw$PX!7Jc4>1l0H?r5ab5c{5Kgp#G zhTI3!cjOa*F46Xpqkr}N6}0$aU$0KyfJy{$q*7l$2lo3cap2d}iE3Zq9_Q3MD&CO)lur2$TpdA@N+e21!2ieY z6lLN1jy>B$6-$-nqs9d5OWxPrPv7F7Da~t9O~3D3AQ|LbL$~yyN+@j$qHpqY5PKi) z!Cd2hS#8dl2YjUs0b3$fjH?iXq`;Fg!LjYIaNTv{r z=__`Z>+40e*Xc38y%!**ZD2;*`)W|`jIIgQ@yiRPGW9#uNCrdgwDJJuDubb1$)qj# zj=_*H??0yf4$i-+C|;)q&wT~&a_qud1P6AWe|_yu$nW8OYsKN*-7Fcy-8k^$sSnn? zgx@0I@L)oO;mH+uwuFB z0kXcwcZF(IUHbb?eM(Df9he85$ck;YTbYmB4=S{JF0g#F5tr}Sd4cWm20OXL*a(hl zvv65*+B>cz>$XcBDOBK{)L$n)QrRT9Rx4HHORJcOv|51R+x}_sXeEBWbCE1`D@1?Kp#>Ex{s6{l;Ku$P>THEixEF+uAEl%^?1% zG~84Q;y;S*OwDl+5A#DzE#Ut3+%8jHxUW2u&(sLc(@HHdeGb2$N|ZF~fb)CfoXj?0 zARpV?W3Ge(zV}F)bHVulq1`5z;rDw%dPcGkH|CqT)|q`0iFJLh_d+;}RA*1oZc*4m z(_f#W*`(df;$rHm`N#SKR^7GhGzMJe+2eKJulDp$;7rq$RF{iT;jUE;P%Tbe=HpR3 zqMUtXyTC1(S|y$`A>m~Sb@}F|vtmucowDwIEt2|tpQM&AJ4m;15hP4!dgUBg0!1Aj zURAt9ixOUXKf6kg(j%k>^gxjuC0qpTL6hjE<-%a_$G3)Cw81?n#UU2UP~Qt`*O%d0 zz^-lA1J4T1zkR(A_8LL70V?Q~$jC+MIAd!x`+CI$quaYrb8yHh8%ZVbaXggrT>C!f5?7&^p<#N- z2ro^jWDRzzn4gdDvA$DpoS-b%1KpTWF`*x9soJ}5oE52~b7>YlXciBlWNIY8HJ4~) zYFu6Z^MT|blg{dDh=al9*XA=AoI}krmNGC-6lPi_!M)RYWmZIZ@AANc>k{ny?~8U- z|8>t0Ai=Jv&sK7~FT@$?%+neQ{@Z&u|pT(^}G_ngr@SlM9|W^9cme)A0`A z@+CY~Nb`>7KZHk1&3ig2=u>g29#5jdAoaZXfY(Nw8&o}^vtE9lj${Ra9bTQmabz#P zInWC;KfU})j45x}r9Ic53Z>exY<2(E+dv(rwYfEncF~;4cQ=dP z?4dP~BwgwsCes#h`%UTZndy#Lh4Zx^T&(_BuG15U{~#zkYlFP~`USwgulw3< zcCg>;yx;c`%8wv6O1@So1@N!nD??%h{CfmQ(Lf%(>iqU#R*O9mQpCL>=3Q+HgH zrIM_KSMBK6TO#uat_d8l=3^S*r3PL0;32kh3I!bqa=={JXM=`g?_wL-ih{moYGbQe zE(d)--hkQB3xaYQ954@RXkc?s5w?kJzQcQD1BQ^|18!e`gXQD7{_}N{0I2_dLi41$B}4LJ%v&y}0x2cnABP&MG@%Apdr1+n=GJjx>wfF^aAN{09XW z!TXNN>q10Hx(FhACDedCi6E?J!#S9N{&7}BJeLwh)p)K(?$Tl4kGRf6*;#JIshr}` z5$;AJ+@U7#=it3(m6+GkJU!P`lj%?~-6&GdSVf2CSIi672MKGe*uPZLfg1 zrhUWPogp4B%pqheywAMLH>Bhj?ngZ&7tTHK{Sso2f;x9gQ^-9O@Z)wUBpCAVv~|~0 z6!=+N`mQb%oV$fb$SuMT1X+_Go=2ER5S2e73ZY(z&qwk>J!2o*D}}xS&z%~pN5cVs zFAnsIgF1^%3R)7<>MQBKple#$B{0=e!;1@?bqSFfA)R5?(jf7$iA!3 zKwV4_iKcu$O<-G*!^-}v@ccaqzxF+C53h!LA1D!?1o0kzPs2At{L7Y*@M#ppO*gr4 z8x-UVj>};SP!3kRBBY@l%pXLaf;fORPBF&`K#uBGvGTA#E-Mf#iGuo(|Mq@vxJQE; z8ZQd_W9Z97cRK9fR;7Iqt%c{BCB9l2@Vk^LYzpT9yvm|DfjEU*WsUp&0rwfC)r7)+ zL`Z5$>{IYsGle5l9`=7yT8e-l!j2ufR}1H0_#awz8urb#4v7tXfVhcN?#T}D|Ll^Z z=Rv(p7*3IV4Ci9#B`htQ|CYzfJfP6{sAhPBk=jy{v)vtH()1n=nzWIwEieV?psdNVi&EHT@$AI=Gg&#Ar) z^adTsF}w-RjnI+f@({!|LR4nqOSa!QkhFWd&q6uu!eUQAJ=lIZCIiNOUp(eB%m+MI z#Tug^-?S}D$VP<`WJ7IYJ__=0lf`5U!Zfgd!xRUI8`3C9R)Kt~awpAT;9O(~$)<2l zgn;XzT_~v2m>;APG05kabn35tC}}y@xPoBcy8w}Nhkg9Qlj`E|K6XLJy01_l3R-M& zc+b61$*T_HV~)k|JPPLp6z|#x^c0IJXi9?TFIW(n4fm$Z=&&=)9xCjpsME^~i3B=WDv!@%vKB#&|x)^4SAW9bLO6W512Ujz>;2tI}yNqFs z4(yzqbqR;~6!Ba!D)e8S`NO=ia4yIR1sOQkVE)8Gb=cnG9G#Q7?gBv6bvghVw2qm4s)*d*HbxcZ*=(^mU17&38brm-uwS{RdA= zjfeOBf8b)ypUi!{{2K=nf9;?FoPV`~|8e>wJsi$|vN@LB4E24(&a6oSI3IJ-?6oM6 zqhVJz55!66;@Mgl2|;uYWND$``Bl&4?0~p9>9ky3h=UQ*&fNj;&$Egg#xU^tB;t`^ zB0SGm1y@;sUqr``w+TR6U;a~}6+EX&`To_(5Fb=Jw-)3dm_q5e6}0ciWg@O{?u%fB z#&(FC(y9yzhq$LVRZo(kJ~daI$@vKTz7^LC;k*Q5l|mJq529JMvmM&ga@F&}@&5}h z=3jD1NKRaaetZT0V=s2Z=9m9_cR23P_@8yzxeT~xPG9MW0%i&9q2{m}!~y*i9*8Tx zfQrQdJs2u@fP?snOBW@QDRBNpi9aVVoQqP{ECT(Zd9{Ng&~qHEI-&U)_W7#9LDmWV!*C6+m0z=`oJF8j@`pt5JX~6u>zbA#GwFQ zgL5V$$4wzl6>}^_X$9c_->FdMf&KrEn&;xMe;v|5SOxJ7PwGvzVE?+j-f112gK)U6 z%o5Hq$f;Lz{x#3wl+BiVfG>$tQ=$Kdw)c+5x^Mr--`gJ9B$P5TLSvMna&+qs6{r-AAPR{dvzQ!@0 z$9X(o$Dxe*{ub3WXh%)=Y)HpGGo8C96@%O}b-Punwjv*9kI$*QFwcBln)bam+=|-aU=YnIT^)M&|Zv;GewG|@%+u+6;Gu1kMg37l}irLkp!WC zx739Odoo$C>>~~SUADh`JKaqX!nzfP*hhw?tD-pMe;lm|7gfOd?lO~YgYi_;J{5Ql zeX@DolrZG2G&dU|59naiiJ9n6iDqGYl>c|l2VJlq%7d0ozQ_l7zNb1O9eE(FT?xoL zG~N4W3i5?E?~UG$bv0hMEAPlb-ow6}X8iw1A1T?+t`h>t59s`U;V|xV_mx{IqdbsE zx2z9{lkET6{t4~+?5E`cG}vvcm8CD~jiY=h3#wESc@ZPy2p?!#K-Fs+{J&bvjz_2m zlDa#NVVw|uyPD~Ef8lRF(8GpMafnN){+7&fATP8@>o*Oo@AO9-t&4X3U8}s&J><=` z`dLjxJJ))|0qy4Xwis9B$KBj(z8L$#w6sr-IFEj$!!jP?6-K19U_&SFWB0?{VZZv05{Fol)i#uQ*x`+R|_idC1;%Zc(gS=tOm-RMu z8Jz!z#vXe2X#JO&T+3MGdyTv{a^CNQbvd=eI*X7e@*nGFA1SSl7qA@6Q>q56tAFwHCR*{w^{H`J)m?hvuQ(|J>iOa2eYDW0}5)mtP)V z7KC`}*?>(X;>VHxNv}^W%L3d(HxC{v0Q@~tABDbiZu*g>FdjRfJP7#o@4i8n7t|kx zkM6@rzVd%t=i(nchyTI@`Mb`+|Ia*-2ex#^)gAvI@Id}sU4#GS{*2`NZ!0r?OBNEF zZ>BSb!GIgCg){n5u=dV5xFD?QeyTDMZ&@Y}n zMa{Vd&pB&F{(P|YpFEJhUefgG&C$H~|KmCjBlr2cSQ)dWl|xaDXK)jI@s{m2xs0O^<~COdA_j`AS>o&WIfJdppy|G2S)4OBQy3tpeXuA1mW z?YN@J?p3d%gf6~jFX=od6E23aXAPf{2Ip6>ofhhZ+WGD5);T4=<@?LnLJz=kr%hO2 zKREvrS6BvlF$33`w$*sg{}WTO4(4&(h6zjC4C5sxaWkCPfFrZH6wY zePa*c#^dqKt`0qrYbUCw8*pZCE7jZse)f)%b1!FS<#l@m#Y`+xnD2XZTcwUE@HcaHEJF5TcHWR6p<=l65A@*(7>^P!xY z@=h}TObO?ymPho~oKNv{GInT(yxDda@M{AStc^F| zs{U@KItcuC-xkI`3jF$!r;Kv^Ie4AHsHGgh{sD}1F6>L68>3hZ@k75dV_5@!vag)J z-2(d3JDyf=1HJA(OeJATuum z{%P4ruDP*%bp0c8P*g~&J#-n}hZ{%O$T8Dt{}G?bA-?B`0=!9O3X=4MZUIR6+Q`)~&M>7zYtos}@GLxS~i z1bouh$O(Ph<%AvXfxQ))^n75E8wu*P2`gfr(bn1s*xwt>`Zna1AE+zhG1javzcs58(YH^)4=6WuJq|J~h zmnY&!(x)kIzv!Pt`+z%lOROH&8P7eG2E23Bj(a2v>p9ZSl`DeW_nhVIR003>Tw(7` z0i4w{lTDd{>ojD2ZNPpV+{Zkh2XT1!eP)Fh#I;?OjA&3loaZ2YWEJ4<&Smt`MDS;w zadb~Md`}lm-!HBrh>j5Y!4A-~J#EzDT6ljGMVU1K4y+F$5AB9HtS+7O>j2!i^DepW z5ZKw8ab!b3#1}gX$Tx#9pQ>sy|1#K_%01-NI}krqWRdh^*v}FXl6ra);_Z*b$=5RA zUr!6VFv&#FsaEbO&mvNGU>o;|CyX%bKhK@yL%vEjXCeUj=}0O!S11nF^^PkL1-U!u z!X1`?xVYPkJ0=V9P1ickUJ2~c{%`CvRgjDQ9;~-+HH-nQf+@)5{(H=cIWV7&)r^Z9 z;HUPz^pHQC``)W`Mik)hy+QPjb%4kA=F|Pz`1kv?KndXKrkB);ib_0BYHBt3|LP?2 zWIe<)l@F<9yM19@y5!PM@F!&p$gW=S58L_3t`qS6B}3%O^I&I+lS!SMfUky^ZEmSWf+pptWw0^HNav3C{WJX*Ebbk$cd8nHZ6 zA?|41!&J-!yx8i^%$~O%I3g@X{6J_K)zZg((P-&-n9hL53<3|G-%VOwv}Pu zT*j*y^uIKX{a6mTsEFe3f;td|p6tG6zy$>+%-l|p_pPq<^uCV-u_cWBa|k}a`2iVw z733&y0V(qU&S_H}arG70mFywn$)_U(k?urX{0w%~r-wX0Jj`1)v`T6P=5a=N9{c1Z z?qgqrHcK%f+@IZvW3uqRf75mmN#^M&&!PS`AIZVKHSlqBdAGp-jaXk{zy}RyI1?$5 z`-W0>zXIUb21V9H4bG)eifJ%xfcI%JDsv!C-Sven@__T%afGiV2;{diQ$Q&i=2gY; zKT8FBQyjymn+>1O&*AUi405??pTOWYu%p=p{4!M#?`3827BoY=k-3}4t`q*A(Z~7s zTVkG>bvg(8lIBGl+yc4U7)4eiFK9z8aq|=2Ki~d~2Xs0?=ht|0t^~~v4-0#Y@L*ck zj(vygY+f(dg}jG`YqEbZpy#!ZWo}};RHG;(%s^aIWh_~UdB2L#Fcofq4+#{a{4S`o1`~n$cA0QFEYkbbCaG3ecqZ(Zb`f$G_JCm zl3ag4U`Nv%DsEjCzfe~Kbz`k1Z_x2Ev~j{)Zt%iSMl@c5d3SFflN9(Lv7JnBbm^FZlrPNkRVPJH=Z7*uE1gBsD>kvhQRjr-H{Id{BBu))cCX=? z9v;md9;*IWI&J8B_vB2zbeU)$yFdvtrqRbZx+8E+JT3YVC>x zTvX5)N%y2I?qnb>F(c24$It({*wgYwynig&HpZyQn7__fP-J#DCm89aCnPmsDJ<#1 z$6t6UNTk|zHqYn#>&BdPp1}>gb`c+RQsSonr6#@6L4jk2L*H*BS-j*i9BRP8O%6?T-wfxYL%mfP@)IUIJCh_vJtSwDC|%G30R;JWL(WS$tk=j(cM zS3cIjj5qM3mExvp4m^i`+A8nTILY&Jcz9AN(F>r3mK~Mo z(!Dx1xM|L#gP0Er95xBT-@W~$jm}{naM2Wl zdsq)+{@H1bGQRZu*?ziS6A$tXSlpiyqq~zo-Q@k0R?9?zC5AJ!Kh6It6g736*0IG2 zA}ZQBnoSWiMBh#h*2rC_AXcKHrT#6uQle@6J=Nh7cd5U|eN~aDyCU;lPI;p6zU6YA zQnnL}jta?liODLyJGV|DMW|)m+B?chhxzA@J@CqMLKd&Q-0pAY%EnyrSY^-$S2}m9 z+3>LFlUf%G9<&R256y4=lK-_9yRd&;>Sv2avt(+G+;`p-6O=49c)Zt7e2ti!{)WR}C9VtK zoA&KYw3M`f>eN}cG^IUx^>uH)Fqcu_X6fAeyhWy)_0ihfFR+FA%}J*2;JDGx1()WXb#pym}ILU(u}Cjxjwd7{U72|to|+#d_4Ogznz<=%V5&0fM@mRjQx z>VAekC*kk$G3Xl|A}-;X80$kvjydjmGChZm6>0a3+?Gl26x!lZyEBJAB(Q$rroC?T zdA@M>rH3!kr+C)8S)Ea&KeI_LpKi7?YV_^}&!1;7%G5aLXP?e7dE~%+LBNp_q@c^Y z@7t(PW#Y5ju6wFk2%iIsL-D*l#eCf`@9nzU zXF3J`X5KBY@0kB`n7QZx3AofIYmp%Nh9Hau7u8`s3EcpnGh7crOblCW&9|8##P9k2 zDFk>=(s1eC33}uwsRK)&Pd`g%NJ<5Kv*oAdL=yvNyXg@QLc9Sp{K4-CxCG2w=|~X# z;Q(_n7*8y`5F$6*HSxTG)dre*U+j$x9vllH{ ze;@ljI4mA`)eYmg#ae$U6B@){?km12kq1jE?TeXm&;u9m+nC>r8t0RZe28#kpKZwZ z@qZ9di2CiTv@{#@T^{q6>QeFq;nM2QVZV#H@BA{5-(Y99WCr<`AgnExY{opG$qhd- z+=r>s0RtrX;Ysg;bdgUabvM`n{R>Y=s1Yydn_x)9K?R5_L>@(1P6d1}los`37R*N= zYsF_*kS{JMLfIGZwSEt~upIl;9}D}QfO+kt@H3hFVDyS4i$T6<-iZD>yf@wwk<)?w z&ilinj^aJZHxcsZoU!ji$mXkeVErqXO@EI0P1Dfgcdjrh`mOsqoBW;}>}QVo%BV9- z_TxR)5Y=T3$O8%xT9%6aeti9d%kh4@r+tX*uk$YmdH{w%dB2WzPn;Tp79;Ov&Z)rr zs0UVNLB`03GN*%$e$@ea80tqtoIH8a@*^a~Q}Xx2q$w9z=d_4#xS!O470>xVADO3d z`tq<3JRu3sb?`pxmxM42C;YvBjplsJ&*;Q$^uhe(>gfC+%ww!td2lt}>wOcwKV2U4 zqA?!|;rnRKm|Hb?Z(caop%v?w%f`j^ioo{_$9N24zxcpdBfQr~?psYfNX30vJ?ZTs ztOF6o^Z70%mc$>RgS?-R&aeq+4+A5^t|ISYv0Yd^1$fxYDr_pH0QzsS{17D#@~^sl zJj%hGw&l~%FIcID9VS8lO*TdxCE+}#`>mKlRuP1z$ch~l%v*Ud>M;fJspQL*oyafb z@rhnX10JWk;|7H>zm}CKI1cmmUy?JmaeWt)rkmnD_n*l#9g*kLkX+-9eKS6+9~+Fk zfbO+iWHaVz625O3g4Z|JGWnRVh+TKI9O53@blv2pnBRCYVu`KC@jmzQq%oJyz$mm{ z=PvkjGBk11o8D0#$Vfe)fX$JA;yL;CMDkI9o4glBuEaVo?rITlknc19e55<>gRR0! zIh6aEX>`Tn^VtS&4YZpag{N;*k4D)J+=>dc+8=M zN$dd3XXpAeqI+RfNv%}Ed$`ZjrL{5tRiFCQ1m(RmwayOn`bz0ho_L>MB|R+&>=?5o z<$Dz7cQZGd#e+UF$ti#2VZM09#^u|=e$ZK|F}tw7!tAtQI$&w7w zXG)`WQP#{3D@5LoU)st)5byZ-uWX?V31Z=?l^>D!;rw}39R+x4R?iwa3gU&C9tlrK zkW=HbwPIu!=)eA2W6X={%v(dEpVhjOpn>&vlwYh-q`*!|KV3Tk>#hhe>$GS&n9sVz zXS~=KCOxH99P{@3GjC5gj(NA7bvk%|`)hWi3FfixWOvLiz`T9-TlWmiQ|2lMMB;t+ z9PbsFznYzSCm!YhYL3zdkaI>nTeKMEVqezRYV4=7HRoCz-mg!{jqJg`B8hoTgOb1T zVg@!FKG-~3Cni31)ivyY;X7mX5c1nR3S;DPbdX;A7WICl?#;|KNvrVOjg6Ca(LYRA zPMVA7t=F2Qj=U!wt;9gAkDz)j(FOYsDT*X@W8aK1#>vCfCC~?ALqFPM>aUI81n|E3 zt}J^Qkaud!W~oUK&(ZmteRc4jc52>`G1`NKylUIkn5WC1?&dMd4`Ol)Lc_uSvl{uX z3CQbsoBwbF@}Yii2`a$+--|70cWlRe@z#bG=_K65I&t%rH!7e#uuaW;OG12T z;hlM#G64N&v-A*Gjno0sFUT;Xz#r<%rJGUkzUhT&hS+aXt2g~6@?*w3W`4l>Sz^1g zzSCe|d55xhGsug|*%ZgO4bMNnR4fsBFxvtYkjG_Mk~W}XOk)V*UH%9I+UNv5A|*M z+#P#67hoQEhsj~^mvm9B@fqP!Ud%|ppp~)fo}*sdNpCt#!92_t=1L-ea%40X%`wDt zH6*it@qb1}gUl==>hmZc==R@<{?=LM(QUe>~ceYm0c{TFvZv$ltiMQ_=(XFRLy;c=kW}LCmLJL;1*qxZm(cG1j56Z%*9- zdd}!IziY=jDbl;I_hNmP7p+x;5D!r=_xfD!9o>f@*OYjSpZ>xBG25y|dym#d`Ufv+ zT#*z#9rj^*p)IWqc=32q2j0UFFE2`<_x;8Paw&T*a24xjRnC{#h38+RGYzZ|t2Xm?Jg(23#>aBfY0nep->MUlz{>2Znb;AB9+4bTcX}`{QPYB>AM!o6V zO0D1cL9<$Srh-3bg<6PGz!^+^YiSM05u@7{w-?Xj-}^}YtAEl+-=ul=+umTDIJ2ev z7tg~yyPCp2U}pLCb;tu6;eVK)ZTt)GpXjHw2+?4t)eBoTA@Ais)zo<#JKlE5+ah1^b=RQd5%izk zZ6?RuV_C7W76@& zqv((GPE0%xewf;NTK{(WKY1YkmEZ91JcmGLy=xtz{_i}HJNC?^5M@I9-+3T+AJP}s zMUB?Kxb>Dklnv)_TaVtI5BA|s3EfmQ@LL^>$#nfr@LTYl{6^Tv2Nv|wec-Pjw$ZK! z&lALBKYGr(Tc=Z*o6&Htr=po>Yw*5%J=2u@1zrm<&6)UjKW6u4(C^bX zn5>db@HsUmvkL6*&^;!o0p#aw1-)lK_>(iG%&H#Hi@^fA^yp*w+zWc#39v6GUQ(|I zL7q-ZQU}ia5ybH}D)%s8aN`5bR%)@=Go z5CfB$%p&lYCkC0aDq~n@1XEoP{_o@)hOZs`{s{*rp&Ru1I89T%m><7Q?LJ}+;|A)* z0N8;etEeqQ;2(Q6C{@hw^#qc&H-cddBSY^0{3rimWFKyRXXnWMq}N^(W835hs8^T6 z*vk|2DV2+9?B_{sWZ$_)PIYn_sdY|(8>^>HoH`@LDH!DvN`nU66btazr%!TPwqQq2 zWpgqPdq?yA$A7YmyZ|rvXD|ax0k8C#Gpm>5{qPuO+Ddre;X!6>0?hA-BQtix1sD%7 z6SLuU-y}w&0M>Q%5TjoXe&bjIV^Ifw_ULp*b`RK%BZc(%eGq5$&ZL^Vov;x*Rnh~` zJs?8)_uV3hZY#>_r2i-nqGJykeDx&WvnChay*j!NBYE!;-ouqB_O;AS>g7dy&Pe6} z6@6|Bw@luVJTfH46)V=0V+Tntcj5t}^5iKlQv>krfFkFo19tiNK2F8})^}_Ld&vUM zum3CCYRir0`;UxgC%b`N?)k}d_yB(DF=ZA9fqgh=$nZvhKRM7#KaBxIcDF0z(Ec`+0-#IqQe>iuA3za%YF@N(MO1Xgi{f&Zd9M_a9=CJpeCso?v+V;2b+u=^LSdJN7@OcSb{eyMHF#vKHc={io?8saU_n zobJnmIHQ}PZ*Gr;zsJ&Vs-F?WzBnqq9{hHz6Xo1Ah9FvgP!n50ubQusm-ZciQI*U; z^z%0!gfQ882Jl{^2w8Xq^mS(?8GaLR0E+y#4^TSQ9V2b_58D61;sO@|Jqa=XXy zl9Nt6=I)3M5W&agxd&2!3;I&HThd_X4$tB4$=YKb18$#u5S-%{&UV5gnCB~wPy;#W zs$i3K!eIUptc4+*LuVB`-U95}{&=R{4&tefS!J*z$10WWJEjYQEfAsco6(!bsD+rDEOgjTk`1{@H0E=$nBQ^|5vnuuiG}N52?Z= z&pptiD|YM&s?}tsqWo4QJ*$=EHhO z`p3d0SVy1k^n-Obi_$5}VP4I*>B1O@*PD&$y&J$kw2Yzm=R*A0w2!VUN{00{QZ}Wa zUpr1xvgKO{qN;){sR6mH^dtitFT?t7lXmT(hud$Hg$Lk$+fR}`{a}B#+mQQCgTE+U zO)j_$xV4BQ^=^$F)rYl4#K5CRVBg*fT4Vq2p7UG>AK0e@KiSWM)Nl11jM*+B(A)Mz z_BHku-n*1@6h8{vXGd0G5 z=Nmg2YiqFg^)Kl+^I>1=$I-Q3a6Y?C=!_6EIM0`KS~S{kZ@M%Y;;4FS>QpZLf5#_E zZ!5gNY&ZFS8~D@GFfzOx@Ivu9(r_p2SJ5nTK~o2;tCK8f2Y*%2MP?lY{IvB3x%?Q+ zW6LKp;0*ZJ{4eCPE7*VFGdcM#_}NX$1(*pVaLDIUNbE%Ui3Uif@tI7jh8{MP8nMhU!vc`jg`gh4NNZRDm%G{Sk!;aHgl z&_8{4o+8BeHS?H1RA9eqmN7}XAg?>c7*i9_+no;dXFHg8^%>e{A;f1pPSaWefDd;> z(Gyp~_g9~Qj-)?QCro%Ld%`J4nb~vZJFe+>(;E3E6Wae(L zr<+!gW?f*Pa~6|xkHCIqE0L|I))7ROFzJ2?_ABE&$$uN-m&aX7UG;LU49Phrc^xOdCY-5D39Q@ zdB7i4Y-BC@VZSO5v6iBMQ!93{c~THJmfdIGje~fltdiNT0{*N#jWM1E`&RLsuCxL< zDvzN|(Z_z{OyQLo+rD?287wku;5e zS3KB(HLnE*lK@vHr1Ga{_Y*|?QNEK!w+SNd25(Ib#8+`bJRYqi-n->e4uM?846)Zv zfxTM2h>^MiernYW%Hm-&K}5YLUj7k{{iliJUpEmOLk);e!$yqkbOD+e9u_tqse4jM zj_qN#f?Y9^i^u*QMfGx>48-?amE?+;IUt92vi6wg-?T|Oh5@{mSt_-FkwTu4xEYSA zjUv)mpD|UD?5$IIcV?p*|y?IviRix!RVc_l6Wnj&pUUZ!gUd z-{jjzUGQVY?k(4$E-hIgrWk*k=3jh#j9^9*E$C|~D!HwLQS`PF?%$cf`Y)0YGH!dr zl`Y&Rkk|Vc&n?$Gd~Ji;1V0nA5`_vVRt4ETl3+a~Fu+-C<*nu&aulpakV>~E52qAAY+ zZdo&1V;l`QEH-qq6xJbKbx$o2Wl_tYaJgOvVQ9bA;)N z%JRZ~1<#cXSC~&}E$)%6nsS*r?GYn)-{cOv)a|S+XBWlPx=2euUl_`)cGi}T2&!WZ z=dF{v8$+?*=e9`A+4!9M>@Y!6YpXEthdF%Wd#gUX#Y7r#XSTeaQPr57!gNy#I!my0yr2Szn~9^Xq&~bq-=b`qgndKXLslbaX{Zv- zNanGb_C-C@M1WUHr&8^KeLvp;O+M9Ep2Y%cs!vtEVqN0$islD*iGLJ%Jg(s67fD}1ud#_&v!xF5 zzLwqeI9x`HdoHu}L!(Rx>myZ%{0CBNiWT^aqS8f1O4$Eqqoko9195xe{TU1cxN?o- zjIqe`iMcdGh{n8MoOJ~SI69!;>IUBTUb5cuGUolfFU(ZNd;cEU=I`+LP1irol#%x^ zzuV;Iul)BK6D7=dTK{Fdo5SCKrHq?JAr6}EWAscegL$>%eb`kfD6CaB!jgK%b{L7*T*3CmG`BD={LQoW zAJAYjc@JClpP0wo;#w_RE|)RG%+8rL57#h1s3D8Oci)Ck{YWDK3>REGKf|HOM);JQE)@4L@E;><&W{@CfyJ4OONve_~BFbQ$K z@(`^5phFkgN)Wo|9Q0W?SpN~Hqj-N$&U1c|Z~#F_t2=*J+(=EA`nJGR_b0VoVyDY) zD~h}!%HzV#?EXV|5;>@GoYwJvm{ zBtftn7HA>gnhA1_>aWFm@AFm90sbR@%&WW!^CHdXjd==wiUjt9rwjFT zONm7t*1-xp;WFV@y_0{9!4DSf!h6n3FF7aU`rU>+Ct<%6=V=SSVcvJ{>V;M0YrOaE zJ{$WzSX;V2AkTo_A8?5x0f!n-UJ!?Q-)R;Lyhy+^>WkeTQeY?LmE4~pE)_6bG=>Lo zozO;~Yw{3JiA?nEn*#P%XvX4hi)UB|-IsSR#3SrY@0LZg@OO9bz7V{}FYXf?=Z1L@ zpCf5_uTgk0yR8HJ04xsLiN6nT^66>CdeMh`m5$*3<$AC0gCAgY^h&-0xP=t+`t%Iq zY~u66hClRS{1*=-#%rPSuX;D-?uW2G%yM4$3gj~_`s(}Zp7#jfWqzCY6Rh*#_|!X# z1ixuF-g`U=xY#;;Q9B9qwm9smfqAeQPd$1uA3j~nb2SO)sd3Tk2MKY4QkIVi=10eb z`?ixf&lCPCEX2*MdhiNaSRc1^nZBkG<};U7nP5HpjO8MZ*dL-ZpvP?v<{OsI^#{C7 z6aJ@HVqf!pfzviv!Wa^GY0Em~5d@1=V!iU(VBHqLZ`8pc<3pHFuMc!S1-OthTgqJi zf_d)1-ba9YNoT*lm%gL>uv%gfh4p?$>fZP+_IviL&&eLYH5Ay31^4~bkniE>wD<_} z9OkTC?18)|8;`|9c>mu*XK^yhhhdN3bCidvKmBf!;77G&{hLYf8xvpn2cw?Ijq~rO zAdcj(3T&q^&zT<_!3XQ`@?oMc`qZF2EKLd?gYxfH8dU$w?)?$yhWTD6kENfH2Q(*SsXNMr zmHtu-sxiSIu|CN7WkElYPbhvZWIpDL z*`uLW^ir5tVR)_(*1_;uwOBp`^O-S|H6V_mTcTeXVxIG2^d6gTtY5!+r3>cu;-k#G zD`8ZM(hA7HyidgWc)TxOxpF(+-=TO`%`SmBhBjH9ywmzOUJMy~>nPrbmX7C!Fb}8@ zclkEN4`ku$qfg*GNW0~G|5`{&tUSH=2KK=jse9x8epw2xd%kYSSX{TgV{j$6uy9j@0nU1p+pwL`s2et|Kb7VMI_++RCk2=qTd+1difRPl?gUQ z9HX$GNo`~a_I0J=R(%x(e?k?w2MnC4a;x`yzzGfids*nkYYzkWC2c_H5SUB0exC*JE-Uwd;8=F_y-n;rc2 zf8oXaix0EXD&Pv@pG9QYBV4b`wB?(y-pO43<>JWyv3wJyjru<$FuH?;`AnM}ZH|6m zYQ?G<$OF;7y7DdJ1kJRSjo3FyBQI(j;->KfD}<2$A`!T1Jn~I>-Bu}JJq+sc>Lq-t zFs@Dz632QaRf%!qQSXP7=4)X+l#7Y`^l{#Y6L;t}nuqta>r*%{z+tR@(uCkD zv0|w>=)#ru@!NiH0&q!WX*se{GU=z6qkbi zqRwnwG7)s+9rwVY(qz&vFdr@lrQBO#O`?6q9*10Q-DQN*f!6Jh{NM zD{)vaCp0i*Dpfc^f&*ff2|PO)e#=hlq>Py5pRs_%LpGx%4KaT1vr&2e_asviJ^C` zpT+~vp$;b{i5O!3cH?M=P^?^(;JQ{NEuUgB8`d}%Z97=*7>X)S0<9Yr&|3`01;smTSrQ5z< z9{UUFnyr(-eN-Px)S}?L6><{`Q65C^Bt4|ggFifzT#I!K>1iqR_>u3Bk!~iA^?lm2 zzRH7NrQYYYs)K)`yKc_!v%Gx8SOAy1?|U(OxtT#VVe#2@Qh z6c%E7j$l={l&-}-8RHAZHe$Z`eomi`7J=Fz6KBIh?0O8mp*dK4C4vLo$SXgUrGa%g>2*22dF0@1GTd9b}rZ#2EzOzte3%G9n_5c5ars_`>{R-z3bRf z2qKdQALT>|mU{-V$Fh=at-ttO-0I#zBu1^vY1GLPwlxURBB zQ!NTkc9*IdYl^JkjtUKcgs zJ~Z&wVIQTDK2pZbY~OX_Z(hvEK8*09OcxYRp~0S*-rJ^2Z-SA(_$6J4`%sCdd%fqT z7V==K+IqB=|0q5Y8SzMt;!TYZ#I2Me0PelP`xI=g=F8pv z>u%TkU~fiv4*#tW%n1MEzwtmu>Rw#G#u$ZzeZ2C8@mK}=d%2nMOo08lw1`=jc!?k` z&Sh-UAP&En!kA`*-@bT=nVJ9Sw>lX9jA|L+#w)KFo}GZRt_9Ff8o>@@@h%+Y9Nzb0D8LU(xPY_QBudsk+D|vrn~;kg?}>b3D`L5ogclv!9Kg5(Z}y*dJKuYH%y3U;}pL zbRsv&9`yaxF#CBf_?LlqY^4j}$YWbr%|+lZkBTwp{J>8izRLs$gS;H37}E&AAH7P< zEUbIbdzcxs7Uc5q7(h(0FNY%;txV9fK9Z5iw;H|of6SPfzoQApNIJI#&ij}G6WW9?^!kxCw;-PGGA4uW{rD&U z;er=8Zv0!a>)bldV3PB1{Rev_Lus<`a3gq|jae7|^;D?@Vbk-ht|G^5Xav!Ys z08J%!f?jv;rm_!#TyznXQ6J#0&M->hB>cZCgS>U_&1gT2{k^2?1BKCi@2ytWOqQb$ zo~hwB$s3S)rwh0S#dzY_2|uo70@&YUwOqCe=v99>=cNJmqA!Mhr3Z21kpT99K?&?{ zD!ai<3`Pkyd=}pGw_`Qzh5v_qe;T9V3wE<3oqibv&)xTd?hI>(aXp>33hd*)FLd=9 zc;5aFx_=|=cc%#5n+>?TYae~D5ai{6E!|aN3V)x#NY}!?bTZWXCa{<76;wb=4ngd_ zLwUD@obK(VCU(PqwYidyd*K|~j+6cU5D&H{kPYX+54L;49{tMP4{I2j%hzgpW6!O-u{RVDo4J6E_J0EI92lECn~f!%Iuq-(ulolTnb+5nK7#&dN1 z@>}qF6`ipf;_s%fbjx~(7n(QI?dg7SZmZ~`e6TOgE9mAD(35(1%BCFfS-k>ffq1dj zfP7d7acS*MvY{EyV`l*wwD;;L529uhx%U|CSLGk%=^==NtLw>>tAOvzqe#`;YexAG zXY#leBL1XNuOoL}Vg{^Rj_Z?N^Bd1$5*H;c{j08l7uLgS_2h&V%wT>?*=A)pr+8GdpU4N@r9}@cg!R@Y(VG_oFs_|N z$Amy!Tl;`cTLJd9E{e`g0R5{kpli|qU)8%%4>!Yp*N&q$6oR}|y`#j6VXUkmZy*nUW*>(KO`I@9^JD9duPiH z@IqYH#c|G};IBHqa!bV=|H*S`KESz1fjw+8<6LCH-qyciZ;XS_?-FF=Cs@Ed^I37V z7ckypZt6h%QESE|8^QV4IxwCVfM092(f8)Sx~jeD%mp9^RX^yNUa${U-)W^l%%^M7 zvf+UHs)p#Xv9ND7X0*>n!0(k`Xqgi=hL*&9TUl^sxDb@Z2 zv26qC(gb*;u!*eem_-l;=g5p6c>dPUWXJ&E_07X%_z>XIEqBSqSHPa+OdvIH+=h7j z4e{{7d$i;H9W3Z)y8#;~1o89k>+Dh?SYPvAHb!_eK{TkaX(BMcx)S!Q*e6^U`n?u`@);Uea&B19qE3{Xfc4>ahO=#a39wFU z){7tXr1CneDFFIjp~RdPg8eMBWlhK2f%!jToh4viB?hdF>@Jx1TV|^woKw+Q#z6&e ze9&vuO@lp91zjTbfkK0y~iTh?L&~I5k6(oLma$opyw@u7-FyO@&lzf_Oc33#qve z?Bm8ta^oS;!<5%#&~cFG6hqSGEZB<;3FO4p%Ag`nFy|B$Mo`}XdKwV zRr5KQl#MX*vfJ}O-dC<+&Tj{OSt-ddyTC52XruMpK|WUqQ|?D#zEKjS@eugwh&9CL ztFRwoX~f<8FyByLV%JMpSI9D=@=uuGG#z5+Z~(QhmS0|p0lh7lC-ngPdE||gbjN$% zIhhhASWh+mB8*_qQ~Jg8u&!pZgxGcDJFL4PdYgU+`>rJ{hJ1kd_55=gz{BzP*;_2U zZ_Ru9IWPFnqTF>4sT=}q#m9~(B%OEkf*te?(v#|-2zCRM=R9^@c;P;ibX=u^Zk zzI#g{jt_n!5E}yf6?BKcI2z){;K_W4H-J42y32bz58}@tQ{IJTfae0;dHfo{UkAi; z8}|dgU+T?XI12dO?*ViAoH9WyPNi<%0{`ayfL#6zaQC8ZM8Ze#R~}=D((m@f0Z~=T zXLwk^qDo5XFa!IQyI#&4`&(pQkdwqbZ(6FHDFgDCd_wk5e7(+GHkko@8Xqb%l?Hi@ z(U%dTFT#1;ml8o9K$NAp9u4!3_$+!B`_+c8;?KjrrV*Ezzp#%$j5VzyTn6v=<(oGF z?0&eC2r(V>A>g#=8%y}!rL#m|%_}CBc;6KX^?-RVG8R4+0D9%wB5bx2^vp9-C?*;7 zz~hKuPaec&3v&e>%fpGSZWjft8?(r5E{%MTJC{(F&LX_F{n=EwQziG;IcwV2aWd<2 zOP1bmS4#Ii^PtbnR-)#8^kpQix097W4Y-|@7k?G(gZ_5=i5Ic{N#>Vv7Z|{esXrA8 zvA%Lrv%*Ep`>!=nFr)tjdCXKPr2&sb=1fY)dnREr%6}sNA;f3GL>lZ_&_bn^H29aL zC1V%S;NSgMOT9tCam! zA#N>2hB$5zd+e-FQV!Z;XO`rX>+PP2)kP^%f^(e391_i_THA4BR&QECznP^gYFwJc ziq7;BKD3Kt|1w)CB-1{I+i#pH;Ck4JC(W>fFYokEUSEBdXU(-xKC!8`Z204se6>2w z^y?2Y{M)sLXw@IFLVl!{gzE4xTTn_&v}PdwOw$|x8TEh7ADZ?k@3A!+_i^2;=4yB# z?;%P~V-5{|Z29@gx3T_gu>WKc8vMx8EVUCjE^bi`#XjC%M^$JV&eJ1RxtO*k2=`>g zb{hP-YmHnX4d?DOLxxubXSX~pY5aZHX_r*O1qfeA+@Eo9O)LzJ26maK}J+k^&dGcI6a@Px50CwL0R^N+9eAL30{&>0`S z;t+4|SXQY!Nt-W1`lez_t~|f7#2bY@+ave~#paAlu3s-;Ez&GMrDLnWX(1)Kdq;}} zSMuk``kcEa$F)Y{}Ioo-asD6vJ=y0Q4rsFt~XtTc@8&q6Fmy-hjYM;MHE9oU~ae( zf7i0xV_=1OP@5IguaO-DVVOIv67%0C&eLXKJ?Lp~rVjA~{?t4;)j=YXu$?$o=cv*S z`i;_B-D;gRjG_EnJ#mZsjE>wyJ%jnKjEsz!p6TNI^f##~dP$MI^dSj-z3z1%=&NGF zdZ{_OjH9Tu9#zuGbPG??)vPH8ETsDGb6GRph$>$euhd)~fkR(2HNTF*Z%6*0f# z)@|_w^L@@d7E_V;GnX~Hhxu(gebZ73{Km}NmNW4D&CD${FyA$!)l71-`)lC)_^!=-m6c8qyiGHY7P}J!&!m|%Y9U@{KUt*i1$ksHSO^?m ziuVA`iv}m*J!Z4KYsh=pXgc=^_+fI4>F0MZ2?&hMGJlj(M3#wuJ_9&9=(?RJ=3xR% z=J-5ESpTs|GL;%TTl@1*>u_$W1iPa-Cm7^_{O|w4vBeg zV-NU}!ljawfWm{&e)FoCw0_se}HnejgF`hcI71!h4y$z*!IT+m<}@wvZq{ z=AKS&B*gVI-Z&m0!H(*0bCAP4sBVD09N9z=8us=BB>3$KujV?DAP15wot9&si2m;U z1b^RWkGc;?Rl)dT;X^h2U3$>thY<_&E^-&K0sW)4xtwywd#cGUHj6d!cYjy&2&{Wf zx_Tvp{i43O8Rui(_V_}n3ao<>xFDtx@5`3EmUJUeBET);IK*L;&I0Q*u%G0f1@msh zxsnrHHC_~q?n8u%b3fK42;`ryg?y+bYvvut-|=1f7CK|z+i|n|KICoKesUMWJdah7 zYc1}Bd6TQuuY2$R;=N3-aXwGpAc!fdE(v5VK}>$M;1vmYWfGr@1PSssPR3;(8H;tU zU3X%=0LszBos)u*@SQ1zdFcDTDk^|)saL*=)BEwhqwiL0@ZVIL*VMT@n3wT5=CujN z2#?kfy!R>Lc{Ub#4@%y1voLSb?_;r@7x^W=KkMP#s1)xT9ftn{FGk4Q_&ThET;)6S z@%2$2$VeTWk-9eva~8cq9>{!=MN2V{Z9m0pIr2Sbm3p4U{rGp@%hV5xE}}iu7W2AI z!v1Q^SoDm9xLhsN^8pERs`QtqCJ8t~rr2W&+7sR*UK+TMl$-ZsKEM&=N5Ah?&2UB+xYk^J3mt1Hdj*(Y|6U@pu0`|E@H^ zr{w1#vIOh)7YFXFh4Z7P1l6`-|MvD^^~1Hl@nRMR9=)>d|1kF6VNqRQ*y!13pBX?w zkftELSCOJr>AgsoE*P9X1f zS`^!hycbrZ;-8}b7vNqd-bzRzkoOzDj<3c2)~$>Co51}v6JtLRh_kBAGoE9=T=S6L%K-!>oVeX>sIVc$1o^z+m4dElvmf!BJ_Brq~BtKl7O*;vwA9_xR0+_uotL z3u!}rNC}LA`hfjDDI^Q^Vpr-CtVd~4#+6o_7a^W0y$a`k9LxG`Gx8gp$l>qn{|XnQ zm;Lfi=U2Fxe{diIJ|F=OC}3>-E$nxDy2ta-4>}hmh9eJv)z*|8#66h)Fmn}wsB1EJ z=C1_esgZBWJ+ct?zjmex>V-~1%2BkBZ}C8*S0{TSzKB|F@2&zB@Ai;c&*bQ0&()&S;N9d{tM*{X{(X`!M}x z*~oe2S)_-s@|HvUnBQ^p1)xj3Y z0muX6Gc&0fpVzfNg(5GAWkqHJIV8lp7{AYYg?LD#XBju}s?W=`M*GoQkfDQmFTew- zwxv?!gOS>vdI9~6NL<=B)I0W0Mvo|7V{;0|f?cs$c@I@^p25NbXZ&~|i#y;@$Sv#We{IgB2Lpz>sBa=?85%G zagpO{#M4=nW(?M$A1Ph4|KopgF#e>fm$)f0kh5^UQU4j`S&WGoyv-XUv$U}NB*4gI$06Ot0kVCy%zO>v&+%vu)o`% z+b50#KF{Wx$v_>+UMSYW^KSHhahd_nBRF4l+8psx$BRDNpgx>0>33^D9)secK*Yhk zC~=Aee@AoYIK|_9kmnV%at3GhHPWzGr_^!v317bP*?7Zq<)z~{0lKc|KL+`lWn zGrEd>%!-v3;K%5Zil?@?&f&@^SDcHWHSfp3YCOMQJuV9Smmez^rr~SR`Ac*6!~0@u zOXoto=ESPbv?DGizxHSk@($J2%dSVfRl_2uLBxyYHOxGM_xT4GLjv1xymA!EL4X6Y zJ6yDSB>rD4)<7K0fABwl72Lo)Q-A~dS3dv9MO7w$2d-bDZti`=pYehUZRlONuViuQ zD0{^JmEMy!MLVywQQU!Xq57sS_Hloy$(jiAq_3+!Pe#1PlWG+^#E%TtJarvLd`GQC zz}NVo^oGnN#K{;hm^&NoUcj64snM$v`E|}Vh^=y9g!muoE3t2bUI~DHY;C z1as0HG|F1g|C{eDcg8t^g6p^VACrWlH^?vbt$cL86s=;i>)2&j(+gxj%UxPTSrAwbL9+?x= zc3>^?2%TB-a1i6{g^ss-aSqLu?#U;AL|(1_70)2=n(@|e6ULrF++=-~0@~-h#pc@0 zD2FCL!wu-?8aqufZk}n}ZiVsU*5cdth?neXYIZ~axTIOv5BY!&wTec>eT5I2zw}k6 z4f>Pz6_w!MxylZO+H?Oe-W=Wl^2`YEK_6HCuzxA~mEP*p6+$@(c%lS2AOSAwf8l?= zm5-rMRU!Ka|Na z+2~`uY-rOn#yBz5R%DL&w}#d%Yqa;e);A82htm0N`R=e!bZ@)1FXWT-%TgwC5!O$g z(MjkR1^A#7J)H%okoTfnYe6bplX})QAz!CP3>{Wi^#)u zK2I)vg^T)U4wiuTMZg0y#dVo2{;ndJi)4JItD2?==ORgkEi?K5mZIxslU_Q{4EHCxp&lRUf9DH!&bF?b z6o`CBi`Hv|A&xe0W5f)!3)Rge7w1KZZk;(7@l%F_>nq-U#gFpyc8k^5(4TBO-+v78 zxm(f(9fiCx0=}H@Zt$E8)Y+r|;Q{$)zQ_N5!kFOXYF1KyGKJb5{yH8Rpa*?ou)2Tc@XU1C=1B)0?=STF4jADs$Tw{qPkJ z#v!h;1M-XuTHKr!;Eylv;bPXnK3yr`{5C;;cuj_L-2r*WH8D=^2;`+#9&>&t!4F;S zp!3gtf!9yiPnW`dpX?Hp#(mS@&_8f>$J3VPpz7|~jX?qE* zXDE;!s{(u91D3D|&(GJ=izt`3XF~_U zo`?Qm{f1yahR(3z2a-o#D;j#p&eRnW7YCrHfQW?|p|`dGfQ;u?1L ziNE-rnqa?22l@Fp?{4@mKU5#$*CAWp3uDM94w~~;n?e4xKY|xx4SsQ7FwfE+{M6oS zJOx+8DP-|D5AYj9e{*fqGQR5f57WOR!2fQ$LpQ~OeQwjCohe{vTYP9+Cg{tSN3Qg*t8f6?SpI z8R7%j)D2)CgSXk>El_U^{>BFEsE6;_O`h(4g5OJy9D@35s~5R&2K&=_r1QG1a2|$0 z4wsGjmE(I@X4rL4!SiHuE1jSY9qi?zJ-|P0Gv^Ygfgjr}N&gIm{n%7TH%G&MZpfoe z@t}|EKhpYCSpS9{bWS$t zFQlVZfFIoW2OH4~dCR6iHgN4r_?~O5<_2T9dXlGGpx)b9M#_h z`0ou%$<8aFuWLE7;l@*8-~0Sj{#p4RGJU@S|F9zDEqmMeHOkv@y?i+}@Yg%8^R{V$ zzuYd$Ytw=6-KNa*G1?5zr@)gi1^=~Wh`VVCdD!N3uE%~8;u^RrXNZFvGdU$Mh)e6{ z(T@R;*Y+QyN5lHysz%qxfV|e&QSU^ECu=^?AgmA8X3)4jqBKF3gA4 z-=sbDpcfkmU9tr7yZ)1Z z)EK6ZBQ1wve^+lI56?iJ*2j_~S0H~`agBuC{7Z;`5b!<>t>G^k2X?tLfuBAe>a)Q# zzUu_A|E;5VKdMfLbzR{#s)K*ou!@(V4RLwhA)byQ)aUCGxmTvr@O*Q*-YKw8{e4`{ zRFFsi3~sC|5vc9cfCK;!XViHRjxERLVV=B`@~p0Cm%}`I4aLgCYD7Ie6Z!llkHDhhbk`_%8BL zzpfAE`zb&@(f^t^s099J%`~2=8thje;XY}?{`3xWJvcYAHn4HELyLVO?_b_PErM?|%rZ))Bf%dnm!LEOLK1Od&RO1Ah(Wka;gdZd!9@h!2@v8y_B`Y-Ltcl?`FtlC(BqA% zd~4aC{)=S(P~_47z}|~7gx9m#eaW!j9U1J&T*zO#RD8zx}crgzj&jvk^7R%=cfjvItxsI`d{l3AI zkbw2{w(#l@7qha1*Cf*?#5r`HkV3Da~bH}!Z#$Z3hbl)2w@k(^VH8L<66N^>k^4qH`rla1aa;MeW-0ADw`p% zskuoe4uPK6?IjC_Vf{4&B>N2b>v?I!A9-`CiiqYN$X_B`nCVa8{hRiS8S)`tU%85x zCI)_>dmqnJ4CK=B7xz{S;%3Jpu1XyI{8B%zQ*!rLIEOH9w+zICrYqbAIq-XpU7Y&_ z@IMW2=}Wb}`22LcUN!Pq&;=&o?;3umKGq{VZg=L>hUn?oV)E(&B9 zz_v3D`fP0$)Ikf3SZ>ZIcwS3VRs?z4d?)5*C9Hp*4fAjTtgm7(k!zg_*Lotm9PGVf z9~slnNB(^hz8T_I+3#fPPzb}6KO{cG*6{bYB=RiCwXm5?xcnW%6z^t!z7O^u*ugCQ zC0NM&(P6>AhB%M*5Pm%m~qYBt#)eBmp1Nme1IT~m>5&mya8Cy`Cs@v?4 z8{}nG^6bI@u%oIpHYWz+evL7ClL3CAYzmo^19eC7IOa_O#G74;N zAM?5u`7T~CFPB4oKi3ER1NiBJe4?@m{7HcvnXnu7KmP)8N1ooigGBdSG{ekUOC+y> zJZFtzez*_u#7UlMdIk0W$~`j09Qeb=Xvvuzb1EX>mx?#g1*2dcWoPI{DTq_0>*-~A@GGS}nx+i< zUwW82>p~nTyG=#RK%Qle?0^I0b)~gznD141P1xutsJn_6k!LfZ4w`kFbw~%lnE4A$ zoCUA5B-yj2c;0q7Yf}$#Dyx<(S_1Zyr9!w>Ag|0=BDMkUpV7@c-3fM|zM8pz2=auq zdcvFreN44s-dqKFrkrMO;(kaeuqR`f@JwtwTZ1GdFTOqru+d z()fAEOBcI?_e<6&cpb-!DMnuH$J|kHFHGEa&T0v~KhBDtUM&jm%VIxl0Y5*(ht=B$ z`WO8pDL)B$Nt6T8zFf{Q5t>ZdcMvD0A7Bz5gZ~a0Vv3$a{wkBkbbR^3UTkkuQb7Dq z)dl&p^fTDmPjV}<-&?$1RvPDz795tohkO=!4$`-g?;{7Z3@ikIW6ykmAM#)Ty z{MT_3!FWC)krTU%^Q#j~c$*L>l2lC%MBth}iTxxAa?2=Shn2xzX10l3o&@$i-_c3pybtpALCn&;!wvMc_w*+C;4vfPDq_i=0RN zU_gsVb07BGe&)Ash4|&C#yfui_S5@1x8oFizvm;`c@_5A-H05y5AhRJ`}|Y*yR$UY z{08bTVl3wW4WNCocB_(K;bPnT8MYaS68$~JWHwoD?+8|pgO_Y%t^A+L7%U7{up-tW9mqNKx1Pm0f70`;2R+Rf; z%kn#}^n!&v%Ev(AAq#rtwN0)N=exUSNbyBr{~a&M7*2ravDzb7pgYX$o>C&yJ-L<9 zu{bPq)Ln*IWVTA?*>pn0O&-a#CAAPQqoXpWv-`<9eI04#itkt(?QK%~8;aN)8VQmG zoz1jC)ohH;ngGs4NlARe)-T*cg^Q z&N0cf>D>Xb7XloJVBS$)vw;!fTypI7n-JfWUZ~$pS7QHH?*X2>iJzm_fqbh~(>{XdK)oxp?y;a>P7`#82;>`1T3Yk4uQheAMmgEYFqUa* zvOI`mCeKu~rNKYzxhh4g{K;BqzE$dIZYVfVZ>RFkybSC`@+eIk5N$GwwIF`#f@hV zmeDt&^7okIWQyUOjnRm&~ma%H#wWW|$U_sCp->&f#G$U(q^lj~<}i};_+mBtZ> zf0_BrSOVu#Cs`Qopb)=f+YPOdpV{xh4g23G*-p_mzl4TJOMvuC}sE;o?p_~Vz^TR;@X4_2GxpDWN7?s!zu#{ zk|q~yly9?|IVWRf^x3D6u^+qAI4%l#5zLGo(!n2yA2)U?gg7$V!+2gT_%X4E#yRa! z*NH|Mz3T=0<*zpyzXj?pp08os{$cz*&fv>Q>=W)Z>O}k;+oKE$1J<4zC~BKDvT) zA70oPKX!zxhGowg&Idp0a%BVJ1u|T^c0%34JaVc!iSNJdvi1V@ z*Y`SXyuT88?Hya6&J)U^EYJKSg*rT%agV`%cbJ#kt`R-(bIrtlXTUsHDdfL#8}ahTE9wu+xAcKeXv#zZK{Hb=Bn!L34E40+_e;SS_6 z#MWosqb))lNX8kz1=!DuTQgkNgf6 zyZj>24;t<8dxrX;yK35W0{Og_%(QF*@m%AkuNr~6O)bv*BmsR_6!EGgkk5<1^iCr9 zyR*(TD;~U$+zy^E1M!b-4?d%gc$ea!l@s$3{}Ehai*whxKy}w&uwU{h`fMm?OsaQ~D6`u3|C0M*2`}%i7F7)2{3Kw%W`0oDuh!+T(eirnbJPEmV6P}y& zPxpAJC&YoI_XfBkABte!lmDimUl9M`JuZZYxF_eM!ODntm`a1MlB55{z3912k0TL6 z+>2Ie&~pO!*BBd^MIf#ys|IXB`;e~#d4fKQasls9k612flL&k-`7W$a_8|6m!Y$PC zJo20{EkpEYo5C|~5dYFN-2nSptk(1zU&!Ows^Czp)7gxW>hw_D|1jxdYy2HQdU7+$ zPbn&^XArL0(cPPHuEgOO^Zn8I{c)F0#|v>W=B5X#$@&Yl}EYAfM6~jrvTWUetXMag;#*q#F>v3a^@JVZWkY zsMb$kPG$-5K$4Xqh6H&YK2BF;A&#)d;RB41MXxu&bLbk; zyREVB^?gjME80V4RDdtqO>cy27+%}L_oW~X$UQQ6))3+x;yoJ>AM_zfy>l*n@5~hQ z^){^9b9^}oi#Q&?mjV?oc(6@LXvG&Mq1pE9qqp~q? zV^w36B_Iy5Ox&q)*q8Yde?a4J^k;FG3|_(Ybleeh?88MQ#JJ%9AI*5{gL5x7#Ty2q z-XD&Bl^}!fpJADW{nFu-IrWGa@JRD&M?HCv@k`%t{|8*m*0i@L2fo6^{DT8YpBS+Z z=OcZK0}}Ax2=FfkTW23(i z+j6KbJP$3&(ly5O{pH!)Cgc2$16j_l$O~~ktJfFj-po(E9E|?uRGLWy+Skg=uo&!* zb14G zw%N1f(ow(j=4wEErcHUNdOLBQdFm#}Yf_fyJsJ6vcI7+UA^zpS9CaVW%iNyB3&MEu zD(h?{;=<&zU&TV4p?0&m#75)|DNky_b$68yEyq4;bosj8d;c33LuM`9|I$Oqmt_AU zqZ{X+S;oyejPtJqI3R&M{(}Sh1`i~Vi%NU?G@Mf?uAWta^A>sIvyM}ohqE{5#i*;u zZ1t0DX%C639bOGkY%Ljupyg?MIx5 znCa|cm;9uP{022;J9O}Uf0xfRLc4fSrf7=s z;&fT5&`qH++j&-84I*t%N85iIH3i8#Dl9fJqaZ~w!W6ZAaGmIb+) z9WJ#%oR8r89~{uP_^5xb0=cM(&wY=4Q4*6%3Xms{ap9R1lNCMf$@lcJinmR7USlTdQB&^^W*hzJ?K~Xpbw4W z(I*fW)|{W{4fe-0+|2(Ad8S${%i%TqxP4MhAmWBPB^r@`XRm)|z@ody3TA>HhQ{2;uGEde~JSO4Wf z8Cq%~hxzW2PA5f-_eZ-8u#Zl)R*W^kxnXBl@Jx{3>Rz|61@Z-5UB2B4=UtuXo;DTN z>%T(53GrS&D=xSru1mm=BAB0af0gz0{fH;*%TGgGq2}6Kxrh%P94Ie9`_f)Ly5SGp zhu)G#DwK<0ZowH({zM1Zm$Qrb6J0I}=UJTpiO={P z7hW%1-W<@NsTNCfMb{ZcZr| z^z6V#;im#6n|N(VqLr$$kSLttm82dVxEh-0VDQQ6ZFPmXV5 zzds9p;AjJT^gPt5!=Y@}#nD0@h+!#yg~lUzu19*v&>2x;6^-Y2B}M z1NL>-h12pR(BFYLx@6`yc+IC(S&;XvUrj6XV4WMM(S^m}Pd97R9rHjxx4ff=>jx3f zKzB7mKDhlis=OTh#MXLtxEJKLrJGG#19i=o%WTj(_};C`tk)KJzAZ8A*zJ&KZGBDd z?fE3cL2T(Ed(Iid_luGKYjQ&TgJ6!so74l}X?q zx21CLEWlp2MsQcG!EU#>aoeXtU9))t*XXo}VK!NDmhO;`Zph&#`hZ^=@S%SMx{vVL zcTI=**Jnjzqmj?Pk?O~R|Laqrc1d72ee0+}8my!5FKU%@6W)K6W)y&44y>Y$<&Zb8 zFQcn#Aiiu2r8$jYM;nysG!wm zKpfaq#t9Vp>HV1NvqLw8Y zaQ#Gss=)pRG}+UOA@A&qWn?fI45It_7aRW#|m2K&`GlPEu!Bb;loC4%=w`7Z45BHm3^%so_{mQK|!ubT^TnP51dIvZYOYl>@dYqUY=+mlry2}Z! zD{ARR53v8`duXaJ)FaErQPW@%hUw~{>fxY&9b4(>7?5+P4f`S<>h!MP*=MQXCzcE)DiZ{CV;jppjsW{;+r^%r0daT9EOsyAV>|5FLzy7QE)(`i zKGYfAhuI62kY9JnuoD)5oH}yJ-3Hweo`;PsP)99EB&qG-kCwI&*X~4keSjFO2EW;U zn-p&Y|GLDUR1QI%(Kd=CVZXO&h-9Azy=px`=3Kij#6Rrlz~!albq(s(=2pO#4K?gDz#bcD)#g59))v!4UN-#6`IFH8r$Yo5byiGusJy0Kdl zKtAo}?6wT#K`>&ErDsAx&^SGO}`V@MyOYsZOQm{B_R%C zu^XuxfO=-}ZsNbqhhY}gkcoRE|BHiYh$3m%;6Ax3%!BX4g!4TFIEU^IUbGCzdD(QH ztt`~J9icoadBl(W!fjWC=Wf&G(v&pd{%<)wHFL19-|27K;71$N=otgJZ^KR6f&3SX zlW2h@$bYdh)tvemu3=Qp74qA~wd@mLL%3S97Xraf8yB#{;ZNZ;pY4i;{9|!G+nV|V zu8S?rD`c4Z_oTlF=U()avQo%n>I}(*YVaR*KNHbKaGyFO=1UuVu4WJMMjS+S6)`}Z zWo;%=*amfdjTxDH0Q^+-c9MP!@`Y+QQhd$^&#jYytDv_j#mwVJU>AL#MQ8A#9$J>i zEtG(Dbj;uqkY{^o8~0fn?6Z}}4M~F^Y?9+v$Top|A9M5MK@S$*1F3cfqm6Rvr)-lM|FRa7qh@`S9XxOdGPtl+hlSv*hghC^K?GwSH)Q7aXrMv zvX5kZE5wVkM&^$dpnqi>iPE~I@c*+Ua69DlrG~_3AM8WPF=BTV?o+ae#Gm(Pm_l>r z!%a6K4n#2Dq*aC6DTeyy$hC=rzgW123lY5p>n8MjamXVUMsopU=Odp8r!f}tzbb1^ zR2K5h`TF$kc-WuHY&uT~{Ar~xP0#>6uF#>b`jB^4ETXz5;72Rv*t1i>?^F)3hwULB zsBmZJdqCY>q01&tgZ(f2lZ^`lJ1+moh9`i1mh2#<8Sp%F2Z?zO#HAu>=4v6tlj8Br zqxl~hrXZEjg^(u|++coaI}F#YAct!VlOIA91|W{l{zACH)A0HfnYbU;J9{3HIR^D) z?w>^I0@!WVS|V~&T!;hdxI4ND=bkKd;w|MteP45&=fQ*TnZJ#v!2>;>H?BQ zPtbeWc%=QYfm!#jAT?;|K5ArK1L-*!G5M>vkxV~f2LTlf6K%3B$u|tlPzR>mWX()F@cb;fWslz{ zLU!YM)mSSsE(H8`cmx|20s9kfOFkvR{zPbzJ+mRMMEp$xE5Hv$x-yRzLmnQnmTB(- z{}j zF&2No{pzL1halcXfcKc)ICcfygM9x|Srqbz^tF ztUJRac(Rt@XT#R;65PPuK*|&?B#9G-esR-_wHK*N?b@Lh@ugJg=)a^VdPBf1JyhqbDKmJ054gzqplQ?4L3F zZ^FJ#RcG2B!rw&)M({A_s(UA_`{I_&o+b;yb!k4M}E z=?)6^68-a7D++cP!Akx`jS=@SW;;dxgBXeHScgx$Dz1lk2cOze49*AfZWJ+NLEb(= z>_eP46gZ02lYsU5c8J)jfu6W}j#4m!deCXKsF@Ymo!xYipC&+I_zw=GDrABk^1o!CANK5skGZ4{^{DY|@r@J9;JF`( zZ*u@YVPG#&;E!|By(Cm;fV{NEiI-QS@}7I zJRnt1a~S9HCO*&{MIr9RF4pkCYvdmFKk+=y^k{W!3eOYRr*<9ZGW&I_#;_2Vy~1!@hvUYL!nyAu z^2~S(#&klge3o7SQ#tNC`2|*MnY(hf^0&OKnSIhv#;J!xoRK;;E^H?FvoQ+ej0+$h zjNTxBzZ$M$0rE3iAkPvJlS}9sg*?u({u{8LQ!HaOg#D{*=`SZ-@ON5C{#A(gWI*c0 zcQ_BDO!C05P%jE_Acd=S`_K=j^l3jqoLBr~?P273iBZum#`(B^Or|LITV~TP)8hGlD2*X^6_yy%`|p#Z zaE^rwwHS|ba9nK8ApXU!$Fzq)9&Tng`5f-E;bRL`0`{+W%v_nkb7;?=)IgMB-RmdD z5%BZMAB}h;>(4Q4C6FIUcp1NnkmfZjB4mHu=jm-qgeQypQep5 z_H(^f+Sp>B&z-fh#`Eh=_buD8zh!mZ&XvIZ%oS`e6R>-udK*50{6eqMx&rYoT8k`0 z3B*gaTa%{|uyZ8|i|YjZsX~IqBq9d;KVxzUbDv>2i^)$3@|DEdE*JxTn4Gg4qYU*Q zxn*I?w}ls`cU} za3A)htwir#>;qcu+l+kK=~i0~VxN1@)D36x{Onol^LLtsxEKKrBu~jiog&U_v4h5l z97OC#BhQWJiK#R2wd)Jp7X+T$Zh^x~-2W*%9Qp{<1xEWE<*?tcx7Fbw;$PGcIP4~7 zuuDZ|@%f`%m6G=)~f=e;bFi4D5p#OnqAV9PPwO zVlnauY;-PPf#>^j9d8YQzh?bhv-a42g^O`@{qE)hl(*achfjoZ$UST-Ne_S=M4S#` zzs}duDQ;xm!;kKk1mdmTLw5u0^9uN0Cf#sTMxGA=?nP&udjf&HNOh~bH`>1d_o6h` zxrzZlrSQ=41Os`c+)jtn4CvRWw+?ay>N&E{NdfunNR3;@82CSH;ZdW6=irsy@984n ziL1Lj@&c0j+M{zJzIN~`S%!0A z>OH3;ALGBcn2o;b$B+l)lfTHd^?2WaxO+2%c$nDpUe$<$@j33f6Z>-R+r9oCnfFrR z^*j0n+sWSR(Jn0h@YX@UIPp8LV`LrZ!CUXs$oru=$Ip$}2yri}TApcS9O%Ohj~oJW z9iQd)D*?I6oO0QUcEVS7JB;y!T=4J`0l!H4eCCb?Kg&A#x+@`{jit|^7WTDcd@q^9 z_pmP_hw#C;!!Uwyf4kdez`(G|3W+;D&WnT6BxP%@c?r} zs<&WY`G4SI1UQh`c|J?=T(ghCv`p;h{s#y2e%eO@`McS`v^$84F;)t6Lf#7j?nN^= zU08YfZ|F9~)gTaWKarFBftB&jSuTMjq z(Zj&aC8$>d-kkT5PkXzV|Keh1M)(~@-W>rh<{unL>~jAJEY#^yQ+#X_FyG<;W?g0w2ga=>xooQ zLmXsc^byOl4-tL0uXch#l(^# z3en$Esqj0Px3d-z+Bkobyp8%>64zrpE?+tUUS}n`sHk9HJW)~;ak5D8 z{}|t@Ao8IIa6pE~v)16g ze~Sas{VRPm;$#GJ`Bpvxo+Q!a)DW~c%B1e+<9wi*>2JkhA6To*$zh`>`YUwI29a+A>>ZWPa4V*|}yo_oFgT(h_-I_UEhE<9v+a+%`X)qvAAscM#E9N;YRT1K2sA|=df$p!a|Hvb7AaM!uMolry zK17!PfA9hQ4;+x-s%by-J=)cnc^Ox6ei)x-HBiiFPh~rcA)aeNPNyXJ6V_w4tsKVj zlKgdQ*ylGYIH7}lFuUibjNk#*6$DH~UZ5QXtIWY}>9NAS)~Meni<<0ZaK1^Qq#yDR zO_}>NXgunBPE{ntH|jhqAr^5Hg1K5gHR=V5U*Tf}a`^W8k30l?Q38IXi4n7(AfM#7 zc$fd1TvX?0Edx*{#}c$cvKHvfm5wk!dZl(-23puX!-426?uc ztKw9I_!!Q-;|L-#Srj8Y+J&*Y&t5$Lu|guYHWqN zdQ&NRJJ^c246h#0#PPKu^nn}rfz|4Cl{fb7^=ZpA@Yg-EG${!3pziV1H4Oaca#uP& z67sQS-Bck~TF7hPy_1efhI*$bimGKaARj)}oQ3DA_fn;~N54Av-$e6j@SOb$_K((3 z#09XXOCTQgU1E)vf&b`>XVq4`hW~q#U;Dt$)@~su*MWTu#FEBs;7`^~Cds=VjPO1z zI|g-4-)3^}oT3o_usV^qR-r(s7wa2&mik~X1CG221{;O*3)cM1<=|YW)sCEwwZ{LU z&+kmvy1~9L_oK7Dz+SuJX^8(=hUxI2YC$-MU?~-u-U3%1`!Y%jt_JMy(V%BbhuC{@ zkneQ8VxP`*z;pAI%Z5C>=OtArfPGqZfle&j4fpq^_I2RLRvNIjjW>n!4_4%mk9h9C zXFhqd?5L0jVbu{bw;#{x^GMoe$On36k=lLm|CP<;&@n^dJdAJU(67O>(t^ByO$$#} z6Y{-YEpEF$_~Vs}xN5_daE;_LC+5L@i#RKDu)FS0oT$~%SAG7`G{p(OH=V}2!}qm& zQfF^iXKNl6n+EwuOB3YapRpR{*w7tVta;2=6zldvtIAD!38zJ1_# zI({Q!4~zbF0y&s$8-n(u}6-lPLoO>m`j=2YbM=je1N@Q+QBRK+cdVVcKKNpCyh`TizP z_C^T2uUU@07!L8Mxe+QqB9ueBHoG|u_IJsz?7mr$|8=}&ZxpztL7gF4cnH zZrx4}E`mC`6S2 z+6r+H0{la_BG)GY`FW2nFKs;7Wp@boz49_xw*$9B8RGSlrChYS6!I8wTH2p*E&+Y4 z4|R8QG(9#E^t?%pt}_L>HjSpWmX}8Q{>pY>M~&Ll!U^Kr;+s^){V!p^zws3NAn^HD za`*@T(7b}}jDtF@`4rnQ6V}~&iQPI2{D1p(c6p(ckpEy&K3Os!?6N_O#MObHY&b?# z7el;n^d=VVpm&SQ$%O7vLL5YWF)`ShBbCVxF-KC**a2 zb>ANc@t|3q^G1Bk;15L!aFm-;^dkW+; zb$?MYTZkWZC)hWR;Lqxs*lX@z;Qd$GbH1P#3rg8-LD}$}li2lP5dZ3<*j3T+|N1>_ zLz0S+|Dg6WS)LE|Va-8OT?F#1&L?hVICnjRd0!3rMfDu!_l58rHPe~bZBSR#BoV6~ zu;c2fL}?(9VXBmg)*#%c!jCxbfxKnjR+4?6J$;fJXb|1i75cRt{i0kECahMH)LK{Bfg=N`B)F~DOt?? zwFL6el5Xb1N{FAuTEt}?t z7ffV+=zu(F4%op;sN3_hiTVb}Q*!nZl^qaoazdCN4?td;{haxHQVZUHoXA}55aK`t za;RRw8H;X$b>+ZSAz#RJWM1t8xg;HCF71Q5b7nE~*GceO znN~#ks;3YKBH+C!iROBEh|}P>0KP0d_xGF`ANFImEiDxTKavwfW5u#io>W2{{8>&h zHI$kQ&yzvjWWj%D`mkTdK^~Fui9MqPb!9roF3|x0o_2uELmWt22kT}8c~*J>Yh{jn z2`%Jzn`XGilS@ueho$+D3*Mlgne#|a7}V8CPDDD=1+K@L9f^>yC7Uy6vv$Gj9n9rI z(1T<{W>*!&Nr*A~8sNDTJDBYqkk==8Gkf}AeaX(uzCqB}xc$t<-4IWb?3uTRVLxL$ zh}>z=)A;Y0+tFh;f%W#fx?rPo<4*W*e67Ek9^1L)pu7Dea=WV8y zBH#~`U(yJXn?jsJ(k=Fo1jO-VDax0IIyd1MyGjoHeS!v?tO)g2f&uHK`WWu3!dpN~x z%>+Lb>By`vEXBDXOyhjWKcl6X9WAiF$bHQ6E|6oyIp*LR(C_f$%!5skhfNP;enbBl zp2Vy_0rv^m&rCiGd2Q%EX7R1DLL7*I_anPWyqIo<{fZs!iToBRnWJRz+<#&f?{K z-gql8Qv1MOe5{%B!^OpL zen(8msD~8ty~v(X6A|Yyy;IB)&m#w`@HSG2{{eP9BkX@qOQYr-Jh$(Db~YdM#`ij_ zB?kV&uZA5Z0rAUs6ZskEb^G;^9g2H#J~(OA0(>RELFl>U2s(n}zi_Fq{*fkG1b& zqYy`8|AO2V0eLvfksD*6?sDOi97R~?RDJqb2YDf`u&*XT+%@O1-&VuwP>*((-!96UQ82pDj7dFrzF; zLoeig;#)}aX4rSh6(o8utWPeUl{;q-pVJ^aZ|;ZJbBNyK4?;Q2u2k@#;8&u*S9(d^ z5bvPmN5M~ra1+WXQZV6Rhq#*3mHtd!-0 zk@wi3LOB}Gx$A075W~K|cH{UTvEQk2T3(T`xIP(82J#IhzSIQ7Tgh3Ec`F6_GPXc6 zUk&2om>MZ+3hNp@EM*6_!HA8MvIv4YlRrgDHV%1>Imvz5_`8hsSo1Qxiip2mgx5Ur zd!68a=o)ePHIPShMx!kT!LM=;N97#a$1uDQF~@U1!qq^e{5w9&u}{QrKhtC?1#-xF zr6fTi?nH^J#vq@~bbnP@S@t;JZh~i-kCBZEi3T`THk3=?!3?*YudqYJ%st zW@smn7|_SxG@S_eB|Tg9eC+3`9@7|LAU;jls&<_L{T$zMPwuFgMdG}IEG4Cx*ysIy z!jn13V?18*?^-<9nV|G{2l4^z9yf0l{;umVZqa5u_iZ}PbwAF18lly!N z=ZR02z54`AeRnim-yf|$`sgKkCwfS#lRpIrsCq>#Vc(=j^@nvPDdCPu_ysxHED5s~u#qFWd*b z%`UP81M2c`#Cu{Rdu-S)b_892LE|vQ{#@~oHv`^vKl;FjQh4zaCvkDZ7&w_onq2`kJ*4_$SSTndW+x-*Ymy&F7X|sBEw*C%Qt`0PQ~$%% zk0~|kj#(7z0`_qRW;z@f${#+_p)MyYUf+13E-k(bS;n4DdpF&(;b8F7GnbcZS1S^? z(?4(TI2aaHRX&tw$x-hmd(J738D0aS=++pZ9Wpx^QGMtMO{O8{~9X23a{wF3T%pu^`V!9*SALU{k++KM1Ny-pHpQw37L@; z9EnSon;GUjx5+SW;>y!gaTMbuJHLN5C@;o%rSd)j%*6CS-8??D!ZitgCottCxaa%! zPP#P|@&NagcrX1}DBFt0D^ma0PGu8|1->&c>AnnV_K?|yBQ#x0k_aT8iS`P5V5V+um z!^b?M%M`m!jFFWYQ2IuR4Duj;g24gNhC_;s`b{R}+Md5RqzLVr1}qu(KT#-9cNW&P>*G$Bgr4Ax$Kpx-U!hX#2~TOKuE=ACZ4-D_J_dB!3)nyHme%IgL#6&I#Mc4DcB8aIu4iLal_L z3NhbRLHrBs%&bLFc}LvR89$Q9MN&TaF;wA&>k{?)jORM9CwBIUP(T0v&9GwCPqjd! zG~ag=+Yc+(wE|G>3x=M27fDgd-af0H3IEAZDMSQ&WyN{-<$&9WR|EO}Cb_+o-`aq; z8CL#de2jKCX#ZGj{$Uc5Rsc0p-fT(>S-C%T;iti^^3u!ejef7%{g`$V9!>*nR09A( zamR=$J6NU_f*m%g#9e5AQ4phBj6d<9{@fc})-!&zb`1Gwp_l>)P4GF8>x{roWIfd2 zyk?Z3s5(p88ru0R6nyB;yeKs=`mVKkFg&;(>_#E;vDRvR%{20MeY{YwoyO2p+5WxC zh3RGF@R2I?gi0dn%E|v)>CbTT?BQ@7@Uq84RZz6ckUqKR_aoe+Gm708_!mU`dg6;m zcg)S_X@Np~hfnK91DKHm4EI5|vF$WK{x`chpZ2znJRS;`Z^1jn9xp#&^{S-Rz-Z*& zAf;D*|FG0(e~QtYzHEH170g0E#aRsAkM`gBn)DbGFLZ>nITBwjT5iT3--0yco)LWh zmHR8HU}p;(pnG35~)|zP!Ad!oohxKEA{5?pDLcHQLITc>&nV?xWm~;H`#8 z$4tn@l5HA!33SfsZ3wiRYO zVbP`6qM|&(6{I-7hY^J4N4^sbRlW`RJpPAlrYB0fF?Yv8>lO-_N$J%*37!<5;p zk>7b111c30^Tc&xK@+)RGkPm`(9Hjp>>ORo;RRbh>4B$ zy~+bbS1@Z$CKvxv{{rUEzYgA9T=PP4X$BR09O1n%2w;E{`k)w#<(d5qS&q4NB3pI( zgP5%tp9v+Q@N)Zpk4YU3#D&N1#&9`_l?T$nd^IDM7R^J8HCBU#&VtvI355+-Py6q6 z(O`Kb2e|3ZH(oQ&C{UfJ-%EU^7x?L<^v`fsm2i)4j>X*Yui;C7o88b@LfaDpX^6+% z$SjF5=iop`;2>d88MB~)ZnaoUlt*ZwiAG*wP&De%0NH$;XH7B*X9O1`)j5M%s7JVs zZBfkD*!`1hB8K7L+Lk7o7q6LT3c?O+lx>NQG02CsV@o}Dt4A@|(Rj&m(D17Ah`K8};l zY%As&GJh!BO{CwxH&Vq2tT@DRlrqtN+V`=waxNm=NbOxeW;Y4$3|vFBQx zjY*@1U9o;VwT`n)vAj9iE0k|uMX((t-h7KWfh~B>3R5?tN|jmt~rGU*J;0J1%b%B+zo&2${tu>Dbw?!6qBa6EGJ22Ehe&6^0(u%&PlQGapv>Is=-8TiANx8RQL{-KdmmRuj zkF|r7=LCq)6Osg>&o$9y5O3D|Qi;I_WzAw6KOV(rM|^I}IH#bM5T=p|g;4VF9TY0S ze9tC%AS`^K{+xGQ18jrq#_h7sHp21F`Z;r^oIIm#oU=5Xb^-N&D7RaPdIpx(Gr7)t z8^e#bZW~e-h3*{A+@$ZdHJJDmY^9LyI0c%MZjBH042Z|mY53%{ZpSh#NxC_5m^}7t zBKY;PNiE`(=f!(&%cK^5Lf1J%l+(*l37A3x?GZ}>B%hn)UNKlB`ax1AFXw3Cgs}Gj z8*E?lB2qg>!w7L-f(XZp0Ad=GnL0_1Bfec}-U|$8woTj>LDq4K-AbK5`_flf zPI}usndLE6n=+^eXHfm)-0&g%I~ZJ3uY7t^H8s5dNL^_{Ql^DsT(v*Bi* zus1~JH6`stv%)M^8Jt3y2HB@n@P5iLAA(`IPT&@q|C18DMsIo-lY*e8H#Fv(eK+qV zdC~T&UCl`}>J8Q_^E?`vYLWg2nR+^tQCAC}6_<(V?(%1Hm%>OXY)3Nm%6ibo1)-Rkk*4ESKB9j6JP^5RYB6=M z(v%kbz6R44e6NX=HPNW2NjHKuwa~IsimftG>9D)|Jr1y8bjd#34kd*ZD1Be!M+>6hzC54Wf!{_G){ zQQf??CgnW=UBKol#l37uhFx8P)ZzTOP4iEW{PMgQg*#W(&7bUg7SdZXBtNbNW+j5l zl9o6k`kqL^e{2ZKzUjkMTyygLIUL#Ax^m?RH=8=oXjzr)dW0!j!8Nq^;B_nFD_^=t z*E|WkGO-X1e#aRPO=u^QpbNC967>-PZpO|p|Ixv3?D_iG#Y$v??Y%;6&i!{PO*5HL ziwn6u&JflXt@>RYBd6JfL;1o9p_#Sh_tBV#ow7Xc!FiF8~p zLBN|38Y@z8VRTH*S@_js&wF4RS%Tp*^tIGLbZ?xTcHgN@EUhI2V2V+IveWH1nIBh| zpZ9%`)yA>S!?;bpV7&M|;v-3S)<=;fw@N+tQpc1p+9ZjfWbtf~+EQ)r<&OgO#JtEl zkHX3_Z%*1!mrBxAAEn?wlZFNPR(u7i!(ySFZ@zuaZ2&rJe#d8z}L^8t~_oa-$1u>tkMQO}*@|S?a@lH4eK}P{Vyw>COJP z+7{|bDR~-p<9I>a=|euz;1%Zanme9PVbSj~%d)n&+nPun$~-$ead@cz^d*+GI+JoC z0SqYq2`3z;F!K{M2l~?q>PFoN90<3j5>B;!@bxGm&HG!P{s(=}kF%uG=AO8_3hp0z z!$FLbNRf+a1+XSt#hNY6&<|6Qy4$|uFedESaznK|rRWm=iM4lIq?K8Qecw!M2k5Iw&?H={? zom@z~ynTYHxL0<5okAF85i;OOWWJtayf$&4y!ORlF>fKqGketPjz69~lkJo3o6>k` zG5$#U?!-Izlyr)9j?N?9i{&4nHHC1^aEMmFouyi7h6z*|?wKaf8fZp7MMZI8NAG{w zw`Y?%FGyYq95CgKko33yebs|xucq;d?FB{H8nz1KPf-oXMTFBy8PF1vD*T#uXMRXC zA(&R{N5$kaeDpmh)DEv(8?Z@6A-EQF?a{@&Jb0R5)0wl7C@Iwv%BON@m*9c#)mow) zPk73N)Ge1h52QE$#W9p{vpSkJFlU*;WzwodI&y5#-@c2q_ z0JW4uCj)L}Zt>+UNZ@h__|*%2nET=!^k(D-4Crc2|z`P06sq> zuqpdw7p0O{DFEAMKKVD)m+(b3>urEY8GS1aG9fE3#6l(=-+D>HB}0n@ zb4A@e%Cz~$GobDfvmaDuqi!mQ%l2>IU+y`s506+hudPp12Ndx&GtlV(TM~Tssc8R% zQ^0Ku*V`p!sX5s*R(Nem16_!)lZVSsJM;~K$6LU%Hm_q?DAsSzonV%I=#@N;;1qEK zboj?j1iRa|9GO9c*77()K2ItIxU$tqh&BLc*68~Vu@NC|4d?p+nr*8=qpLwk532-0 z%n3nt0p*(gfX#mH{kb>a$b2j)RAU#se>mi_7f>FfjC~58iHkQjDKBT?89vZ$PW#|O{(Aq z=}!_MA^n{px_Dc}6j$xLN((&nGN7My;UE>r1i8-x_ME08UF)2(Nam8G3^`(-&LKZX zC~-B?{4Iw= zHOc8?W_NuHz;)~%tv(szORhnfqVqeI3l?q#Ny6S4b_QZ5d?^Kv>9YRY051-mCs7Nz zQ(+?C1ku+5+)}_i!<<9>#~l9HmjKO1^)5r|JGS`9dT?(K@lwzD1DYkkZ0ES{MOYx!Z*?7PO9DOe>y3zAKPCj`AN%$X{Thf`8> z_9ZZRJ230FR0J3_iWkG6+7a@GvOM(kQ3pAbm}|&heE2e_pGs7g^}%BnL#mc=1eoPA z;i(!<3be329^T>T&~PRd;J0i6qg#iD2@+){5m_)Kt6y6ql|dpHyO@mGkN2&({HgoN zP#4@e(XKLvjMTUPo@Hmp_us-NlI=v1l@Gsa`-OFvNip;(l6vIEFW5+z!_yG1V)0OR zcA)iFUJoldd7{K8MgDCRW+H%F%%_5uN0Jbp#7~1S{Uk5hitd8-^PXo(8B9}KMmEK18TTN9MO`Tmp>6{K?e1 zm6;GPMTlE*o$7mBD0*=UpXL+EDGjHU4yk!rUuUce;Z}_*JdPYO^mJMRy=Bv8@lT9B z=Fhz!E-GhyA`~76{EenNJVp@loRVlF0Ww;GPAjO4v?#%H4Tvj7QqAY^JI|ylh$~SL z+3Y7B2Oq#xXY#|uGx-x`U^Y2(P{H@H-Iu21Dbxejou5rpIti>-xV`lP1w)QicZ;_z zYpL*JW7Xa9mWPKS6x#%?J)}U?SHjl3KuR|#C(Bf;BWggm|2C2@cPo);xvWmiQbIIS z$mSZ9$5{>?cB`JW_OtrK26IcZqHR=Ie`dqk|7ujt0R`*fnvymmKge*TAI>2uH(dD_ zk)CTL38I%b@#zctyb#N`O%tzYt`(uZWz#*W90qS)h_-Ot<*7D(Pm6!(4X$`*ipr4c z7SDJ;XxJxzW_BMBK7xeISb#n6lPo-`G&pAce)_#a*hK>b94lKtkz(m#C^O7V+Qrou z*V_*qalg19M5U@k$M@tPfrkpMTShq{3Ij8w9VeR3Yqg4{CVaLfuDd6RwmK)ygM(1LiM6b|Z*aAU z`3@aRNEW}>LvrZu*O+;0aAy8vRlcS_3fdcYq6M7&`c00TlcuKWmt+c8Yjv{punnhe z;In?(c|>L_vxUlhLU~VU>8COO=VivPWRHcvJ3jD~q#qJ-4xjbFjx+QpbHoUYv*Evs zh6UA2;>TBFzSR5TFW2}j=pEsC1hulPrQ^*B38%YlMI6)TB)_1G#FD+#$5G7GwsNVdM6?q*XyyvV~a9wTQ>aWsDu{K$-8-zDyO2_kkX@pa=g5H-0 zlVn|e5@19cg7-w4i9uD_Xmy7%DF5&w0zc%2;hj5+-CLJkI=6Knf1um zR1v90Mv8WyJRX$lD&;!DJWK0m7%~?SnEMN*MO(k)(x~VWTXdS~4)&2aGV=*g`fl#k zs;CM%J%CO|%@eQ-c)Md`6tnxV)RYpBWUUiHA8tVkD3L7G?p;+d-)qgAcg)L|urP_h zrSue<#`m38##czl-4n>$W8qVdA74<2K!(P&I0%IVOZ=$5AS#e=es)e5vPIfG6Z;kK zP%d+5Kq8_B&-A%iTY-gL_xnv=Qm(WgkN62ssZeSg{hH4gzB~i|)()gKdC0Y-A8l9Z zkjjjtFe^@H_=MR=o5U{0aP{kty95KSu`jlQX1Z09;%s(#zUx3Zb^#8aWAcawPUv#&r%W4C>Q^xCcTX2=TxsJJ1l7Zo__jg)lPxyO?q0(u>~n3j^p(S=|D$< zQw}lsdNLofO+=PW3+`?sCngS~!6po!%zTIdkhVDGNAJqFSlo9uwg64>6*#K+->##m zVkAq(`)vTb4YYfnw(m&ll>oP8NHOKW4g72Cu1gu*EHiuZmo6$mJwT9JX9gbisju?` zh9RJ73L|IbAxWn$#TT({IqlZ8JFkwO<78mCC3U@j9{Oyo|yZyJX+WcmD#`|cg`Q; zI9=a}OGSrSPV)qh56%5`+qYR51*+6GrUHM*q#8e&<>8)_Z>`tXZ)S}wg2-(a>`+b6 z&lJcfiX$+5)`v?yTETq-_)d+A{JiFrsQ~TAGjAyb2`(ewOtPgY>-_uJdb}vvy=uwd z=z7|>=8jS|oRFUe^IF@~)6S~yy?>O!9gi}0I9?_gkq{F+9xu2uW7S1-=OoSB@3@k} zts#%kxnWOU8B9lElU!@R$c}`qu{vuzGiWz2MH)PAje0{(y+XRsyFNAJ!_ z!Z1*LXZ+;K1dEnBmYzsiG~9^;=bTpQ)$*wzLq3q3x7U)t#Fde4b$+pXtuovtb$-GK zJk#PT+WC@%k8GH3@x;0S^jtCWGwqN5POPe3aJp)2Y44Tq6o^Fbc7uF;?P<8eegvg} zzC)cARuw(01|RRQ#jmzoi?Rm^b%m@c438SfUq26o$XfgrCNJLIw}5y_uZuCs|>O?T#;Pz z?m*ZOLeNs?(NSs;shnVr^WUTsD$t4zkv6*8GJ4*e^k{DP9V{BDUU#Pyk_klmq`n#E z%VXIY)u7)DwuE1jOABM4c2@${I38`vt`KcHoAu~D@^@qCKzwl|oN8!o$gTu@2RQpL z5y39|e+IpbC{k4VDe0oPEEn8645HvH(hQWj!)q-qEF zfD>_bceZ}`X_6NZP`YZ6-ZJR)Elo{qs&+j)>}nfgZmRwf`gNF}@T{R}Puqk6aQ<&r z+$dOhPpd`aX8S4E8^?(7ne&wEW$hh6p#F5>;)p~yYB+Fy*!RD(fdbUQN~)Bzdv}du zWkZyDJI=Cu_`h1wVfq^pSR~DdF4<{svOn52vF7E#apf8UaHC=MnId-#8V0`JOw!(a z_^-v5U}+&W5WqlV@M+OeV$L`9{%g5hkwphmuIJlpZ{No456Us+YI|DXFr%aZA@+Cs zp&s^Ep&R%k)tP7(hkWtPk-7iYf+T_}LItr~Hz^evlJX*@mf!3GH+eb*7Q9s`2Fg(B zLOX~wcFqCE-&;aLAt!^m*l{f*kUJT9vKG1=(YtV>0~E(MWT2HO=a+g-e5I$``?$%Q zbc%-CCh;QF9Lo8|-l`k_i$VF+7_8t*LWk?PFv>E9c?`6F$Pf`%PGt(zI5MGqBwC8f zJ{IzqcK6}X{D?a`N6lX0?Cp0o?td85ifCDDW%)pI&NsLgCgi~vthBcJ0&`0$#{%Pv zM-^viRO@ng!qTLA$Vi7<_|H&;hsH~y5@uD=8Qs(RqODe|sr|_P zY0OH*cLlz@!geVO--v9{czy_9*Ej9FoG_%i&Ol*EsMYqGQkT@)T7GkQetdmLKLbr( zjH3aXjZzuNeNQ4L@2D>wmT_7XbnO}u#SNpfil1gyYt^|a=V6TqkccZC;RBbP8eh^_ zfx1=5%el?Rmqw%>MntdBLrm#&D=#!%f2*|?UI^=HM>H^#NvZ|Ok$TNs9|~K&X8QP- zZ7}I`xv*85B=O^y*M;3qv9z-UNzme?qw~A7mA(>Md+XIRh4u3KxzHHh3as6td;rDN{&%T!-AE-xNL~u)3+B^+P_Kr-hEi zvA*~!Y#1!BVNP-UDPd52Mh&vcoI`^RR^0IJVaco5`uC!nmC>#gV*BH`GB}fO)-rRA zx$Bz`;^-|ap1mK^{h_h)KCRkw;O5c#a{{SH_6c)ZXnYxYt|kA#iF?(|w=`hep2YbK z8tLzigc5@658O1rkfmsjRgowQ09g%<(7dOu$wN zQoyEW)hvwpabIh83;tA6s3+f@BCt#syRvqoq)y1q^I+;cMYcnY4=>_VNRFc4CzSjw zu7CWAakGKOQYgtLFzc?I6mA_Kc#?fQ?md&$BBkEO8|NO7M~&4tj(qrF@1x4>l**5c zqx0j)1#Bfa)88zfS-T&d?8_>d)r`r$@n+D!8BQS*H$(6W2ng z5c5(C%!?pQ0l>GjpMEpC&EK!d9VK_&8YM?WiV5ZXf{2v<4F40V((O@7;e0ESQJZ$P zwkn*oC>h3g1@hBcrWk&~@;Liq4bzkF`hc=>did6W3;J8a zD+0B_`Lm}sE`OVct6#+Pm6%EaqfO%nCwUym90ebG0$G?Whb>A46nQ(oVccyAMXcM6ls&02R>D2KW-`oE8Ej{&`U6_qn z2U`0)MI@?cjw3X`0jT0eS|drrZ++sIY#0uJm_2&(BRZ-q|@I79q?>0Fq>h1TCZ}3cwajicnQEAj` zWX24j@ql5Zn)M_UE1>UNF(h}2Ljs)Gq(-|N|0|nOl!Ch#C``DVc+gLYGXdXTBMIq6 zyLaqR_pE*ZP8ZWU{3ww}hTs?_ef5v06s@Jijepkxt&QT1*=>aKhj^zYX|g%1E>v)B z_JG4XO!XmKz#7%*PU91K$z5EsLGMbWMu0(1nFJ}B+!xej6R0B} z?tBmC?TCSxk883eF3V>uLgc%94`26z#BCUqTq&klWteR=5`9odnsv8s(}}6_wR$G2 zd!H|@(+j1z;()z^ng&q|6unhDl8C+A-a$=2>bzT~&ex<Xl* z`@+wofOu)=haalwO~hb$?|Nuv9so@Fs2&BZYd|@IUf-pD1x)vnRxn1l;EJYk5CI7! zAyc_OKZJZ3JObGK+n9c4THMHtfXI*~4lUz9oRZevfh>&+(-sql_ehdCL5uiMzHS z4G)T)&a*WP?_xDpxkF+gFAxY2ZQ0BC zwuX=<5HH{x>4Nkhj=weJQ?qI{b-`5c7DDrD4LAt#2smvAuRU%t0O`*>6RBZ&c5SJ< zw3GPRj`Z<=(3oW@b zNDgG}Su>5pP;^hNEnTTFN>6J)j0&RLiV8Z|mMW~+wpWN$78V%zFZw>7=8}{i{SDpq zDcEykqJa0#X`iuSq?2xvI;s2gj%9=Om{xdt*^|`a4L3iB&kL^ztt|ID8RF%@(RE$F zP}sn;I!*`+urs}mS6~~*36PR}@m%sv)S|O$5X2lt`LVzXayamVDh+(f+p6DAf^!3w zIsmqIW{8S}`ll{e39rD@*k#l3&JiMX`%TD$J!TM1wY|~HpTt%@j04SVcYytLD_P>o z0>0Dga*}+q2X*3oYR}&+?a|h~gH-1%pYk`uJnvM*E&GWtmEjBM=bV0tC(rwv{0cZA zph3%CSK8KN>kMLq!r-~Qj|syjerkU$ejNl)e$P7LnGr6L*KC@I8jt1i-UExl{nm?U9E>RzEV-Bbf+0u6xI4uiK=L1NJA7f4@+NdbZ*pQpweM zaPw4{$I-$yR&6I2wiSE@Ya+KK60^|SFLBfve11HDGidZyE90;(x~-))+x!N>l5nsZ zdSqu2w}I*djee!yV+uPSsHfCpi1hsHf+v#};yK<(w3g}>X(!+(+(De@E#4agxe^ZV^b**(yqco7NRqJDtPhvg@Q5$|~X z(`OIi+L*wta*eG99`LJupy=efp|t*+N_J#N^P!5(_SlAHFMK!DPz+2dh(-AN0m~c= zWI!2%&Nf*FBaee5Cfe(m%Q@ev4^Pq-3yLA6&*lWjw3CvaMO}YnwmWHg>o5{n@-OVPE{nJ?lk7^+O zu+Vpt_&)(-W`QjF%0wts2Q5tx^xn~1%>6S_an4NI1{CL`?;s}mc&kn4)=1Ar&U@wr z+gBPIIjIqOvoq4G@(Fp-3uyye+?HFhKo7P#fQAUG3@@q({F_BZXd-okr1y!N{1h2L z4agPm{6H<_ek=KWG`{*NMD!2+p2;Z zTT^S2Wun#`q0w8xJLeyZi#!OsxMM}nD&0TjqaH9c^Wa3@WX4k@1aB%R2xP|X_nxE} z^*Sz(6R2skBjO$qaRzNxanPXDr+D6@Pz%uDM9DCB(yAW&lya_+OCBcv4-E57TKvSA zX##T4MiA-h*70L6E+P-Gd2`MX-c1{4?{j@^;zL7gJefyfTP_o1l?@v3)8Do&T}IFd z$e-Qqsq=d-cD#Wc!vXu8tR#Tyn^sesjj8kAfqqi(uw=Yo-+~GsI)3JrKMEq4lhE&- zN8dA|#6CooZES48ew}_Llj1EO?<|M}95+W#DRLd|lg|5*&Y^`xH&f9NvTQ+|iu!rSb@H9kDqswoWhd zPVAQtXN-wRh^;@nyEpSe5!vG@MH|;!sPcM>fnF0W@br5T-S@xc+M|-{Q;vpd$ugR) z%)}oT|CYN6c|#{XCbC}K`wXdot%V7N~n;ICyh(!txol2Pf4VQ$Ujpd%Amdle`xFVX(( zcTQwnU#zXrg88+A3b_d|kJk33`~(}7Peq<4NKzk@v}ym=>N)&Hs?l{!o}KA;Q#$pj zPp)w^u*H=k%Mm&LrLCcXb)WyW&%9mDb4t(+g3V$ ze!O_Y9Jav~JajjE2`nSICqx!eC5#Q@C`!jjO@>r^4r``>zw*DgmxCRL=qHmjN}?}{0-E;e#Tac(`0~r`E{~vZ;EEi)X^BBj5i2baGp}hH z1>TumAA`| zpY=+NcRA}%^*|Di(OZl^Za=N?r=Tb%~H#l6aYo;PbJFLK$ z>|DD~M*pKzIp;6O?{J3LU3>?6MWddO$9&mTf@0>B-m+cg5XN~cO24zi!uFC2pCFBh z8>6J(3w^7l%AR2>&W*UBLHr;@UrK#gnNBP2)5pD=0{PJa28C_^SJXzA;~PIRQNv5^Yx0SGyHxHe1RN z#r2`JRPMC2(^+E+6*qwL1u{b#F*vR6aX*FcTVpN{MzxN;mKUEm_mWa<9W!2fnZW79 zaJ0aIIe0t7?%O&39khSM72G_Yf@K-|$4EXlFl;r_aED&bdF+ z_T(KM>7zjac1quf(^S_^V~W@CU~#XM&jq=2Vh)atA}X(8Y^UieQL(8uiSV7l?Fu*E z-J6qJjL_FND^|`JCoUpz_}X@m^qcU2m?;`> z>5tRuVH?DAcFgM zmTC4I0w(Ar;a_Rsx2b4q!!VkuA!aPgesMAMIb8DWM2jmb6ZXZ-tAzTFhw)baZ*1mAlMVx8uxhRGLZujkM2g3KSW7^{7Ur%*8{QfMA{g~y= zlOui6yPvwmDgQES!MVRRq3I3hFYWWw7r$lcwa*n8I+FS~t2!-T!%?j)i@(zGruNM02el-&CCws;bGJCyImA-Y z(?J}yoS#)&D<~d;*G#5^-~AJujSqHjcuIJF3UR8cNVtfs^!ZI9MQx)&{kRkbuG^z# zbD^DlKLJV5Q*y?rarMklm;fiPWNudt_YfT^6-l14kB(y;se0Z?hIl+OYv|$?n((gm z???r`Q+D#{xJu6T`nz~i44VGsSdTU5x&cnm4Zv%?b20raM9^w|)?Fpfl+9aFDX z?qK|CaGdLh*LE*MQ2f=P-!aind+Sb#*YJ4w&e|Q`I5ga&h&wu1bA~tGOq!CuyKPZu z@q}&?drNF-V3Uu`B|=bEh8Ex_MZwP|s~@b*bXu54zct2u_Sr}d_oU76RxTzzAeHlc zlXOkBij=5)YRwsW+MbokrGByY^?l?dN4B}Gt6ev1&+PEg87w{tzK7t-!)2tz#v!>| z6K%G02G*Y_Zn?q6CmPN*JdsuT z+Ij+MTvw3Ehw2}3!iI7t12V`}PNkgzm6|(L?rs9;B6WBCnx&G8YLMA+mfLyEFjL1? za5mfG(Obhe;B~Hm&QfyT;I8p*37Bvwl z-gL`sO3phF32PjL8F0_^K_yL^dNrMb(+oXjTYU<;Ay!*K@UBFP!7e4vGLHtqt z?m%IB=HIJT5{-3GCf3pt5O}*0OaJ2e^B41TbMp^nWgj**Ha30y@Zsb6+1WW2 zB_<e0;)Fef_6GPanw0$hFkgHa6DRH#gVSH8nLfwD@{>eE8ty<&y_m92}gV|M~OZ zzyAK&+41qee}{(`e8(76RG_$!klx;cg4NaJ`kAc)?F);fU=|-68JXax zYpB=Ze~_hK_{>RGF}H7Ia&mO^=g;x+DM?{rF|qsiB_u>d#KlELC2PvdfBg9Vy}G)h zqN=L$O=oL&cVS^&T}4G(TS-aN$I;Kt%_Vvn;?C|z+uQs5ySs;nJFmI}2S25YnpVB; z^8fj@$$6pbO;2!tR05lv>ry9V{7coF7T3SsLBokFE4fNH*FFckNARuyYikdWsl2X$ z%Y(l?xZcokKy(x}hhm_gpP&8uNJ_D`wssPSQZQy9HdV+lS25^%BCEl1Dpv`Lg+<0O zOIoxCUX7(!n$}pbv2_IB4kcvEx&Lbqx|z)F@ICt10mb!&M+3Q({W0j#)H1_-}cO`e$~F``rR?*#77wE@N%Wi|dAk{4VVNxnm6ux^_Jkn;)ImOh9xduylEz zqH@jJPsW~Oz6|ON#1Mq3!+49<1_lK9ONR8uM+}lvO^u#E%PTMXURqsPQBqZ0S>|s2 z&fdjVadcuC_G@fu==bDG-^?haKCUvmBf2c3CFzJk1sBp=u$nwwi;5X3-_HC~F87Mvt1w?`rWUVBxvV0el8~HaPeE;Y>$k=qokjKE+e@3> zJcBgsOuY5>J~x+)FDWT@v8B&{ zxa8$OY@<+j@hu)s%$JAko@F&`ODt_qg%6XpLg7X&@xJ8#99rjeCc~GNVL>IZ&l;8iAbAkHzY@`(0AmNES0-|v>n&5M))RJ2#TOUB+`+!L@FN^lPz}8(a5rnq$<~k4{F5W-KoIT%?<9Hw=Zlv6 zJGgivH>Tp6hcm|Ba^2&`e!#mL-GD!L{4aK|uwgft1AL?k9EURxL!~*u0h~@4>J*4}Jo;Zc;Uc&gC~o%} z9+2_BK{&4xj_OZ+@A~(c{^?Mj5r~bAwY4o~8X5)$IyxpMT3SX9IRkxtb8~g|XU}xsWBi<) zSXo~!lF_fPuWv9iFfgX4rKJlQJU2Fe@xsK!bYXgWZtmBw-@j*O=I3W;7v!X*WMv;b zc=SkG`eCl@=)}bGG7R?X*Vx$7($LWF-;Zr+IbUBO(9lp) z(%qel%L*=Hg27;J2?+=Y!^6VDHPqEL`eCqsK3-nF;-aErJ6l`3GK1VluGeR+t*kQ0 zHF`RS$()DI7yAPP-@Yk$e@@++eEQ_c)2DiRhWT>tSPU@*lZ1JrFdv^xs?Nk1Z_0>0 zd8BU1%=QNoJ|!g~AvrloNtK?0g4){h^48XG-x?c#{OIf~Dypyl{=L1uw6wXo+U*#5 zeH|4wG*nu;x%uVG@81G?OG{rQESi6GbrlykG*ni0bd)(>oiK{NtTu0Yf4=+B`FFKN zi`(rr726}XD*+(DK3mN2rKJK3F$T&{sDf=E`t|*u#EIU8!oNS1i zR$F%YxVr3LpR>uit#p3eyEsttJzVMXJ;L4sfSlmKv+d(GA;Uay(8d1MDYK+yci{Q% z`JSBnN_WuZ;q48O3mmKo?ze>gzbzW)ZjLhyA;$%{J%$)S0vzve2yS3YtjAc#vh3Q@ zOwyEZPDF%+_nNhh5{m&~RK2QPj#u{0`uu4TFhr^8 zdKf`uJ*Af(*8F}rD0w0Ey?%E}fb0DfShlE=KzdOcpIb+QZJu~hS2S{zCa6;PwYfLa znB3{r$AfdXXTC4C7t_B@>K-G2->5c{0MDOvj8nV4RdrL$?Y@QH z%lqF;*adHx9KJnIenO0>1CEHER+V}rC#_R23Z~|-M>w}Ui(t95%AagsK%)!&fB%hQ zwX5TYAsZZ#IyoQRqHlEQ9y(rgrOtg{d(_RBWx8_oTQKtF+@rDN2V+&bBu}VHm`7@! z2UtXvpuGeVBY`=lLCuFPqDIfZz;hvQxs@pb3fE0?pd z_6;Y`WpOMm9&*l-Sd!6Kkfq)dyS_WiqRFY_V^(y7alLpJW3g<}t*oA!52T>1*Hvqi z=aSqiVq?@u^<{!SYe;8{Eo~~vG6iwk?&Qc^(hCD(<(emV3yCeO7F^y*>{vlKv6|S` zU42lFxVck%=PcsBWxeali6`6K+g}miw47Y5kR{g?R>Ya*P=6|`GHY?2*qq_4C)FO& zog}XcvQH4HvQ*n9hIFCuh_(Y+GcWwP5OMkz?>n=Jvo?}0wG$K9tvlXMoVEJO0U6?= zm9o8aiFrM~YnKpfJ1Omw#GT99>U@dUm+UBX%MxfFCfBATty zS#y}^y5ik3A7X0v+S)o|Q%6L>65@fj_r$O)i58cn-C6Msc~L`I+iC~B2T0tN0X9;k zsFI`Fo}}Fc6P`RL3hhh36-eY7_;jHz^V6>U(XPxlz1;h>h@4xqx0et_H@;halqkP0 zY3X#L+p0}9JBjH%&+^X`TRYV=*Aj2EJxrRErQf_VDk>|heyTSyYp8mv^(&G}nX7gn zsj}eV;|G~{M}%(rW?mTbI$x7Hx-b7|Pv)V4?R$+fPxhVN)|`2H`_omoGw*KUY%3&+ zufJUVf@rsTb-pSwX?c3)c;fPowTZpN2TQI-5wc91xV@dS7`5rvSF^5__i4wGA_})X z*2>&_((y)d=DJbKbEBCZ!$wEOGTRO+?Mcb(*>ijA<;->c-Kz{Tcl1tQaxwGzmXpFf71yH8i2)61+s?svo{v+fA@;GxW>A<|ac%(lG`S5{?q?+#z$mO0X!Sam4#)t1ye zDWdZFqzqf4&&t+B86u@~cVr`R`;t*_zAWwrZR>McNmW7Gm053!#U8%T+I5kq=1A{P=1mI1Ff#N&YyD-JxtAbDa`Oh@rL6^-DBp^XMAn3|a`CXKotJl6EH+qsh^R zd>yIxX^l3=soQBO+8WeCn$PpQ^s)lIyG``q{MIYhbg6v7lRdQ2yahwfwB@-^`Zm$% zxrysP(86-YI;YVraw_YyY0^3N#WB>^*$+tr)En73$%m=OvM0pMrS4*E^f^jh%+Ro* zQ&Z_nwBAuY=!(xa(>Y43?ljs> z{`hG&t*P4lwjFJDmBhsxH2sRl$0Mi@%J&`MrXDQY+FL^HDD7N(k4h`4Y)_@mF7B$^ zLiI1&R=AC7QFtKBi8`sEf6gMRQU2y=cdCBgO790$soY5GTa=GELRxDn*BOIPoM{>j znzsnlmy3HZtfcO&^FF3RCDxqXca|DjP2DkzYFeeT<`{Kc#hzt}l#k`PwS$y9WljZW zDJM!k5Q&tt#q~)CDVK^&qBc^-3P!w1lw3-Q zJ)cN5Z~Az2jPknCVQ(AdbbZ5iE6S$2N2}LTs%q_*Mo{S0JvI9&DOCdbPbtwAiJ7Y@ zbIO(_ji+RloQYDT6c-D6i%=K^7p=o7S$Qk9vMBR&(jQ)@ig!M}zMOKS{oXl$%Ic-J zkL;zSF1fj5mT0T}onZF|FtR=;^hi{~Vf_3g4 zOeJ4#&)h0Q-nmq3WgEG%^~91Sa&a@Q>K&QfsGjFRPFcJ!!;V~0D>r+Lys>I-qz3tH zd7oDd`ASKh)eG{y!dY5Lz2E2 zQ6Z>|0+nJD5DTHZfuYxw6XDON881 zR&O;-UR88SE1A4MAKYuAMD$L(I*TH|ZRTld@`cUGhwI6;8|LgzBd4yNxmkzowJLh~ zUb6af-=PcDok-CMGImNywRwTE9NOE0E+=8;vZHd&REElZDS(aCWI zYwy%kv=8xJP9k5~zu=@Yxn}U{&~ma{|Kwd|Wcl90jUl9GTMzc&q=TCX%{-)?>$uC$ zlGd#P*=eM%?k5Wlk=D0|%{)sQXx$QCL^{>T=jlhfQnTKQNP1gtp;bxNEu43IFGYIv z`K1Q(fsqL({Ky$YlMkLI>+GA|x102FAbdj^X|&I|+n&_EU9-ubRJ-XwxgjZkT_oci zDQo4e1>PiT*YM1Rq=KcL;jX0m=2TBjQd?bx)m+lfiUO?;(wic++XfW;%=AkfLu+f+Iwp)`PrrBi`nGG=K_u!lU+}V z99T{IIC^Af1L^Rv%KAB^`UCU3R7nYg1C6evz`m|B3zE||I{gjFc%%RPMv~fUtAv*% zrEbx%w3N!@&7+>VRiuG^ z`nfu!Birxg43aLcA?1XV?k&^Jeoi*8ZOkqv=M)TPPb8ltE?^v>@Fk5hk|_>RgA8#> zhWA2xJ*Ce&i>^rJ)^eq-q((k8%1fZHyzZ5IkDhVPFE@eiaCBnMSvtpF(VR@$v2CYw zq-m|I7i4dtB`r0}j-aL0Y+-z$Ey{n&XrWOuw=#TasYz<|547n~dh}JaU~dB5mgZ=! zMH{6VYsu2$Y5ETobG!2%joIXy=B1sToU<+W=@Gdc$E(2oaS4a z3LU>Ml`B>fcx_TnM{(I1haA14{UdVOD+}KY%4P=_I&68y_*9U;vV+l;KfENH5teUX zJ(0new?2tdAIUyBmPYY&WDPMN@QFcsO+3r`_yrngp&okDQ)UBvzgcaAd7BB>h`m3zy{e?Gj zSJ2Z6c@}lk%?re4`_Vq-%SSAx?aR~f9HAxWytay>No5ad4p93UOYYR<#4TQUxi9-w zo$ASB+0>fRL)#disu%SiV)Rr^+O&<~U-5W3gZ{3(yCs*tu8dmgNsliL$~i)pEm2!I zM!Q{fW>zO{Q(-{_H;rCk={b#Nkk@7TUnmBP?<(AJvH+a zEu=&_JPYop$sQl5V+C=R=cx^OVVVupfE>45;n|Vx&o34*o-7kO-pnAk=^SJ*@K&$B z4*II*Jo0&#^T6Q9wk9xdh zgU3p0d6BW@YU-5yHJUY4v0S;Ek&K5cXcvkY^d8@1%?#l#tpi!~nht@T9dx^;7uK($ z-C5GzRYj|8Nom|e^KG&&>!tBG;EV;-{dEKLPf}Oa7$w}I)>O8JHBl+$JRY%B#}Wa{ zJSuM?pJpxPRPN&&=8O&NGtMV6oYuS<&882pBJEG6`>eowTWGJliR)I=+BzO}w$eP7 z#WY-@@h;h4dWU+TMV-Exn%791uS-o_oRbhjol=t>rbe}>qK9&K?Xv$F0e9d}F zYu>@@9E@e#`p;Q2bT&Ua8bM#ZQDL7CU2C1kj$GQ&)ic+&(H5?tb~MxEx~u9RQ7?2< zmhw>>mgdv$Q^Q&p%p<}5nj?OYDzmsabPeTWjgWgkWw3(F(wtIWd{48Ll9<2r+ABs$ z|BbW84B?&oj|9<+xA*MzrW3a0Y%ig8Zgg9-hUT%3yL}_|!K(gx3F?aFAtjE~S)JEu zlc?&;W~E=F;;p23C(7lSD&RxZLVB)le%^Nv&Dhb`D>Jm%cw>xT&dNR$6eFY z!zp{0zL{}~($bO>@{U4k;Bxn&*jL}Tvg33y{pcZ~;WhNh z`x6E`X`2W8w?3c+?mE3%milDJ-DP^zvMq1wx~c9P_7pv)a<0jxa!_`!uuB`Gly?Tt z$e_fvO%2&bv1^KUSEqp5ev41!6XkC;kC68kUbwQ6;c`;o)Jyu-(TT&7bgg0MK^|Ju z!C71VXp{CDucA{&``;{WpeFV1sGC4l*{W5POu4Y3lu}BmU418wL5b&#c9#QrF7Y2p9V5$B_pr44ANAF z7Os3n?cMuysVFsI_w3q6Do-!D@D*j}mVAmbW&Zm7G(F0sm0fYq$R9g5hQyJNELq|9 zj$GUz0pEXWm7C@}a%?gGt-#`%tg4HnMJKX0oiHlm%NiYuDKyTyv#YJ3mc+4fXZ{uEr-ihfo81>>mZrRIl zqny&zrdLs2ZmJaRp;0b$775Y9j|&xg(+m$f7tm;gzKZ<&)Tv&A8pd;t_fhqY{a-w&3*b5aU`-HlucdQ4WFOH&Z{G#t;lU$oND*=n>2ap)atsqOYZEXuPBg&~99}D@-qz zJh!J{s3>mKs6eW4_5QT{(1Itu!+FC69_u;t?DN~Yq;uEhy=t71tCN>mHZP|=_Z`DA zM>dx@e`$7G&h3P?+3Gn#VUdhg*@GUO48d#>OI~_1BUa-UZIr%!j8G_D;di#AAhkT| zD3;$}He;WAKA|*z$C|uFCFHfwa_<#a|38MyvMtJmi^8_Y&SNL2pok!dfEWmfV1X#1 zNC}ETNl8vUT{H7ccLzgvhZxw{-Q9icdfz{=KCJ87_u98*92`qn6&cVi{2`ZyBJe4k zEbu%Qn*AJ%M$?l=08bDq>H?4fmj!D$mm#_L3C=Q*aJ<0Q1MCN#SheKl^$pliv7xsI z-7ea5YyzScI7gRKVh$f)f3;6KEy-N}F) zdlnT4EI=!Qy*MIdsW-;{3w1kou~Wc}_YurZb>`X>lu~XwD?{$f&mVb>ILbD)?143s zYn6xL@!}oEpAag%Co6)62@1%=AVrU1od!qp%vl+Lg*$B5abP8x9@)*ghF=Q0&Iv-_ zdWW%Fks*%tY!_(8Jqy}t9C+0mouXfPrV&Zg79IHqZdSK7WAGy7*NRt=QQ=~Af+ool zrOlvPVkJj_cA{sjxqwM%mw6Wmpl9sbz#fy1(A z%tBy|Vu#cG5P-%+9t)%KU&5k|%F zQ+04}*@5n%@C4hmMg@df>dS|Nzf5cOabTMMs$>Z8MH`P714XJwjAo#pBL0A$W07)_ zR&&;ibP)*q6WtorpPkO#=k<*Bff(g@m{o*`Zf`~hHBG$u4vDHyKY0)~)Ew`+20gBt z)^Gp{FW*u67VNP}bsIqs%USVIpu_kP6957FQN@oqr!;djo^$pqt|yu~BcxEoPdalT}ORI38#Dp-Hz^ArCtHUU-BoY8!DP4bEA(5|5WxW#kdFfdh z)J4ZjtU=iPo5@J?(T^8KAbq;)kIUiJop~L9pn|sLbw==M(^;Df7*@YsqXjyu9|;cv zeibXwnVb_gsz|`uWWJJqn*Cfa-`T;2)my{2u@}e(tX;)2iX6OXmJ@G*;}hly?CA{~ zVmd889|k`=F}CLpJm;viVIi$eVt5Hws6TmZ(`oJ3%bw4$kK zFlVYwl^(^eF+JIt$X>6T9X^@$TDf`cBvz96qZiD4%};au#^m9m8-o$^g>&cX;D@~< zdwk$2r=r`X(59aHT0gM%u*G@}{I^rA4g>OAS%OuZZ;eyoKb(U#6@?W0YsJ#EPi(kk z;Ld;9(+oXZAG2E3xq&}e&Qi4(i&;-g=MQJ@AY86zA@$eppPL20y7cUr1)g=jf7>r; z^BLC~8(4k(hSe7wb%dch1f+G%q8mBSTN7XwXJ>=Fa0>fQ_3<sx#(D+YC8Oxx9l>|kU>*25U1C&&VEnBHD* zK_;`-aX0|7eD3_>2eNpV@AINqIj7CsSXSg=Pb!kNr0Ee!ux3=G5*@66443gY%#YH8 z_)OMl;vTk%wTLwsEo5!XJb~1(;&*w%&sbTJ0q}Gd8WaZEvr4>L!G)||hhM-lcK_QS zcoK-bbe&rTxtuamonUYG3i1$`-1v$34vs5F2v?v}{|(;_?3I*aI>4Wpja~z$Gq<6` zIbSmuBEg)aNtH0np(D;gM>z3oe}R`c4qhK?b9j8h#NFy0T1xcOfPE3D{R;wD=n42^;ZPG#mC{SdmKT_yH3B2n8kC!AroC z5mC@VaQ#{{NC6FAVSpK!>+q1%#nIe6$~ExrUZ|yx@cN!W$(!8iU2eov%B}t~{5AaE|EJuuIx1GQ_;>+%P&lH~iGb;cb${?<{FAm?yf3d(8-Ok6(xN#i zhZ3Quk>jMOcq#G^L1zTO;dpxDKuC|R58n&EMI8gbgCpUKo^JqGh~aRa69zh8w^CP? zPUjTlH~I0NJaU|DXNNN}SMsfH2%adGl=NU)k((wFy(u^?+>F}O#pqyUAK$46fUCII z(#>!mYRk@ID2(Xc`W-ak!GUGKNfh=x!g&uLaX81B1pdC(LdED8^j4BAE&CWnsMWXI z1MpgvcdaA#UO`#kV9v5TY9YEu>LlPI^5iCz14{7+JJNtoOxjVN? zz)&(XFc~PoS9$6=R&=Pt74}u=)YaqU4{OBPPI8)g_fa*m%m}uH<6-*p8efd3t+$Ru zPpO+#9q0gMGkpx%EI$m(VU_fF;S%VHxF?Mb`3v_Yz@VNUy44-*%Pk3<3%HPdJvp2N zY^%c^wiFg#sUc5P+&oiGJTKE9;S>FAX|0>^f2}L3{jgBeC(9%hH<*+ckt4b={!3(x z`VZ6#$0&^jMUYkQm-+zeF9G8Jf(gPyTY7*){O@aSbKX+dJ>xlcc)7zBAr1TryK1ZQTcCW^ z%T#ahqWn;N7PwF%*b)ig!q_!JP6Myqb0zy3In?1D+a7hk1d`=#J5FIlcQe(UgZDOc zHv3?gYTs0@#0FP=HO)i4%YV!NL-yPL@)p7kmdBtw^v8HOe=xL0CrinxHFI*&{6Yz<91n=1Vt~0ox`)VT(qdM_&CEC*Z-asRdn>NeRkWqEj zR2Ljpb&>N35|_O`con>E{k>lYIv5YeIRb^6r(rRiD~h0iFYK@4`JVmQj=U$1GgujT z$ORWNzn6Dn6~R39xoZK=IKIE(IhJ$eW7$_!eQ1RKJ#w^tj`R}zs@a=b1TU!X$BBXV zRdpZS0ouy)_AdwivlPeP1lH)Y!{%``s_1~L>~=}d(jTlh^gu^fmN)+Nyn;MDaNzUJZad7?L8S-7K@U{Ch4P*szcAE{_w^22GRnLXr9Nu53Q}Ea$kc$<*R-7 zfRnboSOGA>_<8exoD@w=Knoj|ZC(0_)gYMU=*JpJWL-@X-zjuEYY|lz#vW}KW);G1 z5`j};X^n=SUU=OK^M@A=RUMShu{R0ZZ*&ZGq<{d4>D6M zR$c*frz($|#*C!J)J`S?&L_i|=EB*;D(2a=1NcJbyM#<^5^LPn@o0aR*P33qm6f*i z8I;W`oA(HGXMMlCK?H$}(-Pq>(DiVuU^#HBrIh{$U{>|;2Lj&aBfLJGPf8v2om0j? zP5#FbKwZQuPF_JSevcEEdIP(_SsDKp?dHtbVnS*-ebzAG4EBSiEzn~2iFvny&+M*C zD@3C()+tQz5&hU*Pxqp+%@uq-(p`C(r$<(pZgVwolj0~PgBSDukTU2p)Rz!Lx%nq? zE;KQ9B?f>M@q5sNV8E6o$bR6~nnkb+uyZK^e&)QJcO7WwU>6q)`P_n&Y(XwneW;F( zB=0rV^B0o?E1vS)34h}^t{cvjzouNUR^AeF2{suFB$lFi`7`h($mJ9(wg{OK_XKr- z_k~banDy(G86!c>9ihkU) zJcV&4)yoyir;%qUoSQ{lAq{{CzeP0V6=HYrQz;YBTUb}z9^^V&8x{{=L97At|J%)h zr9NN|v~u1xAOIYFK2Xpp2aYRgi_E+83ZIg^Zg|W~7t6~XxCca=3>&FTVISF6GJ~$7 znu#KQKIbV8@>U(ZjbYsW`*D;YrLpf3l31|$4@_Yl0TECa0$$qcMlj0-Z{5P zut~e6$4q;wdpaKRXQ@`yf8z~OG?cC34w28+XH!F@gcKqNi$9QGi3y?<&JujK;Nd}U zY(5>n?zU!rNsCyAV4eDa+-f7e%M{?Llq}u$Uk4 zQ+~i^Pv`^n%l`s+ieP!%0W9dBc^^3dy!Y%D`cRqvXbsn&Ip-Nl%jWOBf+)mT3=1|1o`hb5s`xAYg&<0; z^EeFb!Z*zO%LzahpNXU^YgZg;;q$9*w*KX1ROHpps* z0=NVZ(!FK%!?tR+PkR(}o%pf>LYzWPRas@*F2yi{m-opks5C(@)oPUt- zr}xq3=HrLY@i~oCS|{>$)TP!e<+@dOTD8>tiWlnl?vMO} z_Q;lHyp1ipt0TEn8*?l@)QGxG>gmMq>N&y~{7v~6Y&`bSrekQ(uNJ?oZ^#eB?LDsW zFU`*#j&L94*pPG3Khl|guYt>gCJzp$jJw!jF`M^)Qnt{RV?eh9KmTxWb2=}uYf2Ty z9ntpL{EPhF%vNnDo;3U;(BtQ7D0CNgzT#%_FZ5jL%&c8VuVqJa1AN9XB>EWCt1b_L zz^igUzfM3U+UaqClfjF1Sj`T{ho9{C|B{0aW%E;yUubIMEj^l6d6D|oJ=467yx)BU)Qoaxkngy@*bO6uK!PfuKRT%ufm=iC=jn zahCEk975UCan*?kT7CXW*IE9avrC%B@tjW@E9X+LdKQ~>Wba`YVrwRS{LgZ3NpLxzF})U*9E0T*eaM{BO}=nEZ62Z1{Vq?q@c0zBsrB%C~{?I@&^^k zbGh7-;sN{iQOk=nW4;l+#Sb>m!{ZrS{PWNj#tV-H$iGZJ}7on_&bGaYj-bHkaDdykQ? zn0U-yg2n6%t;WYOKl{%?vskN^{D7~p=(*j{GS=7A%jI_f`tUOu2iVveE1d)Mtr3ck za4JitiI|*h4I=dBEE8R(-*NijEWU;Pf%%me#eSHxggc0Rd9Np_W%ulOM|iMXLN{Qi z*_D2GQCGHQ$yHd&w#+>O{$)3xN|L9bNry+v#vxByNJ$$KQ+-Oj6FzN?7R`dg)#n7a zp?jjav=~ap?(jpQNz8cOVDMyiDb)t%@97}JLHivr{ubyB`GP?}k)H{92TWhm3P*E} z%{>Di46{iwb$kW{GemH&->A{zGvDTz)%Ap$R+=(ZcA*4Zt5}?Wg+VLz4}J z8JiF-#Mhv+Ll&Wrkwtz}knQlqB{|S}XyDxIpdax4c)Ikn^nTY|i9u4?*eH$?AFLcF z`d8#_Ix4s>9H5M%<@6c)JU@yrK&pAOd0EA=)H7~a<`uG(T9iD42qA7o+hHGZWYa}d zj4fGx2N{JlE!hsCu+QAbz#p)y=b%)jhC3Ha)~UufoDla@m@AxxN8}#H=K@IDqCn_1 z5+8a9zn`cL{>tqYh8ERP68d4LH@Tgkv0F^^<2G-v#H{4+OFQR-iS++~)ZIl{Z=&yQMcAsCb&Ey^ArKzJKCU==Ks4$A^FL%xOOPrF9 z+Xdm7BH^~v*c8F&ja|rL9=6&EUO^sNG6rnLKF%8pEJX$$X_Y*!y5CkT=2fWcriy&a zwv}RnAGXo@ZFHlhLNF0=b>IX?6_CcYF`i{z_n>Wrz{DgmfPeD!m zVE6Z+8(B2Zhf{?XAD%6F)(*G45+f}&HL%F3@m|SW!KM0<+7mQbGgLzI-7EW3-rR?! zKY(P)Xg!_3k4!X)(^nF+_1lt$V#m}aQ8IMD{QZXO$au*jUk$_&^l^U#e4`rXg>bSl zr|#|2K8Kkt4q|23?&`xLulA^txq_=LTeSmdcH=;CFMmO89m(Ndtcv5bQ&id2yt8Cr zNnlzv{>N06D8RHjL6j%zr%KtthhNIPeGfpJg>v^xKsWcwym-!X?8G5dI`sJ0=4i40 zsG;hM$h$ki8Y#HY>8bIdb6bt#;rz)>BZ!mS_PSioXzDc<)hvT};9H_LZ8hg8aG{YWo6X*-|A^aMCbV{-dzJ z?2>F>;VRxi$<@LF2ow7hJ}OKWDvCB97)JkB)VfQ=cP#eUc7eOCxNc)Di7=M<9>yWY zb$3q`WI}U{FvwbeWP$buqo{46W)&l+_P(l|kzDGnoX!Z-+sj3aDCv9IKa4o8UXsVy z1s)bXVn_?Bgu#qc8A-H_@po4r-W}%ZZCkh_nb5`!`c+>fyoc&Tf|G79wjw)N7GB zH9^X5*i_P}2!=X_^JH;S?#JDM85+;+wc1 zafGv0$j1NV?V^9-UTGoxOzc47d~PX9M|P9H|_U{X>)?vEyGNwu)4|GIphK7FT!hI<2Jy zslEIuBxh$6cPp_bGL9thf7UnQhtSijGSM5zem4vJ9v(U83-|}D>G)6WrhMP{kJ6wJ zS3FfX%a@rsvdhw2DvNZBBu7{+J|`ZIYem6AJ$s2ZJrp{*L~tclwNmDash_wTeFSSDIjxMJ7=l zRbG*fRZbPW6qE8a?1^ZA^bjjbfJ^4&s_79TD5aW53LYi2Q^)w%BXHt3_tg3!xEtBF zsvo)m=eZTYyU_T#lfWE!cKd8ql{KP%xpKNWzuaD4VpJPX%0l&r6n`bBwWkHs#Qy5b z*i2!o@+MO!@RdKy`NTgWeV;Oc=P&+};7t_?EG&m zIYE4;lH6a&{ViV--$;2%iozR+bYb_py_l8myHbaAP@mkkLznSua|3|Kh@>@Db+ArQ z%TwI1nOB-EPpGUnOptyrUnY-~q}odO9MN6tI7A}cXeweXrqAjxX6yOuwD$WRagV9e z<2}hg@@?Uph^3O1>!xAp!f7iHAWWXxZ9OC)|CzfD(4he>N)_Bf*K{jhHQu$E<-6+V z>;0vlYBFV*B)(F}YZaX?tA(!$JxY3u8FZ!jRMs#4T*IM#o45*XbzBR1LA7-2OX43{ zL+}O6SG;hgKN3v)xGjewD3`e@z)ti<^CgwME2#Rn;z#@DlKb-1mIPhC^kZY5^r$4N zZZr3nsH55eo+X@B{;TLREwmZ3;`#k8zI(g5nTG3eexz0NeJh6FR*nhAu<_DqD<>cm z1c%%fLNmC2bBh57jL|$nB|R#y4p4mQPAYMbCv~pYc1Rzzxk*Pz{F+X1*NY7GG0;I_ z-|BZoOX<{#fXs8e>o$7tO73d&)!0j9j$XLc1us(v1g}9K%bu=y1wRnkyG;cj^OnuU zIj`}4O>rv4$rDuq#n+xFYmPkr$UoY_(yLv!B{34W_QjN5L^ea<>8--eWL-n1^ z0A5Y`%{_;><4byD_mFE%_FJyw#oB$r{m^EGcEusMQk?HL6s+LSn=9tj<3+9C&0hn?dWd>(!7p@%(zVcs(IDSgXv&!?O)46>e}g!; zs34vzTv0qQoS^#@3)i`EyBKp<_9J&NE-v=PzB5UC1ff~+t^LedjPbQQj5@~X(m?$a zMn8SM&cFDje5mGN@fZFYm6g#C*{!(D7|9qa`^NCkW=Q{K=!

    z%M*b!@Fq4p9als&G+&Gdp3U&Av_;>@?P^}E@Rb-%P1*#cR# zW+;0vPp?|ZUIm|4q_h7mE|AIDW3#?XI@qK41&HpjN5xqMMz;Od8NQUv8#HXVJ&{VWS&lkPtrDO?XYmEgE|In=Q5Nc)DCKupG1(NBIz$=RMsfT z0$92?U9=UR8T(2w2{LbWaGT^GP*XoqXgQ-}mo4(CjKvKtKtstDQJ?9zQ$&YBt z@;`V9GSBrbx(#|VX9)Biv^MNB+*71iT+xq~&o{r-9+ciymuSXIDDhHNh}efLQ=r0U z;2>FtfG&6{`Avr(P>4PGllDv(rg3k?9HL#Ruq_VUH^k|nHKZ92Sbh$VL3OTo&{6R3 zIWwSYD54%Vh_tHmFS?_eY351VMJl7}f%<~dRg|w9Cf5)@6n?T{z)o4NB&T4bq)GJU zz(~<2VNS9}xRCx36Uu+h?;m!YYvqn#`<09#?UrlsfAQ(AXOQFQzjNH6J#gPTt0CI# zTRufc7#XJJnos&>Re!Zm`$lL~p4N;f7ApFvyf|u^n__#uM3N~(Gj@q8C3VRI12O``F~jmQ_p;@>eKsd!jHcH* zNjXcMZ2BtbQ7R1=@JRVtT?zYw^p~bM@4CcGwK=^(bU-nC_ilkz`gTV!f44Y(^JngC z!MU~3#5KOpa$gLkVq9ww4?J_uPVf?vT=Uehr21!Rf-b(Y!ob#aly6b2R&TPsq~9ou zt$7$Ex0wgB|B+rc@bacfhUtc<|0D8MgS$=&4k*4w_wZe0<2IAj3-N-rBMF_rXZaXx zJ@djCqSx^LD7rS!p_-+6f!##9Xo1fIY#cw=RRGtMwmCSs z9<@{l7}m5;F6q&wwD{|uXgV5GWJ>k2IthP^a!0iU`5`Z^5HTsKs+7)c6Zcq?QjZGX zm=-4)1!HyJwx8$qs<(yqP>8%Xu#oVT^z~^(Z_`g*0XUDUn44W(G&M+AXH866LSHss-=4{% zwKqZwsg24Df&Ro0X{(P2)eBd+=EL4x)tn083|3b)-Y~l--m20C9T}l**6_P7OOsVU z+go`K%JD5;@HM$pLn9+s>Q}oYr&%0dnVfP}SX3%XJWES0&D*E&A`B6sOQ?U<&jLr_ zSLC~Wve7*v)HNOY&128$0C@O$3Fs>Q0M-ZQdCdpbncOd`E37lAZxwZ{ zvq_CIf^}~D8Sy>V$56A-nLR1cgP+OvU-o}*WbbzI!9TDib|vT(_Pr`g={7jAWLwEP z=(kR3*$u(61XBh0o9|>Wg9hY|P6n=J=4vqDRjxsm3Dl<=6%jyDQl`uUShJlc#(_DZ z2L#uEfq_H$(>bq}J)(ATx?EP`W{$@0Byyf3tbAQM8t>)Vy2K06h5k9cGa;dF~7jAiPRdXqAkhznple(G4l0CdphM~l7__Fp7;m%;I z-{E_54k_N}6S`|G=CuMxiOy)GM{yConm-hd&I+#0Wo4;r~ zSsxNYTZn))lesUktIHxtZ#2}!9%I61>^DAsQopOaZ(l|(d zp9<6cktIT&nvasl#RFB3#7Wr+iaWwz`^B=00>Ms|hLQ9ZMAiT<88D z@ylF^cUYIp6l@7{(>?@_glUwOn!Ak>RJ&u3XrJ1uhA2boh83or=D|E**w<#8CcJFPHO;YuZeCg$3!p#tPuNpp!)-Ag@g`L`xZ{@1jy z^0Q!^A+tOUpQnqoUFJAyysh2^6ID}8ssmOv`Ufx@Zsq>UVY zvShRWVX8vt=}qC!cmkYk$G>#4+!EGJwg=R z{`R-PYAo40uw>BxfBu{1_gxoc0mfhLjeK8&b4x24tLxVo%SuyUsq34Usw}B8WlWYc z%LgQzrCUm3;)aVIOx5B4337FU4duL}sy+S-s8KRk@1?kxP`>Cs63e|~{}#-|Zj_|f zJSm9R@2V0PuoPn|0t-}vU8VmO)Zt(sl@ zSiZOXYVl?IY$>m}4f|5!R(yu@kNHCJoq~SG)Z%vsl)C>I^Y;$XWHFNBgOzU>`iO4% zAjaPfe^pPVjRY*Ij}}2Wwq>S)l6j_iSMseu+Bz+vO3oL4QIs1*^~Tw z1y|T>yh3>u>@??CGM{aoU5?FX|FU#dv*143qm?d@MuwKXhMejCwkEIw^Rgy@+u4!k zLEzy0I710gcc8z{3xM`8)!jg3T(2?!SP&5|ivxylu!#SECw?^o7U#BCATNf~>b#F! z$T82ph~DPdEJLan;>)$;DsEuq(g$TSY&d_vZ4bHwwOPj^msuB0&B(^Q$A<0j(F|Jq z29Db^QJn|)p;whk?{SFlYVdluH z!(6ducSRa?Rl2gwg&M-UW*bO4qcbfvL!k}3b2UeI`wR{Ic}n& z6rB=YCq0Vn+b~sh18(>8qo2a#yascRLtC5^2pOoh8;%A7UrhB?e!>ar6XkCO^CY&? zTH2WxQo`deK(v+>yrs-r#%J8s2mk6RYJGZ_)`84Sj#9M}^4K25TD&VfMVf@Qt-mKK zKwJIB&=}J0`IegsmpJbv{2-OxLgXVTGmWi$C_S&9U(S`3OU9ON6{Fmqk|m--C~}_=VLE=%rY;=Vk6x zbck~z{vOubZ9sI8k1?fEuBueQ<^IYr@xjueih*2j>ucFDSYeh+cQBqC{lp&*&eA;- z!D;U`fY4>PN;R3j7CTdJ<1@G3kR0WSgLapu1BnPDM$!( z)6iX+s6V8vTLPdh4D6_^$R)0y3>3W z#Laz-x}p~bm40u|Qk{o(ajKL0gz96`Z)Jp{YDcN;o^0A$&W& z&~qpGovL(>!@BWSyW?;oV%8Cr^J*gHZS(T&P zCdou)t<63(!?vd(4_{=RTzj5VYBE(_Eu3svRDLJxptjNWXg{U)vUDVZiYB8VI!flI z+ZiShZ&IBK)(Dd2PQC|tMPjDsDAJFHoWs!{RGR&0h>uOz{#)6<>x9g`tg5}7o@CqB z(uQ?g`!{~&tTLf>-33*K;nhUe7%i_NeE%Z#aNCnaX9aA@h#n^WW%wMnMLb#CKR8X` zuKdS$GjE;bw`U)6sG!_A3hm^2+dDvE7^+QcdREXWt80iZxI$m9?I?JOpR68Q@Dm8H zh%59gJX2a#n3e5h{ZUw*;%;^T0=ANWr{+6*8}_Iwf<2s5Twcw3SJ=07AnQ_AhBboKv>!5I ztfPrJ`Ucj;XdlfD*26G&Wf^-=&=*-A+htX*cqKc|qmeFS<4zQJAiHN)JHCW7Tm7rC z4Cw@TF`1!0uQqmS>6HS{lO*&AT@ENJ^~1g9;#sg zv%`icHv@x$F3Vfj?sHP)0N1c>Z9j9s5W9$*9M;+0)0edc~u4}}id9Q0` zpAkE)~L9`|3#^twQ52QQ(zmK394r5(}Db}!=) zBl6Fd+{L3Zw^){9#(hlV0c_+>SZ7A_x9?V8K%Q*Q04+e$zgJk0{LxAz~JmOl!m;N&h@p* zLXo6)qQaSaQw7Q1A&bg?Nsll;mc~l<wIaz> zZtBWR!Bdjy5x|SZ3!J)%4m4|a6Y?BRP>ikLZ1xlu)ifBh$O~07^i}YPazgu(an<%j zGx{Lk>Z4kk;c222+xJlV6Eb%EQOz%jHR`Hrf#`Iov%H@`wl+$9g}-a%27!+2=COn~ zj=1P_ib%s!X5T`@@CSKTy?d#h;7*OKWCppo@|R^Qlv18xn#5RUYtaA7{bn7gy_aq_ zg{cqk8LY>Z+W2*vHhF&3e&rKsSjbgbr|8<+iDFu?edR1c4DXi5EbeJ)wo@-*heyx; zg#;k^vYz^BRpSJUYuM#y38?a6DGxkUzPu!|SYX4<-*O`?myC+^A*LyMpX5CKM$MVH z6PiL*bmTXsLH;ZxUsfoc9(Yb1A_`scPB4vTcns!3+`Ufc@T-Ks-4ysg}zUmT0?@(_^t(J=2)R=O)GOZ~6)PM{(hrRa(bLfpVv6 zUxuhfz@!B}tY-7VAIHC>GTtLd-57#XOv*Ys|BDgCS58JHxx zDt))YMq5P(mOSMS=GQx2!$ZhBcA;=GdPTao?smJBf3_yLMTSqU)Ha?3Ld$N~I~Ogm zO{|%k{nZjuIW)D&2$%lYy;@ghZHcW`pE2b`_Eo&lJ8i0y9#f|TE*EL!#uYp|OMG_8 zZK{{rbYCpm%9PHp;4fhX z&*Twz*>;kd9k&=HudZ!4BOCK+p3ey9R5!RXTnbBTmoZjk(^ab&>r<1;S23b@J-1C_ z$YR%-pEIsSfQBmOE<`{Ub837tR=+kM)8r3 zEu1mDm{u1168f@9&&D}B>ucCc3lnM%u_tG5tUSf~nL4+umvwJfWl0(9b?m=pChJ#3 zgkc?f)W-9g6YM2xrYe2eam(jRtJnhfIl^jo^Za8x5&Of;tHesqCUJQCIp`esbIT8C zABr?h2fuL!)O&!rg+pqBzy(=9E5m`iDL2Yu0l}_4B`blnm@DRgf%Os7^^X9jjap42 zFh1Zv#ciPf@)6PvoS*JfgkhY!^Uw2^aW2jLi9g{y7oBb2iyh-;x9~7eba-Pes$lc# z&LeLMl+{m=j4V;bfAFW2{L;U0?yk|+2k^8Q$kYNI3BRI8q125Dnjz5mfNli`Jmm9C z@)68&A0qexj+uXz`v~ZmH3R1YpeU*BH+7Rcx@8tM8>wjYC!^UOb-M_pAh5a+zm~P8 zg2EkATuYT$UeXzBG5Rzn$P|G_glqK<$cc^aY8&DZpjOz!xKFP{1buPuC(uGc^B;3@ zuw>R6dSgPTXtbc(orE901F^&{&^C5_crueSp9hX3qc4b%y9!8Q68OT3Fg< zCvm5CH2aBXB7GZ@L?c+@T1@aOzq-muKh10@Z{eTYUu`?dYe|Z*RB)Si+%ck5L-=al zcCvoM6V-hpGax}8kGuPnh_9gE-G0-Lk=g}=sf%#dEE&dtRtP;>Pbm(PFPdJ+-C<$F zQ0X6*ORclyW`1bZS}{K}zC1=0xIfmGF8Gx+%o0X-?T{N6@;TuHwZC{l8|qXbRTi*J zK9C&aLy3#=0=LgJi9T5{o+?1L&g#VGLdOKBS`lp@lF?*QL$E`Ak7^9FyXKj~koTza zw|we>FXf}9qJ7_NGbAGuD=mFQyd8mto5E3BJG5mqy`f0u&T9@BC#$0#`WzH5AV;`; zqP_4r3+7RC(B-q9qi5hvf`ry6V;ecHDc3L%YN;3LLYSLtsx%x*0LfW*!k_RoX-)({zmuvD3f`dOQK^=ZzY#FKH?3+@;Qx)!fY)(_8 zM+*%BvYlJ)v|}V&Hw;iJgkSs*$)?gWpJ0)I=k4~2FDFe4f=LEGc=j@MCbET&ZtYhw zix|>0xAYBIRlmIC5F@B2z#==CSs82!&7jKG8;0yvlmuxH@60gIQKv^c>AxzcY&oGh zB0I9aQ@K$x#h;R%7iRc4iGuit-5&7QQ`Z)3B^ToNX2&9@kW>8YEq7|TIM6hpYC7mx zKe4={_-M_)rK!0eD#u%2WQ-{rW!}Blu4J&`(a!#+d%6wVPwA`Gbz8DE`O1mwi>#BN!pfu z7WN3!+|Ke2^Ik02MX1S;*)n7)%H@4(;kM*qipGvcF|excY~916`_;`gF}Y(a$}7{- zy-U?)>^)noWQjOottr;b*>102U`P#ntbVKAx_+pFsXXmJOgdDyY}sugDN?%~;X(Y1 z3-%E)$C!z($0d=>w~hnoqb&Z6 zZt^8NmK%DcnCXt%AIf2lV!!W*WjrdZZuMYP=L~B6&1g&ut~UegtJ=@7KNY68RIr8FCmIXb8EK>I{Meh41F8qG7sh*(i`kyr2HB>v*KDpg zOWEPUwfZi0{%Tl#mu>d8m%nGeIVA<*& z>H~nY_dq!WEO6}I@+Sh&;oXI5RsGhykREZle((r13qat zP}za)i{q4qp*NzEthdp1o9CFKkoMvQE`kau=oA*KnwfyZ2XaCR5{5N}mv> zs8DMzjB8312(#GrD``&3y_)g-%-stsp70Xm+)DGgiBVIn{it1`PmC;b zU+`dUEwN`Kon< zbZdTF;}3~T)}p$rqPHo6>Iz}St|t{NL0asG(y_E>-#4_@IFZ{MbXU8c3h;fV z%q2R!j!1?0^8e@ip-qk=?lHuB=3neH)J+`f`mPxTHMHMQshP5tE~Rt+p2kvncjm1+ zjw~=`b#;W~^e#!oTya=zsjXRfJJMwF73>LR89Ml1f?6~md2YVvmD8vLUae9uqTcnQ z;2HM7v68zN9W%=rlfk}3PFJTv0429;bx)Z=EgY?9{=~*TYA}>mX=od$M^Z<7G>b(Ic;|ajt$%rc3Qd?Z*Amsy1~*())6jGCp>KZM1w> ziC0-$H7?*D2izDz^>6%O3-z~orG+M2fj_}EBc>~O6wi0nRI-GUl3fEM%ujH8?-}NOMq?L`Ihd5wZqKZZ+tWP6ydHVE!ISwr zYtF|wLlXMPd0B;7Qrq?<&t_hd$}F|1Y%4c@4t&W z!>4;PkWY-*&f|zU$+K-OVi^0qsT2MY$*K2*heD=S-+}f1hbq>?xn8W2({PC!RZtAq z?;V{3!q@E%XF4IHtbz0qWQ%!=au>48s8w7iUH`!oykhowc?df;hAM;`on_6nQRBS}!Va~P4akZa0hQX35 zHap4hVcBi!q1XK4)s%RVeyO?`)40{!P@iY!m#5b#1sOSP=21mdUpcW>(GT9rhb8i{SFS z#ut@xy4_afJ!SuMEYWweSJ*Aq38=l+L1``|&HRd7LlDMuMNN42im}{e>?(1f7nSEh zDP86=37y&YT1rdwZ*GzV#!hPp7Q01M)s7X}1v^z{2rc}yr5^+v58W)X;%{>Ok#~}} z)ls0|&z)j7LAR9s%=)nUHZ^E|OKw5RjMs@gi4!Z#xifJO{73I>H62>h*{ZUkuWL(D zj!T@`yjy-froaA;OdSzlBa{XNPpLGQtnv#hWrm9-PQ4&rREQ1XQ&M0-NHBI`W61161)em?y1p=!MmM7nw7L?ZHv>&5(b-|s%>MC zdakl3Vtvgzg-6htiayyLKeN*L(i4YL3w^~uT?=!CBA%mnR)XOAj;C4|zR`dDDO{%c z2U!@q&NxI!k>6MFIL?F(p4bzSbrnqOoSSJ*)3=_}0STNYnWi^pSG`sG?C{ss=heYM zR7JS5()Vjgtzy)neFZ;d2VIHW4U!y3`>eU5+8uW_uLNhUy;a4$ryIt~#&a$i<3eMq zb43UH8BvN`^ep)=i+Oeo<`~obT2cLu1gECmnac0+k}qH8f{f*5tT0vsS|2aaF??9k&ipxeIn~SRgInJ}}M`oMFQ&KC&rt0rs+c zxM%}7t^+HWPn*_illv`URO5&2;pnmI>^L{mTNbusShG?5(>hf7MJU*?PU^;cYTPe~;cQvCl5IxPF-vA4J> zwW;NI;fd2VjrsYDqoeD#41C_~uN5{;v&#C?`Jtd6O zM;pV7rbjQR{g@Ai^;f0ld^{Fi_Ddgr-LGEm&T!9h|ZP#J&aU*?9ajH1NUeDrDeyqap(hxU7w|58R;#O0x_9$Sa?hA(cNULXJZXPqrS71wB;)++I?;XPP^3W@`_WDI= zujMyw0@`ObtcpS@L%MV&8oKNOKLQPhO$XgMgN)PtH#uvPxIGa2L|km=9!eK=xV4U& z9lEJ$6-oZbCyBp4k}5r+^q5grL0GxO7ggZb93t|pamaReRuR6%@{e{rHez;9`41xu z<&p->X!-y6qtTb}inDhF{*37UAigjO>lw?dj0^1;;C4j0weH|f3^i#i<{S+8S~r)i z@!?jPvqyVOF0-XhxSTB7M&5J?%k3g}+wRHQLNr;8)kuk*X780EoMTumal_s$-@;R2 zC!s%QgC&y~2l^g}=O=}CL!x`0;OGwgeM7fNR7+w(H!z-7E@yxInQ1h8P@^Z%P zK0lcv$*k+UG%42g*;fPt+f^Apyf;=;(ptEO z)|<%(*a{;vk%WA-{5$6*VGWK9NVDAO2Ycsa6egbTEYp684Qvb3Y>aeox}64xSl7F% zt^~}gu2-6R_mmII8SWv)H>4MwU*%ttm^jSNjuJWB8tC2#;;j~?9pq)Kcak6Dq#1dM z)>4`k<{X5`0M89r=We4f>1obBmbjzyKO@C%Xq%9c5V@);Mav7BRQEVN&;N0?i@Mue zS01dq?e0_@E&t|xJ3m4;$6mJ|5@&S$%Xtzzr8Qq)74f@iPNp>YVI5tU?B7~-TNB_7mwisNaknh` zt6JiGG4GfBuft5eN?K@ZqgyHVwQ^Q-h11rPvNRrGlrM~6zgwYXcac6Iy`NW7Kx^n( zR&+e!Zbx0g{Fq0rhjN=EE;Tk~M+G<3EzMfwFRP;I2EBvI#F|9+rA3;w<<32MYUNpn z8G2i}jjf}$Us7UqOubpOa(%AMk?(1APB@zbt>|ILk$TX+e}DN+T1xlh(y#<=2fgTh zOlj-%f}{v-V|?z{V61jHJHPUxiS+5ltwoY2Q z^tx57>Wz5D`ex}L!DOTVe9ReH@se#qJ_0B7&#byjv+gdhuuVAH;aIAVNo_e_JUt?^ zaeYB(utzPC+vLBY@>cd7@2RC9GXoCXEc~s_cb4aVPy4v*XI7T-gRQgHO7{N06ImpF zz5cwkNl;-tPC#*ESN@NBMlJc#!+OqCymM!LW_CY52aILDxVaEmz?yhY0<2@L?0g8= zvux_d0NyOGLJJ_CRjOGGaDj<}Mj#&u1z!OJKu&xo@CtYyydIniuJbSlEx?m@EYJ%q zTgL&D!SCNCtOfALw`*7%;K4_EEEiaR{RitfoHWE>L9lDb6_y5GT|1i92>mFqXWfM- zrrQEz;Q9P_fH7u%L)H$70e6x<3T&-M?AGXn>7cYQhkqQg=zCGSV34wnmvn$8S^Kx8qhaD zAnPrvi}M54pdQEG0Y}iW?iPR;;qB-J`jLhI1@xbA;g^eyv%I=jrx_o(-ye)+&f{*q z8pgEYB%k@m3}W}U#WM-^{Hg|K2^EsJf_aa;qu$M$MSAg8vGx#yEG`QrHpc2$UAXMn zK43KV^FSrA2V1@4B!Hm@*1iMU5!UBS#xe=;axcS0oN(_JBS92-#g3sB`VBl}^b0~; z0~sIrk(Cw9rM#25CQNUxTy>Nw;Iwc(m;>ww%wg6n>V3>NmOuITXd^3^oOZy0^$9<} zVd@+;Ws!XK?I1@>W^ zKCY%O(S3Y&k-kssawm$OlAe3Fm3L2wG zvYstrycX#gyO>UbH_;kq4u4CaoHd#YyG5{$v4gkESS_U8S~)NepYvfFO_-bew2ju5 zU2^*n?M+tmg(~{ujN#r`x{LNj)5QNej+D{q`DxSjCiEAob#f(Rtzs9|&4`s9q;nZp zBpaf~Ft>}Q1TJ9a@}Ia(WliNeZ9mFNpz_voSU2&n@4nNPmWZAd)AkkZy=6;FE%@Jg z2`xYOMvoWmYPP1~3w>;se`!43B4d7*IXyvhK~_$$O+(3d^q;B?v@47#x#DCL+$`+mjYk zm|Xvhrp>!m0?~$Zwq_on&&%RU@6(U!u8^DP`I-f^^^E!IsV8nR2>G7?W5!R(bJqxF zjBwZX3Cw3)!CI0PM%KS6Nu<6duYqb<#pd^ZYAl( z1Pv%m&p1vylLt#D(&uF#C1U6ynVV8k`Z-O>iG2(k^$P!LMvko$`n-%{&m*NB^VQ>F>sfRGI9*!FVVQv+ZFX7qHi=m_OMuuehoE z&e}h4OAYC(xcVg(?lu~XOU-Lf?{G`K*!;G3M(Ur2ZH1LIlNv}{LOWF<5TBy8l!&nr z`u_^JDf{RV*?*&4>1Q&+{XR1`q;>DlVC2c;ZOfSJgn!oNGY2>}FY{8JF7Ca5GWGDe z_^WeMPoK#?D@;}N-e^xqZSA~LW0U%%^=!ct+O)=I&1;%hZK$Z7rmY->`O{vONRoT$ zcKLAR6S_(t>Q_Ynp|#$hz=%=$+Ga97i@nx1GF6<Yt#qJGC}QEFY++k%~`ciY4o589f>+oBD$=-S2T4O&BmdvXAMLQzMgg6^BU z$}fdpn-RbNFvCXG^YS6XI*CQg|dOwF#6A0$b73?D=2=>PWv1wxg4x zcY%G#*}%QvFd}f92cAbPw{HQ5;ah7B!6BIaHUzBZhCGe|wVcMAQ6SElets($#SZFO z3m&7o8oq(v)SA+Ca6gG;MS`y6RM{8MjgV72zyriG`fM-|m!6b@G5F+wGLVIVu9+Z- z_S(Jxh3NFPqd*zr|7H_tBKrEs0h})yd&2=7Bb+%rA9yKP(mfk^#NSf?61c-VSfU25 za-%X+fLok=**xF@`yqJ>c*b5#^8@};b|*f9^U0uqHQ)vUb=?Bm<9i@;2xE?{|fMfTxJ^v&cbD;!=N!X`Q>Y1wbtUnSYU2? z{+FVwua4D>o)%tVmf!B*My-nE9jh@>Ds9dJ zd)T$6wLmJNe@16MsifV}GB1^ny_Co7C{YZ+%#xz@t@+Ht{MxD#W?t^rd@(aeUzgs^ ztj{zRHZupcax|IwAnjMuE!JYy)QAr(ANgY6VwP00dS4=|Ur=O|$@<4NGOY*fNbso( zGrytd_9>>g_RmF_$*8vJk6<3JptZ=EL8ZBsIn2PKp*$JWFaKTIHD-Ly55WT_ne_{) zVCr~)WAm{I+kZ=PW8?Y?v#VH$O$^u{wM zwJvWeVUB84mJc$1)cr4Ki1D#1RlSZmp{#=M!(3W)@4pLWl|MG&FEd!59UjFL>$VIhyL<4d^(RLPuD^dSLaZp@nzK7r|Mlokx;0(`Wyd0|S{>vB~c-^>@(c05h7Qv|KkY*<` zvRi_bFBmoT*Lmw0{nfi68^)co+=P{k--S+LZOm2Kw~kC;9?%82oMeKkT{hd8z2YBh zN3qPgE)SiU2DdcV8H`WYfOCAt(52+=I7a0#&``<9I{UxU+YE89SpS-Vbk0*oFhngD z+-gQvy#siTQB&n|`YdCpBsL6Uyv~CUKV;6y1YCTX4(b;+HcYm3>Du|sU)=jI-SG!> z<^5_rnSS%y82o>X1w(7FbjHEXgV+HEUUvi=#b_$tf>tp;WZ0mQ%%hSKbQ$v;!9*^w zcBXO=DNB380r6)2@s}YBfWZAVa365q)&x!g_n3ymW?iInE7 zTtr<8k0B!Dj}}1=BlpDN$a16;p9DWfvQxIf^+x)NQI2HuFZ5qQTzMZ_O_9006;%Q7ZLVwn30TibO)rBJ*#p8lcrSY%%7PbA!AV!4 zU!*GHE_9C=_C=viV%$DMNRE%USp!946HP`S8+6)ZIWi!3zBK~@Wri1M$VTbdz83h7 z_-@M*I9JqLc?6CX7Ui9Stp)tFK6omhFSrjqO#`26d{m>s?z96ucTlI=2?c{R#kz!r zAVb<4hJ&Ek|F8nY1n->tz<8eFwgB)L+xtJhClPypI=s4k!z*p%#XEWfbXvVf# z|D}%gCU5^U{)#(SpuyHXmm{E*ro(5RLo4dzI~>5?8cyw1kXs2B?*|W-#bxGz3yS^Z z{=oNwRqT7f^_&NQDbSFmJhdLE*4_(!2~?&n_c;JmD-Juo0rZm5TfYM7e3{8lAcuN= z`w>*s<9>+_d34Sn_ziw(eb#;iR5Z2Jd;opxeT!njWz`=u&I1oBaG4BfFL}x~0(6Bt zSO@^-a^tgrl zZ#4|g?%Gp02{_+or%M9(O;%EOAfomf`3rEUjANb#R+NmybpTWHFNU09jp!BL0PDMU zpHnRBfiiyUIo4fql&LxEH|O8YTTt|M*9&xL%;h6}KS14iu+08gR zvL&SHE>=HR`jF09M$5agi_N5c8vaOKrQ7r-QpR+sX@tzDcUFXuMvSq!dLo9!;d<@?R&Vvc87IaHo zj5&cR;Q{DPF#CutdJ;VEG81_SjoW62_(I!F9N?=Ebl;DvL~E~^P;1bnp(msOwd_tM zJ|b@$=MgNVqD)9kLK3o{;1a}IbsArT81Z_rN@PBC4cm!KOkkon;a6c7(FAz-a4$L? zu5oTa1TcTwL}UgWZDIjSVXu4p$amD=t4qj8iZ*zMxJ`cQN+F!c@P_61P2xqV9zQ`u zWsk*v;V+b#m=qWB#$aplEs!DFf!#ZO7d?(8h3!QrVbcyDK#I{^=U~JdUA6TR+=XPC ztbyGTqq_!Vyuj-6FXA0P_G~8+#>?$Ij$h^8sGoIQm>fLU5t;1o#V9vNath&>@p~@IvIn?Qi5nY4@dz z1Sx4eqa{X(%R2Vrr$rfcWARDC^kN;R5y-L@U>o^d`8D(+FO%bs#&fHIY;-!O`xK6} zv1^VmMq;U4pF_xUQsGn#*AfS|hQY4*M3X7d6SVVIACaSOyO>89sA2|E@C@bhc0+u& z{Cv$DEMEo{NwMwH4VjD33*uX{muP}W%ZAXo!T{DSq(-nX{t9w}mmi8CtGJuJufo^a z-A)JL1ZwJ5OLzw1Z89Dz!BjV^3FD007ZiA*Zg+naZm6khTZE;j8&|)=EY$o$4cf1K zpJ9gjD-Ot}qN8OkR1K0VHDs+soW*PW_VoE-?fS&l$=H_6s;VdGknU_j1{$Qfr?W-Aq`jA}L(#LVFO&&&ZK@Ansa!axwfpeJZ0E)~V`Z z-@w6&@xjkvBdLcM8+t2J?u~h-p6f!^S1>p*}WmwWbz~P#d*!{4P`bcmP^ipBv zwHzvwPT6Y;c?n~-=%F#(c9UgbBl+}d7`~+`W5^FHt-sN2hb^mJ&@>t)s{G48q4Ud6 z`?kH*er8bOda$}Qy%mbDpJos)CR@MlO5kcbHqMd zD6o^i++-cdqROr$;`2JG!8nX)OX~7MKQ_lSE<$}8V#{YDk890y-XigpuhPolkutsT zHk@5-id}Ck#z*P#{QyEFqw3KYmkZwUo=2pdiIgX1{MF5SQ$4=+4(7u$Ch z>F7qw`X|(5=*;fyQVdbFpUI9zmNmap?}T$2CJPXFPxW`43tkP_C3#$VK=y@yzY{|ahnGMo) zTOGH9b5v$qT!3!zTaySt&UL&QEGSR?eu3g&r#bh_dEaS@w$r?6v?n$GTyMI0(JGFH zPRr=5zM=h%zw)2J)gl}z`ER5!E<2UZ&h$ZSud+8PBrU$;bG2bU_!AYhItG9|PMVwmnoHk^7m6kIXzF&~Sj)E(68>ki-lA2L-VHWwGjDl&*B%&2gj#Ci} z;1eM+_-Xi<*CT8Q_S$D;5`yeBR-D>$o( z!r7eTQzTxb2q&Vn|8*M{Xrw{2xo6eUsg|}XzJ3^ zBJ!qcU3M$ERgtT%B;@j?fShd(Z8~`q{UaH5YzxW|p7pdte)A=JRERfsnRN(UNo5&Z zz%z+i=Z86yiZc2avkw-?+Po-5p0xH9c`YZcxQ4XSGqUaw;>;t;XZTy)CcXzApqYda z*r57m3W;q|=ALvwYvr?#HlS7#`oWt>t?!817@=uk`Gj z&o(Ig-Rez+l@!$^lbJ<X#S7x4sdoh9bM)Gy^ce?$F zVl+kNc+>{@D&KQ38A+1t+%q2@7F@Dk3$N#T8}EZ;WZAhsc31t+-X-iYwLUF@lwDPG zHB2T{7#3b8hDrl7rxI(5#0pcKk>ACw#9riFg(qR&Sr3xU&@SE66N}L8>5RZGq+T`U z;38y;Ot$+r%oi0|&w}3Y3XFZB!_=vvL3T-7R*w<&qPeE|B(=QZN|lH_P&-oalE|)l zlwpd0FYl3i;QLFmIM1-!LQm)bwleou5{h#4=}~NSw5}!44Pm5R^XPzoDW2`t!)_Ah z=3h`T|C@0nw1{ms_=>IT`QE*sy4u;>B&H^`y3N0U~5#<|q$K7)xKadmnT`KCt-~WF~Sl#z8$N`mBT+G3+M>czpw%8n{2eIW+=*QR ze;65~%~1648}T2wvX3VE2Xk6q3rFDK+6{s)uw}7GFcY4Yb&0YR#^J3s7J@k3qe#aWVxKeL@Jcb6axwQTwwb5pyh8uLuQ-#??&J~n8kBRQ zliG&59JL`2ppyLJE^2>otTtP59eUjN^B zBQ&x^T2ao~Yr=;LtSdqASsvc_M=)OIR2j;jCpF4{&$E?`(H-R;6Wx}TaS&lOCxBfc z$Of-bcle^D1=Iu{BWfPGj=MEri11*4^;nN5QI!r)u@us7^E8x>4;gJonAqVnXN3&S z-p-Q(LE6)XpM1TVTM@ylRaxi#<=$2dYEwD?Md$bPBC&sZ1I%?jY4z%#*SkG`%GT_C%(7t zXL%U!gf=;EBA1`urQvhR)22wivCpeKsV??tMK<71ZIFFTXeR@tHW4ofws?*IFkUB| z>>i9g<-KtTL|=0tffv(-jN;bx+uuSU>W_NpzEf4-!q_Al>l5mrj)zAiYDvyM9@Z){pOXKi+|cqiLA z%bhf(=(^|3$7GR)cKQTyBW-+mH!)Ue?spsCDDym^$Bv0l?|OuW3bt5jkZ8_pqd1sO zruH@q@@susG~1^K#!2A=I91W2PB- zI@9-550Rn8!Z+h*()Rd8U|$sf4me|Lq}96$(KW)qRyeYbXJrJyHq_>x0YO@GR}0F| zX!udHnwMR-y*QJbQ_a;MUEJ8*HQEHQy3}at{mr6D~S_XbHa*o ziT1efSFBlG>h=kJDSx-?H1bs3ZWRZ=;wKpipx@N1?so!d=Y!^QzO3zHwFghye6whf zD`@zZCFbaBYgG2^+NxN=4XVG~5PL(uE6%20A?Fq>isunFIb_&+{AgyRuMi_NJKb{7 z8r9@oyO1JjxK#jLD#$d_K<#Wn_f7%5U(!5|pW5SCmCH-$TvW7-d!lVd=5r3CiBP7q zId#7UHk7(L8aqO^mdoj`#Qoyh_}Rpm{GsE0xIy+#-|d*IF3&9-rK|t!T8zZVUR$}t zvBFBDVhH7|?9vG$&Mj?<;D?-%RZZmi_1P3Mx$fOFGhI0T?R%7C*%8f2{Cp~*J_o%( zN~&qJ^F&3tV_X(~zIf8{aO{2Flq2u4d6|FR%+NjQckRC+mWm)N2Y8dH#;6f;;S}`$ zRUJ*~X@8_#lDec`DZiF_x_pL=n|e04S9*+Qs0oy8q(PEvqJOkIRGIJ$Jq&Oc2i7p4V8mVCSmtd1dQJ^9-`$FRoMpG`8Tpd+&+-p(3K%dPi~R$0`kpG!F>Tt06=LS$ zI-cB%d8%xNY#x)Fb5Zh^S(ctG?q*&T{}CyfU&zP8NY-waOkl;5B~0Osu%1OYajSqG z{#!X=fc(HY_5$F;u1qo;47I#TSb%p8Cu5z^iQeZ*2dJ<0s$vRMRI8Ro=Of!J^>{fl)o?lH z2*2%Frr5^uZJ8yX%pRJLb#=ERiSir?!C@<)m8X1>&0=F$Ap@&=Si0wZY3X!dR@m76@r+ZXK_F7P0N|s1h%aq4JjwkHapq$5~R*e@~9}L zY=^kBz&~%is3^}>yIRP}nJ+UEL}lIM&f@RQ(8H&BR@%UnT<*&B*)jQ?DXQ)e8FfuD z=kRVaTY7ANE)g%v+bO^o@HLx$qMaPnkc*rk9a}x5->RBxk4yS10!n?vS!H8#my6Ki zQjLQ!sL({}F0jqZ;_T+n&6y8X@kV7OC4c3-)SZi&$iApq5i*t1sHgZ`AtU6U_InVU zC6{;lV%LRUo1UTox6@FI7?XcmQl+mOKGujO4RtOhn3z{xlCw_~S-B)VNw~AjSwacs z7bmcB-s^%iXf*dyt|r-&)1X&GC$cpeoM0h!Tr<@tj@+Ok_m9E<$bRlL#nQwRHeEq? z@V*(A!_TPV<_hWaw(Hfyl8WY+#hqfPadtK?@~ZPls}&koTZzx}e^kt)uJF#3d@AnV7oN^ zl3wd^sa_`0b}lQPDUNEJqrW8D+H9USQ8=-FSZvI{QWH&C^0F!?0exJc^k|X=$FH#T zWE|T%_j6Dc`8zAiyNT%4?%9`$%Tzb)E@4Kpshet$Zs8)sAvl_SrO8ct?u@u9Nh0nu zEs7HRc74_xiwxR7s)GgZS`LaxenUe!nZ|=^rvO{IM=EC}mUA|gPCxOBJ)v-HkQ;e6 zXRmhzA<1Cw+lq&z>FkQo_wtxcIS5BI-S7r%#qn+*qrH?u*6-9DPPtvaHSKY#McxB- zQYxhzrJ9ubR6b6jr0wRumK)IY$R24SeSK=A#FX9`>m|xzIEStgd}Ta8T)^MWr1oFt zidbelcd{E;KQ_%J9|Pysyd-9VO>N_~j*N44>hFZ^~TKjx#6c{#K7=uGShW)0q2Z zTNE3ZiQKia4yG0sN%u29q;!cdvG&BYio96rkPJZ{>+fM3-d7-OKa=YKoZmTteG2rj z7$LL3n`?gJ7ogNuV@(5OUK^9X7g|`Fq<##JGp zq*;em*A%6-Vv!{c>R@bM4okHFZAfob)S;&(59OYy8T*CwHS!cXEWImDrGU*m-a{DO74}clf5Q-**l~Ju^a4_7~oHmmx@|(JbH)F6E_U@;1^?UJ}Y^n zG2eYUju-mfjz-B)$YPMVjLtN$!vBYqHYw8A3xcX%sC)SN#p6|pyr=s6N?YE-w9WGS zTz_$#4CH7izH}M;4!BC(&fcDcivp?ilQn`LQEu`sPts;m5`-X|$4TBH0cuF(HaF(j%`pOBvtR*NcRa|G4oElCx> z3Sfwj@P-oK2!C^*o-`GtasC7y<^5#8^!DO@wa{IeuMlO~E9ml2Rk3`z%s}`@+9r8ST1W!LnXJ3w38KVAe_^q3 z?}=Q2n_&L2*Su0*me(il6z)2gQg%4IX2%1vf?8%F!@m=RK|Hn@dr|))ZJsWuVy~)H z^Qj<38I~@|j8|+=+o^meyQ^vwI!GBx8v>Oqkk_!bi#lcY34Ou{$=MSt1pgCz982b% z5T5oDat8P!mq4}ww{%B28N;r$K=B%~!T?7<;aPQ`)K_xWmV2wB^|XApa!uyB3|#&* z!%#U^rqcQeBBj>pe7r_{QQgL5h#1PR3G;-j6{b-DzgOma^exXoV&b*(zwha*%OvU^ zzkLUtG~^z(h{vO;rv_@YkO-*#sLn0gT;`|RUa&n+toV?(N5_|U@1%bf zP0Z*zRW2yh+DF>(ozofvZ*lXKmk-%<#>iecAEl0pf9#k+=mcdJ`>=c5g9e@GBC@Z> zPEFLUFR4^5tj@`Kq3Ehyt$8TN%L-(PvPH!|xt}E^g?mvy@qe??U4?hDn@`OV&@%5u zl=A0le+Pzg0gLUJmPa?Zid>^&t5G%9e53fMYEI+- zax4@Lbq6#?^2F*qX}fGpMLBnmL|9sfREw7sHPI@BwfTa0OyHK|7qOoAIBP|~H|`E? zyeG+4sT-UwlHcTCw>J_d;)@pM*fBoO;5njXPpG=5j_aIN?5iAU8<#Co=$aR#WAZ}{ zuF_S~d$n^p#gd51TgWQW`!XHPREQO?j-Mo0kgp4G?9{U zl=a(X_*>~li&fYv0c!9K@nv(W9M#AARuuIpUw2*8|5i}#t!c02TU%~O_|o>q5YAG` zp4wNiS~O5~Dz!*>q%1#9#(!3HCES~rkoPlS2j`p~IrxsfRy*S4Px95_+vD(B8DKFN zeJ(s{I0jkH8DIN6J31w#jFHulQj=Gdxh!>pE>f4CdPM$3^Cq={AC|t2wg78UqqJ0p zQrSr#eR`MtC!HTzCtJ^0d~};+CZqolP57Rf?0lSmmSwVCz?HH_Hkz^nfIF+NlB>XL zwe$5i7_`#zEK^2W?$ZnvqfT3@Gi02T@7B;6zj*CwLri0ArFsd|i!niYj9GZ9MV`U@ z7r8@vi*-2gqPUeccxa7K3phBh;imvC+atJ6p!3F+?0Mk5)gOpE5WglszZ)zs`I)H% zb-7zIW`MYMvbGQml@(~lg8n@7G+)pQRjEorS30Tq0iHbNB;N^gBQ8r}usAST91cGA zydm5REp>XyUk&+f-^=*{sW&d6hM>o5rV?^^cXd@(IX0!lGjjqukfYGyC|z?}Ylg0n zEly`6kGKWuCrA#uRAq~V)8{G#h+F&}*=@us;|Wg*QjuP!=_SWYgVPNO5$Bg0CKe-f zHrW2=1ft#>CsQ`auQfY~ zNl01c+st0RTahwjIWJrPR$It@llDjx&NY@~ruA`BIeXOx?0)#75@gR$eIUO>;c;Cu zOY(F0X$eUN2RMl0h_-{*1qX>`PAhpEaL{&$GY9M4@QeI}&0OPyccNjH|I0ik*U6A%nVI~dPLQbPNQ7B}|DK@fS(&e#sQeSaT*c@@KDAIq1Finu_ahcEHJ=%Madzib-)`PvB?YQ9< zxs*JyMvuM1u`*=_r8m#_)IQ8qWOQm0b^nyN(jBxB!cMg=y^a(qf255AofYmX_hejF zrO1s@NoUJ`9A}ARrOtk0p{Ll!BZj|8xOVS&?sWbl+tt)3&dm+yhzpc-O*5t?wv=XN z9L)cj7osi7TdKRP*`8ygc%42`e^78s9hB)qR4W^FM}TC-G>vakmn`=G43||{l#LdJ z?e5ke1uQ}YQIQZ8K|w%3LPAlHE-8VjFQ&V@dl+Wu?nV^5ySuxKb8hytuhw2y@7hZq zm-mE!MjDlRi{~H?IWUDYUGOSml=+%R-Q7Sx!CB?=o@!Q)m&#jX^nek*M(x#D^9hh|^)6xkNz57J8sU0)A2i|%N%N@okb)pPRv_yR>^Y9RNO zEHZ(?J}Xv4$eGoGhr2WBG@iZB05y$0!>yL=OMkrT1#u#US2b3%sS#m3rJ~hOSNSOC z)@ViH@^e+5tYFy+i-ojNl4o8DP878pDJ8kWIlAk)R(`r>WlAr%RhgBrlr59RMC@Q9 z#Xh@N(PIQlePmQej?~RS`o$Ps^^ed?-B=l=ac_HJT%jVhcq&=SDUE!gO5RoXi>a1P zu5lo;B>O6(flQI40z7t8@WO=7UCsB@7p3gx5;ZCDjqG&AyYM&6UDA?WPw6X#?|qI@ z-t(roNlBfo39IK4AnJg%U$e0Lg@LQe?)ae?RlI0hDV!-6HD@vBN$)ho5hqFPYj%rC%4H#9pgD7+%4gBFF8jqrDQ#d}1gK{1`V531Gcl zy^^q<=4aim{xi^Rn628^%Tqv#(_I_^O}{Avi+kPBy-XpT~NoZ4b|4oL7RoAX>9@gO3LVDd4)1NjumlSGyC&(weKzS~ejv zP0i-rh$i)VQyFrc*uiiD8NptxyN;|Sz1KWO%>t`cZ%_rLV-(L&-}2VTZlU4SC6W=$ zw1j=4?U??EV16}#+4YUP5Zvm0mxY1myZY1bLO<+JQ#ZoDt86Nam|)Y?@-|GiiedbS zA&SI?FpQkV(H+5@A{A+hFh4Bo109^pTw|`4{g|$|K6${`PV}7|a9H{(h%!b`W^Ys_tS*(TH7w~lA zsQM2)6}X_91y3s3tXKd$<>ty3!h2JSCG+5-_#PnxZVA7@`v?EqCFSH`L%pk+cd#PY zKzb1N^~%{49qxejxtT;@8t#}>ga~DU;Sph?P@<2<*D!V3d_00ERFm<3z)__FKlRv6 zc?IrU?h2`p<$89iBh6yHWZP63f}8pk_(v=w3Emah-20EBnjr3(u?GLEKwdze2`NvjU|eX z42TaAL*rKoZWE`3@8v}iPVU;k9w0EiOPSjU-mbf7b@&e}!znZI?Uvo;70gV1ps}BE zQvSg(ov~c7O-H4tG7f3Xv_3+HYJg^giBsI7B8qRw-cvs1xJpJT`A1^K)5$O6h6HqS zeAsW^c+yC~TXrdFyLUL_6H)5Am6l2PwKAJLNXV)lF}@b>m&q8Lvs)!q^y1{#qE1?ET)JQ@^<lDs_?Ijt&bIa=Ka#%=D(o3sekg$G-P+>bhOB%*;*gh`j+wTa-l{2vXrqH9 zQm4`dopp>^|il2_)7>DhIw(_t0r|?wL*`fWM#iG^z+n5agCa-wfclJxyd6Yy3 zb=7)e1?8t9)HJDOwldpb(})&r&>gJ%!qRGv*TAHIsxy^mp-{yo%d#@E>{@w7{t?N2 z13hDz=&9Cns8aA!H4tOwWyXr|&Sn z>bR)5X&Br3SE$x)Zw_Kj)fgMaBcZNrv&?zt1?F-Q?6s5z@c`FxcX|sb;(s|MC1q+s!wu|4CM{*RDz>JfWo->T2gBn9A2xFA-Nn&#Z&U=u8-^@m*ge+r!5`5!L>ciVFuyA=1x1zS?i2CgNA>;;QFTV&&!57vv9ufr`sy zh-oOlNE#*C8x15CNY@vUwwB(}`Vwy(9Z`KH%F;QC3gUr7PO|;P|Du106@+^se8Fvk z(eEX10ij^a3-(%qvkQi?4*$XaFm*P5L@TSRWEf@dtvJSP!GemT^#3PIc_D3>$S?-b z+<;O2JgTHLQFD(v=4iA^PNAl+QbbVZB#uZ&$+BppIEXwqWUqimV)-?42T3!xoMPP| zB3)4QdxSUkAf=yBsJUAe%C(hwS?xFn_?Z>6*lb2x`2toq;hW((^F44(*TS?fxve2E zqVn#j{OH=WR{0Ow+r%uXg|;<%pXf97NXR6?77E=D;2tBlY^h?=NatJ-bT09&y^2yy zT&M}Dd@ejEwOG0YS9$l$R{lNub5kSlH34TJbDsc{b+MegB}mOG_SHPB@)7H4TAEzJ z{F1mr8o`_pJx3&`UkJX)e?U|D#c*w@d0XVHEfiN5h`x>V*}k7*OZHMjYO3gOu1pyu#HaG*V+4~9rb?Q5w5VgEF`Sy<7=9q@@{V5| zGULaV0;Y^U)`db-Q75mQOh*5oVo{Zz#tGsM%XEDV=Ue$#Z3S(L@w;XWu30~z@l3?hTL(=>5?0%Q)C0;83&$AN`%{^W(s@w%YrBJ$8)~!7~uG`&TolgMlz5t zWZFL3;*}0$C$dIqs9a+45znZ2V-Dg3mtQg^P!o)24aKA2t!5iSu+QH(C;O}a_( zQ2e$2sL2v#Rh+Hbz&4iGStn8&j7IZIY>qz7Bty;Bt}^T?s!-k6e#?HL5UN=zlV!V< z_6Np`Kgt>+BZWTVH+zbCuyFN`1MFVj{w@D8hS=L(h}3q*f|W-|bjpC@u=Qc%KH*43 zYu#1$#BxbZ31yy;6ZxM#Mi~SS-UUl7Vf7YQL%v#m2~1LwMOn}ZSHaxNGjOvTbY;3b6W7Ed&WIYGa-}iSN(Lv zVU49`YT;B>eC6b<9QmmEWO9|%U?j$$74Opd>M7mUL111$-G&KOe*((fF0M(H|Z7eu8 zAwZ=9Gxz1lCE)X*Lj5rdV;2jFX7H^yDS*O zJ>Fcx&BncVZeaexPqT}nCFA|1CmUCi|MIizTF7$7yP9ya3u%AlD^dgGWho@ZA*Pmp zCjKcnZY(D1vK(}mh}p^MnsvmD@famY_!}`G0|~={*To2eU|X#qmyoeJjXR&<h{o?jMVCfv@gU7^oB5k}|eY1Ph2CHb-%KiCND5%oxIJI|a3a087LT zQJfTBK<#6;iGHmbU_B;ARIXqx2Lme1%!6gC%Uu|<{7;4&`t{6o-CVj`QnNarMvc3t z7^FUm@RgpRE(pvO4O2q4CG)$<#La%398$ION#+>heY-wtI?+b5tp2Uw4)=5|$bU;u ztzN_*Pk3VO;H?1eR|Ig^mYy(;aMtIm454g~%thK-R%BAXdImE;POC^^Fe4^Qv+0?E zJ4Ly)UE2cq>C`owJvsBqzn!l#ETrppFQ~JKZDMu3M2g}@);dUHXz#1~#JdPcYl&wWpg7#E%H(f~8!zwTo(iW(hB%XUKM-1q9mzoZ39raXIgk}jo((*<{!yGUlRa`HLF}{|sKDtexE-g;K ztT`d>JshH1DViRumX`@)!?#F4-rn5?A;byry~#teyf@Eg+c73Nf1%e>&)6TNOee#_ zd-Y?@UTjef@BifARJGbb#C2HOb?xXAW)IErW5dQ8)y2FP{TjvH^f(Pc_TbPhMHcAv{cPl?d-%+WsC~ikCy4>ufl@GR>_ZD?*!GNF}_J$ zD}UUktE^q@lk3LNPB2jRE##%tu>zYqLDMhhl^U0Z1LR|sEw!)Uzn0C_HK?WK+RBN= zPR3~!hjN{D#ir)ex9Su6r-?%4V(q;BHnJ3z&)(nST-ncE^@2iio$p3&f#A@lZq`K3 zHRr!HB6ExVDbf{cCZAr1YPVtf*DPr9BR#5AHCDj+mU;CFNKQGb22*4*+^baORO|dJ z`clzqfvGlez2bph9@8&#)L{44irp1&ca;b{rIEf9x!ywaCIj;n_p0-ES|Ib8{cVzf zI>cYt8IR0iyliVgsz?pZKaiK?}qY{916+AtR3TzHWk+h8BY##RBmhBUG10X!8NYFG_D zL;R~f0KF+%Tg8Ar=lEFKq2HI!AoRhAP7;dTpYbOVyc|dW-vVaYis@7Fqny#U zLHb47*Os~TU4*NRDYPn3U)M^TR`#a)8x>#ZQ0Y$jmA$Vbn{q70*>sFD^}rK-DOn$l z*5s3YL&KCSNXPxZN>7kte9}c3#8>W*cooEKr#Y-sgs--Jv>Jk#BWa6ezo+q<_3SN# zvW8DA1Q=8o%xo-^RMQzh3vO6XFm_~5t{6in9eHk=PJ42|te;8S6}?+CnOYudujrsW z_P-)cr>ypg6ip%Lxj*2Ak~B{CtODXa+gG$`q6^2h^_O51&82xaKbWwvLBLA~Ue~_l zlFN2hJ9DH3RBIO7n$=_0vAT{Jjg`!Y2Xb}Q%*oMn)a4A6^F=U(*mE$_E&=A|X)vyy}`DzF@O; z9)C+#kvWvN;K(6kH0RHOb-HNwv#1;DVAiFOlZvs-B!8Zyp8np)K^RZNyWip}sY{%8 zGkeGlb~~sVQaC%j^`LS&HKNHVAHn<9f0SW?CAGVxyGjvNIPsJG6P8X9DQjx^C!s^~ zKf`bS*@SD_-@KA2j_NblCWI@uvh)43B?-)apSglj#v=FYTz}dDr+8*6MP-*m4ItfS zU1^=GJx#gVl&JB=4b)et8Zqjc@5+s(W2)Tcg8Uduru0juyj(7cO_mu9qSgdZYZNYt z@>ePO=#UtBG?(u0CmGLHdH)hrFl*hfa9+|?PT9<#$_i2qmh~!Wzgp z_SnD58r`#_2Pz-FCAa!W~&u)8?Zo!IpA42%7IvYu+s z2y0oDZ-k{c0KdosfmRC-!{E|1ZVwJ@!J>9gU95^h~Z#PKdS~Q;8 z+I?+GN7Yd9f6}M&^qmPJrTDLR7C%%#cUQ0h&Nn9>oy82bcOoCAmeF_heMPM$#`i2n z?S;}iol(b->22#!>Z13}i%=hOv+Mt$ccq=Lxr>$``c}!ttd9L%;en}-xNE!!`0tsj zvjyJyO;M$RI?r=54RqK|E6RZ9JFMbOgYU0!X69nA(kJyL1A)Yq-7pXWxp#k#nZq9L zUR>DdM6b1>traz6JresPQpHiyOsw=NwHP9X~d0VKo|e<4}lo zGww!ga`|K2t%w){4fh~Os=0&vw4+h!fS=(hm!{+0+?2wt_$>~xoY(ls6?(=#Jd66i z=Q#N@VRh$CG9BFB_L;l@vAtyxiC=iLaURJhC%tYO@p0KX*p+#L5>Hsxt*LludVocPY-PyP`*%k-7ZkC>%bk==rl)!#|I zJD7?+q*za?ghBk~W)|cU5e`JoO5&6izvv7?9W|x<9J>>*@3_Mr1N66kW$h>%Z2pgl zEX-(F&gjqnUHczndMd7J0eydBf5k;w%l>C30&QvdYyCPZ9JE_aqa5FXmfxk!@x)42 zk<;921(Qf>2Nk=Q_{`Rk?nK;9o!4E=KaJnt0r4IKWvxQ)zcQeyjk}_7RedMNBfGn% zogJPURN2VNOk`E$Gr9X)O}31V@B!U%`tzVQ>NT`GJJRGB>NU?Y@et*@TNA&6e8Qob zeS|b%8%sM)9HDe~uM&U6kL_45x(Tdl^%Gt$+t8FGcvx_|{s@0K8(ovkt4^I(d4MZS zjH#H%A?zm_d)ddr#kv$$M$mZGapw3P;qn!9lV_edhZgGA!4IQ+a5&4JL{`}nY5AmZ zN>bO5!V_m~KQDWQ8EJVWEib*?G+vTdfUO@VUXpEJ{a1KArP=yba4d1Ext70bzrXP? z_iA{uZajw;cw3dudbeY93VPtmKe}?DS3+*m?2lTg=9ooFo z$&In<_WZWGaOInM)B`9XD4 zwK18Ws=liuj_@pxm7xbGl&j=hW0DPF(sf~a&1dnlz%XTkpm+NXX%jEi(@QwYndEkg z`+!;MxRxoT-L`Y1e5bgO$~&v7w!n|thAscl)0?lF@0P4>xNW+A^nUFLgDjI(Rj)gA zWP?SjS$Uwke4p}4%mV$WoE(;-F-pAxmn&z8#M|4XS^UqQPQn&$sM`ov$SQX9VD6?f z?II~=3X2rbnP2-2#Z^5!H<#J^lba1AI7e8EubT z+B<;uF5cQziH^ye+n$70reANFg?^gEY-q!{B}}Vz#?(jUR`LMP&`R?gU|?6Q;Tf3i zds}lATI%7dXojw?mq=E^C2M;5DcJSPiL7wkd_vLj2yhWNFt8n*j`-c{3j8Zx)@2X8 z%l+7P8=RBg(aZriB^5Vp2jk*D)ii>&QTr>GL(@a0W&q0F6=Xm_Pkk?HGT|(bb&5Uk z&-EH{CpKfvRo*D}&GJg-TbzpEHgp`j52W?iU{@oCdbIGzqWhgnxFxrv?EqYtPHvtL zS0?$_pMcHr!!_ICi&5*XmDn+%rRM3_O}m^8Q?VG|PW3PBIgb_cTR4~XT5%LEZOwC@ z0@t|w0+Wt+#@`&;LFfjz^{*lnATT|P2n&k@olEhxxy7xw@o;)TlN2A3G@(8cZy(RB zK83f5{Au;XFALpMF2mdGnxL2BU47MRIzHHAx;z(Ov|cTGfzMy_owpf}TmFr?8sCPm z8LXp(gG>83qb?1p)@x|4_L{j7BW*_6fk+i)BwKd)HOK@+%tG zj%F6-yle?#w51(yoXr?}SWtVJzBhh#RT#}0sjBFr%?SBrT0t!e7|}UWx_wcq)s#6N z<7BhQ1?zi+GLm&|Am;<|>k63uk{E;gH{i>!08qX2dEI3_ouk|J6~PQ<$U~!r-WkxUZKbvO7Aae)-5wL9M#|~+XNB(M z{vhJ&huK8Ld+xL>21VR03QMyE%`alUCH=$=iQ8sOBHn zKkk0zF^+p=viS~sRmcgW7i&pCxi*9`;G3-srx$xnmhPZAuD>fdN4dV1$Z;TZS3IJx zBt_wXex$q#^SviRmQuE((@Sbon9#OWd?zQUd9sL|wyyrXaOdIiH3I&(IAi5BUS*`4 zxs-b(L~FRru?b*mp0c>UhZHZEQ$40guG4Aj-wHCR@7EgG1C)cd3us-W)3~+$OV!sg z+U`%P*wU9Bw-r|kC%4{_M`wR)GD=US-l@-$1RQFuaT0aMrC4=BkA2_Gv-mY3rG|W- zb3lOx%SrbQQxI6D|LYeqUakKv7)PJ9c7T0|y4rR(Esne$d%kZ-{{pkSTc>j?<#sSM zr3Fo`Bvp5|sVP|TE0tM4Rqk^rr+Qcl#MxSRh+FsdmRAYCgzPcQ6l@BJ)Y$Vj`fgXO z=6L*He?Dug>r}pxF>CF8)<5b4+hf!pPAhxxyK-Q;JuT^>`!oovW; zF+Y?!ZS8NCiN>>4Q`MAd*j0U7tPN;x_lgQ~$=!~L<=F*uTizLyvL`lH=r^Q%tV`04 zPrOn+Pjw?!X`w4L`=U%gWSPOA^amtv0gKf|!fM}@aunaiW12XZV{u*0`^Eg^uz(ds z-(-87x|fmyU+eu;vk|?m>tW^j5?1>O3qAj2i`kr>)!Ue8nwU~uH%o6$ja?3bg@0R+0~6#%j$PrPRQz z-o|<%>U~#5&7Ts#c2*THpV*RSjmrWW7n)C|9IYKR`6lkK%GWoh{Z&W`wMidN+X zTXfCx5&!3^%aUQ=>9R+{K93oq+q_0sZ(cT==&+sH&j_}gNa>_}0qLiLF)NT`PAtUO z6-N)g#yI9-`_5oIGGyJ+nEYgY`xQ*Z0cA@B=1ELe0~0tHzO<$XxE@qxeGJC?T`gyV z-@WhY*Fw6Dy(%l5xUN}x9DcAGDJaL{Y~Hi&aZw<0qz_tz_%=)ee-(!eCW3eJ3i|@V zo(yW&MetIxpgkUZet^?_1N;|ruwgM28a}Hg6jBBmtVPggzq92waEA9yT?_nVV~@%Q zTfDAYdH{QJHA}D^=d*l1s}pwvj2Q98tw&rx{sa55c-_ExY;9ghZyz=zBfTpU8c2kUBy&fAA_O<#N78S&{{KFdjI!#vWGw;*7-MGygo0TVVf_43px472T z8va$>x8++{(fA~A$;o<<35WfFFaMN=< zJ!VOJA?>6muym+Hk8HMj#Hz)z{HLL6S+4z>_2bnMN zPr;cd?I<@9IRV;R9G=eJm6q&67V-N? ztejk3H<8IsKi;vLaVhD3OCMu#!rR6;dQ$Xot(4XpMyotSTM)F_{E=GfS8A|QhP*YJ z2+Hz}7WpkQaotPt0#f&y@x0ljDa#)*6vR9LHO%BUBGwFg@CJ*ZzH!`(xvZ|gocrmG z?HcyCr1LG?*|QVwH{4)3M|adNW`>1fD}x!wf?Umcbj|X8`@X#Hzf5p5Atjh zt~4Zbr$^V-DB0h`kk(VI=RwZpub8*}kosx{$Gc8_h#tD}jO-I_j*FdW6J>Z!6n8V3 zx+07|Oo|7bk2lJr%dQS2$|e`N_pX(67Ttzxe9{ zKbG5YtNr41_t`(ZD^yHY$i}-e8-~$kuP~W*evO=yN*P_zLiYALv&J^XFwAZb_6dRIeG_hr639IUDC4JF0)k)&{+27mm};P zubr3H)hbroAHLh8buHX8%Ih?u(|iIq4nMhPi3%R$uMg z!*z`()o0^J>h>vXqpno(<>bBRDo#j~0$Ysl#6EsIwQYi{-mS_!Udg8U(s7&xE-Jwu zCa`u2JB;?wb{F+2#RvUoXhM~)l-_s38dmVJn^Q40XH&-!)Ah8(mNy3SVYsnG=NYf4 z{h@vxRbAzyWvb~Lq9KVnkc}#Q)$CDZCWX5=1z8LD%IEHt{L;!>MnR#{KeB9eZRxlNJHY^z&#L<1T zA$we~voD0gO@DU~RYs#ci9)qfzu)pk{iSA{|BMczTp7B9rcxr>wdj-NlQmm0Q^|h1 z-GkKxHvZ?c7Sv4M*#R>umfO;bMQJ(8s!gcZY*@P(y_*FJy3jf%lCm8Amr;nChsmQy z<`4pnX-1P$(o1nh`JMcGt|vtu&fnLlPBh+XaSD#&q`HyWq@CKu1)`!Lb8|Ztt{s;6? z9ytwyVWi9#$TE#(+C56yyYf$0$`Jm>x2HBB6#DPIA&3{+S55v%5A_YpA|ydMsM>&h zEU)IxMD3PxiB^jAolCpb`s3FX*@j>9}=ZuNN&0JI3FesBRf_<3BJ zbDj6yoH9i9xywh&PFEI=I3QMAmi6pG94l{X3`PtY_f$9_7wB#%_aQNwMDBLvW94QDAf+9+*(t5XK?(5^<^u2>xQS56?bKH?kwwR zdsBB1F|GNiDGm`=|3X%c=&xDFI)_|uO~bV!mF0qxG}JQv_KabaQguK6JbIO^B={|Q zNSNkRh$-T1c6tVEqP0CsL&Iy<66DO9Ufet++Dbik3;EI1kZ}N&r#&B!N4-Gu|z4%dbY3^mk4N9r%eA_v0>Almhhw{o?Pr9{NmX!`IsJT$q)%(S86EUIlyfg@r z*BZ$rAg(ryVChKz8joXn$i|8%8Iw`Y210xY%A%edtU?D${`thCfAG4Tr(#Yq7Ch`J z^}1Pg{dsBTRsPv`rIw5Q!J*QBXD#iM$^u3LYuw7{Lw60^$}aX5NtzH|opQ!+gs!Cx zI}16p{`9e_NMz+`dN=ZAxqZA1DoyJWOhk{BX?6`E)CYE+34pr5v;BGh z-|w{)KttgB$`I%zG)5B)U4{Gwlc9$YiHw8ZK_f^GJQ*I769n7AUI*o{H(VUr4#&a9 zt?S?t_@+}X%*D=s5eLo0U%FTG|Ean14Vs0|J-q;$hu_>63@yh`XpV;*ahI(-q0Km* zItmKLDfp|QB%FxU0F~glh|7=!2WM-cc3l3!sn8wV;m}}s0?xzd0qlaC<+KOhhkg5O z6pW>AyL$*cL>ahT4Q5bwk6Z-{$-}*iK^!@%X)`Dw-L$BHR3P$h@dCa6AfRFUS#sF{%eR9Qaa0M+yi2`?0Yq^DBI(05_4M?LDmmLLr$o*Mq z;1}}jgrATANkF#06X|dW2&EH?eGWld0>x<&bPcb3auHZ2sJ`t5xbQU>Ily)v|3n`U z$t86!0CG5lhCqPGhRo4`npLKd0>exiM+>}X$O&2C5_(1H5Ew^OW?leARCWRgUZLPZ zRzge3&OU3PMB-(q$&iA8e5}FnWuIaAo)5%qQLQ+R#Dpto9S@j1S43l2 zPk;%6B-|xnGq0^A2_SNAWvGE`te^2P=)hbQd=vy|SG~KzixjTocW5=q=V2sTWgc_= z1iHaA{oE?_h{1U%68%UQ-+mlDs>!HbjQLMhVBCZ8R+LHyFj+EyH6A0CfVhd65fSQG z6<{w|lQ9LraL>h02ClJ7f|r5rj5co`$fAC6{06=vFMi;R-dz3tni0LHvf=C$^kEBn zFaTX<4sGi}i%jEcmZ6*U&4&Hx%i0vleavL_B&IuNn?jEb#2k}(9h-zXBSxj8fwh9> zI3a-NzTI;Mc*Lsp&INbV(;R<;Rpf8?Mo~|jH(Z5L-x_46U!kYg%@}Y)uc#)sHlnv# zA5||wCsz3A52FDSOZ?;iw@xw=(Qh@sU=qebwYK;$29kYFdxyCp?uc6rY!+bl-~lnG z$$Jm*k8#IoJXk=vdiO1=p)2}IF{-=$=&47jGcEjnSJb`6?v{4cpSr%PwdiHly}B~A zx3yhti!L%V=>l|>F%~+Hey&?mG>Gw4<)!6g1hV$ne#|@3zdioIK3<*odZ3FH>@*wP zLN(v{h!PJLU&f#meLF_pp-kP&`g~DM?W4_SQRiE%mHwz#jgeY8dUEY2Q51T6)nVE- zG_s-(T8VBnEh*ZF8Lxep`V$kU?1;_5)JlOp(}6jHa__|e$gXo*0sNyC-I(CdBds77%Ta7f<4pSn(9&`_LNd$RM0d{i!Ik^ER>5jKEP)QexFMdNEIMaSI2X%PF zrl$#&cU;sIhQjyjEN4;DZi~hpRoh-I7)3p9K0sBXm)89SC!wRN#Dzg-0R2e6 zYyT^ZhiY6y(P z6}PB$2pnLgP9081wXWQ1;ATTxOFm=2L)gs!u=k-8@%ORA@T_1KwgOJ@=3^OfxnnN20RH{p5q>VN^|}&w z6DK&g2dBXm44uQJ;r4VS;&$NH)(+#A;>Me%V?Sdb$_UtN*cYrGY#a6it`#fC{wN8= z(y`w&@K_A?YkVR$7yC7M9X1a8)H?T`ThX=eD!awnI9R1+8ILkdFwvCx}H4DpTbeyrprZ8pZ!_DNL;=gb!*)BZ=ZYSa5vfvKl<2?wtow&g3 z8Qe+;a@+zp;xTu**!BF?SK_ggd2XlY!}qvb`>WwbPGIXnSjmp7dIl3&8Ttq~k9kb| z15RNm80l~vy&o3BdudOK6X96uo3v|iGUapZXE=xad(SGkkTm4g43`mEj&3lT5OXIH zwo3P0c81B4sUt7pWYM`kD(oo~xA?*Kf`gSe;2Heox-jS)_pW#f^qx~sr$H~+IOsI= zfE8Y3g+4JprEP;J(uJ`l@DkdVpb>Zth3$ohHOtDn{ID}?bXyv6X7w+(UT{k zI|^KH7Stl2-s}SDrFiRkh$a56jf7C5EYWhPRPc;e2Nm&?ph?hC?&ZS25S23{)e0F| z0sH?zeGFt!33Qc~=(QhuMe%i93yqRy-I@qB89!dQ3-JvrPUxWmT~d!f6soCjngeZ7 z-L(9lG>U(kaA>C7R_FpvlkTEkf+mYoL0@Qs5Go9Z9QeCZ7eOK1N&CrA0qc0sDu~9| z=;aKVs1ip5b z1be|oWfgTi*d)&euwb*)uD}Z35J4$S@DKmS{)Ny=u3O*@Xa{S#*CZ&3HtOj1|39hk zdKa{!q5Yf|{9YG)ycj%R{kUr_XsRSOOagh9vF4K?P>xjPf!T&P{2VY>7fjg%7O1tD zL9kfyzF;yaklsrf54MO-#8|*P{K`Nc_>;5H^C`5Pk?-gY1ykhL>cDsH)n{ekV9WcV zB2e7q+vyBu)${7-f>AZC<#)hsl{b`h(4pcBPYgPn-jEAHSN$E#JaCg{D8CSlQf@y& z0gp)=V)lSi(el7(u$ec(^E7yidD$@#nnlgJ+5rytY0p?dakprY0A_T^J9dDZTdV6_ zK$|AO^bed+AE;;o-qg(Co(JArHKaD+li3NK3w$?Nk3I(HX)H$;g6;}U^k;Ctgc)c9 z7V_VDwty10yW@WFBF**61F-sp*Xhe3V(|GuEf~;O-JS!^?xxfx0$(~NnmmA;EwKDE z(9`gRyA0^5T}zq+^i_tVE&~JRqes(#Tl!DQb-*`uUbF>VBD=BsJ-9*G=~)iObC8Z1 zpp^FT$_9{mHum&dFluCYU>s;OyuYm-criG(rWQEW>tSR9)t%|`eE_$W%fSKc#w;QM zVAXCxMFVW>ue@J?u6#=JVW2}dCAt8(rTD)44Ddmm;;96ea&?XfFo}-4%mK?T?>t2V zz0M>1Q-RUb*V+~WXHF*8%mONh_88s+j6Qc+8<5wvi2WJJXcZI30I7{LkavKT8f2an zD6q^-o(B*N{OGNKPCagS4bUX{=_v&6^12);pc7-^Z3?BXto4$Z;)+-|A|P83s=iFJ zEpm2?H>neesC+@%kG!utMtp|~7H=jpP><;CLI9YaxwL3DTIYUP%I7K z3)~B;#K(a`ueG>OP`CpM$A{&)zJO09f0+o3t5-w2l(5 z0)SRbECtM>OyV+Nl=g?v4JJU5ge0)3XggsxG&%J)z86Z2U5qb)8iL~SbKv=&UvLdD z(%~pB4t{YnmK=nwxllm5ft8&=k!)cXJjJdP3JHAd z4w^S%2Q~)O;$LC23$=JX7Lgi>KY%6e*W>45g+b$S-B_h(KQ0Sf;gEt`i0!`NMJgpd zKOak)Lt+nS5zVAc-3df*;?T|m^y2>zbktIOJs}@>i_akV z7LLU`;{T-#<6hzW_OHiP;faAYxD>prCl|K_ch?~Sdk)9D?nivYSaB|eh^G^eBZw<# zFS-f{&9sn)JVG|LsbUYohH9f8hd)Ol2*%>+lxdVf#N&i?dZ*v|1n&a4OJct0JVE|yCETA0iqy^CYvza;9;^lVh_kCTow)k<1nq~ zdT=`W+m#+9P2X_(1u|3@dU!P4q`BWa6^>Su%|Y;B)nvyK=zzkZbArm{KH?Z?sq_RE z2@RAaR*nSEh+gKEgLT5-R5i%(`LStWF8yajHn@a*81Ogv8~(y`18@(0a9IfdYkhR; zIIOqKJNOn}ZjyC>haMRRHF-e>{Th1!v`I^A-Jucc zTq8+M9R~V|f;YSYrwJxS`~keB8v}ZQyi@{L)mEHrgCnb12OdE098}jQ zNMds|&W6@ll(sOap9$3jgS!oRLNSQzVvrUvM&nbV0;j14=gtHB$?*0Rygx zio$OIwS0bn20$pCXBv=(GZ#}}c1!dL8|>87fB#KrfBm7(4^Toa*)R_pQ$54F0X$*f zqmBc4)+j+QxY~3cehyABtSo;3+}G~TQ3A(QXHo_N4e}csrUP=xy>K~@C1eF~fN-Xt zXCB}|q+N)II!1t>I&*8fNX0- zb}_Kpn3p^Wn4=ZM>;%Ru?cvV6N75w$k-P(f9#4i>Prf~lc$@Ve7;Uj6HS^vY zR>n-_-BAA>_J(JZ{THy9#}j_?)bI)@)7eANhtm;9r$PAfKlda;6OYK-DnZA=qMD0f z%-*x6k-*PhSH%LLwzHHz3*@(!gA0NAjfJH}yl=J1Ss3q%U7xgt*Je7m{!gA-`zq`N zZ<|6DFo(BPJkhg;w}4)Jb^>(c!p|ecP{!FUyW7DJCm*(+2a#jO8ZU6pp>|^~aBbf) zxe5S!uhNTwkWL6_1^TznDEZ7g(XcOTI!|AXCk^IRSeLCg^OE$B!fd=5DyINvULT2v zXD9bNed>`!h) zUN*Ll>qv#seY`=jOHgm#&WH&J$-5U24L=69c;v$?fWI!;>1yEMsmb&Jpz9!qN(Ab= z50H(3sc8V|0x0cXgbWaBXAuJdOjM4u0S8KBZ-8U0R4fg6l6woi4fabNh;9O>Z@7w_ z2ZO`UB7Wf308dyAf*yHr-~XFMK|MeZpZtwliLwr`$QsnU>loP|`MYrf!9_H-2>dg$ zL9-DrK!ypMvDffZ$%NA}eyHAWcMd zGKwt4Z^WqJbNJw}H}Gm~xPLoz93A7a3kpRhpNkVA=nGaQD6S z^b6nb&xasvi$^)s4|#od7I9De;Ybg$USr?07(bv+ZnNXFRnu$Tutvpk6N>rBvlS=M z7TIuS8@f!g7d(la6K9ovLgGc^vTnei1e~N@u#9=Iz6YL1uL|1?b&;k1nNTop_TYj? z(EVrn5~QWiVFmupl)d{8JlpWRmBy~?*)v+fq^*2KlO!JP`&+-1g~-+ zy-xUeTU(0^11$ekdt!Y}-wY-cHujf&Mf>T8QXPm~I~)i`+|@%$L~xg~&rUPEMW)%B z2Yr|LL_dQ}!b8i?L0eWv#AN|*SOgcgFw;pZ4 z5#s&vfAG#dp8K`*^V3oxLwtFaTk+dkEvif(D~(Y{A6H-<>Ek#%*E#0L0I^<3_7 zILAIz9i#|gq>`6Pa zpfq!Ef*$IlA0GvRcGbPmC!mWgaKR~{URdC97FbEeAB)B-PPpzHjNLqPyTgw8AKcsE ziVF6fu--!Z?p~u|A!S`B#eLxy?O}LdxVX89eI5F*UQtvDQPnLw`amu=mxPtz0V5U_ z0;X$jh3*IL$&W4A1MC#x9)AKuskcY#@z}HNdo!_?Q}a3oV#AL;t_RTVhc8(dA=eI! zR^LNb>{%^E1nzDC!wW zMJltN?qv-E_fmhcno3_${VL#=ri0i&!Esa; zXJ_dKQo*^F6+-OiF5mhPf68rLKNBCtb6sAG{m!djAVB8;LGIg;5a8CSt)hJ1g+p_N zGTz0W7lJO{#TJNvjd!tn7JoGFs-c}(!@D8>gNAswsk_u3U=WZ=z6bnDx=0ToWoI`L z2QXXnaSZ5c&A!*%j1>+I-W+^`y zep0o9;lfS&+w@+zOcq0Zg@Y+)DhT%C^^%qF_>##)7u;v(9Q-x(B=HOG2Azw}#^Rx_ z<(_B-q+Ae%sG&;tU2rdybz*~XHd%9Et{{o@>-x+W61`1UW}QUHuMSVjW{jvMK;0?cQ(v| z7aWff=mekl`|>Xd!n*qM2lM%j?MyIp#m=KqW}0p`b&5`t?52LBst5;}Kn><@CG2G8 zuG{!4;&|pn+?N=ZI0D;+M@7}69hf|{8u=UTS}+dz4f)fZfEOZtk3|c9lac%8^H)mc zokJN&Vre)+?-4iIwDdqxn>Ln;6t;_BlQKaY{*-vcKgDSz7BF{rEx|$h%?<`TLtRf$ zV&loZQITjeVGZ4hi1DQPpW(yUWOq6A9=UjQF~3@~c<&76fqFpuFUCoEqy7+`sA#j= zD7(BslSRIg%@U6x{Ui_YX#_5AV86p}h>D9OxQB3I#wV~4lyQQZ+|{#MhtJ);?=LEH9@zM}W9>!HVJA6lxZEt+_BC23Th75Nem zluNMHM1Z`TJr5^k-h~gb8xm_qGB!)p6|X_Lf)kN2a*4Sf@&Fk`?Vi5}4kpy@4Nx(b zet0tfH%IX9-)A{nR}_h#&s$s8L2N4#t~Aj90l-a>dwk?e2MaM z;bKfEf0=#`y)U)LJEIH4@sVx_DI5{vfcG=p`Bvx?`N(}QhSX|X zzR}C8H8p1`j>Bp?OCGjWD%;4xmS_Q&SYvWVI&h2rA!{G@QEM)cVyo5h>A|Q@(Xyo$ z`A61&-EkyLydfkDE*GqwPeaYLzxz4x1^(sWB&MeIXU`P+UUN;$5PDo=YV}=eb^Q$E zW0GIfptwq$ukz*B5~FRc@EbhCGKn=9>oJz)|AP(Jo!{PyCaU*u2|$_@wd?Yb{!&4R zFT6lBYJLfn!*Ja1f;B|<0T)Knv$=aFeYCT?c^dVxeNNST%Dtt-*q2Oid@cV<*y`Pw zoA~{jP4HZNzGG{}CJeD|&0mLJF>T!LiMr~pZ$5?;t7FzpfKSSgEc*g|5TBc$1kL2{ zbAJV9lKK0?7;t}5*9N+IPes!T>P}B<)$i2cuHgnhGOX>Z+>hWkKVqihJq>3e4nDA! zRo;$msG6R)8#P(?ZmUCH8ZT^4MuN1r)*gq&${Wj$L*3GX`K!U_f+z0ZKrd?CJ^{1& z$UmJ{8aa5XQB5`NyXeRzZ|oVQC&TO{zblUm zqlH)5BT=5<7#pap;J2~g7cOE9oXqrtbP?y_mY-BOH*MX0auWAJ$OQZX5AbWlXux$w z6uJ_)d5|x+a9{N7kqNmUTTV*>UZ0wJNilDTX}`FLH(A*s%Heqm7-2du068hx%FAV4 ztUqWAuk43Mc^NOd!*N~lmM(_e+Artt|p*6%T|q_`&EeC}u`3auiD1-y|y`O1hp(vx!m7{UzDBqw2G` z5cfAai%PNciaA0Swu3)Sz(W6ncky{>SA~)R(ENOa=AjCl`+UEUaD1xqiOgJO{ z%ZmR0AXohg(O$S>27th@`@R#>+kA7^0LgXcSCgmsHj`N8CVED<8a4~x(Zl2gg3r`8 zCX4@r?1j$p2a$8j|6@iH=De@;SYqt9)8uzNZ*x5H06V!>fuF!;EL)0c(R9CLG!Lno zAwz=TfA-##E|CuCoFWO5cr=EIBgCs5t3>gloq9r;Ap~Ugf_#C3ZsnKpYakZ}XRei} z(lYv2UN&W0?IS)Ex{q(*Dl9*5;K+!#g=2g{MMk;(AzVr;D3Rxy#6R;;OVY#53WIxQX~*f`Mxk z*fnO}QZ3p>E%kFoM8t|2XW&dMxc91Lscm?hr+Aqqt1eBn&UD3EDaje^5 zeyR2X8O2m;M)6+IB2`T3X3DA%t;^5mjTf8eRo;j6D;n?&$ZCv*1s`Sx&-evt2u{~$@r_QnIZ1S>eL%HE zc(p}iIw<(NDO456|Eu08)G_yJzF?2(+f~t=M(VkZSG=11WUkKYCi@yrr8wj7wVaL7 z*dx`<)eF!+W#@u-BQ@f&^G?GYez5ykXd~&}6(ByiXG@bs)YBuYdLr!Z{Kqsvu&+H! z3G;hfc!HNqN23@Erkm=FoUv4Qb=j^xepNSdi%M28|`pcLHML!M4UXBH6yis)a)F?ipSXGZ^sEons$Sm3Dd3DfN;Z}Da z@CudCaY+mxyW6-@RCZYB5D5zpXbg3NqP@2j3-~*F3;A_SVpl(O1RdQbt^7pAG@UN$ zAve^0-5E*5R!>iQj)z*+v60vUWB*lIsJA9DcrpBsJbRuR+9Qf`Uj(YCJH5TSIVC-9 z0h+6&esvr*QQBr@tHR3yHGeC*TrUkc?54dA|UlBpP(QdOb6)>acwpPm;(wd}M#adTes~*6T zT3VIoS+_OL3Zl|OTr3Z++(pz%-&G#qZIT$-3rfz3SF-DJMhahY+)@Js$()8wlbQ3} zg{y7!67KO}n$++Ld>`On09Usa*e2k4_gC!zZb}QN?&cQOTv2hjJo6*v1}?2mR*dGF zMf+r@xn1~wQkZ*=+a(F$4J}zLdcs?oO$ntuEaj+RFz@ol-ApCmym~A30w@YjCZm9J zzSrtsYCsA=lt}#4l*B?+H8$3UMn%&q3R| zg4MThyy?73j?b<3QD$Q2O|gntY=`oZd@?p%7%%-3ZNXY4Iy9C8iWAW(#ZIEh$h|B= za0#&`Kjudx=^Ojfrx4Fo=co|)Rq$Y<6}I^9#hu};ZbFoRT{}0a*D>~+Q;{wjYOu(Yg@KASGA}_I z|EA;(pF-D&JD6s+p9rAe7QGa%pnY~035HSmNgo(7iN*%f;|bj=A5xCDFL4kfu|{7# zhM~1?dy#(;M?0WOQ#@&yu5^?CZC5G=$nNQH%KJ(0%lXnXlGA(-iB#N**u`-oWu;m) zLntXq68s}zGT-sL_(&4UEM*pLxJ@0S{#p5iTus`Su<)Zqkgo^}#xA>EMH0Ie^wJS&M_@d0za0U@>)9B z)JRo}PZ&sg>0d!0mMcp34MP58j?4&#!-@Az0m|r}jH)k+ z5uFE2uC83Ji zulsvFNG?|=teA+OlAjEU$9%+heZ3J4|LTnOa6gjYs8;&yBde0-FLzsv&t&_%pQ-|+ zwVhi7x#p_^;GT^WEq-#CbhG!h$ELX9kT%yJev7 zcx0NeX+}1LQG%AU=Jpb4t;yt8I@J2Rp|zCI`s=rr4VMnkUMv$(J(|$+F;I-Esa#P} zq#RWdT96{osd&3%vh*;^l6Y5qys|JRS$LcswnD%^%$XcCmfp>syUP+ua$ul$3ey7FWGEBP>X zenyKli~T$i7w2=pn5n`7?$i}Y{9JDL;%{^gFUMyznFY*r4ad{KKF#qaF6VVkfZ-Fj zulayp$sMbHu1n@l7oXPL;Vven>Nsv3xJ-GDTU1`82U5 zDb`;QPU8K$!h=5n*tGZ#Jq_6JGm4xJ`nqP|Q^1}kq46Q)Q(b6Cg~prv>W6^u)c)GL z;4!g_CK+rXKB(@3GN3^j5354;}nlGz7- zS-gij4UO{|MqGgwy298+D6jFbF$Qa{s?%S>wwadeKx~)_)TW{}qH^_PbThF@m5B}p zrYN2uona z#&FoZ;i};Zo#8mF-$Xq$Zr2T?HY*!6|B{DOzq6#(H}dO+R>@63HH z<>9Ng-x7bu?!>Rt&|hJ0<6;FjX3MkN?4xUP2MM`9P0RtDoXDQ3|7N=M0R=`p!s(pgl-_LbslvM0V+ z*hM^x-oZaaOo*TULeTR0vl&cu0 ziI4~czN#}~3R|Fz7NOkf@{2-V2`$?!kmQ__+~!-i-4Z7uA&#wBNn|U*OTeqckpd^ zuiFT88`iHjMb9&hwx;X)8LT=d%|U&jj8gB>US@h#OEqhd%ZdZ4L+mT^rOJTfIOz#_ zXLhq>oy<4wPtkcv-IgH1UD4^N9n3Sqv+zjjAO65a$H@WIXYWh+c;ddBJ30>QuGy&% zwx6~XYY*EdYUgP{%QmS&U1@5huPc8T?!w;`Z2fTdAlX-Kz%I2EQm171l?+s(X-h?f z+_AY!ppceCerHVL(6FDBT{wJ^g6L*s-iNSb)JV5rIw5>Ke8tRkN`Q zmYh|uwKMc@%G1_jc#&d-IleMlcF4G-=#6xRepFVb_@w4;YMW@Ks%mqnV54Gsq>f3F z%ELOT?cxE8vWOyqn|CM1rhVNuB4xycs_VL6E$*i0TDb9Vb)6=tzDhD)J-fDo+N!Lo zo(zc;PWEnAlT2ZaElQA1FkRSrPb@R6NDUN?)ON?+5=>EDj$FyO%AbXmP+pSHi^2$B zVS{%)=FhBk%R#(}o+@A6+fK-|N?X+SSv^GK(SnML)MJ`vllzr;Jq3P|f3JDOa+2j& zEiJqzd1l+WGeewa=BJzy-Z0e0arh6kJJx-pU#O;qEh68^jxTb?{}oU6wxA#QQEmYI zf?VUM*InG5V?3ta&}~uSngJdEiT+VNZ^OxD%EabskS9OeaJ-^Uwxsr9VYZ~L>hR71 zVh@`(rBtXfXT{Cq+x4f`?WLPF&S68yUPbnzet4H8)mw{p2m;*1a4mV-F<;kpz|$D5 zUAT9;YP9-EZ;Ys1b-e2+aaQTyUJs6zTU*2xp|Vkp#f3v9VBOHn2GQFpWr~L|**0y{ zD}J`=k99Czt{b=fCW$G(1U|vJQl+;9Ef(-hCxhvV+Za85?#REZOJc-Tl`3%4t9JAWOo zXzmi~5wOT*B~bwWUZr;gaD=Awwqj0|y3TTw(<|{X@8F!GvWzy)b4a1T%N@q5(T(TM zE{fDFUt!GEZL4y1&Ioc-NOd5^e!j1g>Yk0ljm>DHRy#l25pS z7aWi6cCgL#hxH+-SNF3-fjqIm^cdVi{%LdvBcRdx?cjWtx7Gl<6y8yv2mN-YD8GRb zDQyZDFg`9qdIE&knZ!H5rseH|U*NsKK&A#7Gm+ynmZTce3gj?68 ziigAM<%pmfMgpCgO>pAe)#Nug*rfxfVPE@Zn}gyR^p>a85T(+*g``BwjNgd=2&-Wk z0ReAx5Yex~U2_me3ZAOI;WIJ;r4M#2`Gq_U+p$R{9f|(8Zj`7KRWA=0Y(fJTerEn1~#R%=%2KFZom!?iX(VQAIF zW8-x1RL{7K)>m0p`dXc%=%066SufLOSmjTo-bu@3PU6EGy~LMCD@$ldPvShs_C=InsN^vnCnSVJI~GKv(OU^%0!YnwMHZ zX@J^YeI?INxm`6eV~E_K*s`@#dR3;3?GO_Zd<`n}7nOugWbO)57jC3TX6#%aViwu! znuE6ED@-QKs~UezKeJC&tkl_PwwKYL49l!$M5<$(?VM?v4r5h`SoKn0m8({IXw~T) zd9oVYx=<=r7RIg>hs%Fk<0E({sSUZwXhb0keW?(>aIP1Ak2>dyqucRk#(ymr8?EXD z^SJs7Nx2cK-Ab=D{9YXcztY7zMzc8@(t5V|t7?y#%>7OA-srjgKe>nQP~vgvW=-6N zSK`4+{pyE;4%yuh6O$;JvT!u{L)d?=8?K;lx|+~Q1Z<46>}lJlI$-+M5+%NE%x?Tn zH5&TVpMW>&{AwdAUud>h9WKsS$?U;70>v?lU^^xIV7!@_Bz4jMu|Y1ns2RFiFJLR) zhGa3W((?iD$bF)Oxqsjrm~*b3$VGCv;gm(+y~abzRO>g~Hyp-C1_f(vk2>^1|4>AzY-=MXXK`ELU9#SxCQ-Zwk0V zLSn((3HTVk!}T~KA`wG`1=(|3*={<~^G0;uIIk;=RO=77{{^kqzHWKRda0Sz_-Pkc z6;j_fyGfB}X%#1GCJiPs@ZY(<@u}6J_ zeP)AMxs+3|dcDlTow%$={EK_U|CBI*hs@4m(t#M~D3T2>HJqy-!&#}?SUZZ7Dz2}d z#wn-HI{Y~d%(8iL+Sp?(lQ@4COHKW`{c@W1x40X&+qJb^TVk%dg!^ejn&K~B+G;0R z1n=T9mDmA<`|lGx01nJ9WyXUmomu1@@TI}Mjs|0t?KKp*Ogyei1A0))?7P9i&_`vvC2_KP47hB=6a@h0u6iPU1{#(Xh}VHv{2K&9 zXy9xfeH2>mY$5JIYQ4N}5L%%0su_g(iiA~DkQd|;dnlrXAnRfzxpKDI2XWbTz~}-$ z&VHru1E1OUujUrqns8p#2y0^QD5k^cs!k~%-nA@J^e>#@Zx$?u*UqNsVt9%3DS{7& z=x)}k$=!p#%MK{&Pe(n@_tTLC&vJ{t}UCb84>>{wq+$-&>@H93_^o5W0 z7BQ3+sKrDTX_@MDVSaqRa;YF=eY0#I^KIoJ$wFGRR4r_vX85mSJ`ugM^^`9j?UI16 zK>yPC)&%O>q<>W{)aLSc*w<bFY7nSb_v(4WQ$+&^-D8_$@FV~U#5!km~A5O5s5Aw>>Y-v^K1H>Ur1f5 z`kA&db@qvdhuBDKsJ?*v%e+8)sqAl~yT-4eSwCJS+c{P9S@AA4U3EDGj&JXgt7FOZO>9lQj zX^)}ZGALi6(;4q)PS#ZDZ7D3(25s8rZiScn_vi?zRROQ45>Jsn4!$6u#mg7mr;iCz zW}Aq2be78v^eYjmlvayc#*5cDq>cNiYc_Me5DB#Gt|d8(P3CIPQf~uhKbk*Qx6`_9 zhe;D=x|K3QHN_CQd9(bbc5l=NX@=_DiVV?h`ORRXAWCw3!3i1>nrG{YIws2H4cbhc zSG=v>)lnjCm3P~(?J>lQiGJ6tuRt!I<<%7>=! zasSHO4DL}z>1@rT71Kplr7n1n>Ln=Gx*ozd4qIgYI-ti)ejwY$==E~t1?a^=b1QBYb2j_ z&mwM#^3`jCefbaN`UMC*QhaPSPR!+Ba2<}$B`r#)ws|E#MK7A)mTsd=jkeMYNMQZy zvIx$yn&)MwO8u(P@~He#_TS5|?oe7}6=d>fQ$JS7=DGT8*0(4`Lswpmuq&(B^-Dn6 zJ`OW~kr@B~W>bPto^tv;>JD&H(bj6H;EK@Z#EQMt(#G)>|G{_aj_Q{q192e4m8ZP9pg#1XhMg1dN0p)8sEe14GFn^!y2 z%zq73Oy5RPV79`qbu=eHG`#5oCyG4Nz;L#~1$8SpC2Y9*HOE{6JEWX5dHJ^aoXq2#ry0v@SWUVYcyPwk!ZROE0b;+;$S?^S9<|2kL*(YfU_co zD`vo{OJ+z{z+30f6uH4`XI^Gr!z-pgC22TbCT>=cvjn`x^~4ckef>Bh4jNMP7yh8q zuS$foi`UqL@bS6PmPc4)`d3pPmXQSN-(XIg9%!@CTahIy9g2qEl%GK7FX6mFanVvLBFCZRnLbXGQ?UC-PVEjP1MxKj11znNIF?jwUVHtXT<^yIqI^TH# zaSzc;)0<9--}93j5b7!F1l8eFWa<1- zL7-ShSNOdVl#mx^jii?n?#|8lHLOV7-T2fLMDMP*8jhjn+HLv-USahd?XU9P_UoGR z!p~N&>P_|xv#T<5+Ydv%{BB~G&PNurF;ZPGIks-5;*scC*q^dV!r?)2;&8sV-(7(# zJ$u#!>KWPo?OlaV>KSI1o)i5F@)3O%T=P52zrs|``khizzQ|kJVs!s@5^V2bb8(X!<7F$+rPqM5ncw_lt3eTEp(inobO)^Z^IVU{R znl*i6HR`F#zt<`i8{}DG*-}jMHfXr0RkX`*FQ4EanB_{Xpnkecz^)QgMS~g>8zE{~ z{U7yV@V_-TYkfE;t3=i7%3STU9YYHWEXS?KcQ%`n&1hPU{(;do0oA7J_Qr;)ZfQ2I zjZ%zO3c~!PVX{MuABqaa|M=DLmkXZHnnC`cFS__(1R)XbYz%0vBJ=CMH_w9OYdRWU zar~;%>)w}2Z9i&Q`A;mes=hnDOBb57MyLI)M+EG)ZJ@)0UfSUw%}}IRcI5pbb#$@ z{pI`=%Z^&l%x2@~DsJk2eThvU-==wO?%6=9(hTRmIM;Fr%F z7d@Lbfvn^&bXkw}AvX!op14vLVd%VGdIhR$k0|qJ*R@#7jHMGBKbKF>FRWi#ZqDqk zkyW^+wmUj2Zo~_$=UJi+A*R17*RGkaZ(zHGp4F7Fe=G`825|2AHc92&OPRdn?WpQJq1oflx|Y6Kg3uwPg~kqU2&@A?rfEPu=lK&rD9usZPj z8o$-Ll`Y>e!L*Cxw)#K)a?a_{Zp{d8*&;v1McypmPN_fdf#=^s2xxKwXf0^spX#2= zNyXoH)Nyt}gWFs z*t2MiVlepQ|NJs&zSnTUDX7xvF7*)li+R&E6?uevw#$%OFrsxNl3p3vBt#|^pRa!p zKgnBG8w+>sFjcj}L`s|OK3uuQVHpA!#*`X8;hn3wx_)q4Xrk&GoVuuw+zjvdKYu(N z@8vAWhPO^1M&WP;Q_-m+E@3_GzY%%B?G}pY%X-rE8!jl$t1rRl$8v}tvuR)%g5U8u@I{|J03UyR)K?G(2ml$W1iI1)D9pPGq` zroVQ&GGDP}Z7OCbkl8YpzQ!tVRMR2F1MB-zjk#FO4r*$~M*u)TzrV*Rl1iCq{Z5YD zGTH1-DA#{AtRSYZo}!(J6QQG31F(MsugGp-8NMyz81%ST7{39XH$9C!jnvc1j{V|g z=>0Z75de&6ZV(=0xitC;C+zB|(+Hw-7ghh_QyDFeZOqZ+8&(-JYV+Twz4X@gC-rx! z`c>~WN5}&qAC)%Zdf-u6CH~&GUGxzj=oQajk4>L0BJzznww*# z=PFJ%T$K*pl~%VzGBW3NwM9H3Biqqm^n0?(I$tL;ev4?ZHm{7G|(hHMvwPx z6NQkN7sP1s&(oh09auWGpnb355Q4VO*Kgr=H8p6zmtSg_qiHJIRVz|2${AesR(UL4 zWRFtBBwe(CvfFW=jCInC=>K$Q#cx(^RCkExgkTDVAUhC~<}$Uu4Z_FN2`>q=l(_Fa ziipGhA)DLT*46N@mJenN*RLtpG`u{f{+WR+{8YPAcRgENW!Ji=|6%)2U7D0-@lo!H z(-{*KeWROo9NCIh6V>UGr6F4s;i83s+0tnOZ(oN{LVxoz(of0#&I|CLcmX-HePz{Q zxT58#{WhnuX|e6MvJ3UimXtzP?NHOM?8#MW25fu1ty`x}>SuncF~lu1j#e3?Q+0j{ z)5;s_DYB@LS@Lhufd-Y)$LR32SFcObTxl*<}{6} zx?dJs&vuM0>|1lm`YOv&HN$*jd$6s{XxnNs+w~cno*B+)J)$RQU#T9i)Typ0RxkS@ z?~v98`bhZV{=Oo?cfowG7J3aG>s*W{5E}`vwx>=1L1itu4H|Y+<6m_}rGM6k*YFDj zHHs>~tN_Pj+s$p)YR~NOP zaX6c?Gvo;D_`c_5o}k;Fd1WP)g*|y?CrcVTP35lnyV}~ybvwP94^~V_JJWEcLXtSI z*2-GGvAn8)^(9hcn_tPvN8mgsK5&GYi`5yt^8e~`>OFbpI1 zMX@#muXoE>NM&&M6;?}0dFLqB-TaU?&q|-nugyV~P@1J-ZRNGZVYMFY#ElyrU)YZ$ z+17)c;)s`~#oVb&eRcKRlL1TB<9L8~wtNCG+heWhBk=l<9!3J*z=HSg;~WMWdVg`w zu>R`~B#;u@f>0s?;@P2@| zY6&#QyF#`aO7`H2d?1_CMEX2D6cz6=ARmFzJvWg~R#w*^NKUc2y$G3@SK6Y4pJWC% zcEMe#AM38dWI|qb7tD=4VHd+Ck$o*Ga6ts$@Bq#WeydG_iv!%0XJFWyE4>SsddP(* zVU|-EoegWzz&#^~UfzM82qKm>t&_nY7H@2Oh-c?{w+zQe?D*E`gEgo2)~&~46a1?e zVB=zy_EG5dbvMj^qxy&(!%lQd@SmEe=(K<-%6R0dHzF-WlpYPjRAiG=5j_BzjojbO zFg?72?!$~{#re*`w6u6=TPpP}_h~at0b zed3B8%j+MBsMImFLxj3`gX5W?HFlJBKmXLabQ8rqikP6EPB#YI)%6rBV6b8qx!T(# zSwZ~n@t4&+vL8C2uS|7yRd__oWrb-w&A@3^jBXX7JB>r{$ z()4*G8%u!8dI#!7+~HkIb-v}r?V#p%QFqG~wKT`p_(e4*1FxT^IG&PJvqZjq%MXXM z^v4Fo@?D}_`^I=iJTH8|E=7n3=c=Cb@A7Pa#XDc?VK%<_Hy;Am=~5F7&UnDL52W7<~ zfA4w`&6jy@W6G(=)6WtUi0R;go@}S+b!nx&ZK9eLg%g{PRqf0k-Ehn9nclzl zrR8bT>#Fajy3Osjdxn^pbaSuv^O|1&KW|qny?3&n<~YU8_G;M-`^p9Dq(ro3cm|Cda~)qjFWSJ941Zy zGY?-V`@!0O;A#1ylKK1kl=JfG-P6iX?bLRCsR-PrZ@*AcvsLgvhO5G_s)UK!?b_V} z5{il_0t%uMDk7p10*ZhFA{{U8eYfj%_oKVJyHxCMUE8%gK6AhQ2hPl#GxIxhYVx^r z0=z3Xa0h%}m!1Mrx5pLj1TDAt=Ou#QH_Xanc$e)^bB`Lmo-|L+TZSpvJxh? z@KDznv&JLn+6db^Z*+O6b+s*O?*Fd*9O~(7DhWs9wp$mxM73MYa%Z5IoquJn!DiW) z7&c)sD=_s(OkuH9&cZG&h!f@EYvGU{h;-*p?<9#|sfxBdqBQ$%iZuiU!eE~uH8PdAOe?dnUo{P<<9Ri>T#oek-i_VSs_tFc&3Gm zd?cQ|z$kLSd*E5!kD1q;TOI!}NNP~qNM>|=R3t zy3`#k8sHc^LPRT5=e4qh%J}f67Qx48tiDnZ8LqF%=3fiRuaxq)`=^(!W-j`!E;`8s zZ@ZAchkm~KVYY}4bG~M3qW-qe(_NsVR}`vLRQ{jQBVR8jR@GcNde z`88GTzPb{Ya?dVd;a~Ev+q`r2vdqnb%-hnD&K1T9;uQM|t+nv+isy>Yg4Gt^Bq9b` zIKUsE&hid)?$7RJTeXE}*(TRF0~xt-V;ibWOQRfWGYsNGAys_c|AIN?$=c|Bi6zt3 z=Xd!PRI1i*TbS#l$lDy73ChkpXBa9azwOI4r^TyRd{$_L4$G!Vmh(3({J=j#JMzYK zPRy@iU1*z|`!G4Ac}>oeV{Hv#S)3y;YPV%n9GX(K+W08gu6%}J-oDkvtvat=3kvpV z(!Dm2!5v^XfQhbH~X3;$U1Udt3?iegiVsTpU z6hw7$JXSU#T&Z>TLg#zY)(`<|)Pm@$@IpjGr!DG=~bHJq)XU5KLb_YbWYbd zD>vI$s&C2)ZD-4K#V?kHh}R02E(&Mj8BcIwhkI3U`t{bs<@b}0HUXstv5)FS#WhD} z)x;F~g>9?cn)i8sa@qVG(_TSQPnM;RB0t1b=S63~GPrCWk+D{L*!ieFUd6YsP%Gty zwoBx}lImp%qBp|wMF_Kuk#j9iIzoO1)(Yv-0h!HzbN?mGO|OsIT^ z^vvHWDMov_mM6-9KdGPl)!?`UqDKqPiMiHU4=#^f))oauABb(90Tu-2*7tyq{VHoL zc>BGxD-hmQkMxprkiYBS1-Z~CN2{E}aHgGi##AK0MyZQI?wXY;DHNX1mAGO%xsy&T zgcqbf>mLS>Pe|_>0ey+-?zDmKL{4da2)#cL*rb6+2P*14;KhDf)#dO}Z&k%;xWyx` z#2*>&dZS=D0yr+qevf>%^EG9nuuZP^f9NH%uI25TonJK&v8NwFaT418bWmqr$-Cy5lJ5hgGjYwcgxvKHBIJP<#Wu?Rql58k_Do zKbwUG+xeKxv1*%gEs32oyRRt4htIz#j>f|{-2+d_{?xMG9x^duLsu_3IR3J$4pv#rs`*@)zR+j`Ol!;uq}p8Z+>h zHl5lL_<6HGidFdO`TvSO;{R~O10MX{sc7#!=4Qh5u6ayA%3)LQge#^WO$et)0jZ^IK8L zVjg(gm0o6!cq}YhOuu){%^OW0b)1lShk9cdWYAEs%{|Q+@|n4d+?5Pl5Fr{zyyrOg zJIQKNoqEPgpT}S594R%68Q110iHwM99wyEYZLdEidKNgkMk-q2x3uE3knL?#x=V1< zV{V~QFwZqVm*($qoS7NM5O&85i|7+JKh#?4jrkGT1IGhPVh+oAd@{)FXo)YkL|bD8Wg^?1QW;d=5B`+i@bZbQobZX4~)cut3z`df5s z>mJqPh}lhZm3^T}bq^H<0ln3Qa>4F@D#puVcKj+iEZyP$v!GgH=c>!e5#4uOm;nhj zb^^VtVDIvks&?j!dA;;IowIPb;2gD=P4>PqElwf2`VA-I7qxfl6QZM9Ug_qApKPqv z^o1_1OH;=Ou&URo=I$;o&s6m8I9dE%e$4$!ftPHKE0nWdqI8^^F;zUpPOQ5m)Gv2a z?dE?qzbch6!3)<34pTksO})ab*D20jM>0d=ZnuY-&P7|d@Qt3~;>I2N=8)%g<8&(m zT&qrM3U+hK*QlrM$SamBY4_Irhw@*pN!gcV8y%;bDkZp`QFlyqe))doE5S?i|4Eng z$1IE%45iK4Q+ikA6{U>qnwWDhuDE@4_WbA}EmoPa;gJo`OvNF+wRwhr0%li*>TPxh zmknwocZiFv)miQp`JnQiYeIH{{GsD~lehGxUA1n!`0H}EQY^e|u~2f3U$IcfFQie{ zgPvPOHp%BYdkU=LlH1zyHbh-(zMK;i?$jX8N)6G~x@Tbi?<;>8RlA+bqV@V6X+@{B z+3s2S3)Cg9vDwp}gB_V5T@^iQPD=Yo7e)+yE?as*Ev94&TahrQ`9!K}ibzfGh#_hlU zgOm!p+uFslzn3>D@+4C&(!@`Mu8T%8JxuVcH150fs}IWnGuFWyXMqUT!*g9gH9M^D zI`Eo(x%nh$!||$+gGV`?Iq6^>H(Wgn`~{30|? zphjrR1~I%8dTXtQC2;1;!-rm7w4CK`sRH&-QVzgYCUffQ8_jrUyU_Z&7&z zP{-SoT>_5g)u=+i1JGppG}r*8aIW)aKxbpcJQi#ja+h}lCcR%kd*JIEc0gwlYwI+4 zGlIUb<_tj<_v1KzD10r0Q;x=*$>#or`u3dT9ztCjuXF2Bo3dtLG&(D*6No~WD@oua z>PC+Ot9{Ld-29qsY=47Qkh ze03N59fh6_4d2J45iR z%f$XI2&wPjgz;NSS~z|D=^2l?_KZY+kz2%!AOTAOWpZ}miOB%# z@sKSs;mOprJ9?MfDe2zYuNT|X`!tOwZn8G3xg8FyDwSJpDtn%CMA3h7S$^DjpEE|L zm44wc(!=-}?ik6+bQf-}=vwq4z)1-1Hv=vU7H_`~3Yl1^pS(>}oz-{VYvSFb2Weqh zb+8MsFU3L5|^MN028Hdr$IM?m(wZmH#5WP6R(lH@~|mwMB#y(OVU#FIp-77 zUgwq$2-6d?-?aWozmqkkdJk)R#+m|x)neSG|HXFHACow-+q4+Ap5vlcrrzZ|QwBz@ z<;vuo0>4Eooif2*K5X@ohf_@ta#BSVyc?5Kf0TKgJDiqMvY=m-_PJ*(~u`RA)5(y!%e@-tap*+F`9*7?jy;uLm(u?xl75A@Ngt{kDJ>qr%Mt!i>$ANPU$ z;I`L5xnzwK2(kq~{^Q4;&blv4T~z=6`tVe7ZRFVlX~U}?_es;pinx}^X2-%_`=gq{gVZEqCyO46L_2AXH3l~v!Wz|$90JkPz5E-(G4 zO=B%Ax+;9cs>-iGX0bQt@KQ#zpJzNgT**-yTmyb`H)&McjscStdz{>Xf5hLcr-7&W z;rEWFoa{@v@;ue1+x@gps;)0xg_mfojB)ldU&;qMwkAkyh%8d z1(jI92iTJegvqh&x}3zrt2sd#-T|51;re;oR&y_@b~~*A%A`@&OF)gl?rwTY`>Cy$ z|Cc)J__Wz}gHn&0P4OyAhBOMO25WX)m00hWJ7BGkxw zT9TCXHyh8t9@)z=&$bKj;hZ%>UVpec%_^rkK(egOdNmj!cyp&I#c)A%*(K%und^fE zseyx=y6&f580c@{raAW9Fa4gD*YP#`VESLJW7XE_`i6e~0L#241+rn)SIkU`XL}b9 zk37nLk^3-U3P+kz<#n4IsD0`*39y&HwcZS_5UTEsOF^#bE~!#3T`E2KJ$3!L`(3M3 zYfrDQKbJQ9#Q0LbG_?0lR(slu&LWjOJ*jmx-y!{H!vS6?i(g%mG=e?1Y+mGCc3lDF ze~+^_YtXBMJ6F$l8pHjjoNB!X_$IP_;sjyoX1A|EXnOsn5Qt%II@t(mStmQqpi=hM zx?@lWySG>jUEsKxu0pRkuVr`P(Oe^u3!4KwS;OJoz?YcGFa+l8Z-GmBK08*!PoQy5 zKaqvdDJwM+3`-s_;gthxZ}sw80N~MI3GlB_Iqyq)H1rS(iKgJ0Q2+i-us6J7`&C#0tDJh^Yw#~C2$_wwDJFLod&$+`&Nm- zrA$};eK3$&p+5%d>1J^oc$;=ZPw^H|gQ+RJ6l&{{GrW^zXW#%dk96GD4iN<8G#Pq< z_gi_uJMb}oLtH`*U31_z$TH5{=f0G7_C*3qC4aY!1wtgFDy4v0ydv){a89&aCkAH- z#iBRh0l{%}5?I9lm2!qRfuvAeWhqa=RMBM0+0F{PEek0X(Y##GbQUA z=YHk~)m^TG=>%WEl^WE%pWNrV(4;xQVfBTGx4=WCi+?N_CM)rp0lpO%IWFfR0=<wkFScR(}CvyI0$taAPACH#+XKyUX}>t(>7HGfL7q9)+1%Q#peCC8|-J$2k&a zfV(O4BhQPQY4S}(fZ6(85ea}sv(0}bI8C|H^D0;%t#h2ja~93C^5k7-d~W2juC~;j zhuEVUe;jvbyVU!&zhrZ38fs6o+bdrbOWD86=VY$qxRtmo*K;xow=*L+Kk__419yM6 zbHYpR6;ogMXJD6p>%J1;oVwG~03MWAuKxyp6H`|HJQLsSdI77XyY?K#y4F!Ku$w)$ zwXN+tdvnvRng?vGzPYHJ-CLu`2<8m0j8epM!pcU{UYw31Bk-0xKi@JTn5)cQ8;$}K zOpg2f0HMy#GXk8e%vk>jY?QpPI?Ox7e|xQ+B|PDMHjh=;KcqjA^|1SV+Z^`nj)t01 zZ2#6Rg*Vx%#xo`v`*NMHyn?f$N|k z9dKJ6xBddilG$6O@~i}fS3j`A&xW13%c2Ia^_8>gkH@v{VZH1#uXbl!bR8|6&kk=Z zG2UipH9e6JXMd|ZMgHXMsmkZ}aB9lZ;={NL3l)djxXPTIy}iIhQ>N!wz@VMJz87?m zAF#r}cS5hLYgt<^JD)LUMVx2#eq>2c-)qsaPM%DtlCX#L#}yo7J9kGJSFzLDLuC={ zGfl6^XpVVZBG;LNR=$XP&v{WII~2*?pKr03;$F@y^mqaU>q^!)0RK~PtYl!T@ZR00 zm`7UTmHXJ#^pU3r(TC~!UIALqTHfq~8d)_JZ&8H3KJO@cgx#Z?iTZI;MKtQlwMH6H z8}8#27_|blhrgi9K<~h@s0DB6wh8Dm-et!q)CMZF)Sz}Se5Vf;a6>Qmp%L8jQw``w z?)M%Poeg+4?M6od((>QPC*VddjXVUGXtyHQL6vX-Il~)`j6iyLQ1S!hIPcxzSmX>8 z5uijaK{vb_kh}0+$JNL`@MTLH`HTeJ#*unhcu9!pVC5i%@L)st0VD#>ZgfV1;Nr3` z$S$}#M~t|`O`1?-EBr+84%vcCg|{MZ$mV2wWH)jw@-h;J=mMr73CMt#KSCnU)_+Be z=r~IjQjM;?wHv-de7JZJ?j!0>hQqZ)O4n96m#}NFg|qRmrC;DIye-=RXW)<;gbVQq z!4kL%_k{Rx6TUo21Yg9*M7qH*v1k5TWCS+g`4d@&(d&DWZP*UWSR@*odJ~7O1%4M) z@FM>C6MA?C-@6lr$1^AD6X8kBwo*5E8aBF#P+2M#@p2WH z=n1?YIUDHU-IvWtm{JTRif{?rvPx@dFHXYg3T zq2_O3Ql6yB9K>@J1#3WcmfW}$EY1+iqQSF9lw^Y+_3>OE-fZo@xGTJH)#F3cc;$-t zJ->KgrJp@k{m0&Xhl`L#;Aoi!y`a}#qQGU<4uc(_WyR<2C!lp%chd*ZrbJt50d6ST zlJ5fU%ztTE4<5{wNW~zXJ&&jat1@yq8t{g3N!&W#Lfz&t882ELx<}2cQ>3`Rf`&+E zIn+b@gyohPRK-lY2m>FQW}R#Y-qq7x&wU~p~` zBk2OS*e^hB=Bs0Q;2onrY$nf4w`tFMUV`erdo`~^KHR|sO%YGBltanP zlM6zitK;d3vp`GRn9kooU9(%`RG^|kRK5>rtCi;RfKyc>9Ur(^PKkd2|Ca2)ok6R@ z(QFTJZ*KdsS)eZS!@(l(Z{s4rM?4$tR(F7xu6XJ|^Ug|QEwdqee%bj-z}O#j{0kuK zvG243=uX=P7XWVCQbqxSrmr~-fTq4sI|$^}_=-J&!HOnK4ZJU%&Z+|E6vo6Fz~EfV zgPXyej5~fh@Rc5S_vWotl{%#JMA8b&D&GGD2hV)~(oXptcLk0df7y`?1ou_dlYn2h zzVspx(lI<|Bygl9R=WsDY&a(>0aP`2v0*@K#Y2`2@UY}=>~e5Xfz^SRU_^G5Ul3Sn zRJ)slpETPXqIur3OO~CyF2SF3TY>!-{u)pNo@bKV2LY$Sk#*MryMfcCmVjf=hwMYZ zrp{>^6!2eGo7#D{mwb^HG%$w5(>}E?C+DQgYqt>>SqqD|5)`W{a~|Q$-lSZO ze`fz=#^RNnRxlqw%mote;46Xk;l0>5;M+bgtQTzYxQ&s#42MB%JA^M&V>95Ct8S!< zBR`WxI&uE#drREoZfcuPz+7F8C$W+Hvd9uphi} z2^+C9Jbt(%W`aiVy^6&_d=Cb5gl9V#u#s@ZGAVik*?wg{aTd~^MhPBN)_ap!4t2Fo z#jit`tGD49(6hpW_#xbBu3HlB)=EkmDCv&l_p z4>`b{hZ@MFI1@^elfo{d2}ISNGBk+T<=%{L#?Lw|M{RKLWlD4^cJAUztX?8MnT-MB z+ufrvSFu%7Ao@qds;ES-2?z2XqvgWM`v0MrAVeCBM)JD|65YyQ%t=Ab7&LAqI*T3* z^F_zellQnGzo{Vi1mqo=>@X5}NC=l{kc)WU`LoyvRn!Sj^rAAMvl%riz{bhwA-T9b z9d(u|ay!r&QjP8r@=l_a1R>YO<+u*%6m_yqNWSpwvF%8%p#ESLlEpXpbs#1Nai4-{ z=@siPBMS1yG9@A;c;`yc6hrcHYjm^Tz9Sp`OE;wc7ji>$qbw0=P^)tK5rxWI`xQx0 z4i&@5e)#})0dbcRtY^qdscUQ*vR2%2&=T1oa`f{>wg~FCo_N=0~+6>aj-!7 z- zhz!e4z&=dj;BsVg+k)=%@Qvmp%@MG%;ds^G@cz0Dg($qHIy_?xJfVV6rbEw4bND-< z8$}Z66Ev8glo}1Sx(q-eV(FM=YP7t$Hfj{2dzBanU7?c_hu!m`pRF0`<)I=Bh4$SK-Y2(2^m zw@iUnXveMn2|36^EJr~Hh2H0G3Tjhrjx&PUsV6%v`CwX1LjiL;ePa21CNw=iHR999>Z2(*5+^UN*gphFk5a8}!1O8&oLOQ4EtmsDoLfNG`9Kvic@@MtG!1M8*pSG8dD736`idL=_(r93q04kML(= z2osg&iHdJ zqO{h@Qf$83=g1fInQ}((JhWDJ%jZ1`NsOB}q3cC6){aI#^C^pekUHvS|1{!jSylTG zLRL~$_lPhr>L{zl8w+maX5pcEUHT+^SWd2N8CH^oQk${xj9uUgY>sh8(j)Ye?&gsQ z)TnXZpNB>%^*##JUiNYGFyxK+qy1Z?T=2-^8xl{K^^GHXYpq-V5J6Sm7_NV(CtlSa5&lUo2{rCeuU3_p@oEL#Fs@^5!1 z5&`|8&20Qpk4tqleyr24*adsvrq9}jNt$6m@px+0 zW!$B2e^CL}*Ntb^VWI8+QM077r zT@WR*NndSREKE;7uV@u?vErFB!D#kcD3b5P{*&^Mk#o*QPo%GNGlSpK^MK@C$y7M# zxp@PrzQL?Q%D#e%B;)V+GME0i&p~!<1mY*avaQcmof>&HC z`F+7gu9SYjmjH8lrOaKRG{upz0-d5jIu*PSoI-W+qIXTA#zI5fzLQ&_7WOv^9S`WX2oH zL_n#@Idltj{K!{&96UF8I28gX`!ti4@F}-$;yq$(Z%;TNTJu62M#uM6|EFGk+bPiz zG`H@$umP2nofHm3xw!*^!)Ua=fZvb$%MSCGqFX4GAyGdtihhEICr_t0qsd2jlnF)m zXOdq~xla_i3(a*C5hk?Cei8lx?J{q|*Q2+3GejU&)!He%L>;QVB($Wal%5sv$nKo$ z{6}P>uAlEoE|SWb65>4B&P*XpKpo8{Vv>@nJH)!fZ>f#=_x%>63Geh7Mf}8Zx1EG9 zzSe#?o{zmS@5jDkg*_VKUE#-;4xxiEy5@#JDY#Q|oBvkell_4o$nVs?V!HXuB`26= zjDh%<)-a2KQS?x{IPofVj9zj02ziw<1=W)qsBt^Xi98Z?n~eV^&aQch2N8?RuVA%! zT6dPvSxz;d78qo0)vx$Jq#ugE@Pnnxvu80UB>~z6jJ+6Lbt+|GeB@dZD#i9wXE{Wizc3D%mz*;l6 z>KR|Go>TOVd8b;OWyu^+j?!$PPsv}3SJP`{XK{uqmv(U~sl}42gbY$8Hbn-I<3!s6 zFA$jEllM3LfBdXX8TbKa@tSt5pUO7>f?1H$J6VEc)2qfB{uN_JG^k3V=Njh- zQHs(>qhHB?we@TllB50^zngfk+7z*#h*K;Jc!0lTK2V=N%D{L?~>ng(~x8`C3|H04dQi%B5ne4#5gm2 zDgHp`;QtE`Rr~D_V0RQzu63BJbkUkHv`9E$;fzjWoLUh+r{R0;73O*!RyKpNuQAWt zM9V548M3Hv<=f@YsDmX{{OROC(O+;2xiNoh`bwf9C-GP+u{=|AC>t*@Zu6Jni?yG3 zti`fbdRHF$TXuKN4m46c(qad4k@?t?$3NKitmZe<+G1I{g_+hU&yA;#)i2Rsr7qOC z$;~PI%1|bR)Rv{e6Ugz!yVK+ZQeYnY6#ty_?vMq3EOVXza_p%gb^9~yh^D}GJKCk- ztXYRHku0|eMC5!!^L@T`k9Un5^WO=U@aa2kR8Bp;rumD0F{N&}B4d+ZYb)tyGN_7z z(umXLlhZ~LF2%~&7`&!nd{`U4Ec^MsOIV(%ZF@Fmu7h0Xp@8z`nx)7+=^Bd+U` zY{~rZIJa8H`1WlozC{;z@5~ua{pl#sv8jWt?$T>ySK|YE0lBaa;5{XzRn4h5{-^BK z(T{jy@$|5L*wZ{_ABY{we6u|SePY<;@(y)WZ(s8lVw71~9784xsynBumZz+0WGPpq zoUiOwtV(4S-jlCMv&vi~^GrLf-XaZ3j~97KqFGb1I&li?9{afnU{}OH5h5HoB43co z4GEmXj|QB**D}H2Jl9IviMQHLNiBf9&CYn+WLSn`@vDwIiva%W*<#M8KCY;VyLz%4#NXbaqmuo0MpynsgjT;7r$&zVWQ zQ?3a06;j%f!86J#NgQv8 z;H;S8IiPz*IXpS5P}t0S71u2|4Q&fA;h%u20(LOH@QfW=x(!BLy{QuTe|E{F9^shf z6MS@3+hm0UqN`)%K8UjHxhxJ5=bK5D2xSyXnh{KKReT$P1VcnW5iX(;%}2E9--H{G z#<-<|K;&xpVtz34&Hok?g3jOJN{66ZT&Gfd&=|WAatEq1Ya-mxGp#e_N|LHo%c{w3 zr9c1Eb9A1YbOh0FsF&ChxMG~xpV-XbDgy9-;b+2p{BC-HU=VLTCg;DxwTJSU&v=4= zGW`qp+Wv+fhA(k>Kn=m(*m)CwuuikH_;*a(vRw8~kXutFn=G&{oiBCaSLYs;r10(Z z&&4@Rt=wC5hOuK5!Y_0+yjf^YZ%^wM?4}+a8_nlZ;Gq?akQ(AYi8he*_FSrnoaj1Pp%Y39St1nB_qz)w>l0pfQV-!CWU({QOr-&!ZR3bOgF8Zl3 zUMPZc1$lz|X}0{Uf;F)Oe>k5EYh&g!)%$8_d;0eFAZj~3%7r5LQB&+z5n<#)vtRgO z!lubzdPN;m^;q&tm0o;6vRWz1ZV@LcN_4wLIr2j38R11)4s9d&BQ@|o3mhbcsZ#zi zan;e!OqQrA%$4pG!uz&UcLbi>N0Z<96I}L^qv$%jMZ|O}(0m#`pZL@mAY~cHSH6TeVs6JOW0W}Oqy&{k=aMV^`{$q!+gdOj5`$W>nCZQ|ciC{mvDr^tPe9%MXa;}3Sw zM*bTC^!Tmokd{*&55|9;N7%diO4$r(G zI%g`#`A%#Hy`|1wa;joj**o#a(y#f5*rNEC>AfhTXo{*C5CELx;5J}{3e)qLJVk%KB1uVUi49Nn0Pzmp`bK7;)b`j{WWM$o@& z#ge=_>#~jFQ`MLA&WpZRYD}9%YsynqqlBR)e}s(!vWUTb_!R{cxM9qr+?XU!W>!{L z)F0YAV?t;H6{CN@$Btw)=e?qd5@r5IAG}<)WOXlAC!)+*XeU!wb4@}tzbzGrOB#3Q zEf8I+yJeJ$#?^?GAws*#OTsCFfbwZrEgvZH<6K}W3j-7T>HB&9Q4Bpf+dFg@wZe4V z?;g2B@91St#H+J5n&YwZn$`7KqB!52LAiYYno*Mdol8o3#k{sHx%)*W%^8NX!n=)j ziX6eeb&i5C!P4pt*ciS?g)_&VNh|r7xQ@;*%!wL9UC#3exlg{y3h_h83C3v8o5X5u z`>)e2q}G`ZAda%mvhf=32`X{^%UXX^piJqVQ*C7t4Z{Y zRA8<}eh3aVB#wPpHlB>npLOMaEZGzJKc(`S0trh1dVcM zR#u9S^j~&T%%G%~<8jbj?9a8`>m+;*%<}pw0KgF&m-2`3ELL^XLTK00SZX#buFut7 zW!Y3jXp30tf^Ql=dqk$68enrZBUJ(H7vfCiYECdYOEH>r791k^kX)!4XTPs?G4RX$S?UAuD-)%PhF_}oDtEze zMWYmJ;7_^@;BYAt~3mzgjyv+F^`qzeHW)|wX zs*tKj$))||cJy-1Rm~g1SX!#SKpf5USDhy8jc1g9FkD`Xi}7JH9Uj1) zE9K#CNkb(E@#RtV;*I!>&@kace2Cu}0fD{te9m8r-QGaa$FcTRxl|OExAYM?1k+T1 z(Cp*mC1=&n{JFV^Y6DYg_@fMDoE4809`q?eg?u#~hy}~$QcpOrbR;EBOcB4K9HZ8V zE|U*K-V1po&o4<}PR{boXHF4~8xGJZ#Ku*6Y8HNC>Ayq+9#r*7Js>d^UsF|zzvsx6 z_2NLoY{fNEtzx|VglHK5v8-O`hh|H&1=;M25}9Ch!eueUPdJh%ie|2cqzPv+GyTT# zkJI}-{h0tfK*PTzDszMFf4|I$RRZ!P@!o7U5kt(Ynxx*PyixQ`<*fLb-J;y8FxPKa z#K`x^x5@Yam%D6bUeZ+LtJGeCvh5|7;(~-N;@P6(M;41l37>|H5VQ*hcUSQf_~o8| zF^d?Zl#s#qketSOyvXJ{H%M5m)hw%mSVDIp$wA`QN3kS zrEioS$acw11)rr7pOYVnuMu_2HXY6oR!e6GD+MuP)ox$@BGCko0s5MNbiPhe%s;DA z$u+c>*-rc#X{cDPD$KlJxJ0SSz%t(`a!f0=LiuUKGikQ0Ri8v>NQ<=JU|6EiKkIqT1M)-pZ^f@=-nq}n-_mv2w|QSA3o_59#fztyijTF5h8v)W>w-_ZUHd2Vi`0X@ z)0iNotNSH-tgOn}jjR!0TD6%75Ii!IVqfV~rApQG>gYV9a%kmBQ?g=Q`9$>$`O4A} z;;ph-MfGH;2~!oGu0*TN@`G1 z=RB8;l^$KSo|q^aYgT|&FzF@Fl%E@3%;Ol6QS-_q#0E0w;b{ph}rlBiTppGj-klU2*{ zQ{vfXO;`+na>)kerPj~6I~5(x_C_mtPeZx#ob2zq1EMj~o@x=XQj%NI1a1=JrT0^A ziH;TZ#cmhw&Cd*%2%K}00zWaYGWvH}&{>8F?$fD#8c(M)#4ClY~)zmFak!IG{;n@VLUI3fuM!ml-<@QF%RF=2m&_k1Xh|e(1s9f&$Xu2FpkS`)6l+JubEAOOra5GY zXWL0Y{djf(1!;>pv!FTkVk=QcJ3>7dV-`%tZ@XeTG_z4Kq2K`%LK-{BKfWygiT03wn zuSb0WB+}NaBEjd!5XC2+Z-iQo@S1~qq!p0Uu1fJWsMCF?@CWSS6fRf;-?IJ6#2~CC z&6F0kEVVLyhj-`gGG@RbrWJ;GI9%1JkB1{gFLl%5L~^926$W^t)FCjPDpY=j8)F|R zB=FOS5%R^z%pgzcZe;(i9byp4b{{UxLtZ#J@E@Y9Y+p0;QFzH!$_Kq)!Z$_W{kiqV zF?gm?tABtesVsFbac9wCts0+12sAF(6HujkgteqDR+3m%EUZ|96@*vF+A&k$FUdR1 zuxpBV5oX+aSGWVqbh6+}F{SNi`T{0h@{<~d>5I#a*O>I2dj^D=Z#bzBrQ4L@xNMZ~UM`jNiMu@KHJ9W=QE{X{4zrs90ho(w64EwDP7K8&9 zsuBF|y*GAY72|5LilJ(3#bpJgsFUb0-NeOS44hr}wt zLo62c?JO0Z7KUs&BN)#Ar>ah?EQV~G}5tMGFQBWFGI)=%;XYbk5-QB^^-5_Ci z7bk^s*e`4zlwtbzp-2d4>wI^l<~Y> zyJ@X#VC4|y0YhaLtMpBsnzzcB2Bq|`!n;nuJ0RaxqogOv##-~CYmyp^H#R^VWg1_) zLHJqUyyvgLpp8#A@<+8z@3NnDzLp`VJ5HO?>oBFwG5k$0c}*D6ml^EBqj#CpzUJrqS|Pg7S1E@g(u zhrDU@O0mXOM6Kp0u9`%?#5!qtT!pKs(?y%FpaSH3O!25E0!PE!N)!-?V1* zGn}vbGe%rCPqhh~vv*K|!)?s)l(pk$B#lbYgsIUXq7A^*z#RT-aHiK!ZV%CK?IJb= zVeR%Yec`i~1j`7f}2bIm2qIro}Y3Zaeg{W`iMwL z+9qy;W=D+(@sKHSF@H0>(dz+s4t#a3C+h(TvOC7GApWKrb31fNv&ys(dMMp(sD|F~ z!u09T7uu-yC_Dw)sd0jrVun;~cwI@m;x4>r4(YX3UFh7mTMP0sh?EwD(>W>?5@3wLVM}wPD2$`X1_RJ>NJWTB39`I0|z_ zRNauEm2J|J1!E}L>eu{@;4IZnUO{EGVwkHhIxJtwd7j%RrE)gxrikycp#+KWBuf}s z#&2R;0%mbJj9#x4b|t-UtsgUO!;mt?bqcXj#Fb?k{+7fBBJ zl3FHC2iVGAq8*iM6gk4!q6FCq!S37ysS|(iZbvbLSDp|etmN87uIKM&U-ZAr-O3_) z1+X2Mj%&9vC(zHW(9%xOigojiGd1q=K0T-&E40HY4DU1bR%^hyqDV2 znh3@+&3Y@IG*u&^f>QnA4Ut@ljFO;&3`?4;HAL;I=yb}3olH;-kc1l!uJ#Vaxy|s^hPpsUi zW_Aj))~=)@+&L?4shgNWRkOjNb3~G-Q@3yDUem5``AeUue$(^;`lE_!D8N2d)YRT9 z8EN>Q|x!>*Ms-$-I&g_5;4^Z@RQ zmF|=;tf?wL!;HQ-@n;>Wo5|g)UD!E?CQ)B)dk=|Jt}X6ZSV3y)NP0agf=zf)xY*R&(m=FtBu6%^A#d-c##0 zYziZx$_;ygKzAJ*^1hZZc>rr}>@hpV>}6seKQO+ZjwiR=tGBRo}- z3XX31D||$3^4!ahfmAM8oOW1ZTf_WAYEV6>TS&-|G}ibM^t^4>62e{jVM`NW3%8q& z0mV43;TF(e9;{jpbM6G^ke9*K3NeOuau>qy5u!+BO@g$tfD3*p#}VWyF% zD?4h(lF4FjwIjKZySXZhyq$Ky+(dSPhK*;)^RbQk=g99eif$b8bl(TfB;-SuuWBNB zOv-NgAM&i&2C0#}GVHk6kGy${S#X)W!!wGvot*C?WDk((cI%nb$UVyOH8B06=#kY* z=W#Tad-On>li7{-4)QR@(Q2?x`ZC(?vgukbZO%TLT1tJCc|$3u_N9!IOQ?d_Ea@g{ zY8X#+i|V+AAiz<+d-`xcQ-)kr?7bA0T`Hr8lB<|mGntbq{AOLpe!=dy6tF9($)^3R z@5ExmZ59qwq5H-BT$-a@%&gq|T)mPxJu^z_z^K|uliM@4#C(!mrgw*ViU7L%7H`2a zTASwruAXM=B4f{{%Ip9}26dhsQ*9QG6Yi-xCD_S!wT$O?Q7)R2_)Ece1`ID7{YNL~ z)|PzNv~ynXWvK=^5g8v9huBp+y=8}3e`C5Nl`OlkaUwfr(3b!4Pcrs;PT@w;NiIg# zAWd&q#h6ANls&HAE*%uytinh}S=HuN$t+5o@wYe?#2aix`Dl@Dvk+S%*CY#Qd)KNm z`Q{9hB9Aw`a4 zy~-kRsamR}F@KnMD$wLQW1SoWT-TqJg;svmK9T;fWP)a__|cwP)eKQ@hLd8xkh6m- zTOde}u@#@@-3b*40dBhA5xxWa&W0zP8djJ~3u^(R$?g?Bn?6ZeU^VDl`T3U9x>)8G z^JL8*^JqS4HajNLb7_Cfkqj;~nMZR~>Lgj$;O?tKbumrPXw)D8@=k{SSLFgG8 zBy{E%`|)^JxRwnkIPvT@muBWLvwOvK`V@MNq}Q5f8RYG^h|P-`V$*pe8woSo80HY@ zdLLZ|s#}|=X(+m;E>eBXlPIyu4e9ITkh~NZpShul zGoCxwrHNU>>RI7T>tgsz7Fz>qZ}My`Wz}!!Uri0xRitLaCkqk(K|jO9Lb+&H8e~QB zYA>BJZ?V!}BTPFa4^{!mq0$gV?)HVEPtxxp0|Jwn>*vgi5H8vvWe@U7|MOR{J643! z@)(!JbnEJ-DlXTO)KE#^YZBC9NXrdZYMSwdx~EoRMXlzWCAx4#J;k&nw_Z6*e=sdg zK3kiU^h!EY^>^E8(SRZ#1QP6(g1$d^Ges>M2yBqw;!@AJ#Zj(Eqb*@3i~d&qZTrfd zZ1HGe(H@x!o6=#Op{W7Ez19uZEw1p;oUZOD+^4!;6`dQb7&Wz|jg{Rr%uLcru4(sd zql?I@q>vE7TDh<9Iqnt7!VQ`1ErOFSRSY#Zb44ljI`g=QTy?*DDTibEUq=aTpJ`j$ zGI*td+v1KR=#-7h@*^5c-S2|Gs-~KpoX3i$D*En5S)Iv}6elt3`?rONwrP?=X7Il# zp86WO25G^D5cYWCMHd|-jkkCOL{+j}#mTK(QS-UE%_~p_dS=6q%8jIux|5YR@thhy zno==jjl--dyk(h#8OgO8o3QO^;rc+FFzKM?0=|4(qG~arIJjM&1(a+)Be8-g_ZvbJ zQRjs4#L&oc20NFuLG-%Cgb{PcH_thL zAD5eJ^u+&8o1wcvXiDN~a)HckYnAQb+F+IJ7x;VgVM!42iu(g$D0INdz}pNDEFWUe zB;61dwag$ybJ&gV2yB|5{tDqFOswq&CgILk(|{cnv#a8Oxft^jH7tM6>P5)H8_g7GGy6~D z9w?4Btv(vcf_~L*gi3Hbt0zPJa+75QYAqNsS)hwKorZ1j;@u_MH*jv!7&RAeiyl-w zBux*Fka>~{H!H+s(gpXs0wLnzbc)MGEVe6InPgXCS<_eYGPbT^lsuK%RCgG83t4J9 zkPEnRRwi<=Ji(HRbQB0p&WJS!r5{21cYA1w$i>97>Sf4_Xqf^}o*3*Zy-0T0%oeX8 zZ~Je4PjbG~1MUX0$TopBg?vG9tqDcsM|{GgKTQtX=PZtbt-LL*YD<4V=J{KXRbbz%HMTMJB3=DNK!RWW1^E4GpMVBeoG4|zc&|(4p45p-{g-_nw;Ko zZcv!E5VM7X7R+k=#5S{H>aVjsC`GjgSx1TG)!nRQ%%ds+^L|;lIgeSCuQhIBe94yR zo-;JN@--5Mf8t`57yU`}7`cI76trJDmiBS8pD3M1c0a<$(Z)D^<$zR{Z8bBVx{NPx zWD4dpN9zmtDDtn`1m11p#OiQf90sYf?j(?Sml0*Z$poFp2k^0quX9)e5DTa?HXMqN@hX*Oz~l| zu;#OP0;sn>6J=v;EyF@`sl+4|SoVD}?ByTH`l(yUdz<<|eUP^_p-P#{jf^tOu5p$H zp(P=#x0~k)o0v!45AaSfOwP;LXXvo)Z-$Y!n@4Xrr`*E0T-UBxhy1M3%H6=}R*@_O zEw${EI+e~e`AMel!y9Ia-e$41hlC@k1a*mEI3ZFwk6#^?BBSzrgSLv_axVM46(+F@ z-8*=t%n#0v>_L+OV0nm+MIMroqI+5g>ZE6fqU=8>$`M+5fD&Cb4j4$N! zy|489Wt+36YD*-esgu=9#X$UH#bMEss7W$+L2=+;v6gqh=cwQ>cb>a}_YXVRc`bVp zv&=4x{({co`ZoBPPSE*v4n}X%P|Y0uFyX3otS+;%zWVBRo~-~Rn#cj^Gm$m$xHwMG{>{Zn;{w4wT$Wg%gE)fE#D_1tVSbQNQb#k$*jzUsZT6Ea;i&(#Z3{8cjLs(3HO zX1QA=PFgK_9w-*i5E*>%f)YWjJCO@*;W*U4YjC6iwRh`g!Ohjj zYh3VWsv50iRFN5NDJ}YI^fjgJVd}>kqB4$Z+H?zdK345g-;H}J|D&`HXiD|<&*B@)~qkgXKX?y~^RO{Z14^=p+)!=J+`C--{Qy zCvv_CCOB_mzTn)n>!!6Z>1?}tV~0HzQ!8y1K~2?!<}}>ps-#9)1!P`OzpQAvVWh^I z*QJwNT{FgO0?hDEALUcS>9{yKQ#UuFTk=kIJK&>ehg`quFTYO`@9xVP6nt~uz--{s z?T*oknU7hAx_6_{RJ)G9sLxP&o2-(I>u6buUR06Zs6-zq{8~R7vo8;>po=MW)cw|#5U>A z0?P0a%}H>t|3&2iqOUh!)&?zf%N0jLKOG+N&%hsT?sAqRb6AdDO9(JU(LPA%A--ze zMR<){*Yp)wS$@BP2vinQYySX8^A=RY;KKBD%Xv_~gJ$}N_)jcTzmup7AJFWCy!{U; z6QGg*{7@KnLy4Y{Ryj`O7m-GnFJvD;I++(cSx^8ayxj>(AevfEK^fSGO(jrXxw`%f z#4HS~B|?q4qt?IBg>(l?BD{1*qR|K!#-`~W!GqyC^)r%8CDts zrrk7;B8nZejLt|`tevh5xf))q#v|YT`3jJ{${Q=il9T@P?Z_BMZ(a+zdO4mwf&7+n zuA_{0oxHPcCQS?OZ*HTdV8=FQ(q@+(uX{rsDS&GLsv+0GI)S=3jbcutZc9FBXr_9` z+|qugE)U=I&nOD_&^wbiE&!6ceDKaR$N$l{IX$|2)|d7TeoPJiDEk3fpz~aU`vKi=-dcM@PG_rQNWJUfGYqNM^_C1S_Xy)!z zqf9sI8zYQLb81`LsSnIici4&1Lz(K7%zwR+(LBej#<;^~M+?evp)^Q;QVa zYt&DL(P6>Las0lm1F}Utd+!NidydQvq2k$L(8VU8p>l^~$dMw>%^w8$%Gm*gY%E$0nR_HIkt_ALi#rZ1P?U3o zia30pTQT38yVdaw`xxtq?K#E*2AcA>wZ3);GBhVu@5e7{_)_%}1=YzcNyVi#3r*>J zldBYl{45Xi0v$T_nxR~imzbqJs!G^)Q9VboHB_Z=mR{VtMd~Nc^y(Ic3ZA>=@ZR#` z9Ivnm>^j?*^b?H76nZPBu?AY%Y+t_zXKXlLTZEckmtK9icue)JD%GCXRVn83%!{V0 z#>iBn!BzJsah?{@v~A<5&Z#m(v*l0awOi*&zDr(sDMaH%E8UWK4g65Y>uh(<4!d!5 zh#5wi*&5M`BGxzkYWje4ZqPMcsnFE9)-NxTSJ&1Y*~6@|vleDnn3R@zsSf(LMqa{k zZJ>VqwrCY!gAH|&*CW(i?x z@D;-bV5(n&<~%stQ>Dx%+PY4bN+5UpwL&YrYuOzxKx#tn?Dxm!fxO;2Y!7y6_Z-}e za()K^mscoh?Ze&9<1~H7CuN`--0+8Unlqoe$;MsUpRUI)Vda_AFyb^p!9}JcIC8(dk|MP5B5aGkFn5 znf8F-8Zy@=p3{OnLwNm@Aru(hQwYJB+npm2wLH8%9wHUSw`d@9UQFXX=xD~4`jybL zoo{Mf;EnN=Dkqp8^~GcZ-wf{4ogr=g&o3v{d+t|ELu_4RBrynVZxoawZ*AC|NHPVP z(}zNy1Ebwnkjt3z&OoHS>{iO*2uNwQrGR`$7G>>hhPf%uuT{HDP=Cn)O(xO0ie5mX=u!> zj)wm_KhUB5KgilY3bv z=%%;K)w#PH{29aPS+zXIuAQr`D#p~f3uX;{Fe=R;rB?(8XyfU#{Kly!)7m^0vQ}EE zYle6{^|k#={yM5)`C|55Y9MKB&jH?f!o#lRJa06moy)B&eb+jdyQ*Mz(;f~#cXfR) z`)j&e?PPZDj&Ig^tlM#Q=KryFL~Sw5U|tP&(OhQQ`F>Ff8L0n!fBI?H5|M(w&|wPi zzwWa_E7Mb8g{-ws}f^j+j*8B3erv0qp@}M23 ztK{6FII>B>`5U!N&*Ov!&)1}~{d`|4ZCKu(3h6bbw<{oWWB58a@UrM(%ZaRT+Dkz>G!&tezk@G+~r zS6SG$M>)RaVe?D*zxgv7H_O^{-0E0Td|E{HHA&D8XUk*pq}Wf!7s4}q)_dCTTPZbCy!dh($?5kqe`+dvREe<4F!qRyM<$Y6^e!YFi(`^ zFqh}b7A|JDI23cknP+UrFrDeQp=sR{%?EI=JIYPdQR>#a25iZ)<`n(JeK8GY?XGM> z?Q?beZf*5C)wE=hWve0~w#*nN(?)vfLM4xb^3~Hsk9|S;F~MWceUftCLsy>QIA_3t z#Cgx++1fKMGqw?}T_>tLaI}t1RR>WXt<~nA#Y4^im`eA4Xh<^%vRBp`b#1#Ntq(O< zlf%p(R1ag_3_lcaBgbgJ%YFsVlPy&}R~&CGtBxv8ZMs=iw^!P*#H`FZQM=2?+V#<@(t}Aq%yruMm{*2& zwSB}%ZJXkI(0mnER_q%f_YmLq3=`iIhPtu@>vq>2&h^=eC z+Mur3-RfV*DEiW5skyP&v;MACnN?D|#Ikdj(VA>pn$%*>)Az?T7>cz!BE;Ha)%(C_ zDi6g{Upv_wX@IAPSTEY`O6I@fqa4hfc^tegf&P}61rQG$s=SHG82pXiT0Uq07Ibr= zvX_Bz$a~zy#SCVyZs%c>Qj=TQ*w=|W8pCl%w)@up#OuPxSgQ$Oz*^HsfZ(%1?+ubX zrm0Ja;x#kmVUTFmMbTHdZkac4H|aG{eqa@DCT7>*Zd^k7%zgt-Qz+>9fP0*GtMeB= zDRWu-IQ-Gn*p`U|uf+I<|G)z1RN2SAH0WqyLHA*(C$F#LDs(mDck5&5W9r7H_wf8g-}+uSW4mJw z8g2^vQsn^u4RANYqTqEjdFisd+@<6u!u_FOvOW6w z{&Mo9GE;9aa<_1Pw>{F3x39wwF=ceL#vzK7_f0v7AmLa28l-;P+v*p{$*|)V9rAC$ zOv4ZIQlAalXmX;5o03CTuE~}{P*Z6r=&#)f7+`%ntf z(9d>HP}P!I4coL<|Nojl&GepG?f*!h&G_l#pgzV(@d!~Yqz|nzNEXrOtUkqmK`Xau zV&_ut;a?9-6QR*F`!)!hN-uO{1m6onIvxr#bF16N@{Ji|n(cTGQW6^cc=icpwd1(? z+wfJxoaV56QwjTv|0UfM)(;e z<&|B%hoqQNeD@>?BmZ3oPF$Cp)G8OXr*|}U2nSN8)SnleN?2E;;$PYpP?f^F6Xt80 z&VB9Qp+h*sKC@NN*)op^xi71H&9FF_>0>{c{|{rz^4TmI?KXbx{&gx=WlV3HGP!g? zSCwK-zNBNGd~VKnDQS!ENmQO8Fayb@d35U16VJb4qlJ6=%Pi*Uq@Id@E}mJsEes|B{Z4`qDc=yR_tB*EaS3{E+ru zRe4TJ%SGjs^!bg?<(8clb$?|6@eS1%Bv+y@T4dsa&@tq=7xyKPO%T<#WN+#i$8eH<*aV`QdwL8PO9-96^;_~Mwr6Wk=Tx-dG;7mt zH1brUoj!FY#kY8%xpz<2wOd3rKkCfHD84nxm)aUTr2C<@{HNE&^CsL)`SJrmL{4M)I^F!mewAhBX`ky;`Yk%s-#!s=HSHFvn zFe{b!La~Nq`FVd=&1vbrO=pzrMZY~FrDTC{%`YL7H^ZLAO=Xjok20T!wo+w zOg&TTjK!6m+iE2HY}%C8``OZFv!x?#LPMj8wWFf8(~uo^+RD(`M9(+Jsz*bk46~GS z|Ct(^?B7j2ihm_rJp!a#gzPncg+aXY_6qKN&gA8v7(%8Knsamo`f8cskSE5mFn>4= zL(h9LV8Oi2#P$)egw$`{+i(+-iaVC!L@|RcHTc~T9~xH^)&@_nRRH7tdaESBPp=Ro z0{(HU*QP>qoIMryp>Hcik`3^$rB!?v#0_mcBEa1*8$77P|F4iXbQ~X(_j_Ogo}0<; zeTRR$Yg*SyLQ)c`-9Q+OIp5+8q(x3>s0YUe+tk{CO@61VmJ#t@smAG0tlMGDV|b%; zvZ5S*y>h?!IO)LBQQj~zj5Z$r3{EIJcHlR-xR5{O1iI$^-H(9&nVjA%5ZX1PYYRA- zL}~vA{2gTr9JwrjdzU~Yc;GSj3!_+gKCpqWAr^~%L`d`h{qtcLTB@(k^8a2M-a8EPnrMJWu}53wfanR=fy z*_j?)H<-4mL+vLReMx~WU5vySO=Bqicf`Hg)AXj`S=JzWmfvMlDt(d{NtZ$ESwBk^ zNkco2NWapits)4EsGZ9maR}7P%6A8D^7LgvgO|C#3+MHJx36Uo6o$n-cFgx_~|lMx_~in)j@%f?qw6r zuA=2v?jF7?8&}#nFe;r`!0sO-nV0*%CtvKA!Rg#3@=djCixx&Dwl(_-(qop@pW)|6 zU~6J|xS%1+F)r87Y2EH%TgV^r#va;^2WWJ+Q|Q@`lR_Ivd)!v2Vm>JfoBNNI`Z zm-w*_DBeF_`5F@E#QHUgayH4uN#e?yzj{2sh0$!&$~r}lL>(S_sets~eTfig2vnCu$9%nx6=h{K$sM{G(pQ zngzVg>$fN-a(Y~X#YfpwS3C2=nHe?@Sb6kzRMim8SXAf>Ew7Z~#8r(WiV53m>&j(C5zDN9C0BzGGa?T3W9h9zv=^lA;5V*Mkymk_ zxa<+@73K=DKzr()XpGYp>USNGWU) zY1Su>Z^Woj+xc~K71a?_trpp65Z3G0=31=HuYpS+q z)E-pThCi|9p$oC^LY{MRm(G&1&of0 zXM^qa3rkk?U#vNuKc(lp^_NUyiO9Swvi%t-BVf(1*^O#~+6fbkj^DzK z;BOAb;k^l)+D&*hK~-}G|BLWlYeOgkNW%4mJK!YhSRfV@VsOAk;*xzDFrHYOnhIWq zHby=n;-Mj*6VNg^%n1kWhc7+M!ssB|8(*=Lq0JYtSRxdE>^Sx}v}Yh3R|t{Ys&UsL zUG*J&DAcD3#2vLo)I?!3LI!l+$;c?9LIK68qII;*NY@VXMMbm(qJkC&fqOhU_KWu|Kw z2kC6N4s%l6%W=RKi&EhV++4x8iX7ZEeoo#byo!5zM=T+Yvp&2Lh-PiwR0?`A!klc0 zOKDq1-&ZU$AGy?1(P)}`ayKfagIbi%9RxV3+%4^?5g+9|G_Y`R(>RjD^zFg!+Y)E$?eL*Li5vmgv#B`3be`YBN5 z^KsLpe{x>oM#Z$`LVTlea`;?A9dGHT6@Zn!%E=KlF{a#r${kwoUx+L3Z)P8#TCt-s zU{F!WD7su$d9?WLExn5Q_(mVZpMETyXoMV$J#)Eoq&F%rYJ(sS4x&716dI8P-zNrRs%vk7Ap zri<*op8)fD3!MDH)yy*^f->`P@VTP$wF8ky*OnjY%iVvtVsE#gt*zo$2epQZlC`3A zn<`zK(#6{1z4(8(jY<*H$0|Bniv0b%Q_inD$0)kjb{UFWnU)c5wiB12_k zb2puf&aVFf1Y;K0Y%IBmd2GIuy$IW(CnQbBG1Qa8Jn?kdMDMc%vEYu=UZ8`WeQj#l z?lW7?yehkMqVI5XdCAco{ecy;4lQW)t}qQ1SIht0!>$$PyI6Ou%8oNxe5&Y2o%~8eQ zF+kmftV(Qv4C(+^&K4;QgQw&4cvv|oJj@=l>vvo zgOiICw%3u1b+c6QZg|BT!wNbD!}%<4&rNKvONLWtyH#!kev{Bhy!WEj3H4JQ|1wm^874>tuA2^3<%J~bjsL{!} z;9ttuuo0qyg7R*JT*$8-_d*bXh;iLJn7nV5^SMl{ZSeAxY%a^g>x2#wL>_jFs?Qq_f(LgcgKhE(P%u#ydD-vC-!1xY2KFEc635qwVn>K#cG)0B>BkSBHBwNOlj zy69{U=A3HvkwWY`#moKMurhgn+aBx}8MY<^mnwDFdEth{&&4VD^`bgPAl@p>16~mp z3zn7o6WVzC>w!aV7(dIKK3hz+d2LG! zcDgalnt`p^)X+fS zD_7xl9qeTtcPu6n=+`b?N3UpZKQ#pnH9`khqwm(I^e)GQ)cQ9kW16bRR+VA@XE~rQ z#KI=LU>N($u$X!q2WdO;hj4$@;l&wvvjWcSCWK1c5_$+PMR!8S0!@5{*8o_-+2RNg zeHr~1FIHaZYC1U??b_jVz!}YJ?dowxzip0f+K1WEu;0SQ9H?8N5@4OHY5aHC2Fn5J za-6I2BmRH5cD-%U8GMrZVdfV6H-#}_7r`h^4mkm23%Ooa(1qLJ$OeBg#TP~@MFUkQ z=2t%JyD;p74(gfL?T4=FENCQSrnZsH4Va2%k+Kgn+Mwqe8T8j0bT{xrtuwl5NoPS$6moXSPvEsrOf!qgO&l&keRzUOlAlY(;Mv=GOl~ zD+Z>THlTm@QWY_n?9Ol8YnTUZ|B%;WbDP#+d<0&mTOG2T5U0R<6#}** zwc|-}7AJWmmo%ed`MEmyeZ}3Qx8R#7{lHWBSmo~aAMg?MjM{(U!{`J0KKLL8Eg6PS zV7D__@OhjIaXx$vKea3n{)m5-V?&xpxR|6SxdT063rM@c0k2mi7V(gSp411Ozg7a< zVHce3ga3yW9QgoG!%ZHT43Ec=+U?;PxDT}};RX18x}UHO{_)&ap2I=FY>)yc z0ZpX`U=ZA%-3(WOZJ0sa&SbBF*TD{n z=in@u8cK(&;G14L_$kTVK}~WZ39ig0`XTDm1;i+Xd8mh&id6PJBo-hUtxJgvB&K=; zu?q3mIuj2f>qXhb=g1a%1~dnW0+vIYkdzY2e>uN5OAU1*m5E8vJA@Lt4h}>BuOe84 zpd6&|9i;TqM-a=Hd@2#-)7uW#f>wHJ?;UWE_P1pfc%Rm6jUY~>rE0bjooN$=GGZ$A zG_8urp$Z8Y;(lsk@hfN?byn6tP$cDa!gEMOVTL?}{-xM>1;HWY&i{N3Ir`#ZV3^x@ z(gnE1oqd1-eCMEhj)IHWH=7rMLF~Y)ZD290R-FMVSu+HE;CUv4I!c_x_=7)4+`>Q? zM-zqg>zRDwefs7E4CGGJhe#j=^_R+|9REB3K|sF07{Udq6F>^bg8Ks=V4o~95tp(~W&9-K zn5W}^5ic`Nhiruc==_cULd~>T2N}G8I^}#K0i|p^c9x(~(1$h>4$1d*A%y3$goby( zQmKPE5ZEsMqC^2?(J|f!;IL3n@dYOcDsYit7(cjZ9N5Gi%|H|9amwR`L>zl!@JHfn zX3ECnP!7G;K?7Z(K0CJt|5^X-Xam7kM;ly3h|oH8?juyF@76yiRIBn#!GxQN=L!li zQ=ZRT0K`lGC077)Ng-AW+!Q@2%mu@R)6(C7J^Z!ttBCg8=->vTiM?iH6||H&&Y=pD z(~h3~AD(H|9ns+1Eu#Z-@S|pzjzYo&BfIV$VY7b7m_jJmzL8r9wVI{e5W+i^Khg&H zDAF;H0jdmJa2EI=@lG!XbA_Md4uIGAt-*!FMDF~JEaDYbkwY7lOt+pHhxcrx92Vl! z>&y1fz|(7s+e`6{)wtSU_=i==hEl>}vzzQNA>KHNQ%TV4j*;FHUT9#1P z%9&}Oz(tZ9aTy?2v^sb#aT{r|&zHf!4; zd`e?l?L54&?x~)SKVDNTeTn~F^@d$fh&D%&ya*bD5zQmK)V|KI1$L>fq>+HL@{YI( zV4#E>^Z`65c(*Zy7{>K?xInzdOgS|XXY8MT(1<(Ilh)^ed)j%dRg9m~9#*pszqJL@ zwd2u^ZPG>frn-BqC-@)LH(@d%%5u8$IYDde%wGmf*R4vM1;8q9Yzy#N_A+P?M2jwN z3HC!8=w@2&$jYyDz#fDYw~AU?QGBHZW>_VRB!ydfsC zMotvt0*|>Ln1jnW^s`5cBMyIPnS|30F0i)X&iD0ex8lckr;0oAp6#ERDm>ES2gTse zHxN*l3CnAm_jwRFmQA}82*32bv8w>I+97B!@J6g}cqx8bk0)~~KC#1zcp7hLnUC6qe^vi+ z?|DLU_3Yi_2}ey!V_pJ&+WA32K!?0$<3i9^G}Un`_<%F*!VK!Ta>nsSN^eEvupgxm zHM6^(VuQNYw1E7&Qeep>527PfEHV!>f&Y=5jd?<~CwpN};un#p;aZE@kWY9`#t-Bk zff@e@ISpWf-ypppZ{tp+mRN0Hh3KK<=VwtIFlom+$uBT>hN8(0*o>~DwQodHVawS+-0JcqP`whi%!1WY$|A!tym_=4;JM|lVm zK=dJBLY#>j>{DbO@mHY*nFZx!%tNL@r{W!uNw7z7F)|g_Z~O1AChFW+lMtI98I}Dij+c& zZ@*9SqD`%XNY2z_h94vwDp|gRG>7WP9YdNyor|DIQz%a`b)*TD{sInZ0fnBvisV2^ zh|3{)QS5@Ak>bb~JV!`{WW@d;iA>&bstLZui9b{VA7`KLUkx|2L)wnQ64p>{Im~5w z>3_jAX0t3GhM224t6?&ujZ_EI7{2I_FpGXH|0Qgp`=)8&AzFLvNBBC;DM$nVq@q1r zNj8*&_D4xuDAP|yzyYG^2j|0X!oc3E@KOQTN`fcw`)d5)vAmbMo6sNLQt3|UCpU`i z1W({_;KT3?_6hVVc)|Y}F6)OX5-tq8YqzfX88j%02q;Q7f=CF0D6L2%4Yz0R^vvz< zf=f3dBD!|&+MR26ck6!p54`96a?bNU)bPS(fG;^G{TGl)cqCKO&zz_J*v0zTCYQ(-N9KGVhj>{ar{7pB`sgr$dO5o6>xAb2*G|3Se%Atwd$UF`z z(gIUBQXyUqb4-Hrf>zE6zD+vG`AVHgm;o#xX<@^Gjrfb@`2Y{gbiN1-AqS2IaNG=w z_fF$D=q?QW!h(9h!xSDK~UIU^J+i6+i;*+otc$5Fbq>H)_~ zGQ7ZsQz!~apYh);R{Rj>GOs`MI52_Su{<6K!~31@19Vh>#F4$H!LsK!_IAt9?HAZB z=8{ecTWNf1En{m8D|H@hgAS5hWScdA;TPHc>alDK`?xZqY6bhIoRv>Za9JHXoBu$3KJ z->CItN1FBGr|i{65%!gxquTI# zU@o7<>7|%1zj5B-i3h*4=l49@^@KgOt9{#X_HP|PyMpz+Ew>(Jy>6MHNn^cl>=RF8 zeQrp?ma!+B&$8^V99Y<(bL(4H@phy66|1DLU3Gy~+PzI^WR-OcB9~cME0b}DWo%kjzLPar z|6ofI>!oSzh8ye!I_KDb*#)ZQA>C}f^xCpp>>I)i7cb6YQn?>zDG#pOiLto*f_uwY zg@0zY2C&u)^_YWMt9Q^(u*gb47&EgP@y;;6x*=e>#RO=GVeouMryTXzjJ2H5aRd=|q=O`=fKtYR?6|h%l z(y~_Uc2H6*&%tKFCYIZF7r2Mz-y1Cp}S#MR_U@oq04Ng zQwPN7{B^ViUtjb0-UjSRZNd&2R#$taJ0BZXm)o=wZL52%e}X2`N@NV=3+*kLj#%kh zU<4A!2(PY!KQZ1E2;eSeQ+fuR$4ZYs1J7em3#Fj5?8nR6Ad<7!X%7?uSdO$|D5HK) z2WHQBGGIk_GnaNj=vpSDF%$ibxnDmQ*~S_p9YQv<5{WisCTkaG6Z|*Zsp>Y&VM_`o zzyX}$X>Xt(oVs`hw43uhG!bF~#mi)nKk&lo6!#ZMJ8VRE1ExP4(ak{1_C|Ch(Az0M znt(xT9g+nc(1jv1ffJG!@G0OT{sQI$KiJ#hDA1`Y93BqF<)hFEke0@QNKw0!ir5z%P+m4Pv+pzNamKx5Awg zJJ=1b!_z zaLXavgSm(YHDebOeoWSHqhKAmq#c7}h@JI3cnT4!se&%y$Hjh-4o|?+phD~gYZbH{ zqbj~Y!!W13T<$+;=SGSGz&OC?0{AE}F>B>qBCI5dY>h}LpnQoETo+1dD;KCBaw?vKf#Casr_@{kqYk45a@`U?9GC>GF@vCv_d*) z7C^sC`c+cyX>qrZ&ee*VkzL#hVJG7+?kYh~c|CV7zh{dNcO0*JgAn{et%#L?kBQGA z6T!2%VA=2B5H{a=5@!K;$G@-bkq*d@0gY!R|I*nlSfnOI*?#j^{(1R`XV*GsShFLbs8 zGtj!dlcCv`mL1{Tn`Zm&tz5mavl-(i8={PRxK6rm#dYw#b{hXWctBkP`-5iXIeIb3 zRxB*r0&bMCa~FV#lDgD(Fh*3m<{vOZkQ1y2m+_`~T?UOf2TlpWMAIHUmCf zq-jl8F*nRgHc{ZW`iq7W;NRwF^7o+5_>1=oEH+Gn%D@=i1X?$^NHb#VE^wUk^JXPD zTrNuW1b#^E)_}klQBQC-@RiXOVR~Skd`KKN<{buabp= z<69n6n}BOg8^PDWt_EFQ0-!TrEM)_1J`pHW0Ws%*Qn`E38z5E8_L2ju z`902CfK^1xE*I|Hp@-XO;I%=o_MM<~duzjeFl^guT_8BAhbaYtYn{zxE6~_>28;mU z=E2%+z$UA@{!SZUaw@)GdWj)_444`oEqUSOuw-U|dq3vM}A0;9>~p%U=( zzMQ^;;I=(>paO@7K>EiroXO;}-Txssk3F91ZSe&wo zv)`zV`Hgcx^C761V^)mx%H#+|&z(t*l%nrD&fi(yv2!|qLPdFR5-+1NptX`}t@^{P zq^4C}Qt3!ewN}U_9@S(c2Z{LF)r^z)K;4RR1O7kSf-QC!LbugdNMFWq$Gzwe%O_&>3~g=`_6Kug>IW2I%~|sl`M|mv9D-!A4|olSPjEUM zkHSGf{hrIb>GX>`+$n(J)XgRzF>0H8$XLeT#uvnK=3M1CBAmHZFb?0t+z%JvzN}?* zF}97>S_WW?*tWT@sFiI_6`}Juc58Hqf@2MyjEn(Rc)o`L;FRM(&}XpX&ui3Lj(Wg{ zJjChh5|ZAWLrs7G*95N`rx6P|uNA>~J1~mB244)!g9fo)Ac^)0^8(1NFVKEq-{wwq zIq)sj1sMQWu8Bds!P=mka6h=s^DgWOzIS{F^>TxDpCN^?Zu<&y3|!kOBVah8@hbiU zb}=l)ap+%pAwCJZ!b30>)WiLSIY3rg1lk3uwyr~0K)lThko^#I{Z1qXDvtR8Uw|@# zn&C7k$nz9*7jkqO1r{eL^eV1K=3=n4C@6v2k+DSV6XAjG6>^fcc>0* zEJovcqejf7PKdgr7fZX5y(qLvgCwH!*N4Clkf9hAT!*X=DuPGCS3L(HIh^h^8?uG& z4&g+ka9!U|{Dh#ty#!Ab%xE}-UE(uzK3DIToEHlmY!nyP&()4Trqzlo~APf#wt(39f+KyNq&b7crND8^$n=HBVp6*aq6fNfHhTVA72lynV%augBb zx9Al4L?Q}lkX{0YA)%6{8VdeLTwVMR%n$|VjDnp6J;`sOv;6t1#SojK0uMs7iA$a| z?sj~hQ!+OWP23^Gu9&Pn|HJZ)zAYN`z5b46ILgtf)CP2#cDDF`NSj)XvydRwG)_2t zMnFn9^9P7r;wYLq#U&tm0JG zM~EXMlBYn6C4td*xYvbm0+YFPewt?jcQ!fT#QKktFSe7|@{UPej_9GbNliWI+7?IC zLgaeW8s!C~!n#bDhm5M9h5iE@OkY@s;ZVb_DmL^;S64I~;%VHnDxsB1c%7B|PRQUb0k^hukpkGau(KvP6P z3HL_*yUZzE*fb%D&0VUS8&wb9Rm}|`z;fvskDuTeVYbr%&`mb>1);hFrEMQk`@QK6 zQlxpePCpfK9deW1fOqT|$rHoj+it*a(3zfY#ww_|)1hJoG_qBY|Cw9g_#&f&8)Y#k zxq$Bt;Zf;ei~3T)M$l94>hT0PE?Vcb2dJbL52_`S^2lCa@wSSwt;a=|Dz4Uh3BOhj zXoiGtRV<04AgelpDC3K2CIODTT{S;z8marWuZy2kXR+v8jeE->k!#IC%SvH-ZMOQ9KwbMr9LYah z2jgb`7}`wE7G5CjWc3HCoQ@aAk|suIb_MY#b7FEFevNrO`Xcs;)gEvWo5(hMM4<~g zdWWM(6wo{XibvDOcYBEf=()}3gmv`2<^;h2W4`Jg{|kdAqVs(j=dn9HI&&#|8?}Sk zS)E9}Ww{j%k&9SeS?`GicEGwPcs2V}G>NG=IRVY+ATZj)AGr?nJKTeRfo0pJq5!tK zD@Mp*?`nE0*u%bQq6)BM?m8Ym8aNXjhIxT@0UR_Fto86jNbt17FSwt(yuU#xhVaf@!Fi~nX^OxGN;R7K zl~8~(owpxy5PaiJg2td6DvkS!RYbOO-&8pf@44>_+lT<}=dAH~CHLz(H>{ESGwM5f z1sWcZjE?30^jL`abALF_g^Qu#+f;&=xUnN!;El&OPUjQYcS8s7F4nB5<1NSH1x^%> zenbYy%c!2&OD;k)Dp>>@omV&&KY`rHB=IqbAZb4qjs!)up&a;afIYGU7J1BuU%^Wp zm&5kZ`Mx?q68~y@6yL&+vyS9_;vLdA@ltrca**nv>iL1xFlr2Zn@lFl7|)0<;#tKJ zVg#|JU@N{6zm@SFGvO&FDPNGB7*sr3J+YzyO93~d&e7@L101T zkHnWKMZAj|gxW6bbKO0jD<1(h9kNMXVg{TiNf7Kp@BH#E+ z;giJXr7z$~*jYyaib0olTll{lv@JMqgMN)=JvE>kuN_Ox)m)d3Cacvn@)>bLHHF(x z*ehCSPjEyYRQ3kDFFl`k6bqH)rb|(|$e8GWJQQ47RgA3UkMqxhS=7{}H=w=5WJd+} zC;GWd#xpmVo4M4d`qAc8D#Z+F{vh|5ewWN8XBpO!odzAnQj@>)-Uau?~}l_nbXK2j8%iY~4On@tGXk_dsYzr1jWi%kj3(bdCr1wM|;nfvs!i zl>9)utl7CX=xB@Y#waAoKqdIV^_sI051|jr(SG@mv*hPefSV~e$bCsRt<6EaGbmgZk&*Z8K zqgEs{RMNXYe7KWP`aG=nRayTJF1s{ zIr1A>$av~U5w&GfhyY6+EHGto|x0Lno+92{R+Zf3r`Zz&;5jcbM-kpbq0X_Eb(6J!9 zGhB|c9yBG(NcLn?sMN~#RsED)VCRabiSMvQ#6;0E_7Lz~_@4csE?Dq|OUwV%ZaPxC-@lY;p;}vQ>SCAkh zUAWeWfAM$RJ$}Qmzqu#f5wxCr&%qn1gnn-aWIh;RHA+`uK?b#?4E?IyEbc*jg;LRB zG!JVQUPb3}jDn}gnc8vu?}()|nm-Py$X&;qg@kV0M7~BwCoCh5z-J=rLgyIhuV|P(=VW zv3!!4Sfb?_aKq*SstaGV;W{b6bn!=sB5Zs_J|2d0d>b)mz_$eWJ`_9(6*vdD8*%o*-|-IN~&aa{OF; zh#Crigw>Oqd^1o2|Kh$0DaQB??Ql3cwfT@FN7rl_CT40YwKGKBn$^F&ZWmrEm>h1z*6|8`Jy2g# z?Vf_n!}mEHhCZSfn*Nqdv(%a=i``9MG_Im8MnXD6xWiya!Gbe7A#|DlSo4`VmG@Jf zU3rK%U%97fHRY$6nPVZ>%Suyc5P_2FxOKRbh#nq?jTJC`{zYE$g56iar-{!FH=!0x z*7#CL{+j;BVp=y2OL zl|}fq<&jt+jA@=iP8H->-~4AIHT5Uy$9ROfxk5oT8aEWKAouA?O~mq)^e`?OBU|gk zMQlZP+~-4|`N@v6xTgq7!=N~Qhp%C}sJ7pt3>LQaMT>j|pL>?!M+Kuh)nE{RR@-Nq zh3C?eT#ixxjl~6_&eUiIu{|BlRQK{K8z-c$gnLS^m{$9ei8j?miA05QI58 zaCzjchTp}$yFTgjMM*nt6iOjBU=+#(7y9Y=0{-1zE6~b&)pde4jr!jHwtNINp=EFW zNpgN8lvO~u*ZZY7;**S9)^wt8wNU5>BW;{-QKiVyuCi@33*qPa%*y6m3$ zu(qwdUUNl*R8&aKYM?TS`lJe|nhSd=K36?rCd+%Pw^ja-rPnkS)kuG@)#vOKH`OUp zhY3H@y5hzN!sy4t_VNUbM?S;ICoF%r14J}iYuAFc0F#>z=>n@qoByZzS*_A|s_)gf zOMa%_tI>+5@ka>kz6Q~dkP zhA_i_znZu56RBV;-Ol4*Ic;_~uyo*J<2|i{=4cAhY@{LTEOj*PvBXQYnI1=)m5b@y zxbNlf8M7E}vYiZe#Zze&b5tQsvXCjuz972EvR}VS=*2n_%i`l~de|1~5@+Gc8)PWw zsoQ0|6WC@y0-FL#t+zBUSy9GS>OmG$wN=%_Y8S6oUS?e-4l5ej|Q2Kxagr{Nx*bACv|9~B|chXLfke@gr0&Sra!>J3_-XzF(O>Z2S@}XK+@3O%{}m?J z2zeQBLFis`H@tc!PWZz!-ELrm&{O*w)CoFLAF6hwB6Nq8U&x#Cf0e(H6@u4_5aM4< zCZA1^zoHgb&%ZzL)Sts)E2`71Z# z&k?EHS*!>dV=qIlz=(ye(u+cM!<03`dU?2lD;y#4lOGTiqEBUd{s0G(R`G|`{wrC< zi`n{FJfG^!J1l%lP0Y*{93;0U`|-UAeaua&5&tVRkerNtSs92cu_I^$NrD;)R4@ zbH-OeIv-qjhj)>;Iz~aoP*X!k6T69PEA8=cT<&%bJ%Yv9Uq)6SpH2TLFKP~HsuX?d zX6ZipA(e!8Kt4eUBe?XDB7yBK*(0A@b3!bWJ}A8*+A7(;<$!RN7|vh{=859h)$yc) z(=ox+aDH6KaiW4cvEnE8pL4sNL}_@H{Rj9l+GqTx)R{J@RSLS{qvVNPpx02ZWY=|} z@LuUQ&0j2!F6+4x(;^$zd|A#fptfl-brBsxyk91`mmgJlP_pJY-hWFLr^s4U-l7|N6S*B@qjN+z2RR6P;hHSQ^~6AtO+ zxgG+MHaC3+f3w;>DS|q!=v*C6`pR5FM&K5)b_Ipa5gc&qMWoavhal)XzDIvt@wOXN z*2vFwt`?n_J#Jq?Jd%00CU8$n$23o2SjE?^XR0=fI_mkw%|g)p$L2$VB!fI{JKs?^ zA@MaOQZI@AMto632Oq~bNjI+8f?g6ix-}uIc^4fLp>0H>eu?7m{y@b|d3*0ZQLt=( zH%P3PP3YuuBPIW|k6}27yIRDR&qS=IKZ<>Xu?>lva|CnEWLhTgsbNQAJ(aBGL=O;q zRsO*ue1YucieOYN-sGl6#_)GIWI+|g1)W~eHF#K&AQujd5pI_?Y%}AhrLTG=;1S90 zuKV;hG1;-ak|9cNg^SJ!?VFgJNAO=X6sL{n?J%!ROr>n~yQ8ZKN;5Y&8GElNSuqFA zk_g;L_=JGxPy~6AF~(CCwCujR+B~w{D7j&5swkqq8*(dG!~MDkRnu6>+RatBs&A_Q zsctX%tXfrL&V8t8uT`fv$j8;mk`T!^+P2lMqDS;g!HD1#)d&ssA z-wpT}z0B9D&Z%yhvZ}KsamG>AUnrXXOpPA)(WTUSGw*4x)}F1dQE#j(Em13v)0XCn z6w7HJ)01U-`ktg!5-FoC`lkqCYJ*D!yE4J zjeBT|#X3VVO-7#42hhGl2JKOL9y3W3Pd{7rMs<lrO;Y9sWt7o|HC}W=e})x8 zPSmxss=1G~D_EV3cJ(3F!>aYFIJRxESn(H|z1b)aW#35SNOy1o66OD~U?93mxC`(K zp1|J@Z1aw%j)Kb;I}qo=y>_A4DQ=eTsqq;&OVMLsg7zX`y$9$_pt{MRBey`)04`)K zS9^g=DxWJ4fXj;A6yadn=5X0T5KeQG27n!jN#fPu-RMwZB6n`kEB-p}M(m5>=tjWJqmqgnS$ILj^rs{wLv4U&@aSZM$V6 zwM0{5;=|qQ#Q(10rt+blQ}b0p*WM`mT|QQ`GG8Ips=(~uCC-Y&snMby`N;Ttf(z2& ztKxa@MZW?eYO>(taz3$$*Sk0X^CvUya}aOrh2n4Bh2}e=quT1GktC||wnoEa)pP5+ zSi#CJ^NE@~MUe6FR+{XT;rINR(sb?jEQ$EB`t|zzqH^V}c!5A7M^=sI^+=rqqshNS z2bP!Mw*~VTuRvc?`SuL>Ax9 z{!r-`nciHV*C2H<#%C=Q_vk*ZCqyeW>Ue)avhsf9Azr0?QQ%aPCn;JUgX@H)i`~&i zUaGwi))6!1S{3T+FssHIX#eJ$e-1dX%u1sucuFjR;YFb;0%ZeJl%E1)^mF3g3+8C1Mxs1#l{dhq@(^(bO;1p@24WraWf(SlmY3z4(8q1OL5!8$6R7ru<)XRQWLR^hRO% z0Qsijas>-+t#_yZ4DHpL!K|a|r?msA!<8TF2IJSu zdudlAE2TyB9{~|!8>W-jJHa4}}eNpX4mNfWRpMw`# zBbn9! zPtiV>-s^)Po4w67p8CSMV)LEgfOF*c8o$>;!dKQ+bq|TF^?F(yWHA4r?PQ)d1<_rr zUl=%aed$Nt5MyGVR&#^Vnl(f9l^MA{UpbZeFz$xzD$5)>S7Kmi1k4m=aBRKa3Wjsu zy5>^#z*$=lVj*}!zN|5c$ri>mn3;owpXDp_H8je+ndQt3Gq$qwtBdt7SgoaiZVBsI zo|`6xotU{zMQ86?KS`nDxWp-Bd7P$*M-mTUf&XXWC!pKw3BM8aajm7Iz|*!l_&F|1 zrnl|~c!FIGlK?&5XDI=ixrpgH(7`xnbOd%+ebpBMCrW2&yMdcqPO7hilQJ_@zky*X z2NjMWJuX%H6&#G%B|ZUu_5Vkx;f8qK=da;%T}kpC_itMX&VgK|udMFydBKc&03N`n znQy^z@P#P>E@t=}^l(%aP4@tHEUDKnhKFs*R;NSXGrlTu=yOVmyc7BmH$}>Wo=2eK zTMe3k4wtwO-&{e5hgPB;*&$PTH#$dVTM0_V0VLXf%(oKe` z_@v55x(sZ4$vjOHmY(}ibrqYF!B>t#ucwTaFGUTp`=m3_u!vQnFUWI$iQp2V@jA+r zA}d_YWDtDA_7QdhrX-?<`TXa+qn1kkf1lZOp7$EqX^h|j^m%$2^|G=|dyC2}?$InH zPv%0Z3^F0ZQz0NOBoE03iPTt*q#19Cm@blHU;HZsG;EF6Zk{))a_uA@AouO2U{#2> z_*H$cM8k8lj1u2Q15Np2e_*lUlBkEK(K`sARD9HK71|evs&@#|a_1?Z^DXI@6!UnG zl8aQB#;pA_~ckCJ{Dbgp?Oe$CGe zZxG(*P4c(r|4r`m(orOl;kt)diG8rkKo6ma2(kRsambVARP8GGk#Ud4hW(FWnR;wp zx{j+nRQ|W-gaRm9sGcETxp|&4UivKU^?$6pQo5!A@^HCmou9N?`gTo-c#~v8_#9!Z$i;6j-%}9iRX{%FIscb0C5PGR z(An5Q;X;ePkxkG|UmJ!Xy)nCfF3X@lXKtxoq?>KLU)H9{GT0XWPt~AH+vK9SrlF<% zA)lZUC*6?xE1F_ni=AbqVb_EcB_4hP-W%a7uQg-?pX0g*k0ig@4IszyRDr-kYg>xn zHeGI60F5;IH?3!l)3;lX)R?ue>W`K!(0G`S6_{03#^X7Iie|lWV~^~Lwk!#ij!^r> zG>V=pI>U5=bF%;WrSba39IvHhwqU30PV5(T%kBii!EXwFw*+)m;OkB14i_%hII?Xq zlhRkWkTp))?M*3L`_&(<4h73q%Pp^RQWOOycw?$eZJ3g@QgT?UjoBn>R}F=25{TvJ z{TB18B)7e$k#mKoUHh;>UX$GoWCan==UPVg!Ppg3aram5aKpLIYs|^|;10LyZCar9 z*w!fZp61Q@XO-WrKeN9n-0BlIj*_LDEQxO9j!`pYJl*7#NV2FBH0}Gh^E1Ws= zZT7DZ7sQ!2*KNqjGA^Pm z-nd5hf<7#1lBSh@ZS`xF3*%I%QEp)#@f|0f%{u786(zE-Ezs}*;5VDuBp+POm$l!n zE5<&wKCL^&4QPH#^J11Yex_+^ertG5pR^URJfx%f?@d?f-*d(rni$57!*pAjVTq?S z?#ySa_bRus+Cw>VFZNcSAChj)N)JN#8kn$PfNu}Hu}LI7!1w$K?JJqF7`-)&NrFe3 zNNx(-9z!fm*Kv$<;3P z*MQQ}A@gMb&G$2&1&rC7_07Pw4F%d-a8_cJItWZ%y4OD+2_PRT{n0n8(>*l+-SkY&~B(Vo;l zH5Dj(ZJ#O#jfuV`zm5D1xh-WQ{XT8tKaesHL{Ny#TR4$wg)i97!uP-`@=VJw-d7~6 zc>)jS>~EaMn?@hm;7#>Z?zi|+?j_}>K(ae;k|Bt6&q~nEA@-$Ks^1WaYb%ud@CVWD z@*+GuWS4Xj*5o4>bz@^aAi*fKaG@Qw8aZVff#)DT_IRkNy~6ocTp-Yu%L5lsvjd_LbCx$RsU<$%iFc zi#K_&`R!Q$LQnD)df2uMAAwvV+FEQCzr$fop7MF@Zfm40s_t9;CMi*I#GEft6{E%? zaq|{$eTir=lhVcr|60Fa?I^gBa7por|0>#D*2LQpk|kM7fj%3BAIQ}n75sQ&#KHhl zhV8XgVy$QuF|7HR<`86Tys0*_CpNrO@#?bcCo2UNUgl|vtfDW*nR1WZZTeZV;hBGE zzDUljPf=YE>k{aSHc?*GJz0w2X^5lv2fxh6>pz!y=aJ3(L~d9ZLHgi3ZHKT}Y&@RR zOc+_vutu|C8mp#ZKzF3}gyo!8S>9wiuUS-7Z8)#mm+P%Nr%cJH*YwM8q`XmyW!VX~ ziag1^D6MRgcz*D6albItXPhvRFY<`vHBENSWMZsW98h;g^UwYk1#wZ*5&rfh|2sdaqe{|qjc zubbZL=9wO+v((=WP07!dmvq_j0rGau%vINUw+wh?z1Hc#D6fCrZc}~3{G(OA^^Eatb3(yR{iDVSo7CFt^(WF7 zsdt*=k{gsV!-=?`@W}o{Q$pGu8^IyUePR9HZ)K}mxacJSDR%&TubgjE=n!{WlH&2hUhDRziJ6L}O-cmkb zE4*LJ$8+-BUBnLnUzbUOCUE|ICbg35giP%9VMcOJb^Xf(=y@H-n0-}u+T_gJrB_;3 zv0U@_H-2VS=V%+6S$oqKSsdBR*6EEJc3bRI{V0xOWSJ(A(;IkPSpkH4Kb0AP>+Z|M zEU?(cT@cD0KYtr}k^47n=xOJC=j3%&0F&vzb@&2vs@QE4fcd42=7WHLeo`@0d4Je26M`4-@Pp-npElggDLS3+{@(2kko7>#fW`+85|z zYfiL$(M~GQY&xfYRYX|%DqU_{eS|VPbHC|_{Bx?(fXmd0YjxwLJ~409g!pRsBgH?W z@p53d)g${ z?=JeEHB#rE8)Escsn5(Z^{Qv31{eaAb&0=g56CaZbg6@6p5c88nItSgD!naA@{SZc z2(sP11XFoyTpo~j$tAWy7#;ftEbX}77{IV?>u<=ZzSV+S_Lc!nN#?A=e(NZsZu1?> zPW{!)5vF3@to6_JpEN7i?$)wY>tiZZUlrBipkj^8H=tCi7Jv746I~bXbYH|j%Fl3l zNy^E$w&~acyp(giL)SW!zN3xa^u3zi65Z%gX4CXX!~VjJ4Tmg$Z{}O7O;<7oOb&(z z>l^jmx)Wmv*5v~kLs@LA(SPu> zoWhRmjx+S+wy?I^>e(%Sv|wA0G+t?*SU92qvp(J&VDYLyoKa%DWo}r%Szl~iyEa_& zM)xgdoT@@oAHGO_P&e$%kpocb&~1sGx+|(6)s=Mk-TtQ64ek(*gb=T6`?fU zz^aOCRXN*ESF*Q`>P@P0EeP-0QT1|DRmZIA{&ZPuT@53J*`%vwB!o2#)B({?%*SbX z=vjl7-s30I<}veDE&E& zi@!?yfl4Q#XgruSZ;0p2-N3pwu#H(*w(qe)XR$0t;(x8uiVn>157RX+4T^Zm><)T4!GqATF(M&(hfC;0j0@% zthGR2ywPF;zD8#m_kj_i)w(9o;Fqh0!EehP6v^DpZnGuVxV=tiguc*}`7YE3NXT;B z4nxQ5!nTcu`YLDk7$Ip%cUL@Am_Mxj7?hS1-5LzVreRG3P)IV?@Dy4bUuu~SZjEpR=;o+ zid6rXpNqt}d5hm86P+guGT?vaOGz%gpIO--MYYz}_nxNwDp=jQTlc7b1=SLF&$Nk}8Fg5XkYwmc4WH=ub5Zi}yUXUuIQVq81n~?k)_FCb zKn3&P65Egq4C}T?X;;mSo^z5L<$Jn{B(sY%J8Z;7TMo6FMA~eJ=6S*s8yQxe;NNvh z%XxuEoZd8?pBqK$U3r?2YnmmL$ZxE2AxSKoDw{!|Zpoq^yvBJG-vKMIu_fZsbcRFU z6Xl1Rj2@ceQF&iQ7JDf-Zlp0)vNCF{4iUW$p{rqG zq3>UcI{tmHchYoTmfME^EM~}=$IBz8+En2pEQ=o17ifyC2D&d9c9j)(R_YUrY}##f z({kl4YK<=I_ogXo#|^~|gt8~eYCf)57<9`}B1@T#8MEw>bujq6-$I$LyB z8A%JwZd#kz3`2q1c@wsj5*x4;zuus5oK1wa34%@uI67kn{Oa7Ere5+hP z^tuu$4H`_Ynw9@*`_ZcHn`-(#RF|i}>aneHTc6e$UGr?Mu5C%}qnN$TW9uG89BQ~u zdmgmZoXVKKvQB@38Q~$)c(Fj&Yl;YVr^6G82j}fv6aNyJTQ_OpVY(B0h)ilSn7cXxia z$N2nnuf3kN*R|Jre(ZhUNKOD$U{{dQ4mU3TY&eHhSxnI!M0;jmSM0;S@E`Zs3;oy@ zopNDD@;_~#g?HndTL_Uw^t#3_ks-Xh?kzBUyG@NHzz^hBP6TK9=9hj14|>)XorY3e z7v*n-omb)6r;!PEbs5gc+a(hXVQ7=ZT1^n9m@`@a16T4Jx|LuH>s!Zt@J`Z`wk^=m zc)Ix^^l$W}#`#cGxS=i#s@y)d+6cW546dNyIA3w;KKQn0W|1cn<~k?u4DxOjnjL^@ z>^e-nnDY{A{UhvYR;<1bXVf;SzO@Qn7Vq8ciO!F@)a>bb?tMw`P z1q)K0O4!fA7EjtJ+Jf z3;e4*obdDAP~u5Mdd3x+5dxS0aytqADsI*WqRsAbdN1*4$rjx^;+;jM>I*r3PKT_H z^x}Q%%%b~PQEks@K~hM|PI_6~tHy8QyHP~Fo47c9Vhtls2r*Tj65DQhUAA95%Gb8I zf_mV&y?~|;xqQmCq>QVCnH^M$-Np1(RN#_C9fz7>abAUyujjm%ts$@T8ahYF_^f$t z!Lkua)0+=Tv*YR;_ej@7ZK|u0oDaKE{Xvo#l2Ex;GHS~}nGI9zJFa*d6Xdxz|9|uk zmxno7G_{JA=}1qsyJqYYmo0&{zr;%{KB)eodgoe7Pg4=R$PPrcBJE=98KoidO!Hdh zn7G7-Yl^I>zv|2tqrwWSljVXC`-(Q%vn}bRWwISU4~rDiW1h3~7Yg$H=`j&eI>H9 zwoW}hEV$~6YE$sb3O6OSWqYZUqRXeg$Xxzm!@K;Uayyr%?0T8wsvQ}drR(i(8E#0n zEXmcHGn*|}DA&;2<}#8W;@#ZBc4@jz+KiTaM)Sm3P1_8XvHR;k>sLp{)UMa93L9P} z)vgXMC_k@p*)pZ%qn6$+)}kK;!>RHL=O{x^!*iw3_S2ouOS-3k;UQq2&p> z|82fp5~pqRaVy-Z0XJmixvM=~cv&x%=U1&Z(TbQq{IRlcOFA{d(iF=iMGA9o?gPn6 zdNb#J+d$rw)aVxL9QD4$#@uY{*ah_tnNK55)qojbD8KT6X=3oK^5Mp+&3Prm4J&;n z6@1t2-@wj&qV;zP%hIT`RxLFxRzA18rLR*sFFB(AB1^KQ6%!?y^Tsh(=x$Da8?W$i z>e%Kx1w;2uYuuKX5_6^QQSOuorp7v(7iwR*H}l%I8)elQZkrQ|Yts$h4-3i+&o=ny z8uczN?pZEcpH=hHuc$-pZtBC8QA^IMOXXWFbLG8K*Lk)K$;{^Xwyh|&NNH*=Dz@I+ z-#D!>F-B3BpZ_~zef6EZl{?>7&du4kEvGCzt90}7;>e66-Yo^8=}$LU<@y@Ox>#j? z&|O|NK3%0Lw7a68tcqW9SskWWU|B2YNYBmlXI3+*?60k#E22`uo0H2H?M-R8TjCS5 zp)RWE;_mO&xdk_O)>mB1d%7*MY--NufbYdKvz~f01yeGvZ5Wa}GX0p#*vxvvHm4uy zKH3|0XLV=QVN0&5rz`GScFS#KJLkpGADAB2+Ws%>8%f#wmvVyQGkQdv%hArA&$zL> zhO|B7P2Jwx{DgNTD5>E-U+DK=tyYkamSJVAb^ZRlD@o;jFyAh|wEGla8|~WZ&Hvx75p4kibbEhu zpm1CeyCF!J?LV}3geYbsP+1GCaJy3G4UTdiEaF2$9CGrE@JL&qtbAnVBCGT`bg0>7 z?Kf=1YK=4`=CDOvxRS9sY7MnL?psCB5Mx1VUeft1^UhGmzKhg%?1>Q@P5{m z{U0HVBxCO!$Rpm^l?H`Io3;Oj_J%)eo$zP#S2WFrUIazdFNAIU{#Sh$&fCbUP#}}s zE|)Gt6wc=g_n_tujkyx^h;3@72@@`gG$vtR%&oQKaLw!n#bzQP?cRPjl%JH+6NmER zS)Ek^CxgHEp0zPL59s@2(}D#z%GzAv&WTw&f96 zczts#k+PlJaFW;^WM6xq2=qH$l|$^>7+mg4B)c6heoc_hrwi7)v>VE4h@x$=i=27C(Kl}ya zy+IDO&SG1?^OYaP!#D0KE1_Tsfd((f=_ZL0Uy{B!=->B-u^qj-8vDC}dmpvP`hZ8e9 z6E$z+D%<)rR#7Wj!qh3@BO8UPijZq{M&+Zxis~k%mEZP?WW{c;FQv2P*=}@UpX{b{ zbKX?xt3Ujm(h;^N(g}&x;vqVSv9p+_T1$J*`6kU3?@6uc?l5L2Ztu8jP{-|SbJQy$ z|7*Ue%L+T+@K&1_QeOABrYulYy;$AkXIK70)$Dbxq)^%EmR9JkIOJTFn=j9EIGcG- zhTGmuA0^$lc#dwQ#NJ|^@;EbWu8q`Id^vS*w`=C^#EBg#88hM*wjN2p7kQ{T(s&>& zrvWsmL%6jj{hmPYswUkUzrV@_+L2zJB`egI+;$e+QB^qS=Q=2T9nNR+<^QvNVa%2l zEOyl9NEcf~E2Ej#xw|FD>Gi2rT{m-Q?mN~oDccl#zja^MvPfyue;H50VjHHKh!EFW zn{>0l=~bHyhkb9C|DzB0G8LcJespsyKr~usea=PIr$79u$_U%9#?|r@ivzUIvS}8i za+oA?u3VBxm!{n6k``$80quwL&c~Ws=j5)9^l2*3z7e*lzBkJ&WMs{SjJ7TJE1#Pd z`8Jfb7?ob^VxInkn?=DwUAQxmgK8*;(-{X;b<2ku9w@Faj?_Goy|Bnv)Jne0ZIVo< zf21&79>rz*=C#v>jj`)nZs&iD_|+7VM}*$1XXhLWK2$?z|FxyKGBY#KS5y{jl6ZL( zTN@9o|CN7B|IK-C&Pwf5hyDzn`ttH2hD_za;=P(|d67kvVviJ@dxkm1Y)VBrfJ@OKFiLqPb~a;h4~@dfR-nV6?_H*LBOD%FWr4zV2mnG84U~6x}rm*I&!e zFp8Z6vft=eJ2Yi1*SxU(W!R?5UYx4guJExqsF){xKld3UW#qRT`5V%vUy|}m(!QK@ z5lmv8J=i7CvI{zdf?u5Ex=F%h?z&<|c#AhaW1%RV_fw$|-Q>T;>VXKs6AlA>5k89> z2kJ$yb}WNzfDhgapbyaK)qCL%c-}%B0T72cG)g!6?mQ<$(u?q3fHD zL25W_wLKh(>|Dq~mZJaO+`*j)WL|LR8iD)A|K?eMmIsP?{otN9knauF*4XjSgI@~| z33frA=~BTbs7gLjsD&q?p&}a?WCw}v!f#@}0Xigh`+Cp=xwVM}S)uD!{eVZHMGK?h zKTi9G75h8peSRiKg?SFX;x5J3?pJfKU^cBhULv-ldNqFt=2&o@Z^G6Xn*{5yU|E3R z5tfEj300Va)hzPE>SL0DvDk%>LEsqnWz$Ts3;VKa5URjFFWe3*uus?CvWJO3o_)bC z6qg@8#_<&g_wl$xsNXGnx%pIY)mq+q3dn!SyGJ=1uJELp+`KV11Eb+llUA}4yb&_TX>+eOiQ=|!(rz+E!m={Fcf$1hwD38>tQ zS5qhDy*lwVbuc&O;HNZs&hXCttkA5w`Zw%JnNFp@*vC!1*>5=F^!3_h+yKKt+Kx9< z?+Se8J=V6TB=T>n??t5x&a3{~7B4)iSn8E1dM6v=bOW5poL;yQS|cVem{N$+zT*c{ zor_=h52pSsvhB!EJ6!jmRW%1Rsp1M# zJ2!1xnX0yfHK`=A_%7>w(T2=tY(v3J^(M}~+=~>8>ygcfqImN%S0?|>pOr3+PAv;~!2xz12!^L|^2Y zDg2@S-~*dj^lqnrneFG`yTY0Tbso71JYlfzUHjF58V*OjY zJYzHKcGY&}AiJ}C138|PQL;!lmkSh*Nc_nYMof<~rFF8|d z>;zLepDVT`T5{hPpVR=TH+aEX!a6fH{8m@O;;24#ZNF-d1nA%`oH zg~#6Y^rzS!(Kc74d^)tdYDjA1{<;G9wB+uu>HAnqI^5*H*uz`q;c@J{_5b7NaQdrz z_8sJQlnv}ISgIr1;C zp0&7l2!OFiHctcw*f%SFf}=StdB?y2u1Y@$7Vv0^0{pK2W}K9%2igb$W^PLtm}6=r+XS@(JM}mvwrS=r7)c!;3^)c;!9+iVFD7O^%{> z{PPvd0S`f9-YCE*9HE~Ed=Pds&%t037ec^xz&7MBNU46vUvLI)4k!puP=G!qsSaS%9zvP04W=O+Ya%UnD^*=@eindLCQ^ z!03+@EjS6YiK+%Gu*hu*&^pZEwHo@0RXZiZP1qr828qLNT$sf>LJb^e^OsZ7{$_qY z<h=B*U^c3XU?gx>y**%%lzrZ`0MHDp4Z6HhC>DU3?&t1P+Qlwx)r})KO0f5Wu{}RsQJA??@UQ%u zYEV!opH2Q0y32M6zX-2LbCU8zYDsUzcVHuPE9e*Slm6kk2D~G_>39$7p*pN_SVt<( z?BS%OA2@QE^V(R|x17s12l%{OSGl#c{U)Pdx3!GOv| z=qlW;T$uP>G+%xzB29E(rVUa8B~p(KFF_^K;MfUq=$Y0uyp>{~HfO)hU2wR7!_Gd? z^PBS}i`(MFB{SDmb@RrVZWS)znbJX10^iIyRq>18qi-N~3%2Vv3P{2KG}jWh3;Wcw zc0UwJl{_Q~7q> zx`Km76>oiBv)q&SI7f~h8P@w|3P&2VcHI(Q(T@uB7gcG}Hp~PHl_`#) zV3sW0x*SSp<{v-C%4}o~hO=kaJ9b`X7uI}iT*6sYb*TI}r>i19&!6j8Hpy5)bOFx@SWd%#xpF2@aEp!|q+2NcYF zJ$9Al+Y#H(W}Rpq=y<~pXm)P!W?yJHQudk?Q#UPF#Q9VmrGLVeR#Zy6c=n~8XejS) z(E;uezB>QF-l2l19N+NoLZ^%~TZ%;!jNTsgz$on|M|*ITa-vEi%*~%^9!V@N?2PNv)Pja*X4ym}-H^9qM$>5H((*ynczp*y;r?-QwqkYD@ z^K9Sl-cp=>y+fEYjkB-SMyKO^Z@eo3xFvPYh&?Z`O2O&m4=KBtV8%aRBntNxROC(C zVj&b~W_#=r0fq+0e*r|DZT%9=kl7yXP0KulmUu7A8h_5LP3m+ngE5J9u6?$arJvNA( z(w!YA0nVBx>;J%Avca>1aBj+(!R>HPYRCSwaBfjkyv%VkiXoG&s?n#&uhU0BO8D@|9rmG^V#|LVdBrCtXEFWagnaqU&T@w+fg@dNltHY$7LDRst&Gb%7OdkvNu4fU}5V zg*BK&=x_tLpCI^$p-BX5Ul~La5xdtx9|`|J0FEWrd3=E16Js2%A~1f{su>-DmmU8p zJSSawutPLSaW8BT%>)lT&&Q;WpKd&h^49 zWqHGS;T^@7a;3;#;gz>o#K?7qGSN-hEg2hdkvU)^fdZ+V7YPoN+}WE5$|X~F*+P?< zOK=E@LmBOp`kNH_=1mYavyg7wl@TkIh>Nt?%1=mq2H zkO=F=XRMARPL%J_Wd5t{t^3^sYqKV_{T4_w?$+fCE|`v#3Wdwk;hdF1#<)UvPWV9o zP;yY@tII@SQH$1x^Bb6}{+!?hbgH(5F9w4ZWt)$I?_}TH&q4*#=?=bd0JGHU68ufP z^hgjtvG97I4ZpX*yY-V`Y~EmPfna-XNC_!u$?nVc7Ea1C)4mh3GDzl~@NW8bxKFg% zxRetlI-nQD7XiDqtgw3EKXvTp1Tb3}?5>42%f30-!NVkat4DArwD>=FlMzo^R``ZUiP;#@KrU- zGHUp5Dl^q=K~VV+ah~8<$qF!2=usHXiWK(cA+g^@k=Zt(!N5q<<$y?_&cJtj4#sFo zSH6SH6kXQSp%)VM!Fb-^J+@sDywJ|QO|HD+wj-6lcu!lr3WxAFHSRM#<5$$lRPBP% z)uq%M0bT(DUj^Svz0=MJ`9*)nVxk#&K0Duw`m&IKsleX!GPfRZjxK8DUGRqTtF<*$ zE#27P#J$-6w6mT!x9?t~nitnIx^gqGsxzt}nEzMXdXon~p?S7y27j>re^i*jrG^Kj z3EC@OrEL|iC=H99A-qtyWM{qz$a&*`6|l}IaWewf^zT<*05jCntsS5g>9hWE+=`JWJ-r1~QGQE02IXHCEQ{ki85&mVs+hLi-UsGIc}eHhfvy z^2U+aXV$#(e(V8zNZu~&H2aa^3f9RvDa*oYxMwj-ERT1U$N6J-AM8!T3I+e|nu|4w zW^75t1^@^5kJv2`UU>`q3JqG;<8zT&gH4!}v*m2Vj~4}q(86`f(K|iHe6W4{U0_=Buw~)%>{zO4`8c7n=O{uHfXH-5e$Tf ztUQU8z+Wv7Vds#qM~hI6aPIze6cN(xFuGUxvfdNjA_^*-i3W+fb55hdfTcbf-41A^ z9%wW;4S9tofqC38Q~+5g0B8=>7rq(ohl4jCN1woN+-2A-M76RB+l<;;p2KML%8^v0 z0Cw(6LbBoLwq1x8X6jZT6kJ(4^-p~v`#O>f|Ii^w6=E%6A^VX;WEpZ1spr%q&yWxC z571etTi6-Y2UTy5MgjDWy9e5ZnXlBK->|)w*ReHN>)}ASlo0lAhpUN*)-7-?;ZbY* zr?x0r03Rg&&iVjf#Xo5);5YakrUsdS-+}?e7Qe~)8`+HChz~&&`1P>u$T9rt<{{`v z{F?hPbSvJsl7klDWtNZ87r1(03UrHk(_;?3WQ;9V&?jbf%|z%MeZ6=xJcGtEKf#W) zm8J{cCO%G|haoWzHNz!hCw3@&l6n=_iA9o!FjD=WILLA#V=o1Q?4inOYm5L<>DZ@ZJs9wQO`wiWbt7GNx zI$7Gz^KgcAi~k_}L9*O!1rkc%Svdvi6U(f|pbMx)2Wr3xnbM9+;IfRUhS#9G$-m+i zxH&zbU^XZ;&N115h5BbIGw`^snMwhFYjJ>q95lXZ2~eVXa_mUxoKn0q26mEv^iPFz zWzp-uA)_V5_CFC0ebZ_-a!WjHe-5C?f7X5qsLkWozXlHHPA>lfT*}^`ZwC&^a!vRD zGq*?S2Zov)$#T$WtQ4IE&l#qt9)kYX;V~kJr!nk!1Kn1Y_)md1DH_)wfZJt|{ZqtB zvewELF^TW>i2=(pWm_NMRdT%UDG*USz3e-XQpn0%2jt}E8)JYIxyKc$z}M_|#C330 z)=<%8P?#}3bvoFYK6TGy$V`852Om;sllNk0HgEWaST2e_4n;t2p%R3|t94Ca4Leh7}wb&0+Q0$G!` z7lO~y@AyrI!t^EU=RzkmBkXHncZIK23_KtS?mjA7(Wz{iD%#Tav?f3l+p@1DMU>Vw zCHtr-uRc^iN_46wM`k1Xukt$954e0jN$L=*PUYz`4E>anlZi`I6M#VsPQ_R-msMeLSwx=>MG z<5;OgbfRt)wh$OwRnN}^{K^B8t^=Cl2T?zPZ~3=Fo`CzZPy15f9aEj_A!w7{!CnIO zsf<=Ayh&QtY>Q2FR6IAXleJQti7Ub9a-9T5!@Ooc_}JynvSN6 z9@eGtrvPSE`;(%8J>|oqOu+FXeTWWp%A4xz4%TK;u9?t8Lz%q*605VVr0_(U(?L6N zaq^e0B(Yb@{iYo1LF&1xT1u2QSa^_fWYuMKlJD6jwVJHs;NmVag)0MV$z?nfE0%c4 zFONM#926Yg`I^WSKJ{-PSisozgTy8<+I}Np33Xfa5MzIGN<|c4SN;*YHQGK9NKDZQ^CbDFFp8BQk{B(%ut$MAos%gaoI^KtTK9E563wC!jkf`8v!y9sy(6w?h@m$zYu%74@ znVB{dDv?pOj)(+CQzYRCWCA*3EVv{s9={9jkNJonhoW|_!CTRNT)Cc)tB`Pe zdmKe4TD-$~=$ZXq#52gJJ%eb1;QG4+52~;DhgbpK$@eAxhNq_Q#h=1H%6R-BjFY{1 z5qwT`8^;l|)Wdir!i!13w<2eE9LBxSWq!x;)u?>^8hj=C$o^k^Ip%IT3}1$o_btO; z;R$UFeh`nSyNYY@pz=xh4%|I29AAg8HcD|b+*V=2N8*;m59}?zLS&2Gz}KfP#0Kzy zJ$L`;t{q$dXp&#rAB9|hV<&OIemHg!2P~)k=|p;m;B)8$tufd)T3FkMouh5ahGGTc zySd?*LTof-VnVUEydB#^{UB_y5Nbfk!MrJX3W_;XL3{i$FKX=et5^_u*lz;1i^N>} zu~c&Qisu+cbXi(q8e)6*AOE8VaP)L+37OhA3) zCCTg2jj{{TtI&Aq@sPKuM6%y^2U@|jxcZ@kG_j%=eIoX=^v8x%V>{2FUZ&?wzUYed z8&#d?RO8*^iO5UC*DMqAKz~a&1i7Z`llmiPw7KXf546t+E5j$xbPng$S}7 zGOLlaj8oeA$UalFM2N%~KcaTXJ_Et)MAGzQlg1%@ttM(YQl#D=GWAckeBo1v{7_7B zxrbWHMyxQQ{>%$YKFSxjw-+GMC3_o|AzOvMmo8U)4}=5C5t-P~HhYE_+b04DK(TX*v)06i-u!!ySba=#y|u{&2ViK9F;T z>kpsID%p1kzLt>~IUN~kycoO;anL(?e?{UnMwb*sq0C*e59yF;Ei;j)%=Xq6_-Mob z>bAh`b!}z0;G7y$elX0hGMa|MtO`$6I-FGcj-CJ~6lXzy@<`!7oLU&m!}i(3s_dr` z*>HEp!)=4`3*!y%DrBy1&}A*+p$=cM14)rzwyZ{qBr{uX!KSuLwHQpbY$=-vCp3P} zQ^4!%kEOf8t7}&%Z^8CeCUGRZwEQcy6?Q6}!I=TO7cJjg3kT%8Ml6KE>@(XE;OdMW z-VyL!!$p^I@Ndoc6`sgqhju2H?tq=!?&n^DC$|`k8hA`& zuW}_kr0zboANpD|9PERKR9s~Lc`wb{y8@nCw0(CUygm=x_79wvmG3d}^` z;1|+YUD>jc$@=ESQXmDYu9rMZO)Z%&*^-u$EoE-7cIa*~acoc7B>D}<9xJCsTsOf; zdI)c8@)9w_-y1zvJWHSnDWqzJoj$iIH_-zZC3zOyWLHJTLJj7Frq8i zp6EzO0JR2a@hK#)fF&-;Bpd3os~{)B7tLQ1?a23zG{yCOe^sq6sjo{r$E`v zPw`~v7Scm?!>f5-R5WZ#%%n!apCenz79=`YNk${5eEuOPpw2GSi34c0oq=Fs^DHb0 zODwmom!`4E`b63ai>;U-9>C%Ya>cu_*o+P0aae--G}VnIGHa*=ECm@w&BA2dLh?9P zo;ZROVFQtlARXwGqQE7Axd7N4SyOR_(hVzLk<_fCmZ&e5d?l}`t#k89R7DuMx2>bN{wb$F+N>&d+P}7 zyK>Q{IoKUJYwdlkO)9ms#Z*j&MKcy7RyRbEBa1dwdJu;S4irrzMEM)DE)WZIZ|Y9s zFLT^v)p$czF_DUMGKY$?ad*>}v`l=GF*80EyQ{ywYbG|JJriWWD%3q22Qa0wY;6@5 zEBCki7juz3wm6E-pm*2D5N#D96`Kie8CAH5SWlZVZ~&WYIK6QJHbVPktp|EV)v){nS|^XRc#g`LTeXEmSj(ug zEMi(?Q9gYXG4`&0p99$0(X5J4736>m&Aj0F|Yu?MjExjkWZ z=2xW*gFk6Y&l|+ET9%tK zaj&Lv>Q;P2eHhb)9jYlu%Q2$zjbJS1U-l%$9h*^nIo1b#RL~Q)2_49t9ylH?&y4p{ zq8ej`^8<9Jwqp57bcvF(9Ey&S&Z@B{#`U?E+Te$}!}I>dc^xOxU*ikfbn1!Nt>$uO zE|%5Mj!woxY7g@XY;F}h`3U;Bd}_=Mw4t~*^f9W;FWl0Fre;gLHljOCyPR9mIl7aR#jt|ljLumrzrZ-{zaBRk|StN zn8&;m8g`kOwIW&237Q7Tjg{iFAiQ>lcotM>`-9pGpEUbI_M#&j`jsR2BPv@J5qzpB zOWq?GksT?YC6MU@WQ1^>e7^LVP(@sj28bq!K1doxt!eiplYpJ^CWZwL*=0o!fZahX zdKx6$m>^Do9i2Z=eaJZ5@6>D^eD_s@?M(DKC zi(r*3Rq6qLB$i7Wp!K3~$sDLMZ9BujQ{w-n-@sUSFYO0^3z{n~NBA3U#6yt}&X=fY zRAl>=JcJE1cO@;b%)0k-9vW5tNp=V27Ce&$pk!vB^dPFz9+9p>bEQp^TC@hoB@57Q zVHaaWAEh2*Mq&TNrPBgzZFqqACYBs{SiBy~_j*MYV;7wpsj=8^+fO71Uv3^vT*LR( z-jEGYys~F92Pz={p|qMZ&*+z0kRLSHBn9MQ$tB4wG97DS^kkgi2lF?%IdvLMlTNYU z#XrdTVaLQt#P7gR>Kbv+E0^*l4mlHK3!%4tMw%0`<|v^e*4C8E=13b#4@mXW&3OaT z@sgLOYKcN3QD2mdmCR)BF;b=qJT;=G^|9obbi8VN?nQ}0c_96OWUSIg^@UL= zFlH(!r72`o)u_&Y``OK@zhCrKU0p&rhU*ZgHMXju#)Y zJx3(t8W% z$lJv4@dXs?Td29F`_ZO9_w?nChoqyvB;Xs-uid`k1mUM1 zu_g{5R3zJ`<6hE(7E`c;^t-a}OkQ&kEIFnUedT-h7(fs%=&m)Nst z2uM-K^IvlushzoX`+CSH*>Ta6NM7d59W3I%^yGj{g3|YHfQbp(5o=cBv}%|wi4T#z zu&~5nrl`!Efg6|SbC{uZPczDBSf|#Iwr+fSXi)@mF>ZwWKh9 z-*U1o?^KkLbkA9`V;FHHb9TU5!asfFhUNHG-J>LPBt59GpKXHHSr8&b0wqu%yeCXlX54h0nBp{J*oOYB0XRFim|}Fi(-7`k$bT%2&-3E`vIi-oiGnpCVZl zkys~J0%N1E%c_B{9p9vRARcf-qK14nBr+&GZFL?E!{2PSiecoT*$N6m@0IsxcZseR zPS8k!#aZs^qX4A$R?h%V$}3g=;9T;R5(Cqqsfs3WfYU6$4LK&7$wxue(cv;1c)<>x zbP-$?Ad{FQjvMTmS;)X@f;K}#ZGy#%&`)MNDI2V??6#&1feKcuuOL~OZ1r5EMTe?{ z$Z^?AWi#@CbWyxOet;Z>IXay)R~~`}?8}rfC>?cA+J^4mu~gED4GVB)y0J|jKjFvH2a_`cG6>hI+Cd{6ZXa(xD^LP&FMrt&WFTQ*fWkGMnd72!lL z&@Im(ve_KjdBU*whio*VjM^r3CFt#K5+4Hczr}1LI38VeIFY>CUCbteZGtJ9SZ`KL z>WGykC)DARs61y?hGde7Qa)q$Yx0zvnZ44*3N14h&yk;}Yeetl6KOwIr)d~c9c zDejK!mJEv7+gCET#FPAa^c$+#BU${L3SK=`{4aUW#)q;eQ_K#M9>mY$JF0U^QSNrt zM8(_mGG(k{pZbX6r2MHQQt^-6AG;?Hk~N4tWqR3U)=cSTsU)FaI$iQ3a+M@R!U{RU zaG6&B*|diK>ak2*MXy`+jyfhzwDBY#QW<9ViBDvI(MQ!TT|*8}S*U$(JfZlcU8#Db z2-p1a*YbRI3uZ05r@AK0mYFI4OM|2dN}B{bNwp#(qMdmuSB30gCdpF#252X#pZg1O zsATb~6BI~)v2h_Y#0SlO5!Dn?G*$U1V{LYha;eGQ@KwR2uT)veKN(%=tMau5Gn6gE z^}_`3q=&WlQ}0U0YYxVjNJ7+w5v!OS6%_o6KA;@$mn?oL&v&m9kB}`}RYqA!(rs3e zp7dw)*+i(=tI$CS=MB#qP#n!^GFU6DvlEqJ@|-LidWP&_#&M)qw%D{suu+<3{Fdq| z=`o1oXGlir$L;QBwrDlM1kF~T^qVHut46uUQ_Tw3RS0=O=3-+@yqDOSuOdd#qYJ{7 z%ZsZs-z%V^fArz<+XajwT^^D@LA*T#V?jF&KjFiClO@0$Elfv>73ne z%s4}S@GN?%j_}@zoE)xdy9s`5z@MXNxa{Z|K-g~nI&<_85%d5k!0T9b(}tDYT4E#erAY%kO!#Y@)k5+nmfee^kr}H z3kr@oggurRa(5~O9ivQt$q%;f&`9K#%_F7PWrdA1h{MwRbr6^>HLJeG4V6S!Iwxf^ zC1ox#b@bz6$MAG|VS)M9Jn{M*sSlS5%ee10h6IdDoC*j^yJgu8+@K6Hr?7JA;BJO2S~fp7{}W~^Y1%{pP4&gwHP zOP|k1l>SD4j<5KOVHI~IBGsF52l&5qqj^NiH_ZcnT-;H0r@()Aq)H)l3Ld5WTjb%( zlFNWVH>GSi80{1&$%As1W;1KxI}2usFQQHbyG$(J?989(yLiR=IOCsGqL3MC_NQ;(sKF<@^pcZSd4zk7o<0dTrw9JOGGA}*3d6{BkwYd20STLKNQG=muSBLpLo5R zSKyZ9GwLhg$=DWEALP9&L0JSH+vcLMh4=VelXb$s+?GmRkbEaA<~h1yX$`GM-!0&Z z9k7PHO5+!}G$Y*b7CxgrZ#fdB-chE!MsJ9FhrE>rS?O5Vx3gZ z=#cQwN^5lE)_d|EG~dS{^GCm||0TJO1v^bv-8+3h;g_#VN=2YRMe( zgX4AjCYkkzZzMM?cuB1%{+Bb-V5JyqysTd=H>x9a;qrNsY;BLM5;tiM%H{*0`mof< z@lqX?j!C4I$0Wu*If_BayfCqRfT;|sld+jG-lfvnbmIC@=AihL<9?bF&s^FgUQflE zO(b8D4cQL*D(wv8-?~OkyeeD!P<@a9J3z$0xux|`FUB5gHmPDnSJi&XTy~QxKyi8B z4`q;I-ky1iZSsV$$?~nT#-Poz(b9VFoswQj?RpC)iK%idrkB&1OM9u;V%p4}%%Kvq zV)X9maRv{azmccBs-+DQX1?aFz7Vrlf6--&maBef4eY6^AsYF<6y<0&9i6KfufjqL zp ztX-E0&{3NDi~tl>x0{9w8C9>blO<3dG$if4tvIfq8a-QnPTL*2Om<1LJ5VVlREIb9 zN|q`YyVld^U0O%}l6*0f5mmGO_UtwR%MFBuj8pWMjYLCne$P^Yk5P<63uGfikAxKTRf1v1&bQjgHG|6HY};k z=B?BpFPz}6)?%{0bJnWYCzDv?3T*UMX0h~S@O#EI@iO1Hv|)kuMkTe9yKsF!Wij)- zqDB0tmn1Ta7k9gHGDMl3tEmTs7u%EZGXzb1Q6H=0g?Qh2w_^or;I((`j+F6XWx zKg-O%qurnE$s()vMT?mB@`2z1`VooVcanw>rfphN>j`dpBua{nl1WY ze*$|#LqOH4h0B;wvJPXQGQ3;&idQD&gPpHWNwFLcEKM`n`vWK3cJ}5ne>Pi zt$7|D$9Sfs1;goF*#ch!ZHoxG5l(r?+qeEGnaet^Mj42;zoof)hq_z*#oCAUXBm9W zKF~EHPhAQ=ibkmBLWUtxiY{nNRjWJ*cA)5v^cehZ_5(>0;%~|f5eO9({Zhb33xnCb z7R)W5hn(xUV%L-GdBA(ykIVpqL3K{QAAC!)UsnYY^03;?&?NdV&2rcp;w;rc*iF=T zWj$O6zN}b<$gc{O^&q2*h|(~WceYS`9=$&Ku<$!(OZ0?b9X2r-#@mjo@_EDofOgj> ztReiTb(?O1tA zW{19Av_i56qs-ncPQ|7tV}vxEcQl9J4=f8#roxWJjS0>60uRpn+iW{Gw7`B1#V_#qEv+A7MdlSfyG%T zMP~tZvZHVwJ~%p_AC7+%?9N3IL_X))2Z^C>b6K;9-`6P_A*2%uj#i1EB2s9Q@!p&o zwKKkeHd|$fr{R4Rckq44c)13D7nC4NC(N(7BKbqeDfAP!5IVA|L^}w-lCBEG#G>d$ zyi3H%;91{61#Z56YJJayd>`g1Z#en9h%TrIq&?k3l5F)W`>j;}u~JwT4A$dW+Fy9y48ZOD+UX~Ib|JBcdzkK7b>o>xvjwCxV3oBY^k zfIW-+)yV`K>xOl#ePKx`v_Qxv@34Dj3!!$T{!JAwM|M;Zx^=k zdsMT9vzZNwM*=iCTYiK89Xld3@MGaqq(wY+-4=-*_i5R4(M@h-K3XW|G-liqM6&-R z3V9>!rBTbcPAtc5d2A_js}GL(i4pA<$VjB8+f~s-v|P!4)h*d>-X~?V^fu$Qf+d|p z>XtJkq1ffJ9pV&NwREAVsJ2~vK?p9Z76}BD{29U+zBB{H|HCsU2J-5-(8%+g>zuG{ z?(9(ZBA*gwBlDnJF#S6NWXGcg(ie)qsl@6pJU?Zg>I%b85w093{+355hA<%6TsaMT zMsh}$R{Nh=EVV0rEJ_kT$`cCbikdSP@(&8j6CUt3@}EU=I8t71&==Nc&MTiN=1z9# zKfj&HvFo5dr5_LnsS=GYT!M0~{s5h(n5L^Grpsq*H=@r-PpkJpw@5^)xEg^tRdKbn zQnW~(kY^(}B^}?{$)`y+B?!1LM1_$NoJ4^rXoA(v+vnrVoXr_<+xl-SY3+_t6^u#| zRb^$#=A2aAX>6rkkx!ad5xQh&jNRzXQnCIw#3D)8CDhCiFV|>FUJ5U$4&?R-_=<-+ zckrX+(-H!>t&-ajKRI(m13^qyxq#*~ld+d)?dC(D$F|trrA9Jm3$H4#wE1!D6>Tls zXx?&J6PB<@rZay)>81INvmvV`whe2m8KS#}O(kfdRyQvnGeKj z?{UUv0pD#c4a=>t`$OqxEfF*-3;Is5J}dlslBo;jPF+F3XPHlj8Y!22Y>NeN5Dzwg zsWOY87ISfj(9QHSN6i19F(Eyfr_w3nvpDb7wGlq-c!hu9b!M~Vv$ux+PH1$qqHW>1 zt)D{yu_&TvmVmkyT*pRp-D`TR$*TSaG1-U!-9QiNFM&@&XX?Bl`)k59d}v?kTGesb zh1}E1Dex~lQ{}$Mb@5N7>rqt^QDQ6fU|^o$3wD}UE$;}9jdJxVVPC`GUL-dxfeSf{P40;QXraa? zL^C1LV2|8_I-(OG&p=!>Ur^=MXmtVVcS*6b9X+1wAb*RYrtgz&#>T~?B_6m<;lD+$ zz>2`_g7x^RURd5#!c>=J_6_1fTL#lW+9I@XoQ@{5@eLUC|ET?j&zSA_BYFU%Lq%#| zVW)!!G&$JXYAe+w_HywbL& zP|^O7&+6CGuHfEjJ7^sUvBrUh1KFwcwD?M+aw*Nas7DT=&Dy1to}j)nLfKhrP~<)OIsqAF~mFUg-006!e{Y6($!o0 zc{cQQUb{GJXa<)~)?Aw1Iwbu%wS{}s@Jo=wNYaz|he&4Kbbb`}tVY1Q1E;Cy^1|y~ zlvHk8#kl+jcR}HOSuTh8ulbCz-=t267qg4v?gW9&d^0RdRV7d$$I2S8}qvT-Zxl=Ut94{xZYYJ)xbUTiAX2-}XLBle_Sikj$O>e1MU1~!nVV35;;SoAXjnbQ- z&dPVXg*6`)RT@HBuk4=cWx;f5w9-E-K-?iGr^JcoNsq?12)2k1ZNI@Q6z&VS&SCKT zHos?KxpbBg5H9R4@y*X zw)3LiWacst>0{c*DCOE)tt#M_roQACR=}jo0Qv{&sB5feU`@3Qkg>|JnyQ6Yy6q%E_$seCKn15 zHQ!^d@?pwf+a0)S*_VJ|_CE3b&2na|;G|14oypbOB~W*;f>?%jtGZ08N9)#l7kqbf zCTJeo+ENbs1$o#AfZx=p8^n8K;53wUZK>Gt3o>`-Qj0#CcC{Ln8VzhDsCO=dp^}v$+!$o&+EuPB- zDZoo7E_aj=Y6D?UCk``>t$a9&64^Ws{|lV4JVS6$A?8KMWsqeiFJy1^4PzQAp;VxU zqMqly&{m-bG9A>rFvMhkWh6Es1|<873kXF@MgeF4U{M|3+S8u@jIhqBo0~!Ovgu(p zk&2o2EjQ3fzf;0*Edl@WM3?VA1M-fEmiJ2{% zO>_wL7M~*;{5J??B%6P}4N2kjgd-=fwzXzHBahHuH_J&bq+!bmQXnp|@i!>~aoDtl z6bb4#mXUT=N%ay^c}b~u9|@IvQ$0ay%Gj*jN4lI;A|E2piasUfkhg};73Y#c{tJXI zA`(UgFCyhYiaXsyBWu*U9@P+ zDZU-i$vlVGfH`9d;d#O1jR@|I`kne#Zfa$!_B!WeahPTfCo<=vYBBrh&M3t)c66dj zwup5y+Fde>H6uhL{LT#Ba*_Xx0eHG|>GW~uAoe`^OxqibN?HQ7)siC~B?ua|qMw+p z4Oc{ou>HoR!hyOo`WV66ic4CYz`f{{x|3gh%|wWU9nPjH_kMo15E9iyI$2RZg3 zRl-L0`YnTe9&4SaJ=dAJ#5tDL&6v7wDq}9~73G&@ngW7<+88BAqBRXP83(q(a9BE6 zw@vp|GFTC>brTO2C8%>nBfCB+YlS`OL^)E>obX(VtK2!2wUhCCog=-Q&ZT6V$FxiFF{VH2%cwsMA*x=e*g#Zv)b{K86yWmXng?>f z!b|F<(qFrnN(V`Ay0v_>xHv&B-6C2Vl_RzjP=mhy zWc~%LHL)B0khhH|8oD4v!wh3hO|Q;dKT&o~Q>0r_@KGhu)MoEhG^jLbRkAL{(fF^D zA=&H5Di`Y%;u(Uy@1F5<3ZObp5+7#CG37K!C zTf!l;_4^w?)NI$jFs&>DYgQTq3*@SBeL;4)B14;!W-TjIhs2LaKuVWLohVh-6`UvV zlDPT3;w=;!JPxpR{5j4U%oUu%bv#-XQ%Z7aZ11>ki>+yZ%?tMf!H^2Ni;!wsFDRYZkQZf_Ro~XmWzu z6*xD(hb_r^-oS=$O=TPYLzKr)(>5X%5oXnI)RS#X6`7bI-zaGpR_Wd+>H`)z9OpOT zb=E~37%_>otj7~F12?_P7Se^d&@mO74W_o8#57QStjF0 zWN~VYo{K8paYDNqT@is(;W50RU-DbnA>Rn8KkkwH0Z|0r!QmA@n1Hr6auyQb5Zk-q za5}cBvlKBGfozXQ@WGC)UP!Cz%w{WOM=8$y7!{W{EkZrdLb_aVtpee2khne{*NO+s=fiFg`Q-(F9=58u&RKzvdEwRsouc~y`llr*&j*|>qU zCePe3o8*(p)DM!XQxdhiNanats;{Iw;rA6-^4g##>1T4jub;Sv-0c2EASK^%gmD`w z>uqQ(JO#j?>G&V@8TxbEdFpxCwU&d_fqHt=I8{=4-rPdPlq@v~s6~0PMmTjxrk{R2 zH8y3Y<~TJjZd6rCO$Z;5f1rj0F{K!)udj>fD|NH`Z-E2V)=|Lqr>?XaWv!sv;!8S$ zncvW|Hcw_h4AWxAgw{JZSu_1Bapu{KH^qk=-Z5J9rWvj?iZedz*bJBCvzpEH_i-HM z1^WJQvAmLA7zCAkr_c1=AfnOwHqGXb&~`eubI#DF*gRwQQb&O=?d`mkX!lkF*9cqL zEaGmho3wB^FDutKA~=X*SVJNEPws9*ESsA#sQt=bovcusSnYAUlwquG;dQcyOm0xF zgv_|*yH>P&CmG$Ky@ci1ed z&N-_W2&p^oX`=+vq-(0Ld`s+*qLDWo_CmIm%Mbi5KFulhc_7SSZ*%|46EJ@}-eb2i z_S#l3cyt(UV;i7$LxNgx%HNR6CZytd?M5?3{;6DNDwSO*nqf?o_T`l7{Uwr}B+UnL zaS~P4D)Nf0QS1~>4eOP@;L8Fph_O5;pUHn)X4L%)&yVfy_>!H-)Y@_wp7fvCfi@RC z4e`0fUAG+kzR5*%s%G5mtR5`)H7!wP7g`KI6n}H(=^n^icY0_{GXJC?RhHyftcPN@ zI3tWG)d~%P-C}3{BcDD&C(p(G9rqq5)$tqa3kzb~Nx#a#W5ZhSm`n(2^AqD6FwOGN zfUe1IysM8XyWDV0J65>E(5-RXHL8=VjOmXw>5BJ>KU7xo@R%?138^$JRhl9e1#(5V zgd88Wpny+sf5sJa3!SF0n%RD~lXN=cJ?3hwxTy-UqPfA007j8wi^Ik5egWJ10+Fj5pR0enjM=Y;3o&vX9peVt~rmT(xh z?`iLuBbbdtx%H{=oPkB4g`lk7J)q0gZr#OTOR1&fJw#BjxQztGWY@RMgO#NzELm_~ zLW9YG7>#BbZX%zC4r=eCg93(C4>1Zaviu(Qn;S<$2g)`i2p8j@u5IR46Q$@=gK9`M zd`^D?bT(*C&u?g3)wQkxSX^mlM=X3{{$%TI_~mT(W-vmRmSaAMR43G$tWcWhTthOt zAylEw!<-0cQI%qUcv0nLfVZ1ovJ_vl0VZf7jI4dYokDU$BM0ul55UIz#E6jkLp{-m z(JDdLY@}Q1qINU#cs{Fj8>%AfebW{6j5J5HJNj}$a04FG7VWD)j3tNSHCJ)C0KM`d zfc0X_p5bY317ahAyg?(_LX=pq<0wdzXy*YBbP5dLdl%hRPwQ5p|5U|wmSQ4G&bLp; zjN~V@G-BPd_BVxKjj3N6HMrn}<;GXI`_aqv{s1eqQj>y@3s5La3Cp}BvO2R{5Nx8}=sF3~&?NO~;@SYN;xVzqODX+C3U|9L8Y3Ot@PwaBPP3M? z4^XC{pnd-%nxS`kM8x5`7hMU&y_KCE4#eS-pw?5w3wei|A;dRX;g%I7t5miLNs5Ud zGMpySqmJm-kdB6WsUyf%0XRh&dDlN5OYU`hEs7++beO|?Me(;j#m=DUP_z5CQ?*cH z_Zup;PSn{+Evrm!XHY|npR{^VH{~Ilu2R=#{xlP*R;jTKcd3iw35G4y6;UcJow_b` zv1){B9Z)5|PhICFm;9l+y8RTMqpovs;Q`e3Hd9$oss6};UOf{A_3BPwdelXA&Sku* zoZa@2F*%^Dl;#B;9P&fuOkWpJAkU*+ z@ls0|H1S3&VJZYjzZQ=B_ng6z|f9kaftx!oe~#Z0uFh*o;(}kvRT4MjO2m zae$^v%n5-7fVX z>YYbAL5)>WLq6bLrK|f-LRRJ9>UDtp$d+{Bp?A{*+b_WmCGKnaAN)zIz2ymVQFyiK z0V;UgT7w)d_iNLJVm^A#RNlqqxfo;~z@GI#M7e~`Yp3#Jh!>&6u^PzNx}U=@p`0q~ zK`hL=T8;l8Jf}o^HxSzu30OumHQt zuT8TL7w@@DSqSi4#-t8Yv3TX7`Ai}Ng{ID0oQ2Alt5ORLWo<0N; znosGzftr^c(ix1hq`hx5p+gdZ=247Q%uDkT%-!(NhU3`bZ8P-@+@N2(CIA@oT(7u` zKk0Hw8cZ0sPZpwxC)VP))uf+LtI?@wUY%tKkG@xVd|)xgxrEz$22+xs-n|8LDSLTG z12!`4RNHLqXkt$DdR%7Ad9xSpd$?Oe0ALFGq5FZa_G?!U5&}Iv6nVszF0UnriRbMx z!l@+F+7ZrIvJ7%!BoX(!u72<+u(?vvp9kzLN$Xt?ROPSh5(0f$kJ^6%-_sgftMHMD zeob`zKumw5ir^T&%xEI$gI?)sh#UP{)h@(Co?GSDNae1xB+;aY_6-6a8M*c?he>gQ zFoyNS_By}8<;0Q7!oE)8NXhCRB(W{;dFK=2(X7GtEaJm7RLgPFw8TZ0C#2vQiRlLk zANJEYgESFzPkWWTz^_@QCzpCg$y3QkTy4dZlxg;pf~AyHYgf)v%05Ww&}S;O_S--$ zwY<`)ZyGhc_-^+(>VJ6yoe|VIS(LUB%J;Om7B|Z4glCpm%KI3oDUb3!?4hB8IxFa+ zb~|;xpGCEZ`k!Zt>@?NG)n6P(b+LcT*HXQ$OW8(h8u;^27Sp?SwErCARmHR3az=Y` zW49NhE)Ubu!tlyUXtSn&Pg~n8r5{R|F!$1>F)0m)=@nt8^rz?{L5DScwC{cmN)Bz0 z=Pp?ajpmvlxEnp4Ni;w{zeXmY%De#l?kPCibDcppKR7 z{H*1z0@lye=gl)%`UJVzj^!WY-r&Q$8rG}d%ESc?Xj~Xi{j|z?j2zEG=}r1Y*CJ5~ zJ${2PZy)Wf^$FH-S{``EV4&bw?TWrJfo(-%Pa2<6yr9dT_bK;HyOx)ed8&08_i$=c z6OZeekk#13kwt$qPO^W7(REkYl|c&i1k2*bSLm4!Jxin&OjlQk@I9k&!%ki@U1$A+ zRY1E7dOWaOa;T=iFG&2L{B`#Y@%*Bp&Q4KGuBLs15S0nE=mqVmIZZ40_Yzh#hVbV{ zPZ;xgTf;JRFm7!SQk~5K`vD3sHp;U^@`XipB?{?G_y#EV5u?h+h53b^4`K~ODSB#B zd(X%v<GpWD2_*g%oo`Tzc8AT>4hu0sAu0|3k6)1-#AA4t zN<6p=T-AbcHf}=;*N*wn2G8_kMAYBzCmRB)jlC;%hO)<9V_KiW(;a|jPR@AiJC#18 zx4A;;m!db{l3$1inU=`1qP+~kl6%|#r!5j!1v#oBgq?nA@>Tq|p2gy8JTF(Xpo&wx zVISuti)&+K+-J1bbNf9^jOv)4lg8dMSy#PbT_K~xMfW%d->TClWk8!3srROonrW(y z@!J~qDk#yj^e<)CwvTIDEBLtxw3>|w|m zzv{R3J+yRHeePj4>dPX#TpFGihPU4~w&eu3ChDJNY-yU%xut9}dut%^RtkhJ^x$jG8<&kS*xV1sK1|04JKh8r9|c9YE|Mj|u5_UL{NXrvOd z=RSC6iD@hq{42j`_!*=#yJT=Vl%Af`7YfTyis`O~`^T;B*pA4IxYW83i4B2RE}+Z- zEhbO&5AXeY3O3ihTYV6B(&@DP0Dh(2KCy&ASX0AaPFhwwy6*zCs}j7&5#~|SII4vW zB(jT8QZA5Tqp%6BW?c(29k5pVj@s zwYyKMgMl|rZ{-n$d3LYFYl+*}wDL?OORaIA4PtL)>245meTj19F_M}eJ)}b3%#Q0n zgQ`uB?46GKleDEP04<4I(7pa>(#{KZVr9bljew&@Of>HV>_h6z>wx0{LqNuSuHT@eW@c`=IqQ z{!BzyQ#TX1zw}Kmo6na3&~sYX0sHq>3v(jgYBz zCEkNSso{C&`cF_7XI<}IM4gg$uPc-CKJh`jf$})^L<^PjG{RuXqr3?zFu72E1nk#$ zQ)l|j)Yws1Z}L>&sDaKxNe9(`{Ru%6HEQiSP87AiX75-F)23qg@GHjo;va(*40fKX z-*Aj34LuqzuuO1*Jp-WLu=a< zB>zPtIJZc=Xu<2>2sYEKtY@&VP~X(R$80%W6{z6~j!*I4fqU$edAWV^5D4JlC>3f{_i^u7~ z_DlH(X{W9I*)_D9nvhY3pu8et=mLLFF>fG=zbbEYpDmA`72aLReUrAcV}P5NSl;@V zb0)T+=_$uIBDV1`+Z3|iC}S@UXwW&ZvVG>M%*?h;x$;?zzs|SCQH*f=ZTv*K(7K-W zi}t8y$;d0o){5mrA>z#9!u|;nkZ08^682@S@46{?oaWczB(O=0ZH4o5Vq=<0c)W;! z#%S(=kpGM}oF4&=+HTGQpH(VXw$mnrjKhj@{v$fWjIpoc-DD(NTUbJRZuQxbTKUKF zGlPd^SBtItW2DD&FZV8!oXdRGRUkf}Hlw{mbR}_3%U9vuSUby0!Oe*OOjr1~LZ%o7 zd3OVp+Hmfe&wt8&9OWk3zm);FtP&NoLhSiGD07DOC6){QWHoyDx7tt+8_ZXQ7ai?; zpq!S=>1mTc%WUp^FB?fc)V@v1Nx0L(k`%_guu#M<;V(@P;m6?HhBU#U0FvfDzrbg) zau@f{Ca!dtV|H;B{$ab?xAPV=d#!&nPcSxDZx}Y{XO#apI8$3+1nJ{yrsjtC#H!9^ zmUN1hpj2wx4aL#~bIS(V-k4E~oir`{fN81tRq!7DcM&_FTEh}N^O>!j!r!q;D9z<| zyZ8&6*}v=$amQFOHg-%ngI9HBIJRL?+0lU!!}cP(z93z1&fo42T2SVO&H(kJ)YvwX zsvx1Rc~WsFhHajd$A+sL_DhF@wfZ)RW57<0zi5Z|Z$+N~vPmqp;wfFig;|_I`zzd9 z)+w71rZeMu6?f=+gYo)2X-~j*^-HnV`=g><}*G=Gi~tIufU*IXCw>)*8f0$hr*;&Q8E~pc?P{1-U8&J z&mxY3dN2~?-{M|u2724hWZY^DKI#%MAA5RB5AYkXb}GQX#n)Zg2IWAMr@^ol(CouV zSQl*3o*;NKY=2(?{0SUrDMkj=x1^I}A9m5%5xB;_OSB!|ljEH%NKiFsnfZUC}hI2=uaJBUY^iE(^(KyB%IFe4mF2=*7LU9g+ zC0lXqTZnJpLiQ6}gnK5er7%CLroQppFsF6}h1Mi0}{0`_IW!8b&;3o2ek*^RWdAK_c>PK$20MIXFrG^h1BQu5f;9N3;_7zb` zreQ81{r)}Na?~a=x3C-SK$fPdF>A>BNDVfTjPm<~1IWq${06e)`RIBp)|AQS`pZo1 z_zh4i(_{EDn9kVOp3tS*LA4YpKU0V=#BATm3HL)>7J>l7S@3lC!t!77KiiMb$mzQ}#3KCwOOv_@EZv z>dt9kJQvZJ1xe?eQ}LmjIL?B3u;pwvH5vAY^#q*>f5{53U5@y}WEHSciy5a=&FJ-v zB@wSMaQad|6Lx~O$SDb!N}YbjP+Km89$i)!EJf_gtGAU92J1od#Ju(opeG`&DI0u5 z*s3%_EP?^P7gWqYK;gp3yi=%FIFx&-28$4Kx(cQtJK3~UAJj2cPJ{_#&v@a7!(!+N zrwrUt>f6(mH4ikG4?nKmujcIysB2WE4&Bkw2Tz0ftK5M|9@AF%>W=N$0chIzqCcdErD(kD+&uio3b_n@ps*L-H| zM=izjtZ!o-#5}*{a{VroouLpEVf2!n0ek90IdX`H){Eo_^;Fv+h%g`Jv?@KkM5f3? zA|w*~>l5JTp;t7gtLDOIE8pb)K?KR?C!3I9 ziCwrJbx$zvXN5`QMmh1YCz-0_v#Y)hLnoT5uM9jGT~#yISK5rrx1tM6~j zd|ta#1D40CoeZoR+#(>BTfSWbV$x9LU6eq)@QArZ0?|bwl|Fcs+HkrNY zn4zlV;Fa<1)q&%Ch6ig_?>*S{u6D}Ub4z#ai{S&>w7RPUQt_SoBfZ7Ui=b1T*YIla zm9_}jM##gamWpoJY7;EyEqtfmE9pK$p}HULhMF#0<@*Xv5^iuhie1dUacoJI?WBDF zaMi~nLBr0~7Y;7$Dy-QvzQAHzYuRJc9IF$JdWv_}1A}{*DIjX^ZM+?r-}wlZFsUng`*_ko)8vzR%HHMd41@F&8=5bB9sEH4i7FP>kA-<0jOl zx}U=nXy^K0T@Gj_c&fP?{TMPw&BsJTmk3^AMq!?`C0JK@8u~ldfWXu?;sTLl1wU{% zP(M>Y0vJqK#5?>}tjRA9{}Y(vNG2S>mz?cD+Javn^Fv}GBm4Ep8&K5HDO3n-b7u&u z3-+Z^f?fmPuR4V0AXow)%p7DnwFbjRMWM^EbJ4D~*4TcGa{&vNi*-(w0yA-L5#7LL zz|YSaZ^3VOWDsD4q%$n|C#26&YeX?}aGwxy5#>I33K@&icO)W@px2vvQDNv-k+=_MvZJOHn5_(%fVkxN)d z3_6_+JC5r){0$zBd$Jb^p9EG7Od#Tc(DoF>6@b)m2w4OiP%cBh!cXJ1p_up#%1pF9 zz8&R=p1}X9nS!Ab%Jaq8D8kv4Be*$4{|H;$S0dZ@F7SYO-BE}?Npd|k4|;>V;m`=I zl)P$BDC{kHTE7}jBt2;hLM$UaG>#+MNcRuNdoFAq!=Voh zv(S&W+QTF0c*7|CA>Bv55y7B6G^laF|4@CHXei zg<2F&z|oAA8MMTBdfy;u+>kN^ z23PCucm9T~(BjRnA*VG{GzXvz6-A7KZC6fVQs8ssFnl)rlJp+*3&JFctw=|jMMXJv zsAd5&$qU`eV}=!DE_331XXB=@rZ`RjZglNoOFgAozLy8uY&kxd0=jLU+3^z0HpMqS zhC~_x^ilT(0F&BDDjP^h>ukY0$loR&-3fZ7 z@n3U;bvIapf5X}O?6Nk5Oyjm|DY8-VDbXD@ARXDhAN^P~)8{1CmKWgo30K1MIPkiT zzB_&FNxjF2v2Snvm7$q!Wgu)ny8#N`(sNu{4*t|NT@VTxY7eAQpxhQWtQ=NqSptT` zLmJ+e`671cld?yVIqK$w7buYY-F5}KL44e29CMRTa+-y6V7)#NTDN(^d2CzV^?jTB zmedn>7q#vNZ5SCfo&?<=>{lEC8~a-MO^||aHT5mjufrQ_1zXs181xPH(z2uU9Q<3u zw(LseJe_?)KgwSDeLDi3E-mvJ!bk+IPOGpF*~$rH?b9PiM;qz{2PM6TdY^Go>won( z_8v5D0x8BYijCm(VR!yw$g=)h)N;tPo(&iQ^iW3;hz>Kh$V$QRPV>raYs7?spMXc+ zRKMQ76FpD%+NTo}C!BC{!df^!CuU=x*ANce!_BA_jHz+9b=p2V+?M*LmTR~=P?rIO zGlR!uk8sx^$2cay8v2~%02ITQAZmdY#I`CBeif3E=YZ#+P9y{PUznv~-wAXq+2YqjHNeXZ@@ET8*sJ=NA_DB z7&(_n#~nm|fZqm|q3%?^14QTtxnp=M%(G+%JQw>uY=U41Sow?-#_%o%LHj)Ib2*o}oDRQE4EYhCD&wvZ*{`QZ+ z3(`}cLVO45t-~oo1?lTyN5p=*cJF57dV22QdL)^?vf~xT5uU@up5d!!d(YNqIB2n3})qFm4gmHIa+kPx-RF6W~#_KEe1*$~K3q z1RL`0gU{f%xS-v?5pkRs{ofINoU-<_$R+HXrpHJ=dzb1iY7XnFa1=#nrO_Xvt(Z4( zH_!@Z0YrhZWjrWffVs&?+!cmZ&_@&PaLIK0?d5FS0uw9gqn+?M3Rv$L93zLc z8sPV3B;!>?nY2dn9`Rg~#(#qZi?`CYqo#<~V+&9+;Y@HO+KKIl-Ns zkcri@<)Qa+H0FEnhd>P@#^EnMiN+bvgMQXO8xg@^I&M!Z?6EeWMFUS!zc<{5-%tq@ z(-EagXTBBUt$dscLb7D>7z1j(Huh>xT<4_B36Z?$! zDPS$L({V9=4!v&wHYnIa9>zf5G+yr3z)DSC%_`Vgqe}k>o~wT-UjcuvbK|)oFd8sL zk6fkFqi-We6^HAepmxa~mFz=%O9r#jFjgW$yaw}B5E)vDy}=#y9>SewFLSg94lxq< zZG}$nm^(y(Qri}GHABC)*fn*+ikm|9Q(*7RfwCYt+2qB|K`b#kl5Zl0bRW=e$X%MT z`bgwo6}H3&byI#f^C5an8XO;qQHfNcK3Fba1HRv*LEHzet;inqav#imCgRO-N+@44~uRi-x+>qoI_pKTJ1ohCzMtpgP0ykw>Jvg zE^u+I#Er4jcRPTuAAH$Qgd~q&Zy$gh*f*td9O}HgT;m2E9tjtdV3C7sSo>g?d*2dk z;OMS=#7l&2+kx63#ANfDA_B6-G?_s~@${8Dg3(yj#}EmoLgwyWgDn+qbwuJY?AM2; z5gycd@9`j43M ze;vLV!fh|dE1_8?621rKqQc^j!F~#N;_t%G(@FThh`l%jVLh?~vWXCm(wA8Xd~|E} zIl?u}P=blL0edL)5D|}i<(){pfnT-ZJZT#tZsH3dhwmNp1)2~EeFZ=_;$~Yp(2Xo@ z5CRvG-<4|MD@rV&;jPiGvx?^zjc?tCyNZ<=(ZDS1D}@a3$3^qS zKo!nJ{U6W>EW-Q*ZUIElZTt%0T`2*N#>2C&;cw!<#@{4tBM?GE2?KBJ<`-F;xpFs*#( zH0C*NYxgSbGTN->Fsu*tj9!ODQ_Zq#*nLzK_Y-a^bqA#qmrV6Qx8MxaCH0-SSCmgB z2%wU3A@dvXkkT9PiZ7rDL(bw~QR2Ox6R?!o4l9W>$%prD#?0pU52`WY?8(m87#MqJ z(*}%^bw?+}+-KEFZ)4q<-?&y-B$G~-VoxyFq8{OF83T2HaWFu8I-&JsMS#SSinLzM14Gtptf_X8L-T^QVP1-)A!vMfXYkN-$3!g%rB zC2uiQ9-QNexx^hK9mjfbXP`W=98Pjw9`-R?U7U==uzEA60rQyvNI zWPAwynAb4=Hm%!XD*;30jNL@Zo`c+)!O-|92Hds)*}kJ^T?f>q;< zGL}X;QSpoQOff-_%np{11%I-wvT+P1`HWJLZ!&M(nmnwZ-xOphJG3#R_J zax(7;2`#hmCHNQTSYRoZzvC3+f2Lm>*D&LZfA##u6dDAr6PY{oxrQ#*B;8bn<8O8y zqhQuiH4_YAyQysGN7!n`fvQ>T@ACY7UyfBekT#baD*hHTzfzbB?vT#gQ3fd8@u&FN3(_+caob~`G%PQk9As? zN1w*_)wETz*`2C;d7C&fiZiJjIB#UzVlufpi7BX?7cN@1jLmyT?RIAH+X=gE2N?6a z?+&Cf7+u4>y81exXoUp z%gI~J{-}PK8qBdOi(*D{qh)u38o3`OLzb2Bx`dOQ1^is%?bajoV*{@Jg^cMNhIIbR zNb7xLO<`c&A9W)b4?6cto0*~QBw@>JZH?uRU`?^!pzUMfmb{8E))(WQ++KEz?n}xQ zPMl_J^cK!H<;ernS|=XA#C!Gb1?;oa}2 zUCGe&?UmePyzdFXE0`&r+j%+6!)-5Vjx3*+IpsT8>zhJyJ=v+oS1B~k5S==@oU=vk z9yEcQE3a9$k~di_bME3@rfRnM(7ku{uD?e|w}0%Yqwn9^Xt_gwwRxe&%7_~*mqar9 zHgsawm}7eHa<4EsT}K)^nJ?O#%OhF&E%iB<*ne8Kr8u#78D2-bacZ@*1D|ncD&8$y z#yu_Ra^A*M2_|kfH2&KE$NDIG^xpC9*XhKrTuTIf>-LYDKN*v@d=~Fy)NcHQB{0tP zzvZrF`uC9yp3L>#lgs{L*|w{4IIQE%Rmr#5Ec1$}_nalVw}HnvS5zg-=5vM8LFYrf z6hYVSZOGG#<6C@?p2}8ft{aNR=T1-Q9B5Ke*Nh6-jg zoKG`XZ-zq}FBBl~Du&(Kk#H=tK6WXb#5x>w9M0gZUU~v91vJQ&X@RCd&a5;BAF^dnsv3Z1vCrkVL!O-Wv}7oO%Z=%S zDtXC497x6wSh@$=1}tFbd?HB;Bv94^41rM`5dv1VTY)NbEZwfy!{0#z}2*nzZ z&*`B$ep_iAmc7gjOjiKYy{@FgaK;6U;hxW0(tUspclZ%bHLW$ryMu}+^5?B zSHZcJbl@?VmZt${gT_=Em;m01{t2RxbI=6vAe6OK5B&kDomN00(8X;q|1laqu$2D{ zUD$Pje;*yuoW?(m+}4le-$nMzO#Jsq8#xgeiQxSEfIY%)gaCh}s^STdg5>4R1vE%} z>IC2_5){1=oPoFp-UIWIVN1neAAHj(1$+l@+)CryP}ln1_%0N;^D=)SHP>43|NlgMj&IdMOk%5EY z2z2{WKDZ8@?^FYJBg!pByb>vI!+aiFa;M`8k0*&}s^Ha#H){QOQt_XXSG*0PA{^tL z5$@qJdGCeuXg>To0)F`+ekgS-*N$(YMyCYvKapP16M#e_KadZs$19drgCnpyCj!ht zt2VFZo>7OapT&Ko%5OiiE9Pcy;oWtjB9KyNSEbqC``OiAHwV(6Tve}f+ z`D{*BrE~3#7eqeXSi@@M3zx1t!m;7@Y8Tc|<=#`1rPp{fl=reZJV^dL=>hMV^j+jH zeyaFmz$N}p;nt-~09&fq=@3BT9|pd2n4R0YA8~Z;A6s^EI@%(P434#>Q_13-wB8Wr zb3QbUMwW2x%--xm?mA;oT{%~w4=D}cp3(+oedH}yJx*fqtO`Nodj441`~VBTR@}IB z4*!Z^(CG>gLhK)y!EsxEwtFNeuJ>T`eNKA!1w#iXx$~=HkOQTmk8fDJ>h>N zk^XS@+fA}Af6m0gfabZJx&4#$4>{AF5Wb)Fmfi3P^}IK<~@)d^!UP$7SD3}$lpmV+d#56ZvVRz zW1ra?VJ&Ch*z`=loPBxlq&%Mey?+Un$Z_sdK>nPB?l(*ghv@iPbBOa->-XXVoG;e* znSuc)}khadIBQXH#d^UuN_7eCW8&*6p%y+Rtv? zZqSL@OwlSRxDHL<5~pz$ z#?KKd-bn3z|7W}$rN-k5?~v5a`A@!|AZLp|>0Xh!VLWlDvZCV}vAPOrLhw`7UD{PR zt7f<48SY$r0k6l-*FEE9VZ4TUv?r9d039e&gmG!nNkudSCopt+iteUS7ww?883S=V&C@V1vJ8C00h8gI&Vx zXy3V~(Cdw#8f2)9{;_;E8o~IIQ;SYwO;6?{|FFHHypZ*rv;aQBTK% zZ4u~R*5Br_XbC$=^%?bK_lS-nzc|xT26Bpna)gM1JF31CDdEb>rX$OEv$9pl6yDaP zbMSk9a^w#93jbYzFT4lPdw9X^V2EP^EC=5Y7NS}FAw3zWBY$aYIC77lVVa7l`Fzy` zq>{g0_zDT(-$MG4>A;`ti|{KTvF(B-QiC7iEu8A!B^o|Z~=Uj zZ4ZaTC+ZwwC-`*98+aIeKFbLG55ABz9Qq1hjI@V7z?c2+LGR#$9uCkOc%!2jdI`7p zuY;ROSyvIvAtRf!;Yi}EApjmp^eEDxm&7_j3UrYe0eeB)@y#qI)Qs2F3Lpw!Tv7_v zVb8LhAvPvY?1T`^JK`oJL~r}=fD~w%$81QCym#z_%m}a{68b0^+L;Ai74xjwP?zYl zJ`^ewG33=ylJEh=g93yJPz~fP*vZ@vO%Zt1Jb?b7I*KoWuc%p>ozPG+Cou?`Nwh_X zAb0$UKLz>Y<2}YgQP^_FBTy2Ww0;Rxq11N7LkWtrO=}?s#WYQcAyFC;uwI0tQQ_ttkczM8;JQKukE--wxDM4NIPb>xuo2AHct`&%J+uHBIWa ziE<&8@eK)ATsDF(=+L>*57zn$N#!GPoTa6J$B zW6NEInSW{1RpA`|!NCOx#^1Q1k#mLL+Pkm8#5ZVvvO?H0in8Tk#4WxMRl6& zuAro*ntVjvsU^TO)Y`fhrZai6{#H#i89`kn1%*c34*wJ^aDaX~!nX82O7#7O%|d)Gd)lf3%*YAyTZPT$s@>bsX5JeI z2h<(N>b)#@(r~~1PeBQduy|4r8W(E=sm#W!QWp7)4iS2i#c&0T^t2D*lCM+-oO z?`w1j_|AO;(gv+_Fe72m@vi%1Ic(SBLk@+Vj10mA+o?2!2Rv2u6Tb>i!eVjG?=Ho| zZQwDD)3Jl_+)4;5hL;p<$40+Yi);I#PjXbM~zPD8%HuxxiUY)pJ5atA#Uz6epGh;K6zhR%0yf!`yi9qz)-2(6<7|0$xZlkiT_bbUS^ zDeO>4u)9KU;Veuh*op|SK*4g(ZS)znu|ba-slW6(z0Q`W=_4S4=M1(sC zr{RknC&FW}KiZVoLoMGj8PjTnS{fFtZjue4_f)&7b*NUk9eRvLD+bx=$PamU{c>cR z%u;p_sgcU^vJqzql=cArPrPXLGI+1>e3(Bh5HNfv!V%;LcNRQ^sB(0Nc4FsS_hA)g z!n_KzGev6p(R0R0(sw9R|A_2Bm*{j*Ao5rn!Px!4q8^LCG8q`njaEyb>@Ya@puwkt+rfPIg^8xj3wALCe zbwlS^?h#LrE9TXp2$2}Kv!)^uhIw^kkP*6~(#!A>O-F7ujH&LWO^4$Zm*NEQEZL#Z z9nd4mh82gPW>KnpDU?IKbS#8s6Zy@r&<$PJj5u1_Ib8JyyzHurq)nzlaVF65+gUEu>>mThwP0L9|DjuJ4Mif+1sdT*bs2ap$A8kHlF z)=f)Abx7)90=5Pjv*9RzHoULTkA51ab@x_(fZaNF6u*TYweHP609mcuQjAcZ*)et{ zv_OxBw1Mx`7gtOKo8-UT?Z8CIpN@KPJaxIfL4Kh8ndOD-Q^f~el5APkWVu4xP#q?i zA=y@w4kO~vwe{?CV&6JZy+Kr0f2`a?*iIXnrx09ij7_^iy`=ZY-KK^zr-n+&*(|Ql zcfyym(CuG5m;1NfPfW&dYqQEO*SJ_5WYcPgYNgWL+9$G$lEJ#GRI&JH{SN51IHtkO z_7SORaQ#@})kd;xP&kdQ$g>e7F`Cl&R2}nloQagOzK50(>pAW||KZoTa<`xONZuFw z6<7e!*m_#}x}n;r0wF`HuZ6ZY?>R^Eh-R5zM{g^8jb?-Y*`94FD7EE750QP|JJiWX4{T zP*TkF)(jONVXl|15ieue5kEu($}LDe zNH+53#7!hRcvnIv<5&1fpYy*HQ~KhW*jjMDy#dujLtFlktmXO{Tg98Wh}uCsn|nyo zD3Wo%6CT3%yp_NO;W{45OcU(l9ji?cOy@5solVvA1vwkZ6Z{vcDdaF9KXwlh1l$O@ zi8H_?pRL$m;PJ(Cu#r%h{XsMqI@vrytcJ!Jc8NYfcB)`e5wu9G6W)au;RV82$P<_% z*a8JGx&(8fRWltHiFJNM|2ursJ|dujt^1h2)nT>qMgD;STm*;=&>q(ieMz>L;ph2upu?$$UEqR z;&)^edN{j>7(hExIK&W?6*~n_LE}P7unyGThlBn=?k%=MlaW@3Nk}VF)-+P&DV(D_ zA#4`xRb&fi2y%pb1$ycy+AA1C$#^`9OWD$wkQpj=Oel^cjuEf3rx2cmJoy{0 zBu2;dW3O>EWG)tq{q#vdd$7XAGteREafc;H3hH8hFWe+^)*cW#NyYMPfl2aHa8NKy z!a@F`#Nu<@Hu8tqv9XG*5izQoh`Yk8MIFQ%p;s0U-zQKd^YDe#hL}i9NgfG4kA5X? z``DxD_~XT6kgeDYhZtlO`mcGm&`I5_c_T2Yj>y!4Im*|9AykLb1{p)mRV?LvA(iql z+F5dhEU9Wd0Z0pq9P#&(x~$Q7xtNS3?>g}mC%1<{2E+w~Uu5t3o#p+gC2+^UctdtV=O6S5s z+${e)vkjjnlO-L-xYCi)o6&n>UT_||O8DCQA<`vqTRajON#-~R;ar?$!~|j1PwGQUo>xG_plG-oR3p=aSClzB$ z<=dhQQH}IMupRPQ{KWe&WUX+&+fR5KC2(kiClE^wE!5ABN|l)6w{4b0Qe#_Z5f{mx zW;6JebZ&aY{*!37xHSwVW}9j&s&TymE7*Wf)u}S}VRDT*@jLpTDl2+4nxvSy@+z`f zdd6FZOb~~;y@V?Toeo=}L&P2ZMe2C3T6vg??$(G&@k$k-yB_GIEI#QE1%oe>M+xl#9ij3%~1`ZMXyF!^y3Ez$>bszCft#`}WxNCE6 z{za_Aay9)2W@8FVj7K^8$f#Q6nkIB*BCa{e zkdY5JGDSHgb07u#A31M>1_&cGeO}CZVqEw6Iuge_%gd)>-`iU9*;qsK`SbzwndM#L z2sG4ah;l=$I?t6;;s2@jcu#`k<*shKpcXOP;U@Tn5}Q3W56howhpL}cypr{(hgFRc z%uxAPuSA9@BWsd4mlcV%Wi*jIqYkP(Axo^^TX;Pc(k&i8cGBk5zuPT~wM9tuw(13SB+G zahLZt6gIq-?V-g~`b+mUrWU43_RO2ifrPl zT$2bIf27?SJQ`3MO=^ewpK4I$-OwlXP*%~h$Tr2{#>r5Z{9fZ>wo3Mc&TJ@_O=q}P z?2tMzhZNkFxH4~Nod3=6U5R&p(|d2!7C{&1;L4R$4)>&&nDpbla4jQd0@Lj%>>ZeD zxUC9jc&JV(^B98?MA6K2BR(pIGdrP?@Lx7HFFOgVM;UQodH~=Ij&q zDTZ)I5f1V?ZZsGoGjg@8Xz4-j{d#Z7Q{IyDCdn|KIscY;9)C>w6VY-$J8{174`4{t zV(K&?4SG$gzS7er&{v9dc_?~AWG_>ryD+nCEGpw)m##!B7~duJXn5U7aWiUD zhKo+2lk#o~-=f3T{SwYVKCh{uejtw`Tgf}fxsTyIhY$Roa?v;YS?KfJog{))*il2~UYtzLuiS?xqMUg~7UWBlLn6Zv4 zFym(uzEfhnFfxwhU|)l>i9$@}<%Snw(_DXB3^mvnq4DTkO_6+r#2^#M{3TNbSyH)J zi`eh@6Ab|#1^NAkaj_vBpC zCCG-DL=f+hUI)|3j~+buzB{i9cu#Ss zBvLp>zCGuHAXz3}>p=;mx$%!lp7>WpHBl{U4%~rf2v;t@g5^?Ou39vQ9ASS9S%a@p zO_H`*dL%KDN9HurTasuR2VE9FGo0fjiWlgav>l>C-Q4O?LW}0F;uC`F>WG|t!DQu$ zw6j#SA}U@%u8^rCoC#;iKY;)~UhK4dGd4l!<|;?WQSZCX{;D6BJd7l#RYb^l~PqwZ@bq!m-M)c*0y$stPD zRafwTV!;7pHVSXMrMF`-6s2!jr8x zD*3`;&8Lcr1%6F++0In0d0gr)vfa?KT1SxDzgI=z73zrrd$2ggisim&u+-bN7+Efw zQDHN?rpU{caipB&6>t+jl8y`nyt>R154(srqu7x=~5h_4NvDk29?unmJDi+FQYwaLYrBNl%KxVFGV-erNJV z?^O%J5xT{74IGnpSbaL}rut?>Nc9la0L`^{hq9(IASX=WLQhPy${sSxD?_gU`WCA;t0z-TKX7Ld{zoCG*tgE0+g9f!#w9}l4 zn%G8^mZ@Gy52%u=hS5J1uU4F9T*u=S2?!1Oz<=@=KN{QkS_jFONT+a*3 z9wV#Z?ME*-gh&p~vztT_xZq zY|$nI>#!r5)c_mVq|OASEN@jbu(7^N=>=S_9HOuTJ{8`TeFJ^6w9-o;E7e}o4epA2 zBMyK@hf9TLp-lf5f=p=8b0PU3^wDJ~0m9*StFRw%vkcH~LM{oOXspN?Y_i&f>;;CZ zx{-FKMrlCg^^+9>gj>OtGm+B5BH22mB5S_X3#m=nCz*gW#x;vJA++#hVG`2lf1G-a zusr9IBBb19GGUA4+R?CPBv-moJA-5ioHZlKKr~G~l=#J8tr|-lU_4j+k6_d>jCE_??3L(nEM>=AfhxeQK5tun@b(D!9R;r?mv5;JuYOv$r#m8tL*X?Wvk2vLcPR z^qMqNy*lrQBv$z@{g-%!LX&h$ZNIvKpCoNXCke^>aL>uHzd%ZwkZ4Kf!4r*yT{UiUK(mQ2#F zO;?J3s@ErRh5ssl#Ox606q7?wQeiSjzjorK#C;isQ=-u>HrQP1lD!{dApoI=>U2j2 zc1n4%O$NFt9<_X7XDCKCx6lG)|7&_xJzo0J;#+b?^1_7WjThfCXwqFp$92s~4#Lfv zu9z}GmZ~rmrG_hJ`;`)X(v!;y@lf#^m&xcQ!6ExtB#E3Lkg33)LCjrAcC`W;MN`KE z)@k{Xc5cHC+1^%7m0G&BxxXYwvcBm^Zm-yARRVpt#))&Sz&c12XBqxGdHNW!=zpkNI!)*>5>%Ug-w}=q^|G1RRw=&d z0~#jEv@d`Uk-tPp%h-z1#2;2mW#R(X=@Dy{ZJo{bMkUEFB-kl3)HFf zq$FSEE(R^eRsNj0GvujkHhYL~o+OHs;PF(H!9Bciyr7&PVWT4}fG0w(HL)JT$6H=B zcz}=@ZMet2WSU7+(G-Tk#-!>%{VMvTk}KMq^b2_-H3^Je>62A|F*_6AE8SR{=r8h8 zc6Z20X)|Z9Z@Tyz_nOB?;XD4wg`R@Zz$%;T8Zo){K%;Z5XR7w^hB5oxN_mYB^_mV!NV~b0K<<>^ZkDq)qD1qkLn; zwfu6A??NSzv@ns{07lwQCAL5*0uReYb|(6_na17?WSFLMCb2dewsW!?Q2jd2o~m%| z7p_h5JB^MD=K82-@`kQktJLtQ#0157{)A|*ERVk-gee&S;(eEkz60+(z6lqC>V;)g z3>0h|MWn$)D4Jz9pMkoX{^IxX2aSdNE37ewQT(^{Pj&r(W93$D5|CV6uYM0;Ir~){ z;NsdBitnKPnm2L|*bwa@y#byM36Xd~F22)6GDz(4UT_e)zmP*dgF|dt_!oF1*=Od! z7m!+$1ALA5&2SXH!c5m!z$fa%bd%wul{T6k@S&n7>TLKxPN?!Rd}S?1Q3*d^BbGf! zhD6LXe)75MT=%Co>|0H?Z%z5Zz&_OA8T#o=df#Q0%S?p=BQ@L8LT?^hByLS zwBn|4H~PfmA@v0{FEo=bXqxS1JP4ge6q|g6uV8<}6QPKEK`$0AXL#vc1kdZ1Yc30b ziur23U{cXYl@ryGO;>E9LedV&1IRlGFQofPepH?$hWI0 zk5XidlG5^JFN9qQIw@1|BWkYrt6*+0L&T%}Ru~0e$#jo%Q~*)Da2rvJ*VxU+aI795 zX3SR)fKLpwRA)J2-3jH##$Q^da&hfcjk6-6e3t5xJhyOy5|pvBw2Em`JoUS*OCnEL zDfJSYA}@+Ji|T^|L`#GbE9wPZf;k?0$S35vg?oru1kWxSTa3@e;*FyXe9&8eM8A&x zK*!caG!|%GwDC2d`i91>Or|2$qYLE9<;o{nj`Gur^{HA}zPvX6vE-f1Ba#$XNp`OM zDSRLfSrIB&D?H}WPHF`67w*LmlN`Ge^cub!)fqN5c>tKc!F+`6qg!MGXa_WZ8w;!d zRf`NG%Z91^bbSSr6i>7XnS*jzeKyrYHcJ&9FOjTQ9E|i6JIKDS+$+>cJywhpj1uR0 z5M-FJdf^Vdo~pD1P=rW8o*7D8yZJZuuFaoV8to%1Omoo~n&PXo)KTWWrHJx_$tB;Q zXf^0F!{tG`%PHrjSG9k}`$;O*K@o36|0tbS0>U-&;Xc=?{gQt?N{CM)%fdn2Q4npX zKs|{oNW8(e^CCY~_qhEIYpAxZEx4gYv##}zs@uQ47Faq~xuuDn@2}E%V570?Xs#+$oo!oRVpeimcH|vbEU+HVpkxOvXv!jKmdSs0ulTM0 zMMRY-SL?cRgy4)S&!?L5lan4!M3rR6LIb7}p112m+Q_|VW#`d~NML2h?8-pa&$hIx zFj`*=w|Z^$4(r~Uy3);-AGLyfv)R9{J=4>;y8dlShdzTAzWTMcpwSqSppIlr3*su> zm`d+r`6TvKcT}>Kb98>BD48di2T*?lwdfxmx2q5F@3ni?XjyHooZ32CLUVszLUn%A zr~1IsBFoB##rdfwf@YKP*3jG-lv1VJMlW2wS96phiddrB#=IU>qiAO@^sbR9Iehmf zNeK7te1`A|pE2(!#Q^6b(vB(hm3&THb;E2{aLdkyV-3%&pK0~gLz|)+mzRz=Ya2i3 zk2F4@@6G5l3}f`CxasVet*c3m56ciSM&-fY5|pi2z`5w%Ae+nm=)OgKg}-Qiix2@S zZAMd5!PCgZ_CmTJe`M=E`XT0pmhp`62DUYgvAfD->18ICY%u*`KFu36#?QAD8?p6Iaz%gB;a|L+G%Qb1h^|%2Q7xY?HuF!(!z)!M% zXr%XQ$w7$eeo~}@ZqENKNP;7628q}3320_(7(9XN-P{4&FeW#Bhn?#7TGqg}72iz* zuuJh0<2cwmH}$s>Leg!tX1Flvr205a#w9CX!y8uFDW=0G0uRZ2;eWk7BOW+a%^gC9G=jPoHD1X1%lZWmpeIe(DZm z)VlMUFIZg?re26;#LZMDVynX6$#HB#V5f8k`nR{U_%XWP{iN^!N?+hi3D8xxlL!}d z9yq)Cz2F=t+L|L^(-&K|3zpR0G>@R(SGX9T-HL-6D1A%N4&m*%hsnx09{ zG#V|@lJMGiQ;Yamd6#j7*t771zCvWpS)n~G8oO?uW|WYT_*fMrxECu^)Cl6j1+rcW z3Cxl_BzJiI5YHmsxE~XIA!aRzBah%Aw&i#QR?0u#?4TOP9@?Z-E~mXWe^AucY&0dw zca~2zY?nPNtkTbw&B@-W1*NOk_NwbG$O z+2Pv73S@1Fx>jDC=%Cyni;Q_BeU11`Vn^nue-QX&0{HC?}|?m}Ggp z@=+Kh<;p(<2*jPzUtamb(~@ECe5ynEX+b7YMcuUh2OCGUa`T(^wL366ETOGY^#i7X z<^xq)<5;Vube_K6@+IG>y=qR&8n5v;ZcbaI!t^)SxF}9)f5wcL|EaMF3zK>)?*ycX zbLB=aFCiw4buXkcMPC=B5q1Kd?Q8S^IfZkniQn~|G1D@<<8J*TQ)9bV)ojDLws9pr zde0WWd=IV8T9&z9{nesNy{KAc!V+#PM24#9Q?j$VHDMzqAJzKJ}kuDX@h*vu|_tCq{hFiJHUpsa&c zB5h1hNHwjYBhj{oKN$m|^R&IJVSX>wQS2N~RPlhb&n-jd&U1HqC@$k~ocmP(g6W)H zy-(`t^dH?n8|>>xb&YB`R{6MN46Udnqisr~OWyvL*^U2Y&a&Fkcci+TUoi#}9F5zU zJy9R^OjcLuP^~Tdl;0!OVa|I`siKtU=th_B=BGJN`kkeX^MVA^!C##EUT3-u{jcso zdS~6~&RB*+WoP?3hP=e4wS?)KCv0wD9?ST*31AhZ4mBsT7smfI&SU=Dgvs z_ZDw%8RX2#TVOrNkz~j$mpK1R*=XwHYT~yUcs%zglP;2XGUS+MC?E7Yq1*$k@YKs| zfzNJDlFML^bFRn{s+hN(iiB6OQ@eY4tj2wvhk4s;ueM+3J+9c$`j$Ve*sEm}KPq># z)rK$4m~UCeznqe28V7jC=j-nS=BOm?05~i}re=UFzYe7@_{LKp`v}#!wMh!0zn$5_ z9dO#b=j0vu32SHfI7r^;(YXL>tBq?9fYw(ywyuS`i?%e^LVI%qnh5Ap`Yy8t`ZxKF zkqu9a|5G0ihenOk&V?I7)~a5?WaY)B>|Wv%PV z#|CKEIsi;v^QldZG0V@k^kbPt#n$6kaL#+nJ#2nD$Mh8&pS<004f|vDEnPqQG4h^< zkG={CP-UUV{Ah|5XuBszHWtO*wu><|$9aq3J{oM3Oin=EnV&n4P&a8n`(sL6)6)8# ziY@1~Or>TN&9E*Z&*b!5qDd^>-&9BjCWD3$;?wFr-ArP0b^b=87E~CHWj-t3>W&22Zdv#sw0@=&5wB|Tjc;WD-3aKc&-%Lp^t&2By zNaiJV>!sq%xaZn>ktuSDI!<^i*rIe3Jog(eA3=Td43XTR#=C71ttCe~zoK^H|FgM> z|BL;{u<2lFdh0i}b*Ou*p0=D&?J2!(eX0DnK-M%?@i{x#?5Y^E_Ng&iJ}+st-di>= z&ZwOyofmON^;2RKT&%budglALY*4t(bAf~}K-|^~zfsGazf#%6-!>m`3C^PrbWAY3 ztPg7o)Av^KTgr8UQl?d`)fRYJ`ZTp!FHI-aF>5V`r>gl$qjfhGPvdemN98>cCRLxT zJUCE+NnZNyldTiicutcz317MO3R?sz^G8ub$xXJ?aZmhz^q}@lmJfC3TVI%Kt0uHe zHQAR=wJtZ#%)ent*6+*Go9cBXYZDAI?Zm{xI$W)dbI>%Z=0udLvK39ilNDaFYrYoQ zNa?s`Kg1Wrfo`qBcwz4RN#p>*88X*1MJR=EF^uB`r<&ENk;? z%>Of;%knbKGe)OD*B_I&EBgWBt4} zoR;SewJ|5HS+v99pUg+-wn4SVQH)NXy}BsYGLI{2jD6I_Q&G+>ag3L);Ln~rRCp8k zLVL0C&zi*A`u<0?(<{2y@2I_A+|(9Z^7p((N4n$$|G&9m!WvLZYaI-(@2Xwi zKf58WqPFjC!_(s2o=Y@lo9MaX^|t~U+g918N&XLEP?Y}IVy zZD0C_@+W_nj-SPK5HAA2%jK_4 zIosmRZ%fE-It=_7eaRdHFvAxcjsuSaU+TQUVjrQp34G@9P4Nw4xpd0LLeHIMihjUV z^Sr37$f$<#8#18a>T7+=pyYD9o@r1<(U7jmP;$<#_UBM-dVlL-NSwlHHbcD$lbc+j zThU6>MtDNlXTuUWGVqwT3+DMWs%OI6JU%Hv_>0SCsTOf^S|Ji4S@Wu?2&AX}@cJ#7 zYqh3VicK!N*IkExDm>I#jo!*>X^%utrn6fe&|N8U)*tBl_-7Uo+8JGMnvAxE-POy` z_Q0Lmsi@eeL8U~QONS_iqvbBAr1t0)!V%#8axy_cVw!WzJohqIremJ932m*`L}1 zg#PPpx6BrtO5WS_MUWL=VU|%(qK6viQH^1^u7w&N$kw=$6DsQst6P3>6uSGP>%UTW6~Dx(W#wc`qI_T<(QdDFU)%@MLgNuQb)NT03VVLBll z5>;#{l*|tOu6-|F9yn1=7uorYRJ;_9^SCKnM}2d-FNVm|PP+vdVX{deV)3F{MX$Gh zMP*I*BHfUZi=A^d&+@Oe+o->1U2gfQ`giSF>mB8dq{Ei|ic_nFrc!xVRFGkW3=92R zYmpWNd{xhtjPm}jP>T9JZb-ihlU-hl9jH4_mjnyQVjBkj8oyiX-*d@4wsKn68Kb6z z-*LdOCSTIFPro`#-qNHSwN`EgHOG=fmRvQtdYx&E$}MV&zF%=ZbcZ%Z-WYI4bzFMc z`9OaKq^#b%B~|qs5IxLe0sZdMm%8rK`bmykvYwsW~U#wJq0_ zkmc2~((upP0IRLOJ}JojOE+Tm6ytz~8F^K|R`oO#(|lI03)rfn%jw=H<8`Jm_|* zuZZpKC~Vjjk=Cki93T9^x`$ro_rTo8c)xs~LBpclE46ga{Dmp15!@XP!(?oJ;hX}| zCeXKf=hl-o$I6k-^|f%()s6Ob-nobSpVU3bIJTZ%e>(MG?~sPAYc_VtY1UYv{Y>NG z2#?mG^w+^htV@_SeizM7ENJ;|!zA{7-i z|D`;8)A|N&(U!q{+WcH&zZb15qq*;RV@0Z^CzI~JM$!3-{x-IteJSI4#O#&|=D)$) znoO)0erHTtj?MBzdWxIwF45HTtP2&&N&I6D`BFJJe9lARIjEvKcS{I8zC3K>L;9&A z^MIMLBA2&;$B<^Aeg8+nSw&U3a9!B0V|SpEDj<>;NC_y2gmef<=k9tt_q#jTY`VJ} z?C$RF*5k3e_5c2xdAY`%W2`Zsv2NBhu}uWs(jh(;0yp_e(l&(Fs{nhy2{k8xKb}36 zzrc&D&zJp$E;yer{sv#SYc@VXUM$|4uSc(&8MHI7Tk|ZGam3KP;r$#*d*;{P$-tP@ z$gVTMrbPRWZ2%SP))o$Yjqq-M53)kM8};Dh4JLIrA>8+2%{+Lar?xT-KD>HYSt6ox zK2e;E#@cloBQWR1r}M{Q&&;-KO7X6Fn-!0V!raEbL3n*;OHTw$rjF^F0yihz>lg-a zjd|PJfD8@)+3be|g$!$Wj+6&Ht#d|4_zqNyQLblpMK}6rb$#g(EZccs(Ru8v-C)5f z+_3n8UO|jByQ`T`sOA+Z*raXl#=dFz{LHxSe%vl)e1OaU-je3W#+@x zEhKy1dHGNBXzsXP4s|Wlta}o*J4M-XhN@0TXxmTWG2)g~N*Jzf8cXE{*Vgw?sR4$X zA5^k0r^<~=^;}ubr*c-yN-C)Y=Us)ns3^NLhLcqEk|{bPwcgxT?M(TajFM}qu$<#P z*JTA6kGmjQKuSo*O4+!C07XE$zeR1<%(WPw=5tJ4cv7Q~VFydg?QybfxOxiF+dq1eVwo5zBe|Pmn%_^Vm73u0N9`&UID)s6`MYohX=YoPy3ZvZv{SSHN zk{HcZnasRRDP_1OhnQE=nC#fDo&RfoQHQYb;+79>-o{<=FI!d=oQj^`_|R}9EVy2m ze<%p4b<-d6*H_i+`h1KPL$q}s($WZxarLw!NFCvif&tc2qiG>@!EjY?|hExWy`rfzd-^u~KNV~el(53fXvTzux0{bw|Kn3V(@ z-mf}cDAIp)PBQ4V@9nPZiqtQbfNHVwz4>Q_o&3#w4{0rPGjq<)8@WlTQ?^IuElv~; z{+st9c4L1XYfpr>=NJ1x$dRsS&e09;+xxkv){Sc!XdC|oUw_bK?hD>tY6=E zZg2$C6U%c5+1t63KV`$~_PP9z>&CR03a5LIZ=5f3bNf;^Nu0TYs_K!ParjWa7Id|B zFFpcow;D7~M8=v9(JwQipE6%ln;}IRNs>*kyeo{7(^_?m6?31vQKiGHGj?xp7Z#`7-)bTnm+0TWTa+6+y0==iEn-9WXmLo0qJt;?cfZZ%5<}C6+U{d zLN$|EmH}-$C3%<9Gw2HVCYto!2I!cpJ*R-yht?+JyxQ$%jV*j<1zvFvX?2`XN~5SPTr>qsUNqex!KawYwcYsjxkr>m#QqGAZKGfy zg&YvUZ3!RxX2Hi|ntLX|r^DZL;>h$6m$r{c(gsOOHqznO+z6ply$;t=DC%~)8b#l% zfGb=v&~aMHGklV*t`Ncd7dhv@B&GO39^nolliOnOunp187jTiErr`nJ;?-OG48QAku<8LZX9ZZ^NF+I$l*ABS zw)Mu(Q?mT@ ze9XpZR#SoV_zFiVBV9RYFLO$M)>p$kO-SkSV(MdNb**A@!n4}D8Q0)lt&5on8^$-) zNgw+K*Y`?$yvUjXDel%-*(!}(!6_r8;~WCxaBkHWwYOnRxKC1n0NJWJ5%Zi**3*~sn zb%pm7OP2m)z~ljoUg@UD0?fKpJSNa&t&EU{q}BIbDg3?VOHY#V+-93T<#Ey}M z{b74s>HNdN^P7k3PX}NPQr&gmtF`^wD_#q$u4%5gZ7zSKzP=*5WRI%P(YsKr)GeKE zn6BV1`m1f1yO^C;O<=y6lC9X z=w*|kAS7T@!&JjE->zCe{ZG$7RUF-Ex3%RuZPg0@lFb@dNB6>+s+&va=MO63#gnxg z6=TevD*I(d6FqaBnU%Jv_gzKOmb`9l+3xtiot~xPQ9s(PN?gOXwA2?p4?5XoURW03 zRNrU}@io@mF}(NuuWEdLk(+b5gWh$8cgYZKwWFtTk7nr7CHe8Hw8dtcuZlxvzm>`I zxhCBV#AKy@?Uh%%ZduW7TbUGpw&Py;wWw=td&;(ld9|!A^$6-}+*y1wU~auzQJgPc z0~jxP-mL5@*yy&n?0Ww36>EyybnhI!jTze6OC9sas@)emYFd>n^Qp?|@*P{hg!7YB(e z6P`%IBhy-%68=c*)3wf7Z~~x&Q9Ts zwtu*Y@L&zh^A@p-PV>iz=c_mKABnFKTLt?h1)@vBN+2}*pr{L6o{%cu2bqMnNiM*n z*8T)%!}naeq0PuPs||1!syn?h&qMO!&^6XLVC^nf)@?x37tZbnj<$T}$iSu55^g+L zSa^%)1pZc${J9VZe_ye0@ z6$txd(o-fme^JrFW4X6c#m?n#XkAq`Cl5VbIGG!cK2x6N1z=O~ zjeH->U1$(^VA)yq!d$FlbC#$SdmVB`d<1t|n+e$C{w^tCA)a6r4!y^@C$4ATq}LqK z<{YL+?HHTePaWx5lh;BCnuoATso=^+wwkgwT5||$xZ)d^CZAw>o{~Hwc)>T2jalOb zXGnGYGtn557m_JnOUAA>k?bYMx~u`6iEUP~Pz{lEJUi=}GGM=5_G!hbZQFB>DAsm; z&pjgVZM=|oK<-_kWbKz-EU;kjmnA92an3Ry&>h^n3@xzbyb7sK%Kol>)%joU5bc77%XyA;0DG3|x!jktRAr5h=K3kK_iWaokvq9o>_w^aOD zI_UfXkkOP?4m6QkdvtQ9U(ww?FS7g#PYlYlLydbn?&TyD?5@9_n{DVT8_1L7H|29# za($@`XV>fGNHphwR>1qjeV~cY2<3aLe#K=7>Xc={i$y~eF5Z6PT3Mm<4ZuzM+6n~E z(+-F4Wt3EEb|1{FsaQOalhs~!to?lUuF{;k%QZR*?2APTF2)^h zY)_xc;~4PRRQ?@(Xi&1yUpwFHgy^$M=G-i)mEX522RAZP4jR+-?cO^T8Rf03`}{JS znw?q?W%V}N)!fKFRc~Ee83={@qcT;oRNao0RF+8QJnM%cuRH z>Oa|uEnAC+VMHrdFN}>z(Dq>sv{f+j(3Gg>QCR;G0FY|d%Wwm?uu+HyA zemSP?VH%fQ&z2TSnI~%O2fA6^bz9kW?3dL&sSG!*Vr7gC??K77jkqAG(AvvWG%4T8 z84@2?|FyabXyu0e&S~7e3%9$ZOLn<-f6qX-vzyUOYH&|gT~_t~$kv^`xBFjpUC!N( zZ{**+>8;(sGFC`aJbNiySNAt{5qDhm{OE@~Rr#`w!Gg)fj$W3+gNB37Vlkp!V)X*p zsBqucnl|T9+qU-fh5O~*>KSE(8dLtN%9unsZrwA-0PNMmlQNToTSo|8` zl|&tU96Svi_2xlmp)t-ld;t!$1dywU;g}b12(Mw^BA%Kbvh^l^2LDx;Kfg+VHd+Z* z3mwZJ3$6*D8z`YrR3pz8S%{O-Iikyw#eA)pk-W{gAmIRa<4yu`;Mw3za2<5O+YyR| z+ntl)T%^#FK`@j!I*+qeGIH;DZnz|O@HF?0QrdYrLQd;+H9q9uorMZsf%-N-4g58y*I%GnPdjy|$1KrArs z;fw56gtz-VCjv1JRC0bJ%^fz}2Bf3jhPN5HS@sWq7CJ_MmVX&t#oQKDqC9v&n1y!m zLPX2ar|H|pZkS8#HOX2`8dMFe$F6y`fiOPI*&OP?msys>*YUVRB&&*=vP;8`B;WRD zaK@4Q+edJAlT_VIEXt$bQctZ1*yZDXqV6_et59SD$yI~@Y+Xiv-i z&?joazAL#C3f;F4%e`;(>HeM9Q4rp|o5eBYR*ztZCyGFzuMFiP5Bc>x-v$L{UONhsg5 z^-=EfGGW(?ypg4jOgNr(u8Yf%=pR ztGw=7sDR6=uGTAS*!s#^Vj0I!t`Mua#iiMKgS_fu-{hVA7sj(uxNx~4bi)@Br90>G zUi?M<%qbVhQ@pSm2R>)^?9ydD>u&GAn|-KL(EcmO*uK90X>N3@WqDZMx~5l#Cf3S^ zUd3IuO&u2pIQG?FMNhaZDzJ4SHt%7pQL&75rFkrN zm3^yWxhRUo+UnqJS{2nP0_?6jjSS4&IiuNGHGYqqxHcE_|ek)(lO8#euHuL>~iM`LW zPVAl7_D^=vu2r?4a$>gYOIf+=2j%+nd8_&m`5cyQHw(SUc544DOyI0(5#;RT1~xq3 zGJ{uBvoCTv|3`&4G4is`9as$EJeCM>o5GLq}c?(;K zmTf!$pA~m|o{>gw%yTo`3WH7)5h)_F*o&s3 z;(c`jw%Byr6Tv-kLHA#wulQ^86Jf0+xY}G~E;(JaR@4OeYu1Xbfn!vmcqh0C=#^{$ z@3IY&yHH-L7tjIEiEaf!_;}zB$RCk-n!+yVY{$>YLUgCadGsGFac?r82WM^V($nx5tzxCO!-zyuZYw&VD{j9BCZnzamO2 zX9^fXZ;Th35;7Gj+)bdw4^c9KN<7442#mEs+)H37W|C4u8Z`)zglfYFFpDsFR6!hq z=eQ3R5TO=t5fQO$*JCa$+dr_8H&K?;q2(3H#y3>(Col~allXm1ctNHhiW#P?75tL+ z5q82(X{J~vN|4UWYZgzYFC-U8M$y73SIKXB_J(}mBemBf5gJ1+cWi{`knNU3k;UYk zoqe2IO>Msw*IhHZoy$F?&Z$@M{8gvRC-FY1oDCqqURkaA+2ri=@Z_i*aFMZqdhJC-}NNX@hTwGO)aDEkm zrKa4$!a#j1k8L!OPv_eh{zGr@-{p4-a|GMcHU$T;GTc*>U;{I1U zQRc;KFIJ<|_(0(s!B)X~5QkKYBzcqp*4%HqASR!GmPq@QCtrB+(1ux5& zSZ;#HO1rj3vaFh3biHL=X*6q2W^?KjtDD$gYHNz)Ioqo*Yrk^As^JX4TT|hH#PTPW zEflF;etBAN0Q|nWvlOz5xhT$2fX{a)rz?13JRU2h;M7 zcE)#&WC`1Sn=tmoR=28C?80V`A_XV1(Nb&2on1dlx}AHs<_X-)>#I`p)A@=Do2(Cl zl+r_qnL=sN@9LH(@Gm8`|R6B@U& z4s;!>8p-zUC@DO}8QJEdk#J5lpOuc~Y8q4E5xnHO9^OU%>grEfxq|7HjtO6ctICFi z`-zf@j`;_O)dkd=50bsQdybaCSM@wgHRL6q)&DZja{I52;=Bu6;~HnOvit8=X0l%Q z$_pLX-CYmWk2w5}RW!_9(W-$6-uNatFPitX9?bmBKTwmBP$qa*aWd?uXiBM-|1|O1 zLcy9#5Rhf#s+p;f0jCq zv$%((zHwf47DFSs2iknN&v<1`&oWE+!g?&hS5Q%ngl!j|C}*#KDEeI-v}RCZXSnA$ z70A{4S$2R26fwJ9;7J(=2U_5{nO{48!n3k%8|T9#a}p~s*e`}qLb>8CxvkJXiQASscq8Bz83Eq{ z*97z;Igpn-fR2HK9Qx2UB;Nc37J_oOUzOyFJbH5_ouWOhk0p1-%j)bTf5b(l2Y_(N zy!_=ro1|W@2L1xJnCt)8a!5D;?gQg! z;s5`?{WyNV`Js3ceyPSs?2B(N{wnUpck8s0`S^a>D2WO`j9ioa#V-p4fDnJ2eG_BH^;;GJK6#>Hr{>goVXwG=-QqC=?o*rmm&JuS`nQ5z#tk zMzy1el1t-F_yPSHnJh`5ckvHMZqsBzt7~gkON3xgWj&Ol6j>{{XF&qHDIm)9EIM z5cn;1$|3_fNj~eJ$bW1Y*M3hBlfSk>DHzn#m16{-bZ3npg@A5|`jGIK)`=F1NKFca zi^r>rc+uiA)zQqKl10jo2|Qq|;zn3I@JhaGeGzy;RGc7;_qYm_q zUS#PsIX3c;Qgvbiv(%m#VkIEW;(LOZYK=J9tc_&=+uf#0zxU znW^GIt^4M8l1lZ7FmFJr+O&Qh$W~l;`wYd&mpItK>lm(u0db~ld&lvrs^qON`SUBS z>)QEL`MGj${@F5NftO%&=_Hkv;AL?u`9_Eod4MxSvy6MV<3)o7%QG&B!}8lVizI7w z*EZb+mT3O2`w7laTe_WqMkX9K^ZTgD-d#-aAw(2AWgWn%(Rt9cUopYE3wJR1|9Do~`sP1{(%k7g|#`7XuXV%=|?P*?C%J4@wM&+0AOY7ql zdVy_i9Kjasua1`V36m>L*vCa9%5JB(i`q+!@vykG@cpK#5>-LKx-9^vFLTQVSsJ7L zA1GNVw73K($;`XFxSF1~&8v75y1Hv7@&p~KlD)jWZH)dpKe%PB{09GF<1hSxKvdr^ znIfE7YsPjF?y6FxFA^n}KaU?L4lTJIx=rF+czoS#z|GL+wgz0HTWS9WGEucyJc1X< zZgm!OS8NSxGIF=|pQ_H~ne+-u=JPVUH|X7Y-#bpo{rH-;wYZDGta+zcFF4$AleJfv zS^G9^w`fw;@3=U3G(dVXIBCnm51ysjipT)4N!WCe+|@Y_E`Ld{&!0buEa-WV4Xj)=b8OYZP>P~ z7uEI{FUP9rImXUS(o$GXUZwOmmdUyU-@tM>_IwOubLCn8VLaaBM02cNkRCn-dn$af zz7@9+bKLghiNI3(b$A{4%IpgM5#BnGh@Q;()@h6G&HdE)2(8Y0UByRPtY<|lQGoqI za}Q-WZ>5>2f%_E>MH~22_`}hy0*5RVJs}KBIF3yem4}_eqQp^C5USlHVVN)Nrah?2tz8mWH=TF>hX_3K8-y6(%A&ex+t6(k95FdyvDz6;Lzs zSTvKDgANyc&-{W~i0>yvpc2WyVJ!3v@M*mxW&sU#qc99MwfD#FBHrc}xF4F=X8|jO zqV~~nh46R%6}VCaS0J!L^wyXP_lPm|Quvx=B6S`9EvW?`A~wKU?hYghc%B)J(4cPf z8RQ8RzUdFT9-h1IF4_SSC_y|52hK<@+y1f{LNp)&Ad-4&=Anp!T0 zsvy4t47vant772c(7)6ScqQx#+QS^UiaQH#L55_UfFB^~o5PS$F?U;}K|FU2M=3B5D+`9WGD8tUTd;$Bh2esG16WF6N zg!rfH8PF@;)chKFDmAaU4i2OLEv*Dc(~bFC!9bd?=m+y@Pr?9RqsL3mLZ;Lc_6;bP z+LPV|ZKVq1x4>(ugwU(-IckyLFC?CP=Xx4>K~~t$N5!O{c@;LCc++`Ya#MM;=>{-M znOl7ta8-OODFeI}l>P{yRZNgy25!nr@FUP+tID$$&Nb7d_C5$uI(3WZh3ALxU!vi~g&qtZx*%md93X6X%u9DQprGCAT#{#J7v}%yP-9B5yQOQfPc9yej!opvYSU zY%$DB^#hLUJ7WJ=&Dt*^R?rfShi?ybTScw@1Ct8bvO9>i3^o6aT$V<)!XmP+r*5n0 za;;hUMe*qBa^orS{3;WTwHU6DNjc(MWp9vj$?DQDp|zyG*pRCN#uuJS*#Srj{>0n@ zm*hVWJ_O#@o%KzH^qTI~7vSY8-(_dvd-4+&QxOfbsHIlq+_JOwp@?a^S3W|tt8tcb zl;~o8ikdC9ua(mK#JcJR_@nquwug^ILMbluB_09E;;)*uX>M-QaAn$Pnkd z01DJySltZ0RexJ{5H3-UvsjGyGcTKO3O{yb)|!g^I(*AEh`=_Vf-q5jOSP)SKpvmAKTzCnrhjD|OL*Kt$R4pwr;EqAxzR;PHae)zMJ8?#Hqwc!Ju^VjX-$ z?$)FfCT`bM-xhWaz9^j_eB7@wm7$BZ;pOMQ;WsRGbc?fup4}d@?|$Fle>~HKDq!TwX?FBiMw=GUf zd=t2byd>TWkNJKe-iSA?t|T4<^XzsL55Rv--w|)%L!C3IX*v2P7xH$lrg|-zpQkRd zCmmT@eF!;$T__JD{^L~PtBB*=HZemq@=md;36lRVjUW<*bK+JJDWa^94kA;$)AuC7 z0miS^5<*aAcbdTA@n#l82~yr+N&MhUX$&GRa&A_o5k=g};yA*Om!MM;_Ix{81u=*J z2h$V71Q$jB;je|eSkv(9qUN*__yKWI>_z;dq$MOCe+=yLEx^BmmsSgiaqv*Pi-Z~C zY!*VSMS1Ph@DG9m4gUC5;ik%Lyjgg&C<{*$#cEsdIMF-i6dod0pcimoiJ8b1ca@yW z6W|U2mMX@rK!?~k+y@#O{2Nb!F8hYy6x^~p1aCknyL0$4bc>l7e~SgQjm2I99rXd& zEpSAI0NW03DugitG-yu$PhUy@U?j92o$)_y5b7}so|=0DqhUJb6()s0$2`M&5hS<{ zyNizWoq+#?=C8KJS7TG{&fr;CiCG0+fm^oxMSr0u>jKfQ=)dI{dI$Ys)S;c|AN3n_ z8#YhsgdV_FA#vzQEK=|Uy@FA>?&y82FC_(ifjx-fW0v^LU_WdN9_(`ptH9-}M`2g- zF1wTXMEr``emsB}()Ow&k@{+1jPeguEAf1LzprYVPbOGfg zSb;iHCOLJeFEuLpIvPd3i~fz)kY|IQp)be|9|m(F)vNAfVlve3Ft&r7Y4!m7LELG& zhr}szYP^sP#gtMh5-lGv)FVsfp(-oHNA`-+An`HLE&!A zV16x3YOIyZ;VQM1?16Wx?m-jbE2@>elki7nadtE^Rq<&{KjNSWjUJAa%CmyzqQhj^ z+LtJcF|MM~ebOSk4r~%_FrSSjQdC1XJjU2jwHP)nI8%(lCWd$V9_YJahGG*uH{X`H z3A^b%K|eS_w~03ernQ^1df+xq`W6%TygE0EMpmmFHVz<7iVtfm(JAtQRS{^0EYPkR z-7URi?u1RIW9us*Sy^A@0;r)>QA9$GB`Lc7kfPXK&Vss%#u3AyOU5ez0(~o}s5k@Oo_=^934GU4hj?)|EFUj!;;|bdEJdm(9)i3=NjdP0WX$7fp|JfI|!R1(w6R z^HaSKAlAB}E6*XQI?hgnTv1e;i%=(KYwbLcY(G{u2sX4HFfIc-njdJCU}@75CIURr zV2zCiU(_uY*FjTj%-GG4Pvx}?3=)=06Bj`(r8W^);7LWiz>P3e(C1CSFZ9n>HY2W@ zyLOpKzH+Cz40$6c0DW1uw3SqU8`(m?&aJg|1xmiLTEKJi5_Sq!@8B z1<3U%Ri7{2Dwtn6TbeG|R-}^tBlOqZq#J~nzG7i@&GbRZr3zOX z0ag|c(6)eHH<~&J+>s4ZrJxt?N2P#Gl3kPy^be<;dC!0T2!@-UCmL|8+BWJga;n^)szbgRPg1eyY^^yp47Fw+ zkXO)67)3UtkYqF|LF?IH$aU!bjIHE!%p`Fw@c@gDI8U6y8UxLV0ql*p4N-}^uJ}pN zxOizSk&SOP{YHe~KWj>;$>h(nwd7s$UBPLxoV>2FA=i=p((mK~vJ&kgzL1RAk2pti z*gixfnVm6>0Lj#ZJ|c)rjEExq$dC<(2zPR=*K=YyxnjjN!jhc+KmSvSk7o1nKg5-4 zoLnm(Q@WCzB|B_5LEMl@)JqAe%t|_eNM$Y|R|qc#7h%K##+IeQe@dUEv+(QEs)YG? zpEN4`CccY)vmpsTOfz29_!)Y^icb76RkJh*-$|L8x#1mTbyY5**Ep5f6M5>s{NseZ z+C}An-%#zLE%03`JNOq~p{x|{!V%@Tyc>9;f=oMwd&<9TR^$I`u<%5Dm8>q{C%%cf z<`s_TGUHYdc$Re8(zSRR9c&hbZ>G{Kh4_2J{faCH6^UleP-GqYm0U7CWM1g}uY>D8mElvCoQCUQ_T%@_8%b@JY`3_m`AJM&1`+o$u+#*+i)9w?<{!i&ilTGJW9y6;Q*E$S1%B~! zG3)%TVHTK&?qC1!Sh#k!rxwdm`>Ys`Y7C>O8dq zEU9Kt{tsqb?M2vO^D67W71%%JfBB2hUuE$*IQp)HO6f$O6g9@Rp*M^NHXTG?8H)Uy zuwnXiPk(H#cG>cW*c{c)r6$-sg@f5%YypFpjl}$0rx(1(RyEsdc4D&{b7h;+XZ6={ zIeNYJCs2W&s4?M{pgXHvvwx#q71L8zqV=WEPo(YC_H{*mZ@L$T)w^t$fn z@@?p4jrG#;=w+pc*%|bP%%U_JThRHXAOM@teo8YNebah}IgIXaalpQ!JxwOSbhM^n z1aA(iuYHlNM#*X@`64Q)92Wa8nps9}nvRN#OZ_LHDr2+9F|;nfWw{P5)uOh)&?40e zvm0ocY)8o;Hny+N(1CvG@l_M(^{!=%6WZCq$Jl6D+Y(73DsR5UZ9s*MitL4GYTcz| z9vW6NHMS7-sazL&3=Jy%wf;DoP}Jg~Km`SBm#3p?x`Vd=p$TeJvq$I_xldJ|W>@-+ zl0};7nWOU0t8=paRN<=K*`@Rnl~v9a_>oeZH%*8sKCvS6N)@5(t!bpZojY%{vwS#@ z3A-c<70e89V5)@eo@=D9#h%N}q+Y;$8x>sz4P9tOkAc5ewyG;~MijHu!*Yk^o2at$ z#wZ(Yof^%Usvs1Lx{|7Tw ztoAgQvLvsUo6+Y%(x!!81)D6)q&kq(73Wmt>@`Kzs_~rh`fw$|xvjXT_{8lb&nbjF z3aXcX;>QW%@m2WXHum zId5ftk`XDtnM0BjaW@!uK)30Dv=apUS<-n>y2m+M1xG9&L61a&ZB9@W8oKZTH55xO z`=z)h8D)H;h?j`9&GJW*oAQ3;&YcxNX^V`EU5Fag1DrjMZF_ z&p}qm(qwH&I8MsE5g8z5ZXi2(xeOb5lYL0~2VI@~QmR3j*vHb@=;hEKbUo&{{uXV6 z<$DOIe(b%=J<1#RwYf*0!^=(W$Qb-*sfFB*xKdytJ4oDAzn4W4=NUQkFR>ll$}mK? zyEfXLuVVsx|=r!pT=^^nisYr@*M@eT&-Le3B zKstKMema=G5_66Em#z&pp$v4`dV6X$J<|Oz`HD}lcid#8p{k(UZ)$SS|tbhEOk#DTJH=8kB#|JVnoylUq!wUGfPr{#3NA zEToB=!n|I0kvz$Gx$h<^snG=?E$M4Ew}>P3EYlKVGZj|kz%0(6qz{vx*C#7iN%^{7 z>Vb5!_9x;_@6vjTNIF$Rusi7S>I0c>)S&85QVkWaa*e)54ONOl{K)MJbRA8y#HAY(!%_0XhaPTWKL+!B6m7J}7;vPVpQWUv(5M23Go2$fh zhB3W?571AHGO1&QwRSuGsO&#^A6-;BK=Nt-5-IeY`cdp7^r6}d|FYy%ym4oSGc~>- zEOC(Blm9GwG?}Xx2OG(`+RJ`#iBpxAM}JME_mq|NqFZg z*C_GVx`ociagCa^>BE;Q&X~=>&M>bHzI0T(lUhMfXf(fkAgF(we?r| zh2-bjN4Y=A*6NpO=g64K`UD9%raUzA1F^H@b5I$PROI0|nHXJwuL;Ea^@Gkec#!6h zO&#`9x!ueRQ_JA|dfL9bNA;3=)|tSJqMF;&u}>7c^*m5OnKpOw=aH8hWw{zsTE96h zmvpQ-m#~nyU$ru_iO`l825lnjOGw|d_?5!cHREyAu-sXMPt$(1(PQ1JLNgmINcN`) zGn`Dnqu1uY&m5%$@@=yGXa~J8y9&wFwd7nAG1{AXQ`rjbKdjKqDH?0`KvJ%H9d~ZD zL6yvt2Om)S2p0JDDHaKLtO=Ko5l1-Pk&OgaE_u(4h0GTONM|8dh1>GCWuMYr(7(tz zp*W~_%)LZGI&Izyc%SwR>!a|6b{zXJ>xX6?cS43%&Et6_eo&S3h0#{ZgM#j0mZC>A z(+`qYiitIDGNt5|(_N+zR9a7#Hp2D`)bvi|mGQZL7wejCqV6lZO)*>-$ic|H+8x|T zc%pU)Z<)|vmi3ZOzro z-dWXS(cN^h%3R!%@KL!%B8>7>Q~*9fyX7^YyYC-a9kkl*CsPlvcDg7%f_PiI)6daO z3;xifF;RiDZi3iXBhbc(_sImB{SsSZsm5EP0xQ&Il0W?SsyBcj&tByNyhwYjRD)PT zp5g*DJ@S}hI@B2yC%1sJe0Rzm5G%JUj4Sfo>4-EPt+x)M^;p_MdukA0X-L(2K-bkh znta%d8C3sKUn1f|I95{mLjfcv5J2Yqq{ zL=X5v%rok%<5(uK*?X8ccnnTCyTQ@v9k$4^PWt5@M?v0l|7 zd>^nzWr-i+^(qUU06U3Ax`O=)jOnY)j0JmX^?cbN-Z@-FQ}%|&m?(DknZQcSKOts zoCJj@9hmAOub^$>AIUz`V!LDYX6JsAbH!{nL;1?sAum!U6r3XuD4rQ!!X*ls zVT34N{v+RnGe*wRJ7?9%?&|`Qt7U=OkT@~3O%on&#w<`r20BW&sGNPK(lyE{uDhr^ z@;6T2)FN4tHJ{95oK5Eu&GZ3Hh>|FMDZ8flQgVzOuaFftL+=%iMQY&zd23-h8B3F1ZOrO|tzkTAi(%RZBYjuzyH-h0(ehl^QNHRj$KRwOhI@bD8SM`YN7;3oI&+!`RtGaC+P0)%&(?onXvr}cMXl)Tn_b3)MA^3Rt z(T1bo9J#VSQZQaVtX7ftO7?#gnPpoP3fG10u45}94I~6)@V=LDCyno>Sus*DH?`xB-V}RYf50=S_SG)@Ik-~4>b4Fd(O>VHhGI=%! zsCf`Go2^yl2cKshmLK&SV*Zsb+?dD=7lk^28908VNFW6D4RM_XFM5b{ia^$7A*uz% zoz7?_|5CdxfL% zN9gkU-O87+tg1f6N%-DkoV*R`nzK|!Md_0dOaH+H#B39HVy^_(i9+x=U#;K{vDm$k z&myPTp?I69h0;@c8_<9tShpJ7%i?L*Kz33(HFnVBxLCCV>Trm$G1rUCbhWJ`8JevyFJ{qv^CPD zy3H^(U#9he1DOvr+Yn)tnd(I3a_oRA2l)}cU0H^@3_Pp=pm$ZCkr!enin?Wq*b~{s z(k-~F$-&}D!m{YcB0Vu9I9?b>Qu(&?|B~OiTX|#DJiBjPIPIDwRhx@4@os2J(Q!;a zH3a>VT%clMxY#914K@Haq-e)J0fx&*aJtG2*#I6?6e8^)L}h)Gn2GC?-inJ!_R%{; zYsoIb-h!(Xpa1cV)EM`@ykc5~y+3yaT_aX#c(^{EyIOwd3 zfeUkzzbDQDOvq;uc@;Nhvq`Rn7o@XDC$o&=zhr1qo9F^1Aet()Q2qq35&)^^d|UW| zG@bj!|Nq$A13CK`X`)N&aq?U)PIZA?LcgPYMz)gXD5sGxpsy+HDC?nW`8Emw5G>24 zj8s%fi>Nk*Rg!WlFKe5)lKNj#p(v7uj!qQX(Y|e);(wN~xcGokv2eva;;+(^Gq%vD6wAE5o^)%4GhUosYBLETQNm9e4xsicpQTJS+U z${=N46-_X@lNJaE7;(9tKa@ByMx6S6eul%2W$t$A%THvlHU+y;?K(- z3l<_z%I5HQgNLLW`IWUiNiu(7*}vj4-l6<&A{Y;s@l{CXZA#1&sJO#XLVhQA+cq|D zALpPioZG?)_n5s8t%AzeRXRQkan;xGlydoZ>$h!K2pjJ_!Nae7HXaWxk1=N&ZHURk2)un>kaSpgT`C%Lv-j*w4}q&1J+g$#wN9kga64YJbgYae#7XsZdm)5a!(w z66Gc7e*^~ErUW*>NpdyvF0VsO3Hrs;W&N5R@vOCxr0J zD_pkI);K{!*JoL(t#Q}g0K^PQEf$a3BWIWb7Z zwUO5Qykq|o2YSq8-4wjt(8KKD@i-gguI)qg1+v=K%fx-s)|LoNh~!bzZx~Us(wYVA z631KGtB#9^<}W2B!Y1QX?nS|I{f~58{!8tL_+7lmYEz^W_l`0osF-t2cFE@~dzU1~ z{VPi$Jh)*uvy4BBEtK8qK19RI>^fVCo28ZQuh3(X_O>?I4DrpD)4)*iqNcZ1wW0{? z(vsQ2x`yky9D&57PrJh(GNi@hc^%s3i0533>Q#^vN274{>0~3NRqoGO$s*2%L(H{& zGB4lK3Yf`U(NF?(Chs%-sn5kF8^s_4BHR!Gz6P?>eSog4exYrH<&|b@{Ncy*w5kbY zaC)yY7Bw7yMc#wSjW{k_hMn4qk`VE&-ie}dqR922;18K7{DK|{8?WD^+XTN@Ez?XQo|gPk(^0N@Nvh>&NP4}Z4YMo0Q@#qf zF=B^QfN$N375^mKdsm8*NXJ~?3iK3$?Q`C3S`ydSd>&TKm}^qOgGqagafn6Oc>OEH z9eAp45P7&hQj0=$S376|(8?0C>I$YM_q`H<-JQN(F%Nek9wy@xmPg2?vx!ApVPY<+ z-5V~vN15ZcLf}uu*?IEF^ywU?=?`iY-mW%(P1bAbGSZcak0RLYa z-VVsKrSD~bG;P3bqCGLZ!Hp2D`d<7djF+wquY$#Ey$LqJ4D}yEXH|mg9MQk{ijqvc zpBtudA<5EcvNPm}xG8BJWm!am_%G$z)`I^z{6TM~a5hcjmdgjxF?OxoaR!LJ-B>_M zr^OgNNd3eax>uxcXr;D^ycs&G!IA}lv+6|hqsoga8%kI)Kyi^Wl5<;5r*2Afmw8e< z1Ez*ftfz(2IJ3WknC=7OPKa7w4s}}gUZlTY4-{7x=7kD z)HTgV`h4g-^%=S^V3VquUQijK#M9|Tj}%_?@thjj1Nv0zL8*)p8doPtWYEJOil;M< zZgmolF&BFi1%b>2H#)DKDYT!<`OUn+9M?~>*Hf!o7uxzt6H2(CW%rr3__6HXTXZJOxwqLS`||(o z)>cNIu1%6fW@v@t`?wNKuDBlYO}$9;37n>UDbl%P+|Lh5SN|3?-bG9W3<| zNKz)mZv~5E4Wbi#V0e<-ddp`Rf`x(7M=cU|4x~^TV zAYk{YU&@ans#U%6RiL9vxva8wwE`{eEiaMhO1>0&$?PRQS@$GQ#h?_ZxKq>?nt}tQ+q`Fgyg3g*1X2rtHtWS@GGh; zwJRuG8Kl}$)1a_Z#+SX8&rlQ;oRa=4PtD>>%(BQ7M{$+ZFLss4NBk}9k>ICjVhfpn zT*&Ya;iU;|+;($L^M>qCu{Ux3X$9IU6Pu{ibt>0Kbp?Id7QR6B< zr@2$cl#QrI3hJd?Rc)4^BwP7U^8b>TPi(&?oRs;6^$B)JI<}B3zpbWER1K(33@t(&W6v^C%IPL}>f!s8J6!d!vCWy>%}vMp@U`06eS6uq>-ik_Vf)rDHNjvBd#ctXR|pta>c_+BjHRCVkNGCBIg(+w>|kO)N3oPF^W0*B#yND74kY zhRx;QRZaws^DJ_=&1blF604hqtrbn%u#EYQA4-F^h66&0jOH<5K8Dz|yq*d#YD@z4 z*Y`B+1;4I-ZgzuiDqCsPz@Ygb^#8&iXZGmkBTJLFX~I#rW1gz&Fuc%Gg&gM}pplK? zpL#8oScoTG0!3u56&yQvr>#Fk*(+CW$BMvkO49 zjM8Jff&YxgqGFqAuv9{8(=@mvy0sAme-EQIj3Y*Xcg@?7P1T!>qbNx!#Ndl2=I85Z z7R|BfA7NN)st@URmNKD!^s8Fp{RTZR6X}A5);#v)IGE*aAuBRtRBrL`wEWhm4bQc+TZ@+f(AOr*k={5f=? z3`4md&?GrU-S1T^x=L$sxhuF#=i5HujWWdK%hp-MU3gE6lC%yL)G(I>f-W$@NX-C_ z;U{@+<$Jx53@b_3tt4N~%h6yc1sNf#^OSpuzm<;Ex|sQLA#Fy;OX*u$Yk*dgNl)~G zifZZiU495a45r;`UM4e$yrQv~I*B7Uyr9`5<>m@n9Hi2CoK{fx%#cTuR+j6Y(vB3L z(V}TTa_^|G&|}jtsC?+^#1;jQ{y6%u>?b2IWUmy?5C>4i4;jzA>V;EGAJ-*{oI4y?Fz zvXag!PArn&U?HQ$vT_zWL@Rm9A_PFhKo-LbDipG4u5NrIi)}~Z@>y!)gN8{S30q>O z^U@JS<2RlwIL%PV{aZV!d&9j_fz>j(T}9tD%ek~%dliwJm+r2($@NKGE)U=?jLwms z;p`28ODZ|QfI`t{&f5R+ZP=$>L-{^zx?Km?iM@>&(U2qhggI>bAX305jcCzE&{6$; z;n7-vjwmcI|D#G`|*A(7)4%O}==P>&o!C<~C7h)VtblEd_x^a$dJ7|lZB<-qsq+2DOSI*T8 zNgzdb>J;&XoI>S6u~QmR;VmL0kYxtpxv1MxN5NFcDshj%BfvqlnP1>lA}HX2Tnl&z zF468Yr-s8IOfy5(f6!9XO7%L}VMB{5x_*~_t&&^=((YEYm#^03$}bjJVU z$(E#Tl;4*+By5qTN&KT)B$vhOf?taBgnt8O2(JpBcxCec@Vi|rd8>GJ_A5E_xvTM5 z^E5*ldWLaO9|(&uMCvxyhwJugW2=8@3pLxycB;RrHy4(xbSmfU0p$wC*VIRHsr+R8 zciD8AJ_;`3Nd1Bjif4$=_&*lXL=|2!{7%75R{(cEKf&IQy_4I9duwWL;GihRJo8%U ze*H`1L*Qv$wPCVarJbSgF3VE4>A;0^R59Ak+2x93>LaNZd9*4oe!p~|;#pLPWSiVS zSR)#hQvDAKy~PK;eEIppkFG#2RItWAkzK`e#?_j(Hm@bQM z?m#R_=`l)?(zqc#481hsr8W_BBF&0aGnZXj@fJ(=cqjG^Ozo{7U`<%QD29tN`;YR7eWY@BuB0 zBkFEpo<oXjh(n($y53k{C{zFS{>negj6jjEeyJ>&A)Kix;stoxPL3HjbJ>qq@ban zFh75m=^ddn6K?oS1SU`DK9e@ZzS6uSeT)F9K9lbU9aem&T=bok{h*%ojF+_0`kZS- z!Sp6uJAMyi2!m`pNDM|ex6UTEf)ULj#E*6LRxruEGQcuSG8TU}e<#n&>o-M^$(ip6|>g6}o#hWmnsa)jAOkX)2!WbvnR z1NE2red!mpFZuaNnd&M2%^`zErdSuTACl~^aG#lTOEUXl~lKO3NuEoC1}hr|PgkBqCtZaHW4AW=&?Tq_hU zO`K9U3u)V7%3;CV@O1f8K}gUN*>b+nw@nhlyXgrP&E_q1{>|UZjj)U0hI3#@x8~(4 z59oX=N|^^FS|${dYKi%`{8E|7lq+9R$TsxJ3UV;|8B$BSgVtSgE^)UyUi^Ezzp`BH z9lk*>69sL3Bi${G_Em~+2~s>k!Vdmcmqq*{o}FDa=K<#@Vqa6Et_sp%ovBR*F12K9 z(yM*UYBjEGi}AIJUAV;%t5oH9>nw_vw8xs0a&010^+v|uK1;b!N(}oc-zo{-dRbZ~ z`tHjVQ-!0R^}-}Uk&6xQH}A6@hr{Et5vfgEO$CrmjqQfNfR2VQ`s-Df%>lYsr4NiU z?TLct`sbRq>=(KyH9M_cgH(kiCaKJdk1^L22jtyhS7np34O@3f7f3X|V6nS+hG&)F zv#`d+h1bpBYiH&7aeu-uTCZFF0}nK&G!y|gH(1RJtAM6krd6dhW1!(!flRN^W3vs~ zmpb>f5{;dvFLAyqMeP-1RbZ8UVI8st`JJs&$$r@!-xSd;$wtpCL8mC)#g$hgsI%M2 ze#WbXXIoj#HDF)MPpiCcv>~(6uJX4@XmKgEF+4H%6a?xcOupF(T9aWcZMphi{rrSe zsu|k+7=Xe@-5iFMk73(3#l*Ln)7$}%^Pz|N@?EJt(T0QQp_a^mvg4X?kBANtn%$DX;($?3BVrdod&Hd$IC(yUvO30GB%I+-4 zhe|?cF!V$TuH6fEFCWxu5C5E%-MkFBFm+Mm7^*bBx1kihGuqww4ZA3GhMtFO3LMog zCv5ZHqG}-Ca{nPeOU61fB$HIv^*zFyv_G)heH<7Hw5x{)kF0a(qQQSw`gC9sEhYYK zP^2o~tECRb&a!DLN262jHZH~(;#uZV?7`@{#(dnHkPo_dgv`KQ8V+%vcY80_aUJeQzW3C5YbLjMCS>>uf}OReWu4L3b4YZf(ZE@_scpVYg&{ zuv)QyQubJKai8LA%ro$BqCOgW2rolk=u${)1IN{`$Z6i?N)AQp5iUDL9ddju{!Dvr z<0tsQh=zIgoW!PpoV(6oZ`JBM&f-!kOl`Mtjm4cU_wW&U{Y{VY4>EfjpA%Rq#D*4P zV*F-PE@^qx3H@KvqmXmj0rIWDL3IJ;hIg%Eiu%AKTb4{a=`>GFrysI`2-u8U&;#9n z318}ucg-M{*M@h@A@)~ICh7+O5FQ6Fq>^bM*I4-r{+TPMZ$FKTHBNzdM2Qq8`$jLiMP5 z-kwR#Du3KsPpvHa*^H+4<}I_*sGl?KEh1V}@-K4&%^G*i@Q3y{3ZomK*M{gdSo+mK zqiQQ7*&8K)&p7EplV&nKobp6!rrzcOznNtNdDEp~oT*>bVP@Q~k+wB4o|W@kb~7Fn zbv7Mk{LVenc#&zFakJqbGd%f_$-=CQQyX%bs;E@m4CcWQs`@7LaiCP$&064%lOtI{ z9!kj#R<094B2tljgx(2w|Q74b!>{0PPmg@ zY8%Hp!%l=u>r5AP0KMDG1-aE@tx*1-vhijqzrFCK)yl8VU1=HSJ7t8JkMW)+2N>l% zYup-r2Cq2snRXs;eMo@n33no}MzNP$VubO=WOzPMt zX$SPR{VQ2t9oF(xEG)Y-E6a2qU}g~X6)9WlBVf3 z>NTE6_)qpsy4pKf(kKRbjEdF?C!FW-ae|q4>p6|Q;CfD* z#5%jSv*m;(wlcHnx%pm+wehFvMgCXI8Y4eD)f{MWOS2lYb!QR}>7%vL+b?N7)q5f? zs28a=1(zyrDB=Px%FMDNZzoBX1mMvpyddH_&*ysybaq~xe4e^KW%wSDUYoLGpq^TB zegFr;7vJrR1_SbKy1zpjvobq}pjT2U?e*{l3Bs1M2yP6y$sIK-Jl#S;i-KBB1K4!G zOZvO`^_#9}XAwTQEm7Vi?QvKxQ&aToPKj-3E%i%>mx0B#4ukg~(2Dl{erQZ_Pp=p@ zEAMr80(?!DYv(M4XKHTS5oCA*pv4QNh^es3&`-ld8z!-lK@Fx2xZ8d=_1Og4rdJv| z$MHQv*Gj#R^M%ePcgmcB;t79(JnD^Bx_nn zI;u4_ux&Y7nUK=V!i>fwH$KNc2={J?!!HRk8TkaV-xJ*-;ybTd>JMa?TcP46<+KAy z+CmFmpDpsEUjugRC`K))xi;W}8m_45{ezAu&g=ex?#Z)s9>$(DQCq_0@774Bsq zfLVh$ETBf+ABlZm;m~V`D=J>r?ToYLm2`Z-M`gCQ9mYRSdD5aHa1-V%!-m9+6%JNen^c*M9$Lxs*>{-v4Xqxo&3pG1_~F8XBbc)RUk5q~-)j>3 zki@d`TRoY?_M)R*<;0VDD?5Bi(V10kvq_b}--`vuuqHz!dm<=Pdz9Vk_go#pmU&eudf5!OKhjg|I!CPNAUoe? z2OrPQt84Fl$NyTrruzuLt8BcppPyOS+kTSwId@5G8*d^5-OS?gldoE71Iz6uMI&5gGNAL3p#fCP;Hnbm)SrC~XG z7{4vZQS+Sd;CDln$7}UM%6IZS+}$O2xl+g7!uy;rwo7;|oT}Q-J$vLGRlu$W*^{!B z9demt;o7!-X?>2MMIkwz{S4SS;4Y?KOWCy@~p5WQ*d$eD(8%tw9SkOu-Ys z3(8jl4= zNo-juzn#9{`cu9r+0XJs78NHkbEMT#*Niq2ZrD;?kGN;+7mdBB*YCKJC+znk$!-gV z+~Xw+`8vn9!j(LNZ6)^}H@7yk`>=ja<=)QS+GC~g_CZZ&fui-0dOT-AbEj%NooAIP z4vCHPI{u%U9&mql;t1w!nn<* z{mOGu97DB27J5eeTb{A?s2VA~7o97`r^jZI%bllVMMzv_P424eLkw#utZfI z+Ns^4_`bDU?IaKN(oXO%5j`=|18%ENVA#gAxDs*$7Rkmcovcm9GrFU}bnfez*c z4jNz;nZx~VaA>MW&u#=U!O)d}0NXN%z}$#dgl?N0Kj%MMiv zb^eB2*?t;s-67Fy#-i#?BYRQF<<{XW)QjRRJC>ord9wzVqfcdWd;2i*)M?!b*qj7H z$5Y(8n8$7Q_+=5>n$rmjg9(jT;-WyXxt5gbv)zzH)^Gf!wWYjsxvD%wTeN{E3!%rX z`zt~)tW{rj9>#W;lZJ|L?!~JHZE=F!d;Obm2Qw>s&fqIj9(FkZU(o@+E1T9C_>(uHojVUM(zv3h-^@Fg>#s%Q8$ z(YZW)2aCuodN7bcJdoSkS5CZ<>CrQtl#w#f*+n{);M<--j*01NQIc;&EU})Tpn|I! zK2Vnh0*ybYH+%|oA8Fm58`U@H0@t+)HN$7a6R8v9&3cLu%sg3@F&sh}Ec-b4FXdU0 zvEM+QnOoSqlR7Koad!bVF9q81m)aHowXK&r6@zbnMJo+|Zgrp?4UTI_qWc6E7)$6o zeR6bVj0n#_bu#0+tFK}SGsaP3h+*0WZ#OqE^8!l^V@!olmG%_#l4q*w zFw4$0TP|azIc$}9u_WtX3s|fNm9KX^VjnNF3{cr!Mag}!Y;Nw-o+@^EMpM^(c4dlR z`!05E{IS+*HaI4$sg(^3|JQPZT^}4}`pbp~RvX;d)jmjVIJ?Xfpo(Bux?<(a**Ol? z;yvsf8z;dEc1`869iDtt8NUAv-=WB(*Tg%K^Qn7+SChf(1o8Y+*0-rse?WiYG_8htuh5mT5R84oYzpXT41kzm5I0 zvS|=2_ASfkw-xmi&F=Y6v?k|P_bMSP1JQ9pXqz&xjUpJ2Z)x!tl*R;Fh5V1<`x>tB zrNRED75q(s5WPQdpO0D-!OQS$RR(ZhyB?IS;#NEC7oFkUw~_M$In|X_1J`9Y$`-Y_$5!!F@`Kj5VqiSIxl432W|ei0C^Wpep+wjkY-j8cE()yH z9TwF17}RI^2Rug=6MP5PJJNPuvBM)#8P{Ml!Mnh@QMqU!Lj@}x>6@>F6{5PID2O@L zUDM8dVZ@INtnTynEY}FQkI5)21K>u~^;nMP6vxZyf*o{-y<~VhVRG9RW?a@j` zGNR?DLJ_~VX^*@;dS9cftTQ~zERyzayJL7N84e85{uV2JMCzF$q~}rjdttWgFUfs@ zt>bE;mG{(k4sQ*&vx3=QYuH!1w%1P|SMZ>FiEeuKf1T^Jv(n9Nm(?$m<6C5^OL3o@ zl9dOe&6WcSefU=MMmciZaf4Wv8n{{8F8ScYQ}v1Uo@eAnQK;K|iCA#m(NmbthuS)E z&vJiM#P|I)3rlYF{A;{h(9$(vAZ8!!7}n#`QEgydV6sz-o927mHR}`g;b?}XOoa@$ zH(gLVZQE(sD!&@&q|K5=`mj}nl3vdX@_6xbw^fo*A?))j za2pqc4ljO;M`8X;mlN7?ozYu}KM8<?kcPEj2Z{l>+j!e_ z7s7giJn9XRL;Mx6hV+J9@8U-(pjy&<;od|K@5WT8`*=+rW{6f;kKbt&|P?kx&xRGgzZHyaS_D&v~j$Iq>5@M&LwyF zef}Md^+zBZ#PF{+CIsXv~I1=%7BgK0*#FN z;eYCz87bXJP#0rWlMZ}<;i9)fZZHC50_X=u4CfGhJtLcR1d+g~Mu?F(2By{<^`2oU zlwv@P@l-ALG2?OMeY}Bj+22fzXB=`VC%t9#9=ub>;^pl51~BpF?l=zY=XP~%t>4e} zx1vCgINx;&$Xw0=sRHW5;j$mVYB)*6DR={CG5j{-D*IB63RT8d7tTaKW9OtgVxjC+ zkxINT%i@nEykj}I)RWqomILFpPziVUlRBmN-QWaZhd8Bk8}N*%p^;zzQ?yFE2kb5U zpNB$fgmc;6&{hGRSPFZ}{|L`QY~%xK)*uh__7#}Xg}lWnr!nuim63(G!yKZ21wqc1 zxKK%XEcO1T8j9-f=;hjO<EoAd1z}0(< zz+GK6uM9!`#=157Y3)9M2<_npGmxdRs$bThRFlNE;H9c;W;>)xX@ma(-6MYlTMb_( zYptG(*e`X=--7~+8&g(eR*P0gyueKpB=`s6CwWkpcH$`xVcfIYuE}NuU6b3`(1)yL zTb8x0sp~cq%rd|S(+t&%`Y?l7{uGhNORlX+=lj#W1O^kHIkZf{u+zlPPlwI#Z?xpSWJMBV$g_ey_YRLd0s zr(WB%iyj2}(O85Xht!zAK^8$T8s(LFaFy;#UIj8&vm)6Ry-t}Dk%?U*Tk1a>KUcKR zNmBg($pYL ziyrF){%gGfWsu?p zOQ7?b;wt#Cs||Z|4Iq`$u>1t5)wj z*JY@V+Vj0ByQXw>tNuyt;La?0DPZP~dfowGaX*zRtv}J@itz<+?KlQ%hxE1Biq~D2&16yQb%w6a#&Jb1#gOQqW5%4>R9NY(Fdd(O75A^iHRN^emp424L z3LG-BjvPdY^qZtqk`_A`QZ?jzhZZ2J>L>U5BffyA4J}2|A#=Jk$Ul%D)^Su9%uaV4 zoe7VX4xxV{VC+|z38abm7E4E+hVS{`vizz6;|sCyf@=g6?s3W_QAQ|=bRiufUh_Lk zo+4*CgQ&rje-GS({eaKfvjpA>zdiU95shf*R3WY-;~UQ)Rj5tcNmM%eAIVenV)PW- z4}BjqNld~FW3R*AuzcL9>Q}ga{Ko$bjgS=-lQWfahkAJb z7*vKy9sLPQ!8{oF3j2*M>1cp=U=LU(5m;Qcb_FsPKUd<6T7@5Au~FX$1%v_gUE(a5 z6?25Rvl@l{PEzLo#ru*`DM17fB{yP(c!Fx@*F<)tPCBb7RNBr7G^Ct3wCgC;i!`nO zJoFuDTRRulPAX`40%w!0ZP(10)<4)j6dcp`BVnfgEvp`6M~d1fEV~yhEbtjri>-B>e!i5{;tYuPVeGXDrWOjI&|HCnN9(1~tN$ z@P@(l1Cr_(66YcE9for38pwldvvWK6AI_6r2>3O}&>92T&Dm-?10CWlR0YEN*$;&* zcn^CQ!x1se7UQJIadsu-AnGK0OXV5NCidJs4OYpzmAnA=nbjZuj=*H4`lXWQF<&|# zAxoL8y#w`5;x)tWpw%K%PYGyBw74Y#d|rq(-hx~aPE+PXZwn-X-LNNuRdg`?3%?2b z3OS$e0r5jQ@OD(Dp|!j16QQrt4WdpHZfoBPhsl~~9bbbd?v#xC6r0?_oG~gFfI3F5hcHxu{MAsi(uMjKc0e&3qlQ0~JpoTgE|%`ENJJSV`MDVwC(-Mq z`PhCTBRm~n%)jinia3X7<1&jh%t;wdt$WZII`9neyx~@781Rl6Voj_cGk(y|2VFO4 zWy9bv`aoV7bd~lp)d?1@$wA+MBUKkc1&CH(sA zY(|o6FZHJMeXP6Rozh+mxYC(mAp-~7BebdYms?|`b3oskV>q3V4b~`f7c}2814V`@ zO$X}N!!H;xWjm2z?aiFU=y~d(L_18kLJ@WdS0$zSz9QI*a$ORLlf2J6iM6ny`aah> z@}Pa28UX9N)vyN`-(%J&>mglvl1z}gV-fp1cwg%w@@&Yb=8edwFyBToPya zBF?OTKCqKL9lWe}l4J)-?%IJ|0u{C+0RO_yw78VEA&`wZ*L=zi4}+;rFrAp*xmtfv3LuR|u`3h_Ho zEC`8^fS#zN5d*OPd7&gHTwhWPc_qO;ypXb-IP6QMt|W&$wb2|Y=l8aw3^2g(M)WH9 z_8t_PiCEl%K;J|hGk(QDkvo)?*cqrsK|j`rmeSL3;TSe{4EF>}2EWBiarnwv1OdJ~ z_ZpE;xSNzo;*(Z{yO9m#BwskCm%?y5Ks`p?w}*fXM>B`!AunR=yDLzsn9gP>YBzSR zaW=XHdrZN?%)p`f4>7%XN17H}fxm%WiCaxjfJ<=~h)ESZ{B4qdE|~CwY?t_x_?@yK z>;u`BGU;1NiJ~5LxZy`<)ZMq_nS;Xq5GUQ33$}k^AA^wq@(7q%H ze<6C3bc=cg(@jpr0I?AA5zsN54<)!_8a|nFIcJIhpu!Sch#cC&u)U;Fn#4DO{G7hX z=`D3VU9syY{2yBQKo9&Nt)$Zqkx#3#CL?apGW83PMjBBzh$^PF@B-2Hw6oM@=-0F# z=rPPb`bN+utb|@zPR5PW%{e0cL;AhMc;Z5aQy7Dk#)$R}AWIn)&a)_I8Pt)(&?(OJ zej03)eYgELynx->xDEc0ougZX7-Vmi9z)XDYq{m9bk-Cl1MS9ofL?@|&N^1F!Q5l@ zmVL#oWl3_@;d5Eggf|2QDD+orkQSh6&^?D8pfyTyAzh?mXvD zf{w6`LkwF+#IsNOE+$=KuW$~ac(U?_Ya#38!@a?f7xI~{7ojFuPJ;t%leAf5179rp zBK`^gPm;(!fVd_$lddBVie4ipP<^5hAPj933QE6XJ_|J2QMfF=H6a{7$mVWW`U`cSMk4 zI>{dCCHsL~g>sg@16)VjNFJ3EFm$mx>o)eWC?@_RK3?!Xbbzp%U*q$h@_;q5?us>)k}9uyO5u)>ilqjfMzD^sBuQ2xPzV z7$6!osK_sw!mO5cXA!Ur$&dIR+zWAhD2GrkjQ4p)yvh%DrjygTiw4U<>sk(VrGb7l zdo|Al@3kt86iA-swNedDYA6t@V3DT7OdLGOxRJ025uyjc&myC=jdlH~B=x@~bo8k5 zK-NmEi@Ybk5~r0aLkkIu#CATnhysDpSx=tNeKi26@9DPhECq=>!>L z`PI-(_ydx+KIe#G!uQU7q~pAU{i^z$!4(}cP(a@cYc}XZ&q@7lu%v5PF$2Qx5DQj7 zDQ%UE1u%R|03HCRTgPE~gxC^Vt3w)1yNWgFMf!`Gg&3~pY1}p3H08U{S$Kl1!RHX+ zn|PD+0TP$b==%Yj8lkrTsJ}hDwDAzgFgT`90sHk+C()-7CVfU)9guKN2D(rm53B!_D=S!qGfqNew zxN~o7JF#9l`lB%#lsbadodZ1|UM>3telUpPuY%m_J5OH&z1rh~0Hq_6w2a|aS#2Uu|AH5#cP{FF5})PMLxR;2x+SGW72%V;a%H_{xuQ(zlkNa zmJT5iQund(60r&xtrHSE>$_#n#5dsO+$K^0gh3&YgwW6E^`!f7L_LqZ1@X4*BKZ-j zGy4ifiK$AUQ)6)(LJibUg!w)jXuZTwjstWI`Pm2pe;D|qKY%a|w66UW!415*(T?B` z*{Xd^kU(psV!~6Hn!A!10Y65bB6cADqWVaSP!aVmBpjMqMko7Xer9XP?{TDrEXpwc zM<|zyA*y{g(n86b9q-bYQ7-OG!-1fe`!?VvV54n^abMsfiz|L5B31Jf&p?JtM)9vu zzML#V9@>?hNH~XaK`kQ2V%>m7;snmKYz|3)ug&%)=MkC`=1|;-_d<&(Q)DL}C+cMi z$nh_27j^H@TkK}k`JRhdH5%K>#NNToHGjd)$MDq;aU5)jcn9te_C31_PsVkUVEDgy zAToi#BWwh`A}%7lD@72W6CY)bkdBeA#kZ5&$!9}tC_>7Z&mt;<+T*mARz_>uaUZh= z|Fru&Moh?P5n~<^+RclwHiXCOdDu2$q39*fi+F+6j~gY$6HnvgNhc7y@Hfec01yE} zK36)Om`6cn6_TQ0ry2uP(M##)G)#ebmxh05l`6#l5+{I!BKbT{t^BL$Pk zgW_ATb9ifEC$VGPW3_v6P%g4qf){aqWjYeNIl?$7@g!$eNHysRo96w1{G0XINkLu9 zit6)0{3DBR&q9nycQl3}y`-yjFOgIUK^}ne5#Q(6pq_}g)A4Ads0;THlOr8Ma;TW_YkBsjUe9 zR1LOdAOI?kZUN$;QYEWEQWQIQX4E$MIokg*Tvu^XCR`Z6ZP)Im4FmxNL0TyRNokPo zp3b*>x@QJdA%;TbN}h9HYLN@Ld$E zS{$JkD-^5!?@IQ|&Ux&Wexjc^-2*+yhpUrn2efVP(9~{kUEFA8g*6{ERk1po0#%pU zl?{g}M~-KG6qL^SS$B&6f_u*5Se?LIX%ZF@e2L*m<~qT4-KB&!;TO&Ah-G45)kFX7 z5|+a1u|?V=3v~JlJg0W`l-6wQde^?Dwse(i!`|BWE6a_ItfcnUsuApIt&hnP_M;X% zu#?l*l*W(XVhzbvJ9!z_=)#};1s4Cz00G;0FCk30QIA9n6n)lC^;b(=RkHifOR#z(F^|2t>ns3rhIe8-FV2JZ+m-vdyIMU8 zr}HdL;tY^~vpy}pTWD`_30I414Ili&#cf)ahhFlx^2|&Rz?pg8m0G=V+lAJinvyLM z){`~wH$KyEt4&$IM-jlX?OTkmVLe~759r6<*5l7T$Wg6|t4!yXcBB^U<%PATWX$8s z8ZX6{2rgU0!?Q%QO8$?xAJC_rA-(j`Fsy$H3W&L#>yAqm_SK)j&(tTU{q`rp8v* z2K=Z^L}Ac{MT+);`Rt>$r@=bz@RD}$94}=>29(6VoOlYlDNK!c4i}4V`nSN3C5Zc3 zq!yUtH~}3D-dcNHT3Qpf>WNfSJFn%Q)XExK*C{1f*R^M)huG(sn?QfgG2{dg!aXRO z3NXAAwTpmr{L3Y_;6%ZLtmj~l$T5)zEf$wXtbuMydi`OzTKdQR95M*Za12IPL%Vtj z$z1N(&JB`6?xE&w5|Eew|IaAoz1AF+9O3uSPo(1oCGZPrp>U=!PP$F_t_A^yi}n?R zK)zU$l?M)zC=&;Oy;4O)8k7pC{9~c7pvwI)+y-eK^N~cjaScyATr_cIpEyaRZrU%F zh~Ai+#IV>;{X%?8yn~)0@sTWoJtaoT4nddXqcptwxinRJx#+8OJ5ZGQ4yXbrCaeY> zz!MP@z?%^4KNnKLv)m8DA@Dgz8vcR6tMf!7z@&~YQ9h_{JS@_Kn@qi;7Vv<2n0OHQ zAC(}kfr25C_$mbRe@d1>C#siA*1{8txY8+bekLrv4ew8g2RabD@C#r$g8L7IoRQP+ zd!c9OM90-|FIwCaD4dP$Z`TV+Y;VI3;U28Z*eg7TNmVwYU`$L3MC&mDxKZqYarseV zGbXNDFByixg^wgKMrIC@CS$Vrmw+>-4yS?Nn9=Vhcmk8UZ-tClq2nny4~y;|BXDC} z+qeP?{j$DOaFuR0vEF7LQBYiSOawfP!f8TMgzDPVPOB58mzg1RjacT6LcvtJ>I_z~8T0U{wkRDA(yV zf=SBR3THu`q77dyoT``#j1o4<_1x1Ud-?FnOi`DNEZ8P?WqxJ!m&{^(<0nZSXkOSu zz?SOs69T`;bM98~Hu1{wKWH!hyYmVUGpGP1K-#}r;&?yx$Lh@dXx$fG7r#_zE05#9 z(=eyZ{wbI(+M;w!my0(m{)*cw*&=%zRxjPgT=9zm znrW5079^=4r|D1)@%PFr+#A;B=5$_Go!YX7x6Z=Tp5k3L$IC!|k;xaE$p2`xmzV{V zVF-sUw9#FuuoZ6Aw&XX8;x)zT6T}Is4{>RdWF-=oEKOGo^>YNmWXbLn=s_Eu7D0C8 zj*i#d6)mkzV(x?HF!NQOU*jWfKVD%2#O&pLuD3%A`HH&z;#UHDOE&weV2|lyxn7uM z49T|&Y+ zL|YAKV>gI*>kOe+Bu6yMeQ!wDDUY}dfF`+zRAYR+=$-c>M30Q>N(Ua-mvaL z@M>O1=Y3H;KcHhfE0ce#&AZG`05)lH*BHzBcRgQa;m+!lP;Bm=UOU)}m)dhkc#rp{ ztFZQ8zGh{8=^erRwqv(X8?KRFsdF8{EGPJ0ILtI3YD{lfn(eUaBo)Pt_IaK)t zoy&?SoQ2L{pUGH&CUBX!Zz#o&2&+L43J3aH(dXiRZi_J+X@7^oSP3|$Ya8;uJfUq0 za;Jh*pNFij)ENLIrK(Ty3Q4WLON1h6wPOJQNoPg!Y>+Irwo-%SaQ-ehf#maC)1M+8 z{Pl51kY_^gumsdow9nUs)=1cH>F5SvwnHd35PY#}FTB3`SnE8vw`PkKgk`mL`gS;+ z#Z@@MsqAW82A6Uwq!(c!x15W^GM>1yKU~jO7R155f{t_?{v~`FCqk0NK4CMEUJ2m~ zBVVLX-3rlYFu{R`_CQBEEfB#eZy671xDIu-kd%8$*9?X8isTERBK|CF4TSNZO9w-3 zf_0n|(0(CVkpc>xeu;h42g7-iC2^DBBhqD|*AZ7B%{LQaz;d?&G@%J_ z%StO)C|uU;2m->h76#;s{Iz?*D3MWC2=c|#&{trqxI>Z!o|d?BT*1$hBjslyM`><; z02C+vk=6no0CvS5gMC0Cv>on)f_)bwlcBF}We5pxb2x!~L7)x|Pzhu<%>pz)r`ZH( zf$N$}KsE3$BLh0XAao{h17yUV;3)7Cn*zfi*YZW61fue`gX^ICX$znQaAGVQ+6EsC zErx@Tg}x5(X2j@Lfw&+a9o{2dXm&eSYC<)Qlca~x7L!(b60KKXm99o1x>@=Jl_Rmh zOw=U04-}%UtV=)}x~}2Sk5hMoedzDlF;FNrIn)lifq5?a0jFbLZYA(_ z%-eASl8O1XWlK7!6Ahyzx2R^LR`Qf8RNaysrzTO`q$9~kuvnT*t{2%$8%TiVD7{Z6 zmVO0hlQVOhfokGwY8W`4*b=h|+)c1UZb2o)yhWFxcldd?JXnge9Ty^l@X@WI;$uoX z>mSKb#WsUNGDQ)k{9F7Z4#~QjWAnsM<%IdOI>7tm8MHYOnvTX>0!n> zR^f@VpY3a>dRS*tuyvQs)h@iPaLW-5GAl7UI`z-8}%tFn-g zDA2-$FM=Tt+TJY|IzfJNtc8n+UCpyZT+0E=H_;*UNnMlZvFU_jgy@EG4>3vXY1ju2 z5v%n3`1i$6b$e?jNFubIB{L)|HB9y=X+L#&@*U|u)ud%w08$)U@*fx^uUV7~-em5& zg+M|&+))lsB#li=grA#K78}vB#u)7>5w~HmJW5n;-G}FhPSpWGme|?i!w(iSrZ?57 z_=OQEu9L(WMr0$BjXG1ZSX!%jvMdmor}kd54|uIa7rB9Qxx&pCa%L#U4(Jq>*N6%= z9iiqT;p4V#+Nq+ktzNPY(dgz~*Z~o{$xC`%bg^L#Z=2Y&-mZF}xUOzRv9tKM*^q4` zDKQ>Oc9J^iH%EVx-q*G+p@9xHy=WvDq@3&K3Er0Nble4Dw0*-xVQ_c5X@}6V>a0d6 zJkmKq_LuNjhY*`Dn$xyHxH;TH0}qdswu(?NZeo@#q#oQK4AWG-gGO_FA3p+=c-%(}PgBw^^3kOz#-fMYy)-j%1l= zbXONQMa1o_t~?~V-hQ%Zh&ZTq#tIv8S5rw+h$OGxH+q58*8FGjL+L+;9X{QFSR3ay z7M!3w==cmgzdCcA z0( z{dj{@JaBiuZW)Eo7TPRP;*O$Tp9*}8q{8(aJ{Xv1UyhH2`n7lwN!9svp9s5}Bz+Tp zu{J$8zDdO%d1v0cmltIs;El^s zA8ENc0G%y8p!tq`2l~kEMC(p;-;VNG<}Ie2{dcMg0qzk90F? z_$gA4Zi3$+8zuYTPsj=G`u{hP`&IqnU+9pcx$u9e`wBbw51N)V4~amD=>CWj-MH9@ zTtXjs|3Uts-{1Z~#us#&7A^~G0%p!}_6X96WkM4&16TgtV@L1xe_~-wn z-OBj`yA%4#0@#-j7uLaHL|#@497{wlKL~db)1%fS{qT2-Gm#wpnD;}(jFa;QAZPJV z2LK(2{jtVET6vQp8)}kAspdnV>@{^1a+4{Mkx;12RU8DRGp9HyP!&^NaRh>xQH8@G zHN82@0cxhxmuJ8usMAr|Fhm6}wuRr48@&%9^U3k^`XOwB>(GR($4}QS1@CAb^o8ID zjZzr~-cdgzpMouFKR5{7rK%GF;5FqZb{qI!xxB&w8lmVa5J9u#-!ogFV0mof3#d=V zjT#8sFm=JVVGX_8yBWSh?Q;ErOeHrt>_&2k7E1t_WO|`11glNM6^USh(ViRxdKg@x z3NTS0F5CukblI$zph3$k2f)o5ZvI2?ikg)<4g9F8NR&c(O25b+=(J*Juo?D~UG?U{ zC{ykF9zI5Wcesv>B)R5H;8Fvil>r~>Q{*`C#yXdX0FGLIfZKo<=F7q{;22X6YdPp` z1k2umD-3hk3DWebU(uxwNL!;GiA~PYWsxUYWdZM`O9S^(7hqyk6g^ZiSJ9s~} z$kYO)wLbcPCXu%AWLE*Oc_iKitZ3W}IsjxttbhjktPg811J~+=Wiarc`BL5=aIR@? zMhcj0020oDdvvDANziOfZ?GL?QtkG3hyGS*Tpz(RWr>bMU=H=#_+0v{^FNIf;IuMI z<^j00ufsHmRa%=rlzC^FhC zy$n9kT@HEz#cOcyVUSVz-Sq}^Tb|=M6?UOb#s$(7t9Pim(zo3Q7+U&e)pv{~z28|O z{S6H7(DTKBciYyQTR=g}_0m>A(bSgb2W)95Oz#5jTc;%~0K?3{QYF}HxDwP2P0~3o zd+nv!K_EvjLH=S+`VmRC;0UDEfi))*5^Cn)GB3E@esIcL{kPfN7m& zHF-dIM{4POptAL5?lr*BoRXdh>}fa}{{Wm;cWP-U2$_xqm4Hw6>lSW`X;_@Q}lqcUW=stN+@ZZA4%mn&jDK zm-Q=U&&xk6b+YnG8!CypR<#T!7=ASUimVWCHH0q_}hh!-ie zqlEkktUzim|54d#@}l5uz8fhL?###`ZA3i@UBpH4iKW{JM)D#EB!Yo43*GR4!No3I zeC_}JAA(oI`%Jg#VE#$%Nb0qqKt77n2_EBDsoBD0(3|{6_*?*z9U`oDHJK-#S{6o* z6`#u6NF0_x>2C?1)H5NG@CC*$mEgaC4?)@Z5%B85**FbtaiQ^LaJ_vXJ{D0M|D)n0 zgeHg@EO{;qBR5EW@Zn^Pv;qLganj@bOT-OecI{}Q8K6qH5}CmFyamJrkev?V=fG$2 zpYW9swA2@uz!QTO;fe72h0|~wWRXi9_7XX2&%$=1dB#zs5N4^fNFTVBDJ34m+c0+m zhqp-A6AAEj{$yf0{G+B6e~Q?ZPQ%wAsktlh8bp=$8+S*J#%uA3=+KDQ*iSS*Xejm% zYF;=5+l3x=X~(qaSNkTc2=g>dBMih66_>~+{Ar39P1vDvcn|(gat{aazj>K>Jbtu# z7jBPlC;_mS`0Cv8*jBtF4aOk6DSkF4!4(nBm=Ko)Ucq>HrPpgL2@i8wh0Vup>gqsl~O-C#o9{W!4~U>>86Q8IP@F26J06ir!v54$G#?iXUKZw0#bP{-SQB z{y|Su#<&CMU20}TJo=v88rXsjBA0qyL|+j{UAoYVM40_!bQ8W;7l8kzmMYd@|ERu` z=de|(O1KM)Q=Ss1WAl_joDbM=#ri59`dr~qoP-{ht8#{*O|mbkI+QOfh$}#GW_3h= z)Ih%rEJ538U$4!mn#y!pg^Eal!(cR*zjF`1j{lkBtB!a_4&|U^o|Y|wV;Qz z8#qhRZq0+r>!?yQrsybIt#-*)ps}jZR7ccRnI1O)U8sl)-+~6q!vg1`QL;r|deoc# z?9zrhP-`7#p+m{#8WH-{x?J`Jy;m1TEJU|h7C>&O*gReM4J|N@Vy{P+8U9qpp3Y%uIi z;UQMNM{GILpcRC>|37(b57>dMRDSYGK(z9&E+zzIUOJ>9<P6N!{8v$kwA70W#fYq~cSQ-pHD61ag=8Cl#M&cS`X^zp zkrmq00SJ<#UhOpxiBzV#$Pq8uYlkw#p3YMxBOki{(ElJ0S2<#fk&`Q>Knc>_F;b9> znAlpefqVs8#&vXNe3Z&R|lf)NKZFQdKJ;G`pQ3x0G;D&HzMU7F69W4 z+7?`}4hd*}k+lVJY*ZzykYV++Vs!9tOHNoB{K=>a=nsF;t@XSKUsmsSDTQ|_);oak zDu$!mrR^>{rW~sIR5G4gsEH`$A@kMNvKQjbs(&k@xwfkK%HArLvb%arahT$DO?~!r z#RArx)EqgVy*u`v%*e&VXEIy)u>m&p4dE2eDfDphJm)SdN*Zm8ktPt){-?<=>r!N? zcbA_e73vukA7M&GR5^<$DqmG+a@5L{8dc>h#qQceMW+;_+0(NDc_Bxf@?Extdn?w$ zJmT}hzAzJnqXS0MOGSO2PLx6dIiDe~0jahp$$8LH?M!u4RhL|?T36jl99GS!F++Ql zrdpY3g>ooM&VHx>*{aIr^0yp)k-t2FyJN){**f0C6jC-qFg7-Ti57~&cGI-zf&ahM zQAwPq12tKC)%h980!!@vBF@00G#;uP)@fOf@-(|1f20iOWP!I7C%L193dK_HUACkA z5N~}&hdh{%7uLyo1pF0+vN6KS6Ag1htEPDFfZ`Qk_!wE`@q}DjKrSTsOc{3 zL0JsF7`vHYO`XCXW|mP&*sCNT@+S6m8Jn!c`-MvX-vvkbFC%35v<07tk@)brOK}bM z+x{=qCt|4tR~Ak0){h`2)A_m_h@l5)TSQIN zD$RM$MryfcO4Vlam%5;&mF!Wi&V5G4D(_?rBi<-SEgwK=6~WOgVy-+lWF3A`2KjBn z)0w6PYp@qIJ~s{%Qw8=M^cT5+A!&b$GoDF3HZKIPQU;Ts@Fx{w^yS!*9}JOI?&L~+ zN{KU>tjo(qh@aZX^z}ri#wBqZ5u+X+?SkJ^-U#919K}jM0`DiUS)jp8%(wsV??g-O z)#w`X34M$@+vtzAQBeIa(3$eGo)Q+2Z|XYPdUB;jT)B=+H^&rjBZr%2#2R9x_HNWuyg`#3;)Bmo9rcUDHYq(9u&^+B$=nF^A|to&L^CM^J&}^O{y_hw z+*>37O}=cNC^%1UYP`lCL6$f0D}6|t`Z2{Z#O1m*IeQ7j{40GZG0(It(FMO@&`0&) zdAhzO-?1l}BYu;x8r9VWap(`lmbw0@OorQULr2r|C=Ru-GZ9T8Uv#LXZ^`v-e+1Da z-nyBkCw*J&D~=Oynv_M)h|Y$OIi*BG{h+k{_>a2L39s;O^Vq0re6Hd8k^@+;&fXzs1AX06b}3<-{rF3!XS@V%nfnM97lSWRA{q}>IApS z5{w(m4EP_zmGUi+Qva&rZ_!KLm#V)wS9G(ggR8o=$u)wK5)E40m%CPNV2?~crCQ11 zChk&h;{F|VQPIQ)mTZ(WLOb6W8DDhN;}?@7sh<-^#{d%BepE0dWN5>hstSCm{%UnG zctiKOCR6068(tgDao2{j6062&B<#%Mzt!tG#kuaPGhAbOy7DRScw&m;5C3-*CI2C; zU4qKKi0=FPGM^-A^9Rr`rBCM6QvZOcZ5VkQ_Munn_p=HyiS9ky8yu&b!u}={XgxV= z*BiZOXgF&S4 zJ^s)r=r>13;gHf6CK32E^-Fh=2cUoJhVf?s60Hw^hv1ebRp7;Xp>7oXUGYTqKu8sx zQ_U86@p|$H(1EI+BDLkX-fKFsb%WuOrsU7n1FhBm1ED}Bwna^mE zMT_^-*O66=9@BQ{Ae1xbCYgp_w3|&7VZlVVW*PbwUazjh#!7Nk$FYgLy~W`b)+yMAYR(*a zmtIw6mXFbGEBPoBYwzcWF!!~8W&URTG^3LnXuW!T+!*SKYGTAoDpv73xS8A}f3j#A zIazkbV*?S(U~_)qQrgY#Hdap_LtZH3t-paOioJC=1wRxMEJxT)@?`U&s!6i_rY$9? z%+=VLcZ;zY%$c3^zxw3lSUO%eD)t=Jqd6L}ff}mL3@#_jl`nl>5hoN9k2?H^?ADy0 zxHIE!_X&%nDv@Z#mu8t%s;FwR6_mW5wjQe*9Zd zfDTvIELmOqz>58{!L7x`F^sVJaPBesag#&FMmnOwE=fwQvQCb*qXt@rL<}WUjO{@u zi7vgDPb&Uhv)#iVpREd>a~E4K@3VJ6x%4N@w!y9F6F8-QREeMPTiwZ0Ip=_7McL!3 z@8-aYs8V~=^vZSlUWV`0lQJLaH`T07uF;jVqGC^Lr?a0&gsP8o_XZIv5#QvED(4An z-S*1Yi0N4^GB;`Oj5qW~@IA`Z&o5H}I_s43KB3TZyW%Xz-waj0u7XUZ)pJVL853#> z^UfF+)wX0(x^L_u$y2mDID%MA!{{Kgkr7eh1*rRujJ6Iv&<2o z+a`dHgVrKft^QSk(l>R^)qaAT=1(;)>_$^t?U>5vMgz;XWVV4|yXP&}^Eit$C+LE> zlBCVrLA-6T&gxVAui@uaCLt#%T$wL=?JZTfOKRL6%8mj3XZ_2p06T3E>IGbaOsreR z`b)al62!VMm~S4#?qt0)9_A!fE;H=mE-W_bxAG?Ep3$x4{m5w4B7%WQ5t;RfQxkyhNEQEf4xj z5ef*rIr0S{+N;xVVVn*LIH`8w5oz&U2Aau;wW+)c3qGzLDEZ-;WcD`eZ@dG5m* z7W{m64sG{;{}++_Q5EEB+5srUh;bM2kcSv7plz*>J^>6Y-=xa`RYi8%eDH1#q$z{u zr&p+BAMzN3iRSK zKoNuW3)9H?*t|fAtOd*Tc4tmt3b)_19$P(|pc1fiwspi;>^IP498ZRch8dj5Mcj${ zexzOXIqe4GM_GwxKk>Zat@<2sBfC=dH*qYDr946GOiWX3B>I+3lUsHc%#@RtJt})=^;#-_lRWdv4FE zU1aX;W|AQ8*ghqEh!xTR{TX$uV5jbddMf*-_Ku3FTC3?+zADX9A5oU)|5V*m{If!* z{H`cSU90#eKb6oc|0MT{W@N8rO`)e`cFdcAC(LptWZ`+5piORfs7&g>>~3-<`OIzv zeuMl=(x#6$gb5sUJiU}1qpj6#ta8&V(Y`EsqR!WP6?0KE6|S)%YW74fD{D5ju$Jr(*~B(RLbqVGtFpQn;DOaSG+^ zb@&~b)UF0I)5}Cs?XHfy+&`Mn?W1aAG=H@=RaC1!wbT{Iscf33 zQx?flYeamROmC@<5;E;3b;xCUk0CW+7G%> z3R=61UHF??VoNGm_nY>YuC092@T=@Y30~h&k&!>h>QlKtOJuoJJtw8!>|b*vzRuXn zDvheu|KW@bsnBt_FZ~y4p776l?o;OrH@P+_G4b)4Gvyu9mow%wyCHA!{gxwTR(?ox zP5Cw!xA9rU*-D_nyYhC)Wb3W!sd+2wpqh*qUP&MxnDv; zwGa8d{xda&!UE3|swZL_*X_!2l20?!|z86cAeJrzeaU$1iH?Q9~e?P}jO4yhSl z@o#;8&7)$gbwur#Ja@}>_Q=ew=0c8R@-yQtZb{sCLjrGY#{+E!^+Gru*KTLg9 zJizm$s#v0TJ)>v>=FY@qXTb|I4$*JmdQoT7{o2#KIgL8js@lSaY3$O90xQfJRy?L| z0q0}xCi6esyP4r83-4qyZk)uw6W6LY2>y+<>V}C%F1fDh6zBN8P%n{e@;suv1B`IJ zrEmZXXLiZ5p<_1vXcCDQMK!+XlH3~&T|EEViS^#Rixs2l+WAY1j#yR*2Ibb6Ckl>a z4mF+?lF6}#R8eUhM|V>k6Uo!2OT3mG`oGvQeos_=K&j^yWhThDewFt?4KuGWui;%b zq4ad*lki~UWFf-MuRkvuRnu-Q6anQH%O%l~q7<`UoSHktlqi0Z(Ptbf5hs1uH%e#6 z&DA+cuSWW4x&he|tGW=(^}DFDg?v4)DsI73<_(j3!H;HsV^CzL4NPrDyMzN9mP_|= zHrI~?Y^%T5wF3oZuPkE#qHw$E67Wxs$Y=s1GF%KPU{?~MdkjsFJ)mVnhNZXFpWzWp zQdCD^t6!(mfH->|Qsg6h=8cdYMEz%tV4hFb%XY1J8)i^!s~ zXmcPESZHtRkJMzpG8{)*)7R-0$i<}bI$LyfY__HkjbF;BeNf$!@v3R)SwFGj7dFzf zPktXunm1gw45MZ_)2pxpHV?^1_)vbGbt^H0onHqLwpCj!KqG2hhRiBU^ERTMF4@kJ#_4Def~;Nl-VP4Y7Q(Y(RT4gAb3 zU)mqvWjlg|@b$dU)&UI0I&QhdEUR)dbD069_Qn_V+JcdWowR7hdp$#krJdHL(qooK zYCcofVtUj@swv`?%7rRg+@PFFP4sh83?)x^!m`gKJZ~UVO-`M)jJiZ@xAi8c5^22b zx=PgmmZxR0Qd4O)JyVV>X*X6Vuzaf_STSJ*qaP<xh}VJ z{g+cn|!ojzsRMpd+KYQ!|fZ_VxCSMuxXD&HpA2IUt|JBC)ku1~2yvUjsYWF?bk zyA|I-b#toB%}th?5R9OF+($jkZ0G*U;10@60}J zZq>(3?k&Rd<%SQ<(~7$EM3ZaoXC9)^@cOEhADWrg5echRFD#|Y7AyNqd&74q zs*R(9jq(uv5Z@TtB+a)4*XS3jd#?MaV#W1YY~qq^kL^`_7EN;YtO_p{)|9O5Em>E7 zq5WRzqvC;9iHG(-@oQbbbH+dmOAXM*^%QH1R0}v zGkxyr*@AKN2Wgu{gXbdZe8~jIjmqhO_jHl$Foba8J8Q}|)ePylT7ITn*gm%6W>H70 zQ|0AcQ!`OLK2zHGuqGuXu_2_^9RI?a#~vA7Vv%so?`iVfhD=?7&i;5qDzE77W{)lKcst0$C?`v0ZA7A8uaQKk6~g@c8DsZf;t%qxl4HRTyP_#Qz!;V6YV`e2(i@h#ltJXzC>g=I&H+ zfDET`ia@CUjKTj`^ddW^1FP+-c5Zvk!pd4(7qJ5i_coWXFX!xUyv#YAv9%$DyE(bd zx}Mh=A8Wb8-yik2d63|4ShUeu)Guhfo-5Ax*{ag}^Z>kJgkU!X=o^W0ZTHnh&ETpkZ!pFuMtQCk+)c0lmG z3T#~<)Rca2CWJo=M>HM~EyE42thR@Qw*<0$lKwSFax;Mb?q?49P&?Qb|>H^nB`5A6Q3qnumM?gCR4{2#Q-N&l_ z4S$;-q7on-F4GiZ)ZJ;jtQ0*y<2StkEy#1?Hty6>d`ivwmNI-y#pR}d@EIiqje+>oe0IGUAH1Te?i)Tm?T|%+FIaxx z^bL=S-D~v6b0SGSALob8*LLBWz<5m^ z+iL8ZH`6{9F-?o;5ykf#tkn6uFV+VXy27olg33$FHov2mEGJDO$}zUmaG3lV>8Bq` z-UxZCT}o~Zv{m0BaUVAon@pTPPVt9yba9YRC2l%>W2O^E8PuZkcdqWbldFfYO2eUk6yXFP`KH#Go zpb?+3s-g7g`Gfx-lsjBz$@-`O$lfLKuxvz98U&+D-;}e^YibCq2F^ zoSBI(b7WC;;7kX4IhAK~iS#0&s(p<=4VTJZHCXj8i!AlS^<#3c*5&J>vSyk;Y2~Rk zCWYoq;s&FgW=u@4o>DJds@FbIWrXBuLX<$j2Gt1#?EO#~BS$@6%TLHqm$}SyCV!?U z^^x|o`Iops4XH|NR9SYFp$+rRhN1=5Zj&k(v3xUb%)DmS8xEy9o961TCh`mibkAc1 z`gz(bOAE9n&At#H^(S?AfL0||6?mUid{s{I_*>4EpLUtam}HeR1F1IpKig3RO%at( z8)r5Im5r)DZ@p1?)EZs4HrL5gZ#j{Po4w5IQ*Im2nkoWTw~FkqDsPR7x9;HycY^>cx#8 z3Rl#9YUs*2VF|0>pE=)j*9xZ?jFP&bgg1r>=Kq%c)+tO>#5c`P<6lc|t1I-1fF;VO z+8y4sqDXzuW0mZt@|Vjn`lrHm=3;8NEZWu+|4b)V?pz}&zE!%Vr?YfeVRYB(GLIa* zQ&}FKvA3hEqC5F@+o7uA38Px>RI`>1ZR)L^5dOG<$J)2J&AO0N<9En1m{;tz$9PMS z?}qC)h>GW^wNoV(4l7iAfS7h(z6m;6S-N^<+1pZX_qmDzg~L|es_dWRxAJV|(+o-b z+v+*V>)OWFl*eCh@v7~KzTPyHJu`fF{WVVKVzjP>=i;}?Eardl+G|V}o_4F#yNkQ$ zY}B+%g$`QPKrn0iWO+DTUOA*^OVz^C*6Xx24}`3*f9tp59W;ZHZ55YU1gm ziy9FA=I|`*3c-!VUY7ZyetwK;rntsyyJ4c_p4(2{Kw!n3_i7!u+2NgXFl;xyRhEjZ zs|f8n%^g}oc7Ej^ESR%$GH-cyaQi~uhICD9B_B$<(cC6j7C)u&ns7?ANBw@$@Nkd1 zc5%PO+6slw(&Jj1M5?5wrt9MQasM=q6JLoQVEs>G2_J5GEX@l3YB~%! z`IQ?kfm6M<>+V4l-Tu}*fu}pqQ_11aj!}wn$io>^88-T&yl&MLiMIIj%4o^Y{Py-5 zY50nDtrls1`d`hLr8krEo5ljm!pVNWg2;N#$XrXi5nFWWE&p6#_m z7Y5&Qd#%YtEY8bRgHbm}zTAplo{>iX#I)tZI+LKnVo?VTb>=&_^+Kmtc(q)CE~V8q zkB9A-e{M{MS#itjP4NCGqK-r+g|(Y&5q5C5F&;VV=cPx``CjeXwP>B&GxcR`kaMb1 zhGjbH<&N0S88TXpyOs%8Heo?UZ`!Y5iFvD9e_+eAHn+^eg467pO0k0F@`fIaj(u%? ziS z_@T0X9gnDaMM%2?H9Rk{HHo~OmDo&^Wa`nz^CW+{Ps0?lG`7Q9KxRfhwd9duVN*rgNpDf#`BPE(;-~GagYph}2SR$3nSF(Udl+ z?0oL+mQAvP%1#sH=%@ol|=$%-wiyU9$8>@z>2PlrA>KBkf2q56BYx9?%y zSn9r4p(c>hxZP9bQj48MiaF#-$4AT+GSy}jwVZfV>eFsf&nn!~`dFpOg<0^`QHDSeESDtzFCP_exe@V%*&B zDBse}&V+mq^~muDQ$x+Q@gd)m)g{;3hw7aRm$w$^5_0XEJG4ONipJZTttn3$yfniT zYpn`(Va$8WL)D(hNYiiS&rqdtf-*2@m)=nU`>M3D@>O18YL@Jb+f60Id~{aI)9J5H zW0~R97n>|nN4_l)x9Lsy3SPJTYdn^7sCkj$c;=|aYW>@kw)$iGiHROoJ6&+hE{jB4 z5joM+tl@>`8Fs1RAhYg*O6JSfd{I_;%~wxW#JXKj&Xc=3t7X5L_fGco7J8$Nhzz8P zOD4CuSzQa57K`OtPC?Uc^X81bjU!B#Qqt?ojOP^C9Z=j+_&LjE8)PS)oau5V(MC;tppF;sXuZ-HSunFD zynbiSfF_kyn89k;UZ+nPQ$OBPp3qmvGKa)On$MVQmi8IH8%~7|FgWRjK@qwLorABt zrc8r-{#FsHJ8pdnlhV@}msQAhPVTfL^U$V^SVub+tJb@gMC70Eb11FKhI$8-q3NwX zx69#VyRJhOcjL{StE+;ee|PAsn=$=|v*s3I-9bj_T~sC1}jeAVQn|5p8} zPK_6@d{bkHe$sxs_I$+RRyI3!3EcFHb1tC00q3RqWLpOd+~$8Y%S0nxi;RQB-)8;P zIZF@N7pXnLmT9Sy7iSJiDO3>4g|^MGdvmpxHCE&A?fEt7;>} zpLSesM#75jtj(=Gke|M0Im?(mx+jVqls>*ImAxgYsWXAo6K~rQ!)=bPZ;RyV!+$qF z<8NIO*N6-51mN}KM8kYiEq!8q!7x*(w4bY0e*sX=j@AwbAKIT%xxn$$hsh@+_lvB( zrCf)6r`4I?Xw> znfE(|!1C0lb|FxoP}y1roQZX4t_H=CTN@jpIbnYF9nhh`O|`MG+JAD@CnVY{qr!mB zSr%3nfX#88ZvKedE<9waBs}Kp4X-3qtrqC4$f2{8YD;Qz&cm*Ca7?DLqZQtr8sFB2 z3`huVIfYD(xzltBDUB2~+(svd4Xk^LmIRVDrI?N1%PJ3SyVr{H3wZ3Z<)szG7}u%h zc;f8B^QNJan)&U9d~&%}w6>XiI%}`0o9fGvb-uvLl2_y)*U7~@NOf|`PEk3q)NPomjTqFWz$O%s5h?TiXEl17d|t7lg7-yq^C)FR#lqK z(yG}DlqaPZvafasMt9VgYOY44)Na&pLPu3!)C>=3uWVPF|8qWkwT0)pQdd>a z(r4y@DmT}WMMsr87mYXI%8&)KbpsV`)&taeiXpQ%Dva{{tjBFs(W~^vmWHC4$%>|3 z#*p}~hBpQxI=6nj{z1f?S~q=Y$mQw;U4H;j>82avH@tkPHq}#Ga$d7>>Dl52^*5J4 zMOkXUMH3AZRq6%y+G=H|^-R@2#gW<96i)JcS%$WuC7kpXEl%e2t?WpQd3TJD>4k4HHV1N8PJiW)2DO zs7WtQ3Sn2tO{{=v72Kj+-%Vw)#$?YGC60!erPZdd`WY^FjhnRh7LCwnX<8R7(Y#S7 zTYIWfRKwv*6RP`Z`Dk+4pdE470sC^ z4_ExoxUf;0e2~6X-{K^^?WWo8+o|9mth}EXq zg-24E>*MH067BltGdg1@^~_@CM4s!q!Kw*UbX2o12D!DRa!2~#Y~I3Ccyk&@2!^;n ztBV!t7u!`6VzyI6MGKf@zq)h}9AlGNT!xOF8)6K{9?kfwJwZIn*wf$0ypT#?m&4kY zXxHn-hGR#pUC9|9d9-U7*CI^Peww!=$hozQALf6n>8qgHThtIGeCz(XwqCqyv3J!) z;I|XK{2#Q#UR-L0C~Sli|B|qr`{-j>;ARoK4`Hxq{<4acOuFY5qtZx z5(&EBW}AtFPno;fu$++0#5Kps2^pMqje?9+-`-5&$i$&*R|-`zSG#D!9GY?ok`N&@K*C! z=#+nbg9J8tudaQJB)Pw;_CswKM^)5dPENI@FK|Em(`I`j!*+1d5{b9vbp3SFY348W z9?CDhqW2Z-o}ydZ4c8}Rb(!H?F$+45!A~PTwlyM*&^;{(@;Xq}l!)^D*VG@w26<1a zb;4@g_g1NK_r_Gx1nD$zaCQ^CW~-CRk2YPvpBKLQI_I#&Riv=tn z#=VMPfvNSqigW(%wO)!U@1a$D75VPRD%=&z7H5|BDMmUyGEb2|a)>J`kRP$#q;Hao zEx%|s$Q@>nQOab`(oS|S)I}s8=^Ulqxu(B;gm!9leQT&DF9L0L*9;6zX|z|j1TL?i ztq$>@Ub9(s$LnQPpbB#DFF&rDx_C{gk8*?4v*Jc&yhDNUmEx!EIlZHTV>MF~B!4p7 zQ#nVTohIn2Hr`C8b;ymQ*Cezl4Ia^JTK4E^5gtwbx+|e`8rpQBfdlJmwY&YE)c9)W zdF`#drqQ`;%L~+B7WY zP(E6_eX(r`s=4EI*>p`a)PZlDqjs@k z{KpSy-rD}t9#z*^u~lzXD`xl0Zzyi{>K9fB*udl<*-k<-welw?( zrYYOSEu_!TxAJ@#J<^+eSJo2fmcWj^kJBc!;>P5vL|VRolC}7|a7hFWWQ!O2^+KOP zTembs2G6k>fXzmy?p4sA6>Qtu$v8m!wvNUuqt9yZW#uuf>mIVBn7q=T952=Z-Dj>n zXR6ef=f=&3V)?$j^&BTbxL{E3Y~c~%`ou%xU~yK&G~hTm$q$7JpjeAuox1qb7>|YTOPra1MZ2}J>{((hd4#hHhy{mnac~ZMEUzDYo-;$R z8v2!RU-$-@5S}0|LhXHjfl1gLw<)mYe_Fj9c}fh~c`!c+c)n?RK`xloGmeIWoh_Ax z2Jm{#2>K2v)11M020hV~vSz>>at=EM{s0I#4G6?Cavvjqv)lQl=MDk{)s-} ze!ho+i})qie^4J$XcLL3h@U&C+!vT)!;}1(Sbz81f&gr9vw>EC^;J(QY{T9bqx2`Z zi~0!D0T)Q}St!0LN*!&eO?NldQKpdiV9 zn@q%6@^<^8oIYu6e^c%osYlnYd|Trqqn} z`kd41;hkIZCaTIB(fnxD_)3R@KIPt`U4`S6Y?Uirpqz>SVBAq06cw{pD_D%T?EQ*K zS&O-i@{Tnge2LsE?2Ry8cGh=_SSWLL-3`j5IvWjaq;73_k%bt$)^I#JGpijJ~~yv%ZjVPyW@G6#7N zExY6yy0-A0StEcM(qdcsB-Zqz-5K?qX-3Pq*Su+ZGW5M*s`j=ICR(k2>}miM%DXn_ zpk4Bv8~GWQ%^p1#nfk`&Rx;~l{qI_Bj$d79DKqy#%?`a=en_>0>~6u?$_nIVA+7ux z|2Sh{+2leIv#BIJV-~x!I4n-d?Jo)l?c{GaEcb~Oe$}3Il>y7t;Wp18MA5RLI9=6w zVr@Xim-a_3y;%vZUuq6!cQ^km>CSa+vd}?!I~#mtiwZ*Ol93?V;~Fo%GhJOZmG+$J zSpG7-o9$hS$GLDL&7(ru{LCV=kDIVb-{&e3Khu{+)|4P#hcpVLD$l~)pZc-Dbl zPcu7bb@w@KQ0}eHTslp zgDc4pW-$MV*NL3jX67;R0IoyUb6_QZ#+oCbMmTC!1aw98&*vZF2>$y`25~;`V_3V>GyMWD|D;_P3 z;ekv~kvsoF7E7!Vl50|cdt#TckB}Ge$mclR0ad$>MW-Xt^HQ-gY~;3d<`!n^`g<%1 zE46Df+mjv8_>BFGGqDok9O2p)z2&y^JXN7Q6+agL%*O;Y5mz7-l8g;PmZ&!Kqv$L! zDEm^|>hhVy-c-~IbN^*T;c0n4ovd4zT zp}bn_3OUs5+I{p4@=0kkLr%WbGnhT(d--J674i!@g)@@;$$!N4C;t`VJeV4qF+gBN zO^OQ^9;d8AeZ_pr#d|C0OHFj?hli0L=3PY2l4myr=ew!qubom5qrA~lOUqCaHD?Nw zl@m)2(G7}ox(3EUg+Z3i{HX{-_-rr5V17J@knbrRz&#`f(@Xidd{*ppp}TBv$Oq9| zS)R8BI3>O9(gw9lruW?`?&t@RtXXwhZXnyG~?C10rl^zY`AP$)B{SjNp_?KLec z2p z{f6qisJisZG5I+)r%g)>wpS;p0}Cfr-X=ZioQfQDuin;$2M*W7+Hm37%IF^JtSde1+ZN=^=x(h0lpEYxQ7*|#Z7(%$$=}hc zQC_CaY(|J%g?J+!2&ccVAICN_3v2rFnpuykf>I7}&Xnt-J9#@xP6USv)|&o#nMM7E zYc336ueQWS0o_tfU2Dh!H(0lpX75;czAi84X>Uo{=iEPQX-1d)^sZUT_=3IdCyA`W zd9ASc8ojdVEZdejv0+YLAgic0H$}|BtAe9BJWl!CU@JkM`IQ$gVisk&&;d-h(WVA! zR2^D7Cd+keTjjx{b>^ z$~e)?%YDlVZ757};Vi3p7VXJ%s7wp`Bd{sm=fx5^m@fUdzmNWa&3cHY&fnB7$j_eH znF^{ptCj>^G@gA>xtp7q1m=x;GZZ= zt{W^^NGD3q2+lAr>M@~!kVDp;GbS zkfZPcV4L>@0uC z?bJ>jlJq3!aS1XUqKi^<)=OTe+@buUY(fjsYQ zMx4lF^OmCf$lX18g})VV+bH^5#kTq^#!-c!{0CE}uqay2(#xN#(%BXA&5{C6vz!Eu zaW~7u+24658Wo6MC(O=oBpyz;5`p5GVyClzP@7O$^b+zNx+hSa80n6WDpYX{xJv z0N-7en8FrZRn|p2h#Zd5r%f!r)50p8Sv<40 zfIh?&Rc1lIP=p###yjH{#Xi<}!#n&r+tpw%W^+>X@vMVfr4Gw|%G;=IN&X^8)f7ja z6b(`nK}q7ZD!OMQn5(pP2H=_U8}oF?B^lPWxFEK2Ni&a@U13uL6vma0DD|V;l|IzB zGa^gQ$v-p2=3Tf0tG>8hw2OVgBxYH2hZp(hCh+`?Ba(6c8+}a_TUeuW2%0Po(`@rZ zz~Sma&RpoIGGJaOqL&wTdgZUL7dDXvhw7$Q7t?mu^p_MCmQ)AnuG9BaK9RdIUR5YD z0c%$IJkca}LTLq4#VIQpnsbtSrI?>QlCLgmikcwwGMo*(AbO|!?imkk)Le3=L6E9( z-T@?75!$gj-?p{8vAV#!`Crv$+OnoZb9Lc_hCbb7x_|u;8NlGzCZqe9t<~K^F6&9< zLBmXqVt$R^dSen`$3=aEzHI#jp zJG;^;$%A*ftavp;U^c%AOcceMR(g&BrW=Bs6T!z?$9eDI{mOf7Px3O>9d7W<2YStw zxdno?NO3YPri;+rEtGdeOQY%A+U6o%j5p0M1#H%m#vH~lHc@vjTf{k8gW= z?JNi>a}8W18e_It{zZJjxZgP*Y|;hU42I<@ZChsE)JI8#43vEZS) z9)t@)k_+BvjQ!6ar!c!YjnE}_M1CP0#rc?Oi8%A_Mwg+J1!sabqyI#EJ=3vAz#S(P zzX<)Y>LYHV^Lu$BWxl)}6Fn_B(U2r|E*x6%Rh&V0H;oZrXBgEZfCT0<$ur;*I|#G` zvpAicrQmDc`25ij#>Y}F!5rbD=oBPhbSKD&W&tIh(O3$U=cLEe5O=GG1RtB&6CoVU zh-jk;Wz3}dIN^O(e8oVKEqg_ggJ?4+UF9JT=3){D@ikr@fB^viFuN9Tf{go{7s-UEIC50fuKbRBVQ|KmHy(t6JIfe3t9kB zK?)PV8F;m5B)D5VL39)vF80>}$_uy_6ql_p%e?GXGB#LLPVxX?o;$UZBwkgZM{E5>9KS5ET&_OEnQTx~Yq&%8m*G>~A9^c( z1MibAn;y)6t8K{IEqJB5nK)mRtG*YREWW9F6c7l;E1xbO2%S_Mbc#b($}6qkqPu0O zErAUCa%Sym=9n^Z`2yy-QlMxxi(A4~{bSS3Lb8^VTP%hxxS1w^_m`JnlwP=*&oZva z@)n2<)(Ja>?{#M)2a7pcIA9p?Qe)+DA7ZFXPSNml#iw~=P_EpsIghTdmDGG<05v{k z$xPp>uSO&DVP&ss73)C-P4brgpnNWbaUPXk<}tbNOY#bxc>jvuWF8cZH;EDwg(lu%*>^z=s@V)hg~CZbb!2TgU4zTbCKf-&b;D&3EC7;{6c}(cz-jl@&m^ zf%0etPwS>Sg~9Raig|&^6UFPsONGZfgR6P;E$!Tr#|&v}kHM9>u=%&*56iJ>A+ee5 z+OP(U=eXD5+%#@jO(xBgms#bN@q!Olj9=3z_+Dy`uog+o<5p$^BZ{OR3Q()x;1mE) z&>WkWjC3g1HZCm8>W!~DNngFzrzC_iyK9xcmT|lTQ*fE5+c<tah9aG8CxDU|b+ z^RE70!8zXWT7HIsKd7Ruwm6H3Cn*%O7+ky#v!K_UqEW%dT-IzJ=v9BLMhi|oTziw*{O;^P6x z1I153YaG1^BeK-WMnc0Z+x`F_=r180t|NMlk`t;qhM3E2QoqUI+2Oo6lXz9kaa^VUs;KN&K>H%oH9~uwfF8?mo4JHYWA_Ktl!u9-JP_(Fx9txco z*Jm}saX?kVE5r#r7V#Y&4Sip^9es^BdU#@|(E`U6_(rVR3M1O_=PlbsvBHu%KhXiv z((*d-bkTvL6XF=Lr@BCVUHp)I0b~Ql|F~X&%lUIb2z+0-3mOis%~}9e!n6b>tUw|n zx)2fSwvs{%uvs1!SR(e@F&K})?^|^c5yaW%7NH}wyVgUv7PkE_(~W^a;|);^yiuhQ zJwYtUxndmAKsCT5e}Ho&Z&v(50Mg$5Dk>wR99Lpy60rJ+x04Nx ztNBx8!s-G1K3PtQTwpB=(q9$`WHS}rLJQeoqEL8J`WhT9f~8luW5xE;!v&ATH>4Xg zw18gPyv82vmtx_?&{b)|ijD9esf&9rI)nP+=!Gqzc3Mxu<0+!ShBr_BsPZxIh`P)y z=C4!->CXSB^Pl891YxRLTqpRe3Iqa$Ta+(3$s(?@v|y#!Ug?wmTl`S*IKCg8rAP{Q zhT`SNSJ2=hxu-jYY?3uNx}Z0t|Eyi`!P1oaxm&1m`o(eA0XOZhRWeYdIq3fa+M-swd&93(vmEVF8%3Kn z2g{aEuZ>`zswT_rIhv}JqC4Dqm982(x3XfGRK&|KyMfaAOG$qqDtBt*wr)c&D0Ws~Vh?G1Qo4(Mq;-*z;uJJ% z)i#_5O@pZw+)WKpNElC9S0(i1r_|hImI{_vJ6|DTwl2^)-3u|_ALwqyi1n*&jz(7&a&gs zeuKzy8ZtneVSNgXQBADsWvyPPD5+(S?_F)+us5$=qq63Bch!**+;JTcoWp(G79+^v z?QB`VILEJRtj(P&kk*e#brv#e*s(F9zRHv^fAQBcFTb~7h;M&5?=aW1bYh=acQ{S>TuxL01CQVyPXCL;eE)a~ ze=Yd5>JX7H>h|A4JOpx|15t7PSP`gNH6OQw_WMWUhvDDLl8AIPc;PGJ7glPy zU($uYs~ZkA2`-f1h8_teCIdWHG+jFpwiMON2EmXx3cUrN2L_625eHy1>kuLb;k-S_ zUC1v@je5ev24 zf7OK1p36EnJAshTg$$0G{Gr#!k={&r|z?!8lCC zf}8R6NEBp?KNT*4$_NW41`i>!bE{x6(Uz)$9}_QPQDmcJS(pb(No0QOu~^CZWn=Lv z1 zG0s7L)Q6nE(01x$%0GB9^*MGVGKG2^dKdXhUGd|gH>smbUtw#h&V~PQl+s!;h-ivg zxmQ%7$~T`Dk5nzvcZm~}@02lORJl>25&u?lpdLV?wBv692Pz>U$SnzI zA+=(5Oa+X~yFz7%NWRo>5z3P7TY3ZwmIW^Sfm=!sTWRpWQvZrA!tMHB#pgxK^rUWw z$fWzF5QvWG1jKf6to8-?Tzp5H%^wIbG*{_3@J$nxeHK)yHza?8rl>7q9N;mk)X+u9 zP-TVhYviBe!qOJ>f&9b5FW6!E7^`l)M>eZ`v*3sMr0Ir`G!NIF7d|QWmRE}$Obq;u zXm?Q!xJVphJjII>KQa6)yaN!1$=NHwY5Il90NAhdkKPA$Y3)L;!p)kozP(7D>cdhA zDp#&u_#R^`Qml^QDYDOH*9BRX64MaD>k5H(xG<$WPj*k(S(b?Vi&m5d0$S0H5*O}n zvB*5LFcFw+x|ekn*j&_{JQ_?iW=9u5(fT(b26&YY_7x*R+5t+F zN9ri3ZE-_8gf-MyY5l#-OtHCEn0OIbQS~P(7Id$e9NY}KmRkC3gx!iQmb^u# z8HX*rj1JXauy)0UsPe0X((){_BwJdT{mtMbwavwqKdICCC<{-}GhVJzAhLk!&a|m59hP`Wpx)^~`X79w}pW(+`sn$2$8f$>BC8 ze-I2V$2n$-hvrLki`F_|Mf+2o_m!RC2TMcky}2S;kb| zZpkL5y+SEbv6d4XBt~`ycvMoxQSuH*YPtP%S4k7^W41ujF7QmIBx{9=XrttgcxXr# zISJ7CJSHQdu}gAE1-!+9PaZ+@=N_eI;I`%Ki4Hc`bb{#OBxw&2b=)QLVnWIrgr6lU zc%OhTL@)mdZxC@%aJ^7UToyjcxzff66Z6biuTupExWyqxprSLZR#|&Jhj9XXC}9-9QY!SqyMF_;tXQ z_5=S84#-L&W`dWJw1g+r9d(>A!JWb9iKj@HPqAbL+Os5BQiW}FFiXDRdo10^bmCg+ zTPy;2Q)G+LLB7Tb1HikoAs8Q8hGk<-&}MNvb{<~Bxr7gZH__PmA|xd9CZ2@cN}7es zQ9%?Re~rx#E+!JN8$K-J0B&C5C9x+~IJ8L2#AnMqa-d{W$wxE+eQ5MR3CvX;hL&J- zsV!>8^r#sNjWSv7Q<#+PSk-PH# zj3wxNxjdm0Wyup)ufQhC{swhn+hy(E7w{a}>ct=M7t(hQ8wsJ*WOMtGuj9P9uWXlexg@J`JFmNha?y&>-#lB0G{??g7Mb|fr9hpBub zZ=gNO>Yzj{R`JEV9Q&?_S$qLk%gqk`#B|wN%ilzoY+%s`@M`fuEgiBmt&w*^`9+OH zKcq80fYP8RMhE^!c%?zW6vFlTZFwp158cc3SxACz)|&Om25nd*A6=t~4H}4kQ>S{b z!D?06i+gb=rLRK|en2tFY8H_syIM2@3@k@A6<}?dO7;M}UuwpGLX%4Bz>Sd5+{#ac zE){n(9>dE_eYrQ`s-ohwF8H^Rw%G*+Z!|A2Z|#VMGd_LxHxc1;ag<>R1opkW#?x{Xw|0Nj>6(viU7 zW*00H9MgCcumMF4ZrrEf%{mpm915(tk+UA^uezJs3R_m(j%UNBvda3QPwT_05gfF&ItC@x@Z_d)jpw_0zC8^M*$ zf4Lm6tI3K!ADY_kq_XV2;3;!A=u@G%3#qtw?vsI@WJkoY!vKcfl5E2 z^~FNP+dPeKkD@LAyyB%Ik!C6RpcqmJ!fg3*`Z>Wlxq-QmHB%nL(&RmmkKqhU$7IL3 z+BJ`5O8&&iI9Y_?e4tV`S!DKNOYZ|~+;XH_pjf+?(sCrh;;>YQ@lASpZ(*PIiJV72 zp_naS%y=lVm3?7;hx%m4*_Hw;SuH1wiO9HIabA?nleahRt89p1%o?urtS~F$yR=pG zA}~yf0b;KxX#zCZElcVRZ?zvTbwCAkhf3}6fFg}d!}_B6EK6oTkuR1xaE=qc(m&ir z@S5}vuauuE-OJZ7jz}8>RBo3P5SFE7OCv?S@z15U;$sm-(&6B=fIrk5i0(C?x&rTU zi=$4UHukfq!&u2&U+N?=#kfwI$ER!TrG5ej8CN<-aP2>D`bQ`L=TR?3uDs3ERndEf zGj&M3G1r3X0E$u{QaX?mk5U{cD#DY>gEImSQ7H)5Ya|ti%G{!<1gzSAF_n&Qn+sAb z;;G>p6%R~NXH#B4o3xj*1}(51)F_Yuc+@~>C~pG!12WQU$oKH{oO1FWye+kmJdLEr zk0o~^f5V@U2hk$|TJjWT^n6WT!BgDA$tT1d`!Mo5@px`8HD0ny|CTI7?yFQ}66#Cc zAcIjU`iyi#`^0_!;cspR>4rrXe)|vWat4rg_<)oLqy?TIS3yp~Pll^WCn6vqgj_}J z@;pKoNIcwpNm9~kpG4M@ljq(hx06Ns!4ig~N!caImmH@COOhpb(8-cu$z9QNNtEOZ zr(2RljxCIrWRvr=8ImkAA|*wVK?>vMO47*M@C6b*xp(D1$!_wYXN}|yHNtHXIf=5g z&nA~s%PohJnN*T)5y6tzDQ*)&xsLSvZ{{O0M1nk0w3ML97jlLWkbDGf522Pl&3Zr- z$xbKVCCX%*VmA`ivYJ)ri3hT*mHQ+PGFwlfL@0gXHcQeX?X+h~E=uz)oymbxYppL{ ztvM(EiFa!x5<0#~V+rf=t?G?J34Tr;$4mRsMtrv6 zH*^4ZGprUI#N+gRtbSamA5);kOLff5(|EsjYtjq+w01zu9sIc_Y}FjXP7SVfCTOZQ z&tXKn^1SOq;=bbIfBVmppRp83;$=J40G3qBmjz*9NjZK7t2S?iCSiMuFA3&hk4#@! z7Whchw1OeHYtgdIM0|~LX_5?w4X!Z?yiV^Bb`HO$8@%ETF-dcK`9)&2dZX(RLaR!$ zrxQmNA1w`%L2^X3AH7;tA}vFISMqRs%&sCClwe8aQT!T=DqF&A!Pb^e&o9TWn15t^ z#{L%fB{|`Cri>ULJg#U&mjp4(W0o~g-Z3n)>P?0phE~oVpniZ?w%48;otL@k}v6EEQoQGjAluvorSE!Wkf^#0%6eBav_{M zXS;kbdQLk-do_SG!6(&)+$0_-HAjc(1&W8#X5VGHh$YO}B606ntYU&FM zWUn+%bS06gzRGBUO4U`&-2z1I&U(y>P+jJXFBqy4a=kNGs0Q&2NwG>Z|3S=BrIpY- zEJUFbonK)k{|3-Kw#xIN!7gdCFYx{a4YDFsWf3Y{jMLO{YBftCo2a&CqqtsmjgtrN zRjuXv@i(c~@Rl)4m4Erp`5DSCfkQ^SGEf+jcvx{)R2aQY0gLsaPvswg7ykFwtwtPst1Nt8{-)C(?3 z58_)b_DIFV59K-~EM7?&lncanu*r%yKo$_7I1e1*#VX8TB4f287JQbsR51}k(o5v~ zVY`HraxQ!=>biUmq6_tvZ9{4P0$Cgu>_L~l#_e5_q;2@01+S$U#7&DY(rJ=oisuRi z{Exh>@J1MDu3{*%U0f=EjJ)8kllP+m^eu7>t&4NG?SUl=hLMLMo*KGSq*d)SXm$ zxKTgI<1VYIqvU71DO3q%J2#n1rPAdqWi7HeNvMo1i-(`cd}P5Q3)v)@JttoJN;a(! zlpc}|$x%sbr61FVNDHJd*JMeZr4Lt^P+z6DLj0)<(gS`6s2*vj#~4Z>EpqXvQl&II zOUhZgVlGAgkgukb0!s#hyl;*16G=sIA)0Y$esGos()!$uwkq6_u}k82N$< zRtE<6Q&Uw{eyhoc%D3*D$#u#gm#L&l!L)NAxpMv7qhy$@nL0+v%uMV#MJw(E*Hc-h zI|3_;YZ}XvQ5i*H1sADEqbz$I*AibQNN`JsF@IE4IMwwkY{#+4>Bzf%KB zQVSBvPv+FDX7XuqN=h<$#k45y4SB@)BQllTYB(J1LSlN6?`_gwXYC$O4%D16C$FSxIVK3#lo77&(U|Othe{q_1(GZ-?Z!VXFH)$qrqC^C3yC#%MQJf~(ps$4Sx^ zjgqruWTPkYlUz~XBfdw*)y4A^q_lP!a|{VppU;<(oGM1#g4BAGki=*L6$W>`__UC63nE6tnoe>1|x9 z7&5ek9TrFHA_A1+Me1|jQ$^pE`7S=98_(3)B^bY;>#%08V zx>D3e^m%PJCaV6V<^}dhWvRv)FDlxl&L_rZzf%F^QK<<^E#+rig`$P_HOvnlW_KyGgm1Ix}^Q;u`HvTm<}uu|CWPUci$2XG3uurPmyg#OrWM z2UZKtNgwDQVO9tp>7ucP>=CUMN2Qf&-s6=7qo##Z8ARS>!NhNXwbyUj`oLUiFFu{_+Q%bU>oeES;vkMsO9l zX~T(*tY4aD(j;o9`Zwtb{)w7Eeu{EXU8g*&i&dpkUzR^tw$tYnQWYNw3{B&%^REW;_`fL*Y~>9qWws8~{{IY$ZPb2JguF|2ZRH}wGJ zmwGAEVq=<#)!U+I>n2<5oFaagKSeaFW8Gbu^0sYuNizmP7YAuVS}AVLXS> z|A88Qu74wNTOjx10RF-Q&XeRK@qDpeeVHNWom3|?movAjHZyln%2Z2O%W&J39jxPx z=n!peFIJxj`t@3IN?h# zyZngghI5kKQG82uN%e#~o3~I^%~dfcDo=BtlGiFDc*}4L760(eNV+1K_q%2<{4XC{ zriLT<&kMq#J^>+f4>UvYF1Z^t2sN=4;4IPd(3^lsbjF_~|1Pfg+9a;H8Cq> zELCaf4A~5&lm8N_9X{ywO1c=TTv8;l0Qa~Tp~=nd%xrLX6P5ykXnO@71ZUVds0?7Q z6;VG5z*({@R|E6SVa2EAyN%CtFUso-P3ha@WA(|2?`198e`3bU0yH5ZkEMrIz5WxW znTlUt&n0KzlqFb6I>_W^fCKGo8ArgXws6XLa7OEB{Cr@4%iPAt0J-U0-5}s>S5=nF zPur4<6>^qkcW#s1+3c4N%8nUZ6A#MD^@pRcNndK8h3u9JHKYCBO2???c|DXsiup@8 zk}=>n&c9%Ox1Ny#PU*Z&)&hq+K-@4OY&SK6fM1(yUB3Kw%lgV`a&2>TajHDR&dIHl zJ+^L4FO?b1_Y3d96xWx4;sX$szs_c;JI{J- zZEJ|4jkl-~n}{>b)s5k3oe70HQ2)b7#$;C&8aUV+B{}+9d`q6YE}2-Hepc&EUY2On zjHfP(UZ#3Z_YLMLFEWFC-4uE@--7`caW6W?L#~1xzJryBM6eJRY2y%8Wfq`55R9fe zOe}h#k%4Wm*BX?#Kb7zF?S%T`PdYvEQ|?8rgse(eX~>vZWF;k@>HgiS?y?G4XM$@IQ?Nd>Kk(&=7R>)AYl{ zBb5T(zoh>atF%Wcb-4`9e(JIGaP>}laAJUJJL7uPSLIHYELf`8#|iK)gqyhEJTCtC z>drb|0ds^$xtqevHQ#XoBFZ(|q8WNX+#z zrI9xX>ihRoeP_uBi^eXDdMyYN$?Ofd=?Q8nFicYOFLtS)0t|6TJ47LVm*go(Z70=$?}aSSbF?-flp0eCb8{CeB7un{FF-F}6j!kBdf@X?}Ab z)K1XE@@mRgs|CF4h4)oWe0=s#RRE2a$i-i z$f=N`JR)Ld+ZB&Q=T^1Df5g5CV_}3?5tRrX6F&*gfqW&aeC1%gq|1{EWJ~@yeU)cQ z@vH=$R&ts8LwjEGm6)&jDxHBTQU8%TA(pE%q+!*cR2FG&*+%7UDYkHwa-0;-4pl6Z z4z5av)208$AB6TxFGkISBBXbM!@!NwSH2?PjP$FgT>elt-q}s|OyiouZmZS+A*AZXr0RyOc%fSk(!| z+lJ*TPldgDno_KYFTJn020t&zP%MDuSvI%`c1%48X`zw$67V||6L}a!f(L^~182Z= zU#k2Yu*I`Wz7TM5CjVy{5hGVa*V!o!>I=G2c$0dumWVo{%F*1Z->Y1w$*o$WoT@%h zs#f6DEAoHC06##$zgtwQtYYY!@?NS2idKfjF9UlOw8$=S61;B3Q-B0L^~K0rpfR3n zWP8Ac&Iaijz@2_Z{mDF!+@h{9MdKH%))<+nYULxtzx8#>Rfe%urHUc_%F;x|6df=B zAGktm$XWsoYWh>_zz^!}@ngUuRbQk87*Xn1oCX#s*uJ&$BskS`iwq4-ab73o1N-TD zYQUaDc2s?^t-$rE(yZ}~UzM;$T0d6t%B-pyugEuBO2 z>vfJRZ-G-ayCSOroVsYm2Kh1NGv9pKM+Mn)M79um?tDb*2WHdGt7o_RklIyn^I4pq z@?q1?|C()?{axK^g~4{Ratr*`I#{w9uCd7S6QCVt*UYWZEaTqPNg&oxymAY0NH-7} z1~_ZpuTaUk>R{hk*?^Mcxm9`!UhjNG@(BEwR-#(lahK$(TH2n9-KkWzO>gv5Txw0K z%T~lTf2u^l15JG;1bDi=Fn52fF~_3DR)3`lVqh55F2EX)8$un!W9U4pa$>j zC977^Jl9J>1={(cq!Wr^IJbVPpGscWa-@NRcW%ZbZlP%QCylxF>9+N#n^iNcObn*v zuq6ijCEwq43BNm&X~Ytt6s!Ixxj62guA5pL{!^PpCj?$q|7Hq(7OCpkhuo(tj_?*c zXyIjoCim_L_p*{GtDIa zFEhfhp4^hspwFbn#vRoDraOgy(u^?v2EJ4?SkHXoln*%{+*1_={HYGNp}oQ^`oiWr z==Y?PO*^pjaVd5h&bLu#n}J_Z$FRI0kSepyM~G`m=9#)kPxJJ~OiE$KbNvVEp_C;$ zJ3TzkrmbK+55KQ*VRZz4P`%)k`;;nCJP&sUe2@Rv(F4jC{-)8IuHjXr2>S>@i`{AC z5_!n~S=~w5wQnpF$h8&cO)n|5;(p^9DwyYEkkJli81yR`W0Egu?=n}#)oV7hj)osr z!<@9hcdA&ij{G&X_&+~y4 z7=hjWIP^{U+HnA6i)*PY+j)8_*!>U1ap7IBI9xvuXvQf znH`dA*FE4&&6ug};XFykYO1-1;+)h)yyM|Rsx1D6pwY@y!F`_=__^@D`&$SQy>Wa1 zPLa%|9J0P(BM7@KSJ@vhS>`pIMg(j^bGFx*jrH7wa*Lsyd#XsKFW{Bt`sx<*zNT-{ z+~v0nS54GDgQL&|N!J%L{p2Siez9+)f+^Oy?F7JqeG1awJGQs!EI@Z|&t z^IQHS^j6am!HR}=M!5i2Gr=Ge94Vixmk3>p=Iew)QO*%`Hxgtt3-)8{&D3N-2f?bj?|NX}>DVL0}IE&ZgS?0y!JO4GwXUW)x za>IyZNwq+~Q<7C?)$NgR3;VQtC4)IN8iV9o+8=eTbV`z3emr7Fv%b>UG8l~fjZ z1>P+k{Esh`{_7D5u8_WWV#?3T+)2mG`M_x015>g57fNT0lRvA!X_zTLT0K$kDBoM= zr&}uDR+y??Azzm>MKfF8l{TV!Bex`_C=bh3v5AVea&owXVv)Q!@F<)pkMmg#O_9&@ z$N`SZ-Z*v2ak5jSU{kAtf-5wxR`{VN8rtCd^$0x=)>gIYv~YImNo^-Qz2Kc@BXl3DkSk0d?{hPDkYv{KECs%&acIxU%BQ!g;+Y89*i`wbgIjZxTl(f0ZlWKnAKE(mmhM24HZRP&3 z)6h4?nLryf1HR!i2t0t!dr0J~!TWIL!h`Z23sD0$l7iR}uG=1a^j*r47WwiOyw@dIVxZe_Sn z7odk1W2+;6$xD%nX&P{{}XKSQW{~1gum%@=(bq!CB6s z(!F2@{+GeAEg3UcpWkvA@lMy+JW$)EEo=H#IZnf~A1`T8x7wQXx2g76aaqI4Q|8~R zREnD>U1Bc$#JD(y3VqjShEbuZT1H?p=%hCKNaUZCr#)cVe)zj{vXl)?BJ_0&>x(g( zuIUY1kkK7<R%$mrrAb(o~isf}k5U)uTT z@wM32;~4*nww4mCwfJDuW8AO2Yjy^qF>}Ovh%`2pWtl-m#M5BXOg z$XwxHrtM?~w^+O@wo*`P*^}Kf5Bj znL#Kh#x_kMn)8&lUee`EvgIcwEj7ZNN8J~H&)7wej(TiZ$oLhqUuR|=@JDNBb9CNy z>L6aZ+d^fUAl!igXNjWm2_5x#3>wk)gFr;Mv* zdV-3~Tx{{Btx0)nQqn)f_Zc2AS4Qp8V_2s{)@$E$YW+zX0r!VDTQ$Uo-I5e1g`N)E zpsS)MxI67tq_^l4HO8!om;Db|{xreD;+a=yKf=2EoFmPMbH``Yr6F)HJ+xth5k z<)HB(D=1!SaAoI2tswfamclZpU#2Or}t${Xz z+SWRn&TJ4g8yK^zFE`C$faPAcgUpN~qLsp$nLA{0W?jh`GU?bmQw)ahoX+?PeJxiR zW!6pLb%m_fY~=6t*Q?6~_q?|#yM!;?+Td&AF^((1&ysNL>sA(PCn}+3F*~AKsi?z-c zOe<_QpAhhJUYewWrx~LS--Wd)qxA&gjg?Qe*FG!AWjEZXK~rRB9X|o7vQy~prZDI^ zahVK*4rvo9kqSdIV!)( zW#)s*e@Zr+%*y(LP$NP)HhY61STU6LTz6R!l{{TbgHNq=&`gGFBiE@eL$^a*lxP2$5;Ms1wzuSxnm76?e^v+M*JQX@TZY z{!hb8O-Qy-zfawtwpWK!{Y-kUou$f;`>o!h9E`N9c#7L0vy`!lIsQoa2fWJr1H^)m z?m56+P~e1;djo0|+a@tjZg^^~F)gThWpOiRRai|I4O>h6jcfFu@(&m!`q1o5eW{L< zX3|a8+L8`yc51f9-BTmf=Oe|crK)|we-uxZL;huOx5D@ze+f)-uLM+3l9Nn!1)PkU zWt(KJrP;2yr!WAKT+7!^Zb+G9OY*37vLF1iF-W|1HE&y$uuClalN&pd4I!Pi>9fx zW~sT{o?ZUcG}*SHxXbX^+L52A-)GTf-PX03#c4s>3R6rHO|!u8HLhKCPQNiSS*h2} z4nC>K)R6pr;nAx7-giMj8Q_kTe}eT+gR(U6X5-m`&ic&_llnd(CRIP|^+J}G*LO!Y zHW%IQl%w7AGTTpK)@QD5n~#f1ebzFYFd=b5(SK3OxVgm9J_MaKnQFv^*v<^R+7vH4zPZ7o;m zGN_);w=C8v`h=Go1N)4aQT3*tr&zaYTDKo=Y1yq#41PjUefvQ|M((XPC!#hpqlH5{ zmuhZ;C}{}?Z93|an2QzzJvAI<+Rj`Mbjfg!_1br?elq8bmsxX>XLGrs(hBH{FDZOP zT;z^k2_8}J-+h&Us-D;7NlYzcchHGHipI8GCeP1>S|cdI8NZv`sJW?m_RX}G1eNt5 z{dvrw`4lrIJkvCabtCAMA&evPb<^Q_zFr$NiToX|6IBz1We)S;4PqxGs)tKDTKBf= zB6&^KjZSY0x-6_+PWe=Lto1eZMQ&b88SP%i*`|Z^tEtOu_ZXiN@RqNvxiKd5M0R9& zk}-?Z6?9Q=;7#+5)Sl-9UKi9Of=jO9N`)xgp$Lu;??%q-7Sj-QL!CG2o>eU!q4a&F z@7h`!-i2`M6vpS=1E0!_kuWbffn2>4l7rbKRSc$C4;Qv_YtJ?D@3 z=4vAZZ@fOLmka;6HYz8IT^x+iK}ii_u*<}XsLSv8z`9tK)}F`CC~a-s!?qPhwghq_ za?UmNb8cqT+81-hDJQLoys!jUGlKU%rp74XZwU9%KM)v$uIf^R9N!vEp9r&bhN?## z>Z(_$Br_dOLD|xA2)#9N4_zT3BmO86kB(<*V6|*H@9Dakh zr9BOXj%UJywMFguqVbg#tvf{#C0kqkMI{BurZu9zoauHi(Wmsy)^2f1N{IQq*c#t! z{4RbP{nM~O5*PMJ*CNpcZPG51Jn*eho1`&Imnr+Cpz8^^Q+mzO7o^Fe8{9e;O4ro9 zY*R{iSA1{zCEZ?9-7Jx|7tC!ME8UrW%%+rHNvB(540D7t83J)XFy3sS4$?i zs$^EvRp592c{>7lnyt3J15y+NM>pu)ClcLAwE9hzmp zGT%m(9+OR-sg(QN{>SKjOh0iE*3`o^|?WowOJtB*3QBBOb|;#Bd;rZ`1yzR7l0 zF+aP=S`VK|pJ{#%!^yp-G&m^U!_W-fj5g{XKyX;MwgB=Dva0uhCwws~N07XN>IUu;WPXJs$3+*MsnduV2; zDwFxf%gR&nqYZ(|xM-#hP;3g*Y2GWQ25Ho#Fvb_7+zcIAih}P#W8EUbPhh;`dHH>S zT{qGS8dp?PTb3Ad%Uhe)>vhE`_GsPr{KeKwy1cBH7J_ytZNxlQJ2ttL#uz$ejCAJ z&Fi&JGEASqstk#;-lW?Dyv+T~b<3U`N$fKo7j-we$Cqd{q5K<*M=J@U z1+~;6A53tS)8Hy>ZrR*^6fU)}rq_(0k?YpIlTeUxyYnv5lB(?(Pr91u+j^doAG@{L zN@faaG~mo^ImPoZDSz$m23PJAP5zQ%l;HQxg(?xBRB*WA#n{(jP=luxXi* zA^sLJ>uErQDTmYM<7imMtMPQwZstE<@?PyBR4s-TL~(x2&B2MJOO+e@y~rb_n|q5W zn1a{ceUt||yF0H@Z)Qk4rqM2@u53%9pGtV$;>>sz3)$bZW<*Y~?q)}XM3~od)&*o4 zn|VGyv3d!Ai{~osLg8o^FIAHWwfJB7wfJ?7VqgL-zmn9qls>zZ-BU^LD_GyPo&GyV z+VP%oE+f0$m)Vm#rxn9uB>dZ)#zw>v>@J+rh;Np++}w~5(>op%P;7X~KkQSayCa<1a6+bTKQ zlyfbu+=v8YlbHJ@Hr`gj+a7V#b#0f4urC#FY z5CeUedRFi3OXjL8{^`MS|CC(n>gN>|OzoV;1F~PX=kO<_A8R%6RVnSw7X{N3F!r5- zmRMJ-P3RqQ%#0E430Z7ZijVj&`6zuyl8IbuUL4 zRe|sB6-r7JosWbY^N(~C2oGfsx7kIG>DrdtB325%*=X0X@=gp!Y&0Dc zKMt90cqd5@DAv!GZ1E9leWV_q+f*N~_`Z?#saW@>^ZAfpsMlI?w<;zq0K);Fg`; z8V4*$k8ZXA(^9STJ6WtrB&+C=BJwPPAf0@$U9R@bP@twpDOZ_M(;^cwzdCrr*$= zk4BiTUr?-R60oB?*u)=4(x*J^LHCibLMqGp7G$7B> zAGj@lUFFp!(WI37bX-&q6(ib1)U)&MwvMR4tUE39Rg2SZHnEf&lP}pWE7Rk*TRtn! z#%Rpb6{Qh*MrZgz@E!dMxF(=P8wK6+*`f}Hs=a0@7lS)oGoeS|Y{vpX4B#p+c7D>2 zl%4G;(A_Sc-nK)xB(J+QObccWHaBbDq^+_4)RZN!vDK)L#G5Rz+98HuTBD*xgc%Mi zPXwRVT~Uq?$kE(XB>HSsorgtUj*7idw`(n=2KPHsf#tyUN~n`$CfO!*%XL=LGE)e(|CZ z)sXODMecfbqqx*(Z3Ak!&|^&%dP`2?Y8FPD5i`(;eUs|fSAx$=oYS+4uqpOu=V?+= zVuRI-DcX2glCgg5 z{!{nMx;kO#5-+t;)U-HNp_jOnGuDLB5G6gUo#{&oMg~IZ1KB(J?DRM3`+9m92T~4p zt!G*j{^{7w!p0tIt6`T%jx>Mer_`Wlp=U?|`8IZzY_b=K*qE$-@ z)uY9v#ZtvI$w=ADp)%%3iSJ+nE3Y7uq{v_ceBB3aaxdCpUr6{*Ch| zR@mCkJrF5sj^x3iMB8zGVbBVTSWxWyz~n2e_2%kNh*%!uwV~qtC3KZo61#W{Y?Y>z z9azoht}K~4faY#22J`NBE3@9Gq_f8t@vYq zhtR3Oq4$6=HG64KxG*z4x+_b#HYKN{UNkMCri~+_{KxkcorzT1kBb9C71nC8EvUlm zE1BlE(C}8G_TH!KkrE(XuS+kCLA~?;T50hJ1NoS|LXZBk!H{8 z=16kWmvvet;*|LIEs_lh#jO`54`S)fdg=5?xjjJ|7YbOON@+n2rVY}aetrh5Y`ph< z-7Hy^hfLimlemmgPL^$OsDR>RFUt!1zXR^Y-MznoQTdm9LgWXtest}SBhnXi+?Lm; z1h@l9Xk)saHm4tYhW)IyS124PJ>a)MvH{;^!XY?Kz1_js&UJIR$U z0Sc3x?VttE$;o9i`eWe@#bv!YaACf=TLnGNI@L7;LZ-dxh=xK^X11ZBaS4Gf7VuhZ zeiH%gjzrsHKw>D_G75|dLKydh^ZZunNx+9?bF~wJD;|ebs{y%7fx;6Aao7P8%JTBaz{Vwc(9!S^GRtfyc> zXui1}b_gmkmO8~DrPvMLs&x)9<0z*C1?;B=s-6xlaPS5wr|6R6eZ zJ?dg(J@kn_aN_PQZ6sUCg3G4)pmb&!<#*Ctz?h!*mUT5cDeSMZo2TQj- zt)y+OZc?(k<)OAZeqZxq&9<1=_F3w0ku$BM)G?vnrspbIP?Vudx!NyAm!dek%tw6* z{_OEV3BeOxn&ElS0>}9P33MrW(mUBQqi90+D%1JAnohIva^}~LF-D)X;I?Q(c`~Vm zp;yNbHm%j|i@9c7tGyBN*V3=~8tP!OYUTxn7&29V{bIE5lrNSAszr(m9{*E@!aH5o zK>tFm|M_7<`xYyY*b@<8q0+~92>yC&Ab-~b9*^++@A0Syj9z~ zQAZm7w{Z@77qW463TA8LKV2T!t>{ViEx6+tx!x0h2m2S|5x(FhLLX89;V*qPnLvWD z?l9ee>EaE$&*L=<;6hZ2bW3&stu?Q+j*fGo(Mmr+spxkTGDng1X8q*FcyM z)^uPY*1|f>pMamv7Elipw488ECTTk7Q}to;E$*#?Kh$B~u~jeVT>h4rLZ(%q42)v0 z7uLBaaZidOH=F9_b5z5*^#sn7-g6Ddxgl-ik-l7-`AK6d_nvwUdKxcJo{y38_VbEx zGx#g0UifbQ0Qw*?OyF3ZMP4WvF0fO62xC^+Xg7qXW1N{&MahB7*wLb0?v-4;IB-)% zO_L~jjd$%|QBBXTda{VnI=117h-&(d#E61z%(fb$+q_+d7vxri_-N-p4b>A?lDnnH>_^JAg@p)Q zezb+YS-vB1ENh|co%?!@NanciX5|XQmVpaZ2lbyiEj6Y3=%#tKpLC!huD(-yN|A-g z($12sME=qgvkj=DY7J=%#;n@k*n>kVKUT5`O2za1S){e_?bHU!Y3N)uhMo$x2mD~} z0UF#-aDwIY)(%$$*#rC6R-UwZbO@_))`j+&wX-af^~rU|%%kAi28r>rxCR+xc*Z(_ znyWuZ{DOX~YeN3Op4H+jUg3Xh#^&{td{wQf^C)FX|LADi9as_Yj@bZSb$`r$2}~K@ zR9@WP+_$shYg>G~wW_VYej)h}*UKDc8ww)Y522nox-ec*C3qCwPou_XA(nJTGhM{n7imBB7_S z?ONr_uFY0?b!+Eb?XlYWb`toZ-lz4bXl%ommc>jt@_thc;R@=UtrYPCbI3xfaK?`} z#pX>WrW+=vtS76rr=lm)+|-Ey9~rw9y&mrDI`Hb6@Um$`AA3{EM^=w*^Q&wa@UYyk zp4*qJ^{KhjQx8_v4R=w5j0S#(fbj>3YgN>MQl4=6k?522J_gBcAOB^$xX__H3x{SyP_5ZbhrD;_I-ZCBJHT$U)Ot!yb4A zT&Y{tw@dJ;VNnmrP$DOHjlzFMjcR8hg3-TP9+pdRnf8~tHbT4QWlAIIz41=eGpbex z2K-_Ksi%3AvtGcZL(@u&wrYDE%6@KkZ=GB*xZ$?>WL4F=?HZ?=Wy6_3S?%}Lw*-Rv zlLJ_W17dG)3*Okcwd-)hE%e6rN9EDD(Jh)>1fkUKosvr0Y~C7mgPNoN74V1tS>xhC zVU585+p--0uKMEebwXFIsIP#SUGLJSApU6BZOI^=L( znI^z<(cN?*aaFY=;|jU5pokSrrLKx(+vuujHP?lCBA|#j!kOgeD?swHHvPfPZD?Qf z5AFeSVs8e1LnFG?Lg1qQF=L20OtjjKRE^yw+ea?I$8z^jkc1-?1(iq2M?2F@k$(jUCV*kWdWJIAZ~_RHvcU@e&aDrIeKuY37d#H-xH2ohJDjw z#m~h3H376jOJOUq z_&-#Z)Su`^V{?i~wR90Vjoislq9#xtFm07PXiV1i{AG;E9H-PwW)~L`^@mO74F&{r z6Zx;)RQx5vu=O#GAvBl4U{nU}ROdHzEgjP&#xUrg4F>EWW0L~H-DZ*{wS;-B0CqF6 zk@bnxL)yvS)5xaG;J}qp)DbQ(Zy&vyM@sq19Lq;Won*Zb|(bLOhi89Oz60an!-WadFWuy7JUbX$MuDWu!pz=- zEBS*J2Pi)TiFp;Yt%5r#0}PT-5Y@`UiY5fi=O9ETw}ZR}@si;S4W+{RzLyA-P}P1B zc~UrJlb}Wm|IzJ0R|?-lS1{W|?xO3s*`iWb6dn|5i3Gw=(Get`#1Q?i$fqQU!*hSp zW{IgO)$}{!wNVu2Yw?AEY3v{3uWk=`QzQ;+j@3_<`}MwVD3#A`dx+?eeY18VAIffO zU!XE&$DqaNZL-axK&-2*gV~Ggm8l5N2;MR_;`@Kgk0^gjHp{|thp7zN#1v{Rtihu||!N=tq(t9vHx191ASetx@b`6*w<-?pTM+S^%N6NOl zyL0i9b*0$LeWK9hu2q~v_1py1qOJFNjKi5kP`0ayC}VciAX+!MI2vQLA=>hIRh zt{t@~%i8Aab!W{xO~)HTOh?tRi2cTM^47*|!*%{0)NTDeI*fsJXYpfkA==#ydH9E# zzA_E*rMfW3K>ny2m7GoerWlUA&Pasa{lBo(pwYdWb5s6w09EbZdb@LHO>av_)04W{ z&Gp7d^};4kRU=}S?V;>6a?skrcS5bSl+iAuKbl_S5ZEg+t~5T=va5TU8?MF zAh&*!EkI6fLGmb#!%Y`x5ool1I`%Tw%bHT3jC*comu@7EHr8i9Av@|>7emY(jeuLJ}Oc|kJAwS-!QwB z@PB@v4UzknRI1kbwF|4q4?EcQ*NBFe>2KA37%WuK>rMR$l8=ax-sRjX(rd0v z+MM3@q3WLvzibgTq3dqyD{6;_AHiShGl#4ae#7g*B+d(@sqYQtBC4n-4r9eQbi#GZ zu}|8Lm7FF_X;x=PkwR=KNevW)>1|{!ZLc2T|B>mT-sXOb-47pLmr1Ux9vny}zpTye zTu33+eX@^Go;5V-4^dl@dGIz`9%_nMO&^aw!8%62hBXn-GuGkjkONGR7+is2Z6>GY zK4U+oR;JA7I?}0;H+U509{)xB3!DkARAC;kY;8PI(~#4jK?*_a?C>L9Zd_u!MJA%e zy6==o^l#`Vbplo_dO*E`AHxcu?I)Os8T7RzFJus-mHbb|IOZ*?Ik%bZO2;SP`UgWDp z50MLHFNwgEQ1_7kA#9-iL!FBlq93FY%Z<$W^uM`LEF#mIY-S&4FORfxGdNfM7xFIi zK-WV8njmUuAFhh9vga*6gt(&h3t=p2q2(0e4C#Y*Ch;iwGZ;nMNBJqtAn&4$VeF-x zqR%6Yrru}xAZF9PGn2|^Flt%aoU_d1>}$#K>|m~EWFzMUkLN#)hvuJmeI%GI3|wu; zT&31^U&S7xEoga%TTR<SnXv@G5xW_W1zOTZ<~qh4@@19?kE8sLUC^MX zE#)jL>!f#cJ#*+xC!SlhbRCz+8K+LdlQ;^wnV{oN<)0vKY|6$Ht z21lSy+RU0D433<~J}x}(Kbor+QQUm^CE~dQ0jPxnRHqTWRM6FQ65}s8XS{^<6?|3| z;3|Z{vh8@akj5WP*el#b+dvvE{DKQ0XNqF#g%q1eUb>AIDLRq8g?>vsI|;)Si7O&r zvJ1pkzn@$$@j16F{wT?memCT4*^~}*<15)X`wjFc=`X_v%oOQ+r4*YceIfmhQ%E22 zO7QhH@9!o;`~;4EQF#VX)-g5koA3e74_LPQ6UxX5dvyANP)H=+yq( zrbArUMp@rCj@PW$FGYE2mcp0OLbXXkz+6`S;=I5Gs8E!X_zvY^jFdP-=~_3DBv%Ma z_>^+EBWpX&AKII^o-rD{83D1z0uTH?amLFZxNYRkkX`D2Q@`K*vsI25V|KHAL`Ip? zby1CtMl$pXb;O_(H(|W>YdP*%jqW&QK7NAs4EhcM)SRznlg6vhmy97lP&H>&Q1>Zo z67lpFg=<6uvme^!_m;gGOm{oWJtjZU^|kI#%j_0&Lq^jZ%M1i;Kdo&U8~EQKrK~&N(`h&sY)XfnOO?C z-z#=K)Z_MwD+PMGoa&0Z7B=sz@9$V+PHuSCo~ju{I=8+AS&f<&wkQDgtLZQ69EN09 zknUlBSnr~a<5iZR8X3{aBr1*~Pc#6Tdnq4vP{RLccQw+8rHn7CB)^yJS?~w<3EXIq z+gVwAssCW}sQRUSQ%$-CLJvv(6Vc!G7`WItztdM}MXB1Utd;0Lty}*qQA6`iQ~}=8 zzN5y0u-Ce|=rL)nxj2(gX*YaGI72h);E3srHR^|c&siswOWj>Kzo3|oowdX@@0uFw z_OJe7{M;~caG4s1Na_~?>Bx~@SU4Ny+pS|BM)!7_h_A6>?OBa)aHm`TRv#u{n${Mz zlPaz6GLtCzX5WMXTBe~o{5zvjTlpVfsfu$CZlGpurb>vU?gw4J!tNXkV%oU2J+ytzUCDeP`VzQ$J%|gGBX*VM2z> zS2A52-}8~oP3R4@&#ZE+09VW&gU_v(vNsWzmKr(h$Pw9f-1XGV#5=rg^ty;e{Ikq$ zzLx~wIFntriV}FZfkJ9X!?eyp>Ij0@bcg1Ld}w?_v!k+9CG=?YDOn%=0XBzsjiJI_ zqOqB21Pt~GYZ7U6y({Y!xvMmZeT&M@_T;>!=OymoO=S8+Oy@_kgMFV0*xWdmm%?-W zqWhjlc3r6%H%lvL{f@Ji_g+AhKc-Xc1OR0HK3y_&WTV_>AvPuG5C1~T54q_U8# zq^t^dE8CXn#<|RS8NP=X$jkS=%Qy3Pxkd{o3jKO66Reb7Z8gMlD&KmPG>aCXA4l3x zyA1b{d+1#f9}2`Ea_m$BGloK>Az2GCbLlm#ueEAMCHq?O8)hHpcGi5>TkgYzkDO@U z%kb6QVg6U&7kpRYcvq~TU*z1q1MkoL(V9;f!;)H#6Hc?f>*f(PY$SA)Bw@c5*OFNr z0sAh6$em0+N@a0-(Nda}7gsxluH)S-mN8!OHJSTanSzxGBkVPTkKszLzp&T$C2vGj z>}nLGiKlmAv5)!XE%R_E_MV7mu&;(fJ1P8G^oJ2AD#$EhZW0Y8G_pO!qr)pWyTpaQ_jv{40oTp^kK&)5t1zo2 zH=4&_+a*s;%{ZCly=FYVMDi85L%>M>2s?>F=>*m)l1Vy)R6^b^bwWi_?nr&BU(+T? zql*l5y)+=>f6N6^j|2}^r*u(x7$;Ra$@dQTjpUo_Wqya`Nrx|553%f@F-9oK*o>7x zi_~**72tRIA3O*AM{t4A1j?8?;!ZG?xPkN>oZ8q=aRAO&6REj?y~u<13UJF9V5sD4 z;~%oTd@ZwH!DPHVPp}`$Wao3mk%Y2+O&pqefnK{qDnoFsJMQ!S>(R@j)$`W){HcpxD zeO-Q?`aWk7u!-#IDz3ZM9^4XD|G90xX#`_TtGoJl=BO4|d~ai7^8{dP6J`A@YGxg^ z+-Ke6%rvj78^slx_+>+QXN|r&Uj&GLXUYN5LS1NdjQFl*chDi}R`nR~8*-I0b51e9 zpyZva>f(Alnl1H>OD-9!8jvoXdNKp=%)~vJhuhx(UQNT=T18V>sjWdQ9=pGJP3>~- zFx#}!wLFFe%h@8ZH?2rf39lFqN6!`;bOS+~q}7_E-uL8Ts?IrbU=E$$@wN8sicPks zb?=u?H5_UfztpBe7*l$^u_er+Zlj{FvAgR(VMo)0&h)0A?1Xl1Z4_s9tFAPUH@DZ>k-~%P_*hS zs$}%`{UKkNcdxs%x_8ce3MkBN3I{ zyZ(suhup@%xla`18}k}gD0Hm(6<)v?&X_ziaGvLox)W>@_(dBahA1g05ss0pnnxk? z<)a;6qu~IsbfjcR_34h)lB(Jeo1bK3UBA9Z@~UAvT_EK!+Ti!nr;W3ukgTz38CNL# z%nok|l^Zw%<>wVHJUlN&@mWxkN(28B1x5?OosvmGiO?FE+q`A)x?lI-5BU?U>m4Iv zG&HpD5&gsHw&sXqnSbd{in|+sP!@>~E9sY-!)&YMs;XZ(0Mzdqu>^&cK9nCwB#;d${*UgO)!Cf-pmm63XGbMLKk5aaaZ_{ zXcD+h)FOH$=87}Lf3RC6GbDX=R>?i7sjOVONe1Q4k{y=oQ+niA6x~tR6ipJjN*Tgt|f*F4$7i|Cqk|4s%X0? zU(RFwC-zZHt^Fz)t=M1skK`fHn6ptf7W7C-lly~DqLwPkpml*yfTb{R-U;wA66Ew6 zjzEWZws39%_03vtCvebM!b=3ltB3OLgPHgw{ywk|7%gZ4zX+cRc~CAZSdAun5A4l9OTqwmkc^a(COcO_Dfsrbx~3i4{T71Nt}WLA>;}zOI)me+S%T=fvo-T&J9yL82l%J> zQ`K3GDFR2;wd!R;Z&h{iSH`3o|W8^v+K-~&#l)t51<{bn0WQ{Wk zz9ZUOd5!zcHgj9kI@2@l5|+voOTp|+V=H`;lW({q{mCsec=6}(>hvP!W_ewcWW7Tt>=U+L<3)OH3yk z|7&T|Ty47843Q^TD{WTTfxX4rDy`-mvUKoF+zaMTrZ?}c394Elm}x94dLfK9gk;5v zcIXC@>LlJ;Br-v|LSq*gD4(yg&HGcam;Ua26wISCn+KS+OPov-8Y?>=Xgr%zI(Ct6 zET{GkNX_CJno$r9-Xouznj91GLBZK*}_nTVPc(bR2FgNY)&H=x$&URgp z?jqbhIki&_$j;srVzl(|JT!cvv^N=%!gBVI~}8>R=2mf5s_ z&O4>>P}e(u0?yKZ+pG+2|6;>grf#K4^|ldQ{*@TnRI;oCgjoFETjBw>s%H+@owIC7 zZNn4ph0e-Knm@EXukfQFtTirEDBNv3m$+9PX335?E;(d88SqAysh>OVg#4j~F=s4b zQYx%J8Nq9B7$TV=tM92;jq_G{;OeGveVf3cEY}qW#cX!?vU8jRoPyqK4SKGs+gcgG z+t-y)xP||&{Y7S=P}1s@s1kj$B}Xig5a#NDe`FI3ta*pztF?u5?0^E*xXu~CK>0%3 zN8oeCUxt(5m?}s`g5zp}Fd9s({a3*Q@%lbt6u6I3)1-k$G=|o!{I$t5O7zfj_Sft@ z*p)XS=@z_J;1)R(2^NJ16eDLOtGwo-68Tg|Z!89A>Bv?DRBLR}ipHAvhS>^R9aA}= z*iwHReF_X>RLk!G*~|xm1Hg(VcGFaF5PN)0I9SWsR^kU9=T&7-gh~XFNn4@UBKyb@ zuu1$qpc)C2Id~-_9~5zpBJ=_Xv@>O^>wj7sWUm-u`V6@*Q>>gWZ){wP`peHYy^}9e z__E^!Zi+UJwNV3%;(o0@2*CWN;^V+u!9dnNutS6-$)GriOTc~3wZ>1VwY3DzqiX|Tf{cwx)R}z=*m5mma^G?ZH#9_<~xtC-?RiFHzbZ*gkMUl)Q z^Bpi(9+r3?c&jLm(1XVTML;OD5nSVi!oAQ_xI0QeB@B?-u%z)|O5#)haJ9Gi9 zbCSbP(Py?4!F&WUbO=r$n^b=Yvyp4~cHvp%GdM?tp^jou9DpWp_KP2*tOkK(CAy^I zo3si&TUa5pM}ICpCHKS}5{D=Pv54@`KrB}7{{<|;5U(ysj4gBOh1;+{t$zGKa)aK& z|A$t0eyO8kZ&Q{!uKmK6S@BX03V1MUY*cv{D#vZI2m7R3E=r@JaoOh`|6wY0AHy#qb~&0 z)lmvia7*<-_*S?^rDGR~L@M9<`Qk+7h4KN(OeMddTJoRrw~SA+$uyc!C0|6n2v;jA zs0#l>fSx?!wFKNtx;j08-Vl&Ek{fHhqTR~lCfms>+MSM$P44%~7Cn%;=PMsv{Dn%8sZ?!gJ-%l@k9xz=f80b%SLT z*LgV9Ll&8s9I~0CdB9DzwNhccq1FQko43*O082o$zf3-bud$32tQORnU0LqJXj4?( zY>}5SqU?!yx*;UrAQ`In%}9~@YCptZkyU8+hP%jhYRKQ9IH8*5)e8=%H#oaOnUtq- zBl}Iq7mY9HVEc8_%*EPHz<=@lS`W)e{)Cn#f;s#b&61|y1?O!UwZ97wTE3KNL|e^$ z`C;PKrnHQqlBV$3VlWSH@v%qSs5U7b&@S{^3J6u-oQuGtbf1C8p1I<>>LdH#<$(l)vu)`C=pdKh z3rm%}?CyK~P=3IY#Kvoa8J(+YUI{0*A1}Qx8rym+?|1R&=GWS!YW)GP zR>cd=9cKVcQC_tEM5D`n3=7fViqoo0)T2s<7od}C0)TC(eeGk>XVkO4hvR_;GK%W2 zqG^r(6~$;BYihx26lH(QxPxxyO^LsOJ{EX~X)$+Ef?o+HknHr>i=CJII5gl{z&>j@ ze6l)255gB~_9|Dv*XtHy8{u2^8-SVcH^u@H8?j?zqgqp;!{p!)@G6#>lSeYWrVI%e!Y_nuQh4ltqHzaI0OaBF# zm}Aj9(1yljMKN@vsZF>S{*CpRJq(WJgw>scLGFff7QB=1n*TTaRY?tIuq6l~)bt9_82c#Q`QZ6hDAqtr8vO`36b+SB# z$SsNg_0EFa8H!S(ByAcnkMNJZ4}2xYhDyM*_yfObP!Im6X9X<8*ZuO}bljxv5PeWt z=zOtMRgPX3zf?H`vn2J(e?*@pAC;|~6H>i0n}N%mlw+#4$ac_&ix0>b(~6uG@`tof z>JG(D>R@aqprNuuW581Kj_+3}kZka*h9?nEoFd@&M1y9f$k{N7Y7(u}cOoCe{`wh; z4DoKAQ4}G`*A3&$l)Tcy4fmu*&D$zhnV+VtI7aqA_2HZ#IjHtXEmdTw8e?++N9CH( zalkA3vF}~*5R$Z+-lgkr0RTqzoE*^Y#ZI?Qk7E5u%AUtzEKjETwC zN_fVehHB{~!==hi(*64XiUwqC{qXEtayy+}>O}bq?a0_^io@zRi|zm|s(*aXfS_`j zXFXI)mpj35E;UTOQ1GnnAURk_weEpeitJks$Y+XnG@lpF5trIduxCgHS^ud2B3W(O zQduA^HDg6a*#uKscDL-faZ<`Pd8fWF=COjO3taRE5U)AtyBD0N_VjForYR|>PIxqR zRAmzYOZE{=;q)#6JW05tGfvhj%IokKtQCD}d%;>KUeUU?zEhIkQd{v;I@I>0C{Fr^ zm6cs7Qm{q(CKrB@HnikqJImZ{+LR{Q zHw!yPCBI@yTGXW2WSHS=0NSim|Y}XGX@09y0NpeHQDeM7BR7t?OWOYrT_$C=v`+$p+ zQ|sHAV~CfG%xXvCeB*+W;lw7^gV(t=2g5X7C2rp5=LMGuVIqzOh z_{+2G*AlhBQ=LB{srI9P?N7~8%$o?Wn+kA=p!#NU05OL#g>#SijoHos@vlwxRbBXV z)~R9>ev<>`ij0jW;-Zh>RWR(yqMT*z14CjPQegfEl%xGV7k3YPtQ{1bRkn~9IB z&!S#npBijvE%uRdS+NQq(>O^4;G>#qIKlV`*0zS5_z2F3s?qpJE>=7aAIr3Jc4W)W(EiCDOYg zCoqP*ZlMV40*1IB!mfeq9b~vC%u)*wCg%egi14|0;Xe>FZ;yO9a*~e--Xf0$4Awbx zq%f!6hI)u1EB--~#L0zUQHG>2>lLb&GE*j@%VmAhKhXX12O;awe*pJ|e9Q@yyI;pR z&_##M*a;*`)eZX#TL>YXEXsxl!4lCsSvtI1j0=)}-OvD*4>CpasD3aKD_v4ifN*5& zLK^9mM`me|6N<^nN04{GsOU4OD>x{m8O;N~E)<}vq0jDbvBB_9ho@KrI!*aEG+tJZ z?}Zl1{)2L$26>fqDYQwxi@yqbs_<{>g6ArJuLI#Kz^i-!ZUy!hPKVEenOR=QFz|jd zgrq>a=x#(0`-kAj1^DJdG3t*fJ$^$w(EvwhYy|p({sg>-9I;VtEv&|zdmK?ghpDa+gk$0OU4=fXYci0CT#BU%ztiR7T0 z7B(S=u%R9fXaH8`xENiB?V}wO|6)Hdd%zvH2aW+O+*dLi*olYpBES)Na$^Qqgy+|$ zf~)bGvSZ*YTvp%!h2qA{EQrMWlKz6;;!C1k;CkE^5)NO*wF}FU99-ow4>^x39c5@1 zuBHOyACz`zlp>P;rg*1lrq7B?6rX4VR|n+LrOb7}Cfc)RCpd=sP!PMfgh36J$w-kvCFX=c~2CQ335kWBT^z4=td~) z}NaJ(gF?qf8;f$MWMwoD-t( zFXpC{J+Cwa5a{~yE(5o<*A@qWS=up)cftJ{r>J_!TkRjb1!`BtFPsIt zD;IhM!n^1xjsr*r`3OHM{kNqPdLYYe-XJ?5`_pz@SST;DK45Q`AGLg93|9DB##VDFuYoD1F?lqgHN4As1rE{=B(4Uzx~`}I@E>hauog+NC3Vc7yw+ zlI~RLTIuH{BLp?F*3S2=tMcI;Jq=-US$jg2LH@Y)X-To7p(QtOu;QU@R|X9*t8ElLIWLuVB+9E0;e9Bc)T9MN569J-vVP zKgptd_Oj%%P2GO=59Q8XtEyt<&7HGLrYoklC*_`2w6}6I3IT^^L*jHmZ%vQf2z)gU z4W0mU4I6z9f6DrOEh3cVIGVvd(M>Qebiz;L7 z1Lj3lV0}x?KIKhDQdyvqYV^vdl-{gKi&xTDIfD|f(Mi0ykyogFg47^26(|xckdQYe zFWm-_opQO|TT%qtQwO7g-elWe1zD&HvnSRzZ zv~(4{oV7iFC|$~7FZQRW@;nliRI|V#as@S2G%W}uJ0%kq5M+TY)y`?tWdB`iPaWVE=BX$Z@1Klg zRJNctF^Ie+a*Gs^Jn_Fl9CEO9`vL>;mwdHb4zUjCx7QFI&_RMnX&QrIA(h>fCwHS# zS+znHC1cmH4^r72qTvzc&0SITks8T6UeZe56imz;M{XBZWfYSJ(Uycqq_-q0GLASS zJr`6#aOBksT8YKLXg3KF0v@nGO)P{BxQeXjl>BPi!Q4z)F&V-07VIGvyjQHBWDWmz zLjajBxKNcx1__T8e zBT}UQ!90iYw!m6lS4SpL*3Aa zxU&=h9q`ezNs<@1olMU!!%Jk3ns(q-a!%cMoFRWx8HjTgilTRTBQP_^hSvdm(?{V| zU`6~hJP2}(ScZ>*?grUox8T(aIb$a(Qs@eI2|C+Zy+Qo!KQ#G zd8e^V@Jo{qRt2Ti5ttBKQgIZcq31;gOb2J@1Yj0;N7@eTS38LR9itIl1b_*UuR#;A zGL*kyDJDU$x!uN0ShB+^Y%O*eF{7iWWR|1*4^yV`D!m#lq@_q86;M zA{$+giHcm&y;x`V74#H#D6Iy)hCPYrqBrot5!vW%e0Jb>^bQ{Mi+>oN;r0&m#2Xwg zV;MLNA4Dcn8x*qu!+RE<;= z1uHdEIM?Av>LtuZWU4x<<}nhdx>H_&2vk&IBGRpzl|2plQ@JVi5b{=;821SIKwk`h zfPADY0yiP=sb>pN)Qie-ABI+vI~*NQD>(@o3z5d(WeTXz=pZDae+>jD04~vAV_bv{ z`k0z(_>gXO*-iMJ?ze&)$UJRD);^?KvmsT2w5dPE^&=hX;PBs(4wWR3LRyqt7BnK~ z=p*hU(BafM$1pUKJPqc6-)su$5y;)zC%6ttEtl9m(7%@9j5OHA98mojE-}@VNnoqd zRDi?h3>{eM0;^ozha)@bza8_C*OUVI z9n`n|kj?@3wLTWaL6ce@v1dZ&<{u50pp&+b)hImJ`m$^$9ABR&5*LgN)?W-yhkxiA0~f%bG@loQA^vKX`%r|dJnPtqtfi*`3&EL7yd^8a%+9O) zGvNA;4Xn+OfBV)38N_J=s~144TVqQvLHAllv2cUo&QPr(bCH>PZYVe7lt=djHDU-(d%Z@eAw7;e;` zSTGr0sa@;#1HP+PIBJo(N>{kku(7;GzQw-&WPhRqLH=@|mx7*193JDY~Kc zTg&xY8Ka@FQFEs;J=;-}&RUeZR=t}uFD_s8n3ofFN;O*m`hQX8iu%1Fx?k$%x{@9x z-(nX_QD7BxQ@^;{Nj_0`qQ)Sas>`h#%z37LRgW+$wW5ZfHHS3snRNLCjiPBx!AJFL z*5Rx@YBmQ+&H2R~6*pbwDF_W)tK^7+{Xf$?B*ES`+D;~Ry+Rok2kdOrWXKDes~cSR zO4g)RHiQc0T1N)L$B6aI^nRo0@W*hdT0>M`8ZtOAvlcO~V^FU|F_ z|0sDPpD+!5T>QoV1MMU|?cGnc$&bw)M9lzB+YONY&`YpMbBg(o^suI=@w?!f`YUS+ zd#idEdj=z1UC4>4-lqD%WtGiRweeaDW~jXQPcvUD_Y31v`hHELH@2JJBk>Pwpk1Y> z{9jWRd4ui!2rA`4i zo4lxI(6jCqRR!uRmDGIjMTrCX3Chh&Bey~)7nhJMI666jbb)urbP|t{z|dpFdSr|L zK7x<>d0!xW(9Lsu@aI^t{SSN5po1Ix$v$*mT|Eh)rIpjk zOjKXIhjc;r<-R8Fqwg1wAy#63$wP=5j2FWsBCyubequUyz<)FT3VZ7PH@+92Id>OM z;^__x@I+iCn?yE{F~TFHFPXxfLJlLN8z&O?NVnRX#9`8|qK8;UPA<+QFmiORjmRPg zW$YmwiH}JK@aM$K7(e_t@pmYK_Y#Nv+i@we-un`sLa68diO(V$915`qM4~j2(5Yt# zeiAjR+nfp_Ue(Fu5Pqtp+7x1zYH-C2Vvurw(KYDgC(ktc=uuM%5`)9!G_aX zhi&L>sz_XjU2NIGpNSo9-oV@bwR?)GU zw+t(6m$KZkqBdazh}E`ksMcbIEv;pGEUg(WM6oCvBl{Z`W}TH@i3OWaCoaYOO|s}k z*a*YzMeES(`gp(R=z8r^ZxS`BKmXzvsNx+4&@5Uk5~H8HNnQZ@amm=GgXoXW2MsRR zZ=Ex%!?2<4SIUymPi>aMc=W&4^z75bo8+4>>@4NY`Eih z24(1;cni=}?cllB(fR684$siv=oiwN)`#WG1SYF}{k@_z!w*JVPK&|5kxbvC4`)ddcj|tn^r*|)N?vQoehpJ_$d{p3h+cYODv^}y zlB@*fpJ%twHgLVfY%x{O7tA!Dujyc;=23NH7)MPJ^+b)?h%rW$ry343t%Yw4!<+1L z67+tofpoF1lGB?AYV|y3)F#a`K|{z^^&Sz^SE0HlVSBAqK9sFPqQD<4iHQH z-ds|5nr}5NZ16>?~5z<%f((7=_i1X%XNAN_{mO0rNDPZM&m?w4KLfk z7F`cQF5jqS&=0%K?@=@z*Sz)sC&>QR|m=)8Ef~9 zC`oN&hqhnxt?rg~q7<&Yp)tr@O3rIW%TDEQQLE&_tZ>z1g@5WA zRg&U;{5xeIurIP(X$Q81*wf9B(6@;m3+H;hqv{ZU*9dYqYHvS>9FExwNbPa?cMhNp zQV@-kH7gYF>dG|Zfc(l@wGB8`QmLK^M&~b9^?*Aw@2N&WQK_X$E_5<}8+{2bh~&{V z@a>Qx)GLJTTTkK0w|Rrehp5@LluX3D?F)!*>?;4E<}_T!eymA^H!!v8-SGR`YwEd3 zK*clF7DQ3}N)?U#k@rk_1|5>AQ--5islU-{(WUVcdK&sFGMd_r%?o}=m0=9uGV%x3 zH*XZl#h$rJh`;e*dzuKrjr=I}ZTuQLRb7w2VZ2v8!hhE0s2cE}6$0gVVq7t$Y$j&q zX_fN`kIW!?EfJJ*oOUM?;zOwAL_y?4DwfCzK2F{xvVGG?g2MJnsq(dtSre77 zekH6+N{x1IO{UUObD~^DAJNnoZKau-p}CjovFhcETc{OkpOkQFk!o+;aq_GxIbsLN zR_+SM$x%vAUq@mk-Qo3<@TA_l_T#Imbo=-CY_gk+DR-E1o0^qn#*GaX^jD*O^;5dt zu&jJO9b*_>R8Kw83vvkXeDvIBu{fNqJEqEp!u5Jia@jTNf*CEEO+ls| zx!IJv@%ds`^1R_k@=a1=7#|0cv-Nfn5@MJ3O>i2Kr#Zgx4gNyi;`Ihss487|W8aky z4&Io8I?ZXP_qD}0uA+slbLuhLp(VQ7hdS8YU#6ruwoQeXs9DxMxs%A_mZKT}kz#XC z@+Q*RB#SE`&Kc7q@`xt=-@)^V5xUBSSMlYVn_ds_1!|`2UTnMazC#q|Pp5F^(S@D& z8$;+R9jf{n)UkG|>VH&Y+rzS8YFg{DLIZiUr7!0yDQG4$_K>bNuVk9|pXE$k0HHRs zBK!zfmE#?>UPLPU(@@!d)pV4KWtLB1y=GKB3h?a zkEkAKzEQKj?1SyEy2_%#)}sxRbG}-3F-~S|GHV+5CdZqKS({_G7(F=~!ZY-5c{c)g z>y8R1EO@N#7AJbNXdcpndmghB_>)$rtsB@^++xFJ$ z%Qjg5V9Y2yU^&3-%QoFG*L5I#FjIS1Oz`KRSz-R{P7&3`rwuQ%F`GE%FZtvi@xS*qn|yA4$pLly*b0*c$%A<^tWLf?@?@teu+RG?x0hOssndwMUn`g8JdRw|5;XhDjeoC zD*pq0X6xzAa2+SIc?&bSG0}FQQCvUXdbG)0)onS(YAZc&zQMj&@W%9>J1%FW={H_# z`c>m#{@?j&QFGWU?JY@Y;Bw7%=>s2o^>ulR$0yY~Ab*Zc2|{ycpQRI# z8SIrdgguCP$ZFw?tutGeaeh?Un>TTik4rbQbo9~;)8 zsZoRm%G4CV@o`c0gZ-Y)%2sG#&K(*@ob8gRY7}QxSkgpq8B5J<@#b30q>&U>jxny5 z+%73G+>*BBcN?b3(z34TGvtHPj_Jzf7ZN+QEXB&09E}7}gf*$xg4KcLs@qV8kF#nT z9O>z!oPv0}45mk;?sf?I1`BEW(;OxLjWN^2lrOFMY1Ap^R2U8G6z1ZG`lrD3`~bZt z(32(8F+sO9p%w)XB<5;tP)W=T^$O@?Sgh&=Yzs_Mg(1E^j!G4B*)xK+q6!yhsu}bA z<&P@tX_K!h6$))I8X>5&1~K$OZz?9~Pr~wjTek^vYc%-fjAC$+|uESk3k7+*P$*ET~Za6#PtU4RFMz2xH@I9fg zl^5{yfzy><_yeDbG=~51%%qkQ6I}Ah9fX_x7-A0*-#FG_p|00U^nX*Qs}=g$)VA`u zx^k+us7JevBJ##*$56aXp{ANDPt~itsQ3h<>JsH0Eme)6riPwYR+5hczSG;uKYWJK zBgtmZ9BLt1>e5JNkS_LqL=o|vY13cTxYT{qd#SHfkJ3riy0T;11L~xrWbJI#kKDr= zxoTIYulkZokeaKWshXWop(xd&aA&!wN86aUtFfp`sh9t4bzx)NUlo#N;i1%Pj$9do$9Gt zrg@hTuKZ6^6CJ2rq&^qgNt@M^0tToDs{93Ss32vlXBo+$&$yTf6ZO?zhWAk}j0?Jc zOL3jQZk$ja-iqf_>lsX)NAs)NW7-beqsoVx z4>sr0tC|GsnnHg@aR@w7|BPwn3J^4empf7`4|T+`YbSW2qzwd^hQ zQl~cW%lT8a+4jfcGSzhJfs`dm&|-)`PTw?_MEy-in_NSas8)k9pqczv_iDioGDe%~ znLsGiCta4|Yg8fjJFwHVg(2x)SFy0RYYDS*TV-q4$m-bArVeAx)q;Q8W9oD{5v^|< zVlqrEYZxDsH#U1U{uj5&x|a1M(q!@EJPp}yTF;;Bx7ipVtnrrWkBa-nW;$)s zQUJ6Ixy~cV;k~w>2dv z8*OpyDRHfqzc>#fA#)jTPsldozk)MWDzE&y^c6y;c2hg*Yshps% z4ad5I>UP&o?)cm=ymET`c1BXk^|nT)w4k6hu<=&*@s>fXlngi9Iri4%JZmF2H?H0? zi1#6~z|5O@+XjbeiQ>C~j;V(Z z>KN#S^D5;zBy#pjIvHJCx3%?zsI)q}rCaP=E^Jna&lbMzrXeKx~MIE&~kp>(Kf_!QQttQ{Yf{o@zJZ?|e#`gNDr> zpsrx0bzUvUWnooUn^(%NmJhPg@|vRUR-yb_Ua6%?!O#3;t^r1*8BC=>PvUcjGQfQ`{U@I|*> zIX0$A+fQE#KcunHox$yDE1m3@r7}?;yzeNL)N1!_bQzU6r;u_b@7e7pE|FOEYs&$h zu429Uf^I^|SJQ3n+JYCx*V^)&!^W|iFN=)^S50SXjy_xyns8kgsy-f*sSQ-;g#WIY zr@9%eQ+ult{8CjO%5}f=J1Qr-AEZ9hO>?;9aq6Jm00B@Fs+U@POnDW#<}_nx$r@9Y zacsdxqrk8^M{6(`oEKNqE3LcB|1+Jo94kpP-nUFEs5iVdZ_7zG zOfr30?5baAic9&ZTWr)P7_?=E%`p=+O#PK`L@m&L46av+w3q$nD+QW$-skBiHROJT z%1~9zQIm6&!S>_v+w`ES2WGdHSLIq$LG!WV|BPbWrvf_zZfnaKp*m5o9 zg!Yd4YeKE&gXwkjbIoYuqwpH_EW%Nctp$?g2ApTZf zvvo+^;NA~ zCaUf!5AJK;eP_oz=9T1%cCd*Ncfa)zJ2)z{Whi%S z=n`8z?_pqtg%S?+`E2@A?BT^UPLSr!_0><2s~wMNCj%E|jaLtXld7_o#@Agad)@PA zgI%#lcNU`{?_<|(rY!3~C%^H2I@mFYm6hz-W@Y~ox3lFQwcTHZk)o zo%dMfSyde{du6(7`*hCJq=D8gJl{BR%Q*hp$Tzk+p?he7Wrt`@;3D%xNt4ePBS*H- z%c?&q|2bEpeGVLSa@P!pT4vc)BN20@uKN>uv?3|y6iaGyt0l<+`_Dd?J}M$ z?Q`2~ep}M+mV<(waYfB@MS~-6S!r>0Xqx$sq%Sbclp$NVaI|5U{Git+y)#fUw_95P z-gGKaBd~PVC8YsfSn0at25(l`@UBMwn4-+iG5mqNG41CC%FKstkPuGW)#@RVBw@{0 z#Oyc^TdYJCx!bZ%+84UeJYM!^;DTRyd+Ne*hT%Y?*D)Oe9-I4z<_J96NvZmXRL%ZP zIT^iD(b;uPc)Qft$rPfceO(>di=EO@q@o{!s=Z|nE~B$pg+ZvhSz&S^^l z=jGgQbp@4+|8Bku{zyG;TM8)>*IO%~x3NO=4OklKW-5fgEIML1iBJL0^ip(?&wHIC zN_ySW9LC1X{ia@k>78CE)%c9rtEj{Hj`EC-35ZuoW!p}KS8$?Lj`ZhPTdI*$i;c}5 z=%iH2`T{LU6k2wmD`TU~@#xE6&VCk)TGVUE#LNNz(|yFQ`MlCD!QH%`Xo7LM+a%RS ze24QyOMqqH7VV{~xg};D`<;4*5LO+7lPOUaPkf58d2U0mL2Wh4gabj@=;g zCGn)p)+SeuFJ9gnMBgcx(K4FemNUrqjn*t4YrRNwQYTqf(K(3|%^x0 z%MuNmf38`gnVWse#!%nQ7_dgG+ftrbW~$Q@UYK60hs2ySu2ij!SYpUg|M zw$*x5KQd#zWslC1a?sqOo0V|J#Mk!4Y&Oo<&Wxb-4>ZO_NxF8;kbo81NOiK$ef5CK zFmI@eul&m`UpYiM-WjGyI@yj*+^2xj%`N@rokji4D$~_`A6t_tI6L2(XS|akwFDUB zQY_|4hQ5S8<4eP+7?WYUJ~N_8FVnRw^3w%q2LhTk1DZQN*VVB4p4Si6WYulA5_-Mz zsk4^yrT?{~hz{yrY3;8=akyx4^Kk3Byc^c%mKWKxESD`^8L{Ra=Bp`nrZ)4`1k@-q z<;U<0@kU-mmVUfJv&d0&O78oJ!6HYR<@(uTUXN$+|#G^~odzT_RVG-_k#zfA>U z?DpI2g5WW&7r1493C&yio935W+eKqM(#@!Z?}8ZJWq&!~x?@1{%s9XV*zuVcQCyWI7?Nfq^b=U{em7{7fm*Ee`t z%Xj{GzY^PX;iCD7<%XE;0hrE8*SKsmDCPfiIH>anXU#OKPr&+;9V;)@y(?U~!oDFQ z_v12{!Oh&+`-6$4?e8gRe4eyt$xc>j+`6tQ?2}RY4i~O4te|ZH-!XW2OMu{_Uy;p6 zbaB4c;wic2(Pna%J#!h*KU3Usc&qILU(CFqjz>I7;#cfo&Miz^_MWgU$LRFuxku%;r}6v3JX$M-?m_pP*`nY5609N#JYQ{=%W^$d z8x@K`mrwc};H{&Rb{2GU);QG>Rlhyqk!JkQ@0WN z&9O+Mf>+PVR7Ih6#fO(waX%Nl>fOM5mRsE8!QY)Zc*#9MaoVh|VqrnjypF#_IdOjN z$>Pi??^dCN7dEN6RoWbM$GT1ShhKsDAI0?fn~dK9z~hNwCiuuTO*a)@;HXr8Mbxvj z%0t-T;_#(4LaYGo*&7Hli>6q@MJH-OKJ67Gb+jZC1?pky0SbhBi*L{Dw&N;f2-E9z5nslk<4LmRIL9+-M z9`&rT3walQv;G+RBxG;x6YS1{s2Vr?bHHkQ4mrc;wH2olyeiFFd4_Ah5mj(z9MC5# zyNe!o^WkX)VV#HIgE^Zzl8~H?()RJli4=8f9SSG)wM@jk;`TQ+U>BoKH=Mw0!cWw_ zBXUBv)XpHMEr@b3$R`0?Y^$l?d`DPr%X_^PrjH7N>qWySWzvj)byrkjMXg<0Y=8di zjyw3`97($vUyP%63XFEmYujv>>{hkxh)<%6x zf6z+Eol~Z@jFwB1mNvD?kH$$FeHGKAEcKv58s1pDOK~Q|=6I|0Ul44MQ8G- zQsGH68y~4U<5C*rs>4ydy1!Hp!tq)^^_URM0jn1+@UtCO7YF=d9irCwCYnRkTfP1^ z0_sC5r*7o<>FZmc>T`gCc_2(2o4OVdg%l=!kSPRot+ zuD_+Nj7q6X)MkZO)~wRTg)r^kwV?|Z`K_$iKE8VMjF3`2RXJHts${? zPowh!C#%Gu4>)e#tbggtG~U%0dyh8+>vp)c>V&%SGhb;`T6V#Ww&9LZc@tXJ+C#E- zHZyJAX_uR#ZRyFr4Uery60!PP>yp?bb&D-KB0tm|uuKbgaYUPmkPzE$)2#)gt)on% zfAZ6f3w?P;m7&zzMSoRqa9gLFu3JBAv}Td^RKfCAu=aiKsTQxA=UH&m-I|EBb&We5 zPm_l?R68OQ%j(D3>tff}?y^0OykC=Ka}Rg2pR*Q+1lsZ}^$UhuR+$w6$4t*nTwkHl z+nDa{qt_ae-S%rw>7!=3t6%75=igt8(~5E)|C~n0GGkZos}4wcwQ3|?yVQ4uJ2N=G zV0k#}ZZy)9-O>l)9qhOTNqA+QFww34E_pu*-clDBg|H?+zsX5)2U(4QXD96EHa zv(5S^-Zt&5c{mlGe`#QGb#%_lH5v5g%=A@y#`TmJD_*jOFP+;rf!z>a(i_V4h?aMk z@is@S>huz5LU*=37L^8XY*{H;90WDRNTq&m^;f~Ivj=Jg$PkYV`%P@N^C{~Rf-!xv z38T*E+xwlE^KuTa_GC#j=d5J0TT=G-J>fJbeOo?-H#9!DCxH({S9Hk)HzRBvNg`wD z>b8lJu;BjYtHARhtWhER>^HC89d??1yk;-D&;znZ;@-~xS^CMK>G{Sta%R5g>UW&T z9O}Vb@ z+Yuya_zkM}TTsVGu-R8@#$rN`I$IYp*Tu&&o&0aQ!zh%0$)B)l6MuOQyyCE6W5$!d zX~M=7QSWil(xja|BgFi;k6lTUn&|l*dSH8mxJ@7%9@^HD3YG#JHE13^dTpvZ-w|_#=hl)BQCPMX@8gwBi;wKt&`q7Jq`#0(KL zny=xhp^V1k#H8TP`T^ozP-|@)dBjicP*CgU`ucYl2>%i!3{}6I!Izd9IfpF(HXU)bv8LSVsf(=xj&TIIGxH1 zURghsdKENK^I2Z+*I~b}h@1mk4=7%H=9{~J`hT*Kt_qm3UiVe?Fn53NS@LamY4;~8 zI{i(Ti~^Ijoh6hd@p1c3>QUUXw#oANs1+?Td2htzN@JDzHeBnP%%*3>3;w#8~{ z<3_ct*VIP=&C@ka;s0xl*EEHO*0VIN!TMT-raNepL#$cucifht8JKg@GEKAFbDzms z)9LCk4AtmohHDRMkep}T6$W}1*tyX#I^DG+R=;Q2^L8ISm`HDJ)hEYZX&Iw;k4kDH zbf3ewHEhwH3Y}VaN7o%JtR1O?gZk_rby0rDtbgl9&$(jm)n4;FZ``0Yx~|oCX&28d z*U~l5a(cS9m@Qc@o#RcP)6TW8HtCn`Y%`h`B`$3FX1o`>p;>0EkMe4KWK0ZiZtyic z4f#>WFw_Q@)ifC*g4*py{c*n&R<6Ea&K>hY-6PL?#uQz(>rs82_WDdx`>QrT2k83M zhG*XCAgo){TH2>r-IukuzObB5bZ+5T@?$%i?wIdHO>HbTi^A>oD@;#AKG!}mae_;0 z<`^FZ_1K+_i~TNH2N}$BUYpM8uX}zpJlFfU-q1bQNoKZcj%c^#q;(=SX_@QVUpcbU zxNUa(@@4wg3VUYaxaR-acEr{+71&&&oEk1z&Ee*HZ_ACJe9#gcOmplrn}XKZwwt>A zZdtmFTju;Q0fr-9V+@V@yRL6_ow_eGw`xe;n9bvvyGs=PdswT>vX)1)J1b_k**V>` z2X$54169A9r}1vn`&C;7Lz%Vc4q+x+EjEg}xj1XK_+LI!dJw1+Zp)q~3lYCdas_Wm zL&Mj>XTiR}ZRjcFSNF^KLyX$^oNl3U*9aeogx^@TPyl3lnNNk0nt5?M`^C4P2!TZUz#U%PW%fT4?2gd;aPA*;97J( zTI~K7r{TngEmaPNcD1(p0P}p$eEKK$N^%F4R5T6TE@d2i79)#Bh%QOiIevxs^W?FIeeJ%MgFHtbhNRt@*h zX_@Y6-M;bw-Bn9a#ecdEjiK_Qu7WsPJ)m=w(HU#Bw|SRX>$E-9PMob;TG1l@FwOl8 zPhp;h6Ms_NrGC0NU7D>10_orn)mx9F$aa-vRb0V@xm#Zh~-Y^KG_ zoKXJN+@@YjyJL33KU5tz>7;AuSB)=t{>&G~f+_`PgkfLd0Uk^LIQ^L5uzo_kSv*}A zvDgo|sm%?n0(&%Uj|T`>Em-NEPt|?s!V8n@JezkF&#o=1IbAxnrruOkKEknAb*kcv z{SNL``Px1Vcub#Yo5WQy!>n$VPuSI#xrK?`Gp5h!e8D2)iTG4eo1t;>Xh5Wo46Foy z`pt7V;;Lb-2+32lF6nG4$ZK(Kx>*$7JlyfUWKrWgV`JHZhI6V374z#?V{qldIysP1 zU0oZ@dCO>UJg5}2PT3m@?sMa8!_qzZJ1k(lv&hGEGweMu$~ZNUC3~h%@brbRYIFOD z-2QHU$Ble_06jp$zt`X<|3YcU3P)iv*q&{8SBkaXR^sLA76JN@W@~ycIZ<`AF^{8S z460vOIgS-q`=g+RbEM{%v={t%`?R?4!r!d3!v2x0Gd&8F%GwOQo*8hnZqf3~xuaJ` zbcE(T?Xxsm3a<6OvL7nC-NQ1_OP+OYRJh>nU!I4r>1y~= zAXs(Q9$EyhoTk5BqV987NXr^}=OE83)^yJmKdyY#@r1pP?%&o!V=&>C?1HJBVU1mB z4ZNnhdvRxkJ~hr^HzhM{Zh=PG6!QpA3+$`k)w?q%ZDViyv^@XySOZw#ycW0ZESl5b zt!I{mtQN?>l`UHtf>0F|%fE`Xm7P6OHlzAp=PlZFWlv1lCD!TV{B!guWQ6)^6ZDDydwtoV%qgu#?~^%D*)E@Uv+r?a_jassVk3 zFr99b&k|)YA&4i2*gSzz(#>Vj0pKj3U7RXQ7WQR40FR6BCIrFhQuoCk=xDGdpaHvz z{NnCIoWx86^{h)Y&%So{fyyl%I?jgbsKx|tAN`a~$lJ#h>j?he?5UJU@SbxRJR=I@ zk^HY>xgetYgXDzpd(k~l^HX96zUkP4>o`qe3k0M6`tmq-E!(EDBCa5)I>3-bg-e^WTue2?P3Gq4g z;jGmHk;Tk@BW%?C#*G#oAa3v+;wLh?U@+jp+atuKw5nU8ce3unH7YxY{N3Gf_jDmZ_W9-LP^2WhU%5hRmu z3%W!pRC(G~Niy|EoJyJ~4+;wcTjb3FV)&{2hxv&YLSix_KrR`9d z9kQw=ij796>Z^+5%0>pFxQ%{iO;dc5oM+!qPT_#umC9h+BR-(aE=UlXlzC} z#T`1N)u0tjZ*9ILn)OjToBfV+PV<3A@cK2!@}CO+(p02*iifEGjhhPis|}%_WvkWR z0TAr2`pqK_?Nb%@rj#tRgtXl%y&gKz%cI96tyJBp0y=e;4%*Ziz zh%KxT<1}_Y$HmZ4@sc;n@Jl`_h}UPNo)Y0YTkQWN8?+}vugMl`z6C(gQH{R`11(l( z^mrD>)S|6NOYYR{t4}R6)r_!isEBYB>CnnS_IkNr)hXL)_;-4fZK&up(`5Bw4X~A# zl!_8AZsz9w$3I}oN)-ve8yCg4Numr>Lw8HB=xzkaAhEX1Lx)b%By@Wf6*kwloGBU9 zWUZr>ZfUezE|v=$nzXBFQT2L?RW+dwgvVAtsjU>vW<071U`=5?wSOqT%6V|0OY<(R`X;?Se@9oQ`p4FXb569vr6lhmkT)j+6j5lyd#eAl$*jCHd<_i zSYnZfTBS2h!T=mRWk~b*9kJ?0bk-I;=nHL*DQfRsQFE`PuxE~0ROZ}uP?KN&wbPxP zL%Z3o0`F8EX}u|&M!(Q9jOoL?-!!LuEcU zAD{%aM!m;fBujU`<7COe=c>5}n!{4^1-=atF^@#8wLzf*AkFq8pavXk-r_k0eq!)lHCd2UlG>do zcu_XFMJ{Y8zgKGzh0=DK9*CW)n$&Z}Pw6P0FFD4n0A2xqunW26(i7Z*$|l))erdrD z$W7Rk)&j%gOL4x)Md|oZBUS>|`t$L3$apuD+=;cVbmGNTJnE|CkE%qP+xh3JN7QT; zG}2p59zqi{T7`%dtjE|EF~X?_DkQbM9L_ahqhM;KxAcPWc0mysD!!GL4lM_6$G$@* z$nJy!=r(wYzYJ%gX>M!C#kjTaI!8#~))~vqWR7aG^A@m59lQ8b+3Sqq0x#|q<#J&# zPlLV|CGh{1Y!t&nh!Z7QC;Ce303J#V`442((uCC4;2m&C>?W8F9SKcCU63{YQtScd za63;NCsfOItRtMQ9fR2Wxn~=zIlFmx?LFMx{5OUW-gTj?Vw+&FCcC%;X&jk`{8?kKdZamTcBMyaZfbsE{H8fbJYpqkdcig9QyR745?7*OF#hCE*DNhtBRHy= zo68fOP+v;^AUUljVq&Fd)gB=>Xsqh0KZK;I9PT@@W>rl4=Zayb%Z-20Bqq$!QhCiZ z#}rnbWW1$bME}c(63$GXaf0k0)_;ZpfiGv9A)FD(6Y5Wtc?o>=MLFL^VY&^;DCfiB(jSFis$aQZ!&24r+wPSQbv$V}RY5wE>}|Av?W>I`RRa4sRX%-` ztrSmXtg)_<`LdEN@AxQZoF$0f!~N6DE^X)cm^yPD!d=FW#H)a#_RRB%U3qMvhAVGZWwLAD%aG{Rn}Bz)&*g8^pCZ{Qi|DE z6T-X6mN{n9r*fCt{www3yI61L1PP-o>f{mP3bSW)CqNm03t1w&V~F%8;AOh?9?s}N z?a)@Y((?A5^^?jTv}vs$D}=3O`lGb>EwPG+RV$jlqi^W>jeCK|%#jT+uZVT0eq?no z=U{D9$w6LEja&9j!3jHa*-6pA)|Jr^Fw1-=WUkC$eCMx(KI%VtM54I%dJDVcXm3Pa zMOk+D5o=2Mjjk%aJB`~pRgqTZ++L4XS6^xy3sf^KEn4nv7O&}8btosJaaakHx2Qfk zyHUWZ^;%XhYIY2b&X%0CUJsceTWq%b>!8g>KaXNGQrFXbsw87oYVFa|8!H+tJIV!p zgLTanUwZ51Cn`60Uql{N^SXYOykdBFBy(}r$hL&4o9ve@i%X_+uQmB(7YUr|w=83c zmenqd4wh)_>q5p!-&u$Fn<2my;~_ZVq#S@}qw zRY~i6jzHDZdtXa*^gp{_b7wMlb*`?muzTAJiZ5{;E#I=;_{W<3mPLq$)@Mdfl_b_M zLk3BA+8F+JD8!uPVMH$IU-m2&A1aAyJug{WHoQJra;*HawI7J3t<~iKZ>x;dJ!wCk z3zx_$ndzdXUoICIwy8T;c(Yq70jY% zH~%HL%2-<~5!SPYn4gPM*~OZj;(457Bv&$(7YYrQeCPKIoutEr!Hn0kUq!!_^@7fl zyxeezEuEU&3~!hHFS;Kc33V^pjv0_zzbs-3W^nT-j}YdLzj-icR#OK*nHy8HOfZXA zZu(2`f)A><37-m96NKoI@H*%#ekh(ONC5^(Xp9)CJFuy2xGX_7G-nss2db0j!9(G} z(KLjMs2ADL@0h1wI^K&PbIT{oNv!<=XP+>naSwNu$lU?)YQ%$0PJBXqP4!J+lbpvd z344J*WVNE5(gXa%;>WTR^y7dF_;+cyv=Dld!;qapW-faJC8Fukq3{7rwMc;q@soaK zxEDFa%|N`N#BFEUZc&$>J3QIC)q!wKd|G=R)7wCb@X7^g)lB+Blk$ykAZEX*lybhyS%#9#$1E! zuQ#&xpo?q__DOWL!Ig6ro1mP>n}``Oe|`q`O*&p+#$`OV@Gkzox?UVf5GD1Jc5-mG zUK&FhmL>c&|G23AkcDbk6o;_n-hNeBqI|d8Rbrtcw*_EiP(F1O6QCGYE~|!Gt`BCf zrS2#SIB(^XPzEnXo(z=ot#XQcMDSL=r+SE}LjIv-viOuDB-;frDoU6BD@#-;qqNW< z#i~W#@Jq$tehl=sa*W##{FXANxr9DLy{;Bwq^Soi5+mit??x+HV4s}g&yLhBppS4?ZLmj`gPr6z4BPtEls`f4#1*=t7KNhM{ zmAiZ6wJN`+;;N@cZjF-eZ}c`B863j{Ex_zHtfRKEhZzdtI~;*wi1-utPyGgtmS3vR zt$ZxFr~6RsE)wb5vI-<=x{*tZrM_AyY9=^Lb7$cjc!DO~kB@q)x4Wm{G3qIeRh3um z>5jT;AKPKmYP!@Grs-nrvTh<@u>7nOVPAHS1rld+rj&3dd!1I#53SJ^eib}&%+2JBZrZF#{gTU;XOU~9r_2cp zkAQEDl%E#y)UR^iiZQgC>mw_+cE{Q9%4wbV4EWl3HVj-ibZ4l^S-f3wN zUStV~v}uO8iZ8xNp2E*~muV|w(=7QA6?>Plpu=P)~5Doi}r)|Z7d z`8S&PWNZ=MX&jd{UHqi3ATl0!@2Fc?4|-b<|NOto^r!nLbf+XR`RWK{h_*|XBK zwhiFY@-9Oa*g?aUCD81uLTm}Ng&rmy21hez@lxT(Y?tb4q=`GbWEr}Qzc70owm=9h zZNfdonhqtb7%AxHSyus8H2AOJ`P&x4xD(R;|=;kd39s zD7MQsF&?5TzK!V>mk=(P;LEiAHx3Hf7XYmsxOW2=v6wMT`UrNXFfUS``aGGrQ z!kL5#9x`_Vc?`{Q&6Ll@H?=GlU#C0O&6mg+0_#LzB=eZ=I?%y(m%ot~acYp)KQm>p z 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

    Z<_3Y{LUtXErkk!YTK8S>q&rU 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�qW23J#Oh&bG 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

    c1)r>*GoVdi*@GRJ%w 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

    EK4W+I)<<^YA;^#|8V~`Q-G* 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

    n)E1l5#35nBn4VzHTZh8W9S`8H(Q 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

    Fc{@OgBF_r6hz(y>vfqZs{DZChcZ#Zn<5D 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 ZR4U5ALtD1ry#X!^Ewsa{E&Lse{XZJ)j6?tc literal 0 HcmV?d00001 diff --git a/CycloBranch/images/icons/25.png b/CycloBranch/images/icons/25.png deleted file mode 100644 index 035c57e4cd3e89d2de6563369a2d2edf3215d692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1088 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 JPDHLkV1fvk(^UWf diff --git a/CycloBranch/images/icons/clear.png b/CycloBranch/images/icons/clear.png new file mode 100644 index 0000000000000000000000000000000000000000..28beb332d3e01ed0780d6bd16e4617e443a023e3 GIT binary patch literal 1227 zcmV;+1T_1JP)TBv^84p~-si~+{15g*^@*7;*PeVH0H`Mof2pQ5$6)5#v|7E<+v8h9 zKS?;x^R!Z<{3bUyX9`0@q$%0U0>Flv2A7g%7ZFiD(zxx-fyWi-pr5Xunw?e1Pz?I| zgEv|}TycS3SGj$<)nYz1w|LfmtxBuyjO|V+6mbj5PCXXkShSMBy<+vP#0DgaOcgy?BzXt#|5tEO&-8Va|w$xO= zFW|PbgSRG&f2FQ%i^Gv!#Ih^~fek#;7d17Nh@%3@wyAFC0tKbm7>mhOyX!Z4 zlVfjH*Uud^E;^i-Kf{rbWqAJT@r6SnX?AguL%}K#iQG+eUhn+4dF!&;ks5ZafQnUp zR$Mfz^pA^|34paD{yiI>Qbe@9-$kjrb|EIndQMO0#bn+i zH+lQp3pCbL%i-BN+hTQ4QkhHbP-k!mMOo~=kR^rLY?9%ep;4_%-e6Z{xzlXctfyIe<#dP5IelsdM^i~@1Q za~?eox}Bmavyk%pdp%u4Lhdj85{UwU27ZM>N60?CUR!EUOHn(stX7MOdq9{FKolh? zmF%d)-`Wj1DnXse!CYd8450avkzDj@J9pN;o(~K^@@D>cM51CF6H=lp#i-Seg-2s? z-1hcDsYvQ5MIrs!X-Hq;0;6HkbI1)b7=tNt%3VCPuXHqRY>U3GUs+)`>fSAzmp_GN z8C>u3Aso4f(mA=HCKw4ZEa2MFj%Yv(Z(h}K@{5NG0Kn%p<#|RmJaYFw?%j`#p5t)| zXU}*1=^GH%jb%M@55D@Ke5qcq-BC8LAdl0jX?K?o6h$F#S_S}s5Q4U|?OmSU@ZwGN zt)58>0KlFt%Z$1d?E#iyp0QdCiuuL47^dUY`D_0E{^060TaUMmS3BXNjo8s&yM&gX zJHLId%-PGbih|5^vx#LGoV#?R?@nK^dTq_ImWS0&`qSUDWtqcZ(j7Dyw9ZgCvUPRU pk4=+hJkofcryHx6&-pL8e*^oRymCUfU5)?%002ovPDHLkV1n3vQ<4Ax literal 0 HcmV?d00001 diff --git a/CycloBranch/images/icons/db_delete.png b/CycloBranch/images/icons/db_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb15645eded005fb7eeb50998c6faef80b4884c GIT binary patch literal 1079 zcmV-71jze|P)IC7Dj|dbi9%Z; zmQ@!Zb_j%25EXxcu%Rqq(?yBIhDs3<4JwLMs)7_~Y1)!Tgd`@-M_o7mh&>t4c;3vg zXp(wjo1|xX?|tXId(V59!VWkx{A-WzG6~;>9#Od@092~Z62+iIG49<9A0J-$zw^}g z!0TUL5TacCU6EtoRzuw0?k-8wWnNNcUJi>a4FENZcs0{8iZ#2wxN4TGb!XYM$oaCD zKRfo}5xb+ni8Fs3R>Q*CHwTiLeaXi-hHlYs3)k~;n_* zFsz8@P91wDyIbN-Ff@gMtj_hNwe0Zd)VBb7H*<7zq2stI(&u_ITq+3 zA`AJ^iKS#z<7!`r)_k9CV+ePevG zz(N*T?8d9M0^7mR6jX_WDsj6h4=H#yc0II3i`9d9s4nEznLjaIN0(hPu==hWOL`1w2Nwm#< z{qsC1P}m=%@M2Hvx|m+|ae2W9$1zesz;ofYRJX$hXRhL7)odN&#%l&~Jv$&!s9Do1 zrF!~tJ=ED@0NE}HrK$loQz2r zzrKW+9sxzQ->BE7a?7=H{Y2aBTVG7{X^L<O9g&zoUF>n9?002ovPDHLkV1i{u`QZQn literal 0 HcmV?d00001 diff --git a/CycloBranch/images/icons/db_export.png b/CycloBranch/images/icons/db_export.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3c73b33a51da95c0183b0ea2c3b6b0a9a391c6 GIT binary patch literal 1019 zcmVR2D@nZ+@*um81|BG zIu}b`;r!&8VXGxzW&C(19rtNk& zulYK#>aITi>!KKo1d#4kkx)asnosYT^h{?gfTLKssbo8+lmP-b1RSH59HggAnn(06@9c*Y8vIPyA z;XsiCc>c&id^J5UG<*7{bo$e))w3gMsqw8DHnK$xJwwh6#4z^L0y-i=r2AAP)bO4=Y6$>50 zf?)vWE`?zjoO-kyLBjn%Ktml-0Z&8|Ee~c3RebitJbF5#@S0v{RF?6=7js!nH)Y+l zCjGC1qV4ee<1(JfBq50+4n36GT90?eFf^FzV;JT(4X(f90~mF8<9e>#Hssi$1K>Ra z<%+g_M@sR_?5&(pu01<>X4vupER)ZCIhDd=*MvnDhrC5Yjw*de%bGc%* zZoT~d+eemw7Qg(7_bxq02ziI+*iJc2_+%^`NGPG8ED(TFXmtk_y>4?XM=}F3YjL%f zpO{&b9*C>qTe-r!-@KlFzu~p(A9(V^nE~CZ9p?h%5uU+*0Mv1@PCfTVx@+Inv!jF8 p0N~_DSB`__U;Xxtq0`Oh{{`{;XjF{xP*eZ_002ovPDHLkV1i)`?au%J literal 0 HcmV?d00001 diff --git a/CycloBranch/images/icons/features.png b/CycloBranch/images/icons/features.png new file mode 100644 index 0000000000000000000000000000000000000000..f63bc07d17c70fe756770c3589e9a7fe28b19acf GIT binary patch literal 238 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 Ucj~Jh($07*qoM6N<$f-@DQTL1t6 literal 0 HcmV?d00001 diff --git a/CycloBranch/images/icons/image.png b/CycloBranch/images/icons/image_edit.png similarity index 100% rename from CycloBranch/images/icons/image.png rename to CycloBranch/images/icons/image_edit.png diff --git a/CycloBranch/images/icons/image_open.png b/CycloBranch/images/icons/image_open.png new file mode 100644 index 0000000000000000000000000000000000000000..130b64c68b34a633a893728b2ebe8f108143d26c GIT binary patch literal 815 zcmV+~1JL}5P)_C zO%y6Ri~I*E5(=myA*4t&hzbEk5+#b#r3k`23gp5@7zEfD^1y~OGJc$VkG=KI?QV)Q zhfnf@x5T#@?QdqjpWkB^K6Z(dXMgUqEbF`XVQ$;@DP1%4&%gd+Uti0H_&YUEPtWqp zpI0x-cj~%=^yMG(4y5yMXV?;fhT2sCc?C~$ZwH8lssZo4MIUws00Ph?L@fwuVAg`~ z!SftAi{&%5AxK0)YEW=Ml^|OLFIWfQ3)q|h&xe|2JDLv7bs!}WfWMRkK%Kd?T2Ldw z_p1R_EeZq#fLMyUuE)^G1kavl(KHaEyr(U@^&)8@$`u4+tri8KX;83T2JcKVG%|_f zD5MnZ=}B>*cMGai;@nuIn+G%f2AVj%0GYc6`4_u(HWB&>*dKC!>nPK9ePH?DqJEma(&>BfHZO_mY zi_sX3a%t>35DixWlJzlCsSW~GcyG((@Hbtbv{cLix*NO5x;d1qkW#X>qn*Lb{V%Hk zh7rOu6YCb?dxNwk+SWW1F-^2unXCddMJ2mZ#%gyey7LT#5VS^;bT@WY;=4EQ0wA5A zVs!2Sx~>^jfK*&36<>cWPp)YIOxrVL-CV`|-s~s^RlxNX0G{WUUVq3yXS|KMg$#|c z7|KjCbpR!lHf=rLeQ@UvOUm*emd;OAG6%RhHePh{ zZogQ~WIcUz@pw;tUHG@&?$0_Srdf%*N-;D(mY&b%zCUy1#7}Pw0O&t|tSMrdKbpF+ tL$A@pp6@R@%K0~!bH6=*^oMbP{{euB1V#v91Bd_s002ovPDHLkV1gjIZT|oO literal 0 HcmV?d00001 diff --git a/CycloBranch/images/icons/import.png b/CycloBranch/images/icons/import.png new file mode 100644 index 0000000000000000000000000000000000000000..bd472e75281174d3a5fac94b05225eaaaaf38046 GIT binary patch literal 476 zcmV<20VDp2P)*51i+i(}*hnrS*0-P3bJcB`gtbA=Lup}14d=`>a9 z0{;fRF{q0Y3VgXY212EV(~AgR^F>9@Vm4yRIp&gcj6(GV3Va!Xs~Ct-?U*+h^sre? zBbp2{FL?y7ETPIEnaUs(PNLClesa-78qq|$ zliUj(ZW}-tfT!nMr0N7SE(a`TW7~-4XD2Z+KCI9_aoO|uJ-4f)KvWw5fMawJYhDim zmr)R*3YImZ)0@Q?$=io-!f?1B1xpUo5(}#JDoucTgldIF&tYM Qfev8sboFyt=akR{0M4dOSO5S3 literal 0 HcmV?d00001 diff --git a/CycloBranch/images/icons/search.png b/CycloBranch/images/icons/search.png new file mode 100644 index 0000000000000000000000000000000000000000..c483b6e8be4db2446e42febd98c7dedca582b71a GIT binary patch literal 894 zcmV-^1A+XBP)Z`WTeq;dG}uwKW7JzM5)3%^R^QHOI;CF1!{SoK zYymTzggO?Nh+lfU@rTB4usQJhXJuQPLlP9-?XTUE5LJ9QGmc9}!#ti71i+UOqy59T zsZR@f%F$PsQgHwP&q^;jaZh=1zf4qGusz-@8~^}80CsKSF^l&|vuOhS#mYMB4}Rc! zcT$>|b^D+^Had`(VMS0-6hTB}*)jES`@=!M9SE7UhP-WJQ6TV@?ApXL=l8HY6#!H~u}g}Cuvzq`mf zhj$rm3q&w*+`SBH)BI$6^=^}2!SCtC^Ua@C1|kT>n{JIkZ^sn?0i0weM%g=yhf$t? zorFLnox>*EklNbxRw3^J@N<%L8oySKs7F_YMNm( z0RRvn2qdpj`E+xVI9tSxVrZt!vm@iW$E_8z)9Zx;0HB9h*?Gy5m};>wnyxd?%#WzF zuUpGyCI15s06+p4VzAie76E`5RqNlil%*HLng50Vo9x=29XWMVH_qW}N^ literal 0 HcmV?d00001 diff --git a/CycloBranch/images/splash.cdr b/CycloBranch/images/splash.cdr index 567fad9fd809f38fd492857db50ff525ab90e1a9..d15de84deaa4b3778e75c2a353171f72f4247ce9 100644 GIT binary patch delta 463546 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 z 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