From 7f7a1094ac64eac2b198515caa606ad6090a1a7b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 4 Mar 2019 15:43:38 -0500 Subject: [PATCH 01/80] 4791 remove text/plain mime type from document results --- .../commonpropertiessearch/AbstractCommonAttributeSearcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java index 00a4a0f653..f3de0ff791 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java @@ -186,9 +186,9 @@ public abstract class AbstractCommonAttributeSearcher { * when checkType is ONLY_TEXT_FILES. ".doc", ".docx", ".odt", ".xls", * ".xlsx", ".ppt", ".pptx" ".txt", ".rtf", ".log", ".text", ".xml" ".html", * ".htm", ".css", ".js", ".php", ".aspx" ".pdf" + * //ignore text/plain due to large number of results with that type */ static final Set TEXT_FILES_MIME_TYPES = Stream.of( - "text/plain", //NON-NLS "application/rtf", //NON-NLS "application/pdf", //NON-NLS "text/css", //NON-NLS From ba0010f6267cee0f78c0ac3e1a02fcf3f8f59d21 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 4 Mar 2019 15:44:36 -0500 Subject: [PATCH 02/80] 4791 make default selection for intra-case search to filter by mime type --- .../autopsy/commonpropertiessearch/IntraCasePanel.form | 2 +- .../autopsy/commonpropertiessearch/IntraCasePanel.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form index d4a11098bb..e3fedcff6c 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form @@ -99,6 +99,7 @@ + @@ -139,7 +140,6 @@ - diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java index d0c7ab1579..b2382fe8a4 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java @@ -154,6 +154,7 @@ public final class IntraCasePanel extends javax.swing.JPanel { categoriesLabel.setName(""); // NOI18N buttonGroup.add(selectedFileCategoriesButton); + selectedFileCategoriesButton.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(selectedFileCategoriesButton, org.openide.util.NbBundle.getMessage(IntraCasePanel.class, "IntraCasePanel.selectedFileCategoriesButton.text")); // NOI18N selectedFileCategoriesButton.setToolTipText(org.openide.util.NbBundle.getMessage(IntraCasePanel.class, "IntraCasePanel.selectedFileCategoriesButton.toolTipText")); // NOI18N selectedFileCategoriesButton.addActionListener(new java.awt.event.ActionListener() { @@ -181,7 +182,6 @@ public final class IntraCasePanel extends javax.swing.JPanel { }); buttonGroup.add(allFileCategoriesRadioButton); - allFileCategoriesRadioButton.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(allFileCategoriesRadioButton, org.openide.util.NbBundle.getMessage(IntraCasePanel.class, "IntraCasePanel.allFileCategoriesRadioButton.text")); // NOI18N allFileCategoriesRadioButton.setToolTipText(org.openide.util.NbBundle.getMessage(IntraCasePanel.class, "IntraCasePanel.allFileCategoriesRadioButton.toolTipText")); // NOI18N allFileCategoriesRadioButton.addActionListener(new java.awt.event.ActionListener() { From 90c75d635e8b12a42cbf5f8f63a6c41be55014d3 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 4 Mar 2019 16:24:43 -0500 Subject: [PATCH 03/80] 4791 use name of first image in multi-image data sources --- .../datamodel/utils/DataSourceLoader.java | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java b/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java index 0c1329d9f6..18c762d073 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java @@ -1,16 +1,16 @@ /* - * + * * Autopsy Forensic Browser - * + * * Copyright 2018 Basis Technology Corp. * Contact: carrier sleuthkit org - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -30,10 +30,10 @@ import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; /** - * Encapsulates logic required to create a mapping of data sources in the + * Encapsulates logic required to create a mapping of data sources in the * current case to their data source IDs. - * - * Intended to be used within the context of a SwingWorker or other background + * + * Intended to be used within the context of a SwingWorker or other background * thread. */ public class DataSourceLoader { @@ -46,8 +46,7 @@ public class DataSourceLoader { //try block releases resources - exceptions are handled in done() try ( SleuthkitCase.CaseDbQuery query = tskDb.executeQuery(SELECT_DATA_SOURCES_LOGICAL); - ResultSet resultSet = query.getResultSet() - ) { + ResultSet resultSet = query.getResultSet()) { while (resultSet.next()) { Long objectId = resultSet.getLong(1); String dataSourceName = resultSet.getString(2); @@ -56,7 +55,7 @@ public class DataSourceLoader { } } - private void loadImageSources(SleuthkitCase tskDb, Map dataSouceMap) throws SQLException, TskCoreException { + private void loadImageSources(SleuthkitCase tskDb, Map dataSourceMap) throws SQLException, TskCoreException { //try block releases resources - exceptions are handled in done() try ( SleuthkitCase.CaseDbQuery query = tskDb.executeQuery(SELECT_DATA_SOURCES_IMAGE); @@ -64,21 +63,24 @@ public class DataSourceLoader { while (resultSet.next()) { Long objectId = resultSet.getLong(1); - String dataSourceName = resultSet.getString(2); - File image = new File(dataSourceName); - String dataSourceNameTrimmed = image.getName(); - dataSouceMap.put(objectId, dataSourceNameTrimmed); + if (!dataSourceMap.containsKey(objectId)) { + String dataSourceName = resultSet.getString(2); + File image = new File(dataSourceName); + String dataSourceNameTrimmed = image.getName(); + dataSourceMap.put(objectId, dataSourceNameTrimmed); + } } } } /** * Get a map of data source Ids to their string names for the current case. - * + * * @return Map of Long (id) to String (name) + * * @throws NoCurrentCaseException * @throws TskCoreException - * @throws SQLException + * @throws SQLException */ public Map getDataSourceMap() throws NoCurrentCaseException, TskCoreException, SQLException { Map dataSouceMap = new HashMap<>(); From b979217fe3d9861f94bb8d60ec468d0dd84be95b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 4 Mar 2019 17:43:09 -0500 Subject: [PATCH 04/80] 4791 Organize by number of data sources instead of instances --- .../AbstractCommonAttributeSearcher.java | 2 +- .../autopsy/commonpropertiessearch/CommonAttributeValue.java | 4 ++-- .../autopsy/commonpropertiessearch/IntraCasePanel.form | 2 -- .../autopsy/commonpropertiessearch/IntraCasePanel.java | 2 -- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java index f3de0ff791..8f553dff2a 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java @@ -135,7 +135,7 @@ public abstract class AbstractCommonAttributeSearcher { Map instanceCollatedCommonFiles = new TreeMap<>(); for (CommonAttributeValue md5Metadata : commonFiles.values()) { - Integer size = md5Metadata.getInstanceCount(); + Integer size = md5Metadata.getDataSources().size(); if (instanceCollatedCommonFiles.containsKey(size)) { instanceCollatedCommonFiles.get(size).addMetadataToList(md5Metadata); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java index d86eff5a4f..2048c15987 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java @@ -54,13 +54,13 @@ final public class CommonAttributeValue { return this.fileInstances.stream().map(AbstractCommonAttributeInstance::getCaseName).collect(Collectors.joining(", ")); } - public String getDataSources() { + public Set getDataSources() { Set sources = new HashSet<>(); for (AbstractCommonAttributeInstance data : this.fileInstances) { sources.add(data.getDataSource()); } - return String.join(", ", sources); + return sources; } void addInstance(AbstractCommonAttributeInstance metadata) { diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form index e3fedcff6c..2d79515463 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.form @@ -117,7 +117,6 @@ - @@ -129,7 +128,6 @@ - diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java index b2382fe8a4..b513125da7 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java @@ -165,7 +165,6 @@ public final class IntraCasePanel extends javax.swing.JPanel { pictureVideoCheckbox.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(pictureVideoCheckbox, org.openide.util.NbBundle.getMessage(IntraCasePanel.class, "IntraCasePanel.pictureVideoCheckbox.text")); // NOI18N - pictureVideoCheckbox.setEnabled(false); pictureVideoCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pictureVideoCheckboxActionPerformed(evt); @@ -174,7 +173,6 @@ public final class IntraCasePanel extends javax.swing.JPanel { documentsCheckbox.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(documentsCheckbox, org.openide.util.NbBundle.getMessage(IntraCasePanel.class, "IntraCasePanel.documentsCheckbox.text")); // NOI18N - documentsCheckbox.setEnabled(false); documentsCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { documentsCheckboxActionPerformed(evt); From 44eb4d0b0d09328e1f0842d72b22ed66936ef4c4 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 5 Mar 2019 10:07:37 -0500 Subject: [PATCH 05/80] 4791 rename hash node with token file name --- .../commonpropertiessearch/CommonAttributeValue.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java index 2048c15987..310dea3458 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java @@ -35,6 +35,7 @@ final public class CommonAttributeValue { private final String value; private final List fileInstances; + private String tokenFileName = null; CommonAttributeValue(String value) { this.value = value; @@ -45,6 +46,10 @@ final public class CommonAttributeValue { return this.value; } + String getTokenFileName(){ + return tokenFileName; + } + /** * concatenate cases this value was seen into a single string * @@ -64,6 +69,9 @@ final public class CommonAttributeValue { } void addInstance(AbstractCommonAttributeInstance metadata) { + if (tokenFileName==null){ + tokenFileName = metadata.getAbstractFile().getName(); + } this.fileInstances.add(metadata); } From 1af5006a0e180965ff74bac093b1a56d4fcaa2be Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 5 Mar 2019 10:08:04 -0500 Subject: [PATCH 06/80] 4791 rename hash node with token file name --- .../commonpropertiessearch/CommonAttributeValueNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java index d149847d78..86bac3dac3 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java @@ -57,7 +57,7 @@ public class CommonAttributeValueNode extends DisplayableItemNode { // @@ We seem to be doing this string concat twice. We also do it in getDataSources() this.dataSources = String.join(", ", data.getDataSources()); this.value = data.getValue(); - this.setDisplayName(String.format(Bundle.CommonAttributeValueNode_CommonAttributeValueNode_format(), this.value)); + this.setDisplayName(data.getTokenFileName()); this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/fileset-icon-16.png"); //NON-NLS } From b6c8936d5568b28fa9eb5eb7a12abe93952c35ec Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 5 Mar 2019 17:01:55 -0500 Subject: [PATCH 07/80] 4791-fix potential null pointer with token file name --- .../autopsy/commonpropertiessearch/CommonAttributeValue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java index 310dea3458..95bdff19d7 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java @@ -69,7 +69,7 @@ final public class CommonAttributeValue { } void addInstance(AbstractCommonAttributeInstance metadata) { - if (tokenFileName==null){ + if (tokenFileName==null && metadata.getAbstractFile() != null){ tokenFileName = metadata.getAbstractFile().getName(); } this.fileInstances.add(metadata); From 88404aa9ee3429e1eb848fbd1ec8627d61a8da1c Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 5 Mar 2019 18:35:19 -0500 Subject: [PATCH 08/80] 4791 fix sorting of results by count for inter-case search --- .../AbstractCommonAttributeSearcher.java | 4 ++-- .../CommonAttributeCountSearchResults.java | 7 ++++--- .../InterCaseSearchResultsProcessor.java | 9 +++++---- .../IntraCaseCommonAttributeSearcher.java | 3 ++- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java index 8f553dff2a..047ed4ed4d 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java @@ -130,9 +130,9 @@ public abstract class AbstractCommonAttributeSearcher { } } - static Map collateMatchesByNumberOfInstances(Map commonFiles) { + static TreeMap collateMatchesByNumberOfInstances(Map commonFiles) { //collate matches by number of matching instances - doing this in sql doesnt seem efficient - Map instanceCollatedCommonFiles = new TreeMap<>(); + TreeMap instanceCollatedCommonFiles = new TreeMap<>(); for (CommonAttributeValue md5Metadata : commonFiles.values()) { Integer size = md5Metadata.getDataSources().size(); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java index c1d2dcb481..9eda2b4020 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.TreeMap; import java.util.logging.Level; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeNormalizationException; @@ -41,7 +42,7 @@ final public class CommonAttributeCountSearchResults { private static final Logger LOGGER = Logger.getLogger(CommonAttributeCountSearchResults.class.getName()); // maps instance count to list of attribute values. - private final Map instanceCountToAttributeValues; + private final TreeMap instanceCountToAttributeValues; private final int percentageThreshold; private final int resultTypeId; @@ -58,7 +59,7 @@ final public class CommonAttributeCountSearchResults { */ CommonAttributeCountSearchResults(Map metadata, int percentageThreshold, CorrelationAttributeInstance.Type resultType) { //wrap in a new object in case any client code has used an unmodifiable collection - this.instanceCountToAttributeValues = new HashMap<>(metadata); + this.instanceCountToAttributeValues = new TreeMap<>(metadata); this.percentageThreshold = percentageThreshold; this.resultTypeId = resultType.getId(); } @@ -73,7 +74,7 @@ final public class CommonAttributeCountSearchResults { */ CommonAttributeCountSearchResults(Map metadata, int percentageThreshold) { //wrap in a new object in case any client code has used an unmodifiable collection - this.instanceCountToAttributeValues = new HashMap<>(metadata); + this.instanceCountToAttributeValues = new TreeMap<>(metadata); this.percentageThreshold = percentageThreshold; this.resultTypeId = CorrelationAttributeInstance.FILES_TYPE_ID; } diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java index 52f2cec276..e2dc8e616b 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java @@ -29,6 +29,7 @@ import java.util.HashSet; import java.util.Set; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.logging.Level; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; @@ -173,7 +174,7 @@ final class InterCaseSearchResultsProcessor { } catch (EamDbException | TskCoreException ex) { LOGGER.log(Level.SEVERE, "Error accessing EamDb processing CaseInstancesTable.", ex); } - return new HashMap<>(); + return new TreeMap<>(); } /** @@ -205,7 +206,7 @@ final class InterCaseSearchResultsProcessor { } catch (EamDbException | TskCoreException ex) { LOGGER.log(Level.SEVERE, "Error accessing EamDb processing CaseInstancesTable.", ex); } - return new HashMap<>(); + return new TreeMap<>(); } /** @@ -248,7 +249,7 @@ final class InterCaseSearchResultsProcessor { */ private class InterCaseByCountCallback implements CaseDbAccessManager.CaseDbAccessQueryCallback, InstanceTableCallback { - private final Map instanceCollatedCommonFiles = new HashMap<>(); + private final TreeMap instanceCollatedCommonFiles = new TreeMap<>(); private final int caseID; private final int targetCase; @@ -311,7 +312,7 @@ final class InterCaseSearchResultsProcessor { } Map getInstanceCollatedCommonFiles() { - return Collections.unmodifiableMap(instanceCollatedCommonFiles); + return Collections.unmodifiableSortedMap(instanceCollatedCommonFiles); } } diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java index f48d23d030..21ac1bb18b 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; @@ -137,7 +138,7 @@ public abstract class IntraCaseCommonAttributeSearcher extends AbstractCommonAtt } } - Map instanceCollatedCommonFiles = collateMatchesByNumberOfInstances(commonFiles); + TreeMap instanceCollatedCommonFiles = collateMatchesByNumberOfInstances(commonFiles); return new CommonAttributeCountSearchResults(instanceCollatedCommonFiles, this.frequencyPercentageThreshold); } From 6a0186f4cb0701afd030af3a52715fdccc14347b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 6 Mar 2019 13:33:34 -0500 Subject: [PATCH 09/80] 4791 change number of instances to number of data sources in search common property search results --- .../centralrepository/datamodel/CorrelationDataSource.java | 2 +- .../autopsy/commonpropertiessearch/Bundle.properties-MERGED | 2 +- .../autopsy/commonpropertiessearch/InstanceCountNode.java | 2 +- .../InterCaseSearchResultsProcessor.java | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationDataSource.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationDataSource.java index 03175347ca..8b8ed63699 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationDataSource.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CorrelationDataSource.java @@ -168,7 +168,7 @@ public class CorrelationDataSource implements Serializable { * * @return the ID or -1 if unknown */ - int getID() { + public int getID() { return dataSourceID; } diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED index 10370577d7..532d9ed139 100755 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED @@ -60,7 +60,7 @@ CommonFilesSearchResultsViewerTable.noDescText=\ CommonFilesSearchResultsViewerTable.pathColLbl=Parent Path CommonFilesSearchResultsViewerTable.valueColLbl=Value InstanceCountNode.createSheet.noDescription=\ -InstanceCountNode.displayName=Files with %s instances (%s) +InstanceCountNode.displayName=Exists in %s data sources (%s) IntraCasePanel.selectDataSourceComboBox.actionCommand= CommonAttributePanel.jCheckBox1.text=Hide files found in over CommonAttributePanel.jLabel1.text=% of data sources in central repository. diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java index 29f817210d..91929488da 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java @@ -54,7 +54,7 @@ public final class InstanceCountNode extends DisplayableItemNode { * @param attributeValues */ @NbBundle.Messages({ - "InstanceCountNode.displayName=Files with %s instances (%s)" + "InstanceCountNode.displayName=Exists in %s data sources (%s)" }) public InstanceCountNode(int instanceCount, CommonAttributeValueList attributeValues) { super(Children.create(new CommonAttributeValueNodeFactory(attributeValues.getMetadataList()), false)); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java index e2dc8e616b..a6dd6833b3 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCaseSearchResultsProcessor.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.logging.Level; +import java.util.stream.Collectors; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance.Type; @@ -285,7 +286,7 @@ final class InterCaseSearchResultsProcessor { } else { instances = EamDb.getInstance().getArtifactInstancesByTypeValuesAndCases(correlationType, Arrays.asList(corValue), targetCases); } - int size = instances.size(); + int size = instances.stream().map(instance -> instance.getCorrelationDataSource().getID()).collect(Collectors.toSet()).size(); if (size > 1) { CommonAttributeValue commonAttributeValue = new CommonAttributeValue(corValue); boolean anotherCase = false; From a1bb00a59a1b7d441d32c7136bee28da18fcb115 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Wed, 6 Mar 2019 16:51:31 -0500 Subject: [PATCH 10/80] First cut at not moving files around --- .../autoingest/AddArchiveTask.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java index e8e38dc743..1eae877690 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java @@ -122,10 +122,12 @@ class AddArchiveTask implements Runnable { numExtractedFilesRemaining = extractedFiles.size(); } catch (ArchiveUtil.ArchiveExtractionException ex) { // delete extracted contents - logger.log(Level.SEVERE,"Exception while extracting archive contents into {0}. Deleteing the directory", destinationFolder.toString()); + logger.log(Level.SEVERE, "Exception while extracting archive contents into " + destinationFolder.toString() + ". Deleteing the directory", ex); FileUtils.deleteDirectory(destinationFolder.toFile()); throw ex; } + + List unclaimedFiles = new ArrayList<>(extractedFiles); // lookup all AutomatedIngestDataSourceProcessors so that we only do it once. // LocalDisk, LocalFiles, and ArchiveDSP are removed from the list. @@ -159,7 +161,7 @@ class AddArchiveTask implements Runnable { * if we do not move the data sources out of the extracted * contents folder, those data source files will get added twice * and can potentially result in duplicate keyword hits. - */ + Path newFolder = createDirectoryForFile(file, currentCase.getModuleDirectory()); if (newFolder.toString().isEmpty()) { // unable to create directory @@ -170,9 +172,9 @@ class AddArchiveTask implements Runnable { } // Copy it to a different folder - FileUtils.copyFileToDirectory(fileObject, newFolder.toFile()); - Path newFilePath = Paths.get(newFolder.toString(), FilenameUtils.getName(file)); - + //FileUtils.copyFileToDirectory(fileObject, newFolder.toFile()); + //Path newFilePath = Paths.get(newFolder.toString(), FilenameUtils.getName(file)); +*/ // Try each DSP in decreasing order of confidence boolean success = false; for (AutoIngestDataSourceProcessor selectedProcessor : validDataSourceProcessors) { @@ -181,9 +183,9 @@ class AddArchiveTask implements Runnable { synchronized (archiveDspLock) { UUID taskId = UUID.randomUUID(); currentCase.notifyAddingDataSource(taskId); - AutoIngestDataSource internalDataSource = new AutoIngestDataSource(deviceId, newFilePath); + AutoIngestDataSource internalDataSource = new AutoIngestDataSource(deviceId, fileObject.toPath()); DataSourceProcessorCallback internalArchiveDspCallBack = new AddDataSourceCallback(currentCase, internalDataSource, taskId, archiveDspLock); - selectedProcessor.process(deviceId, newFilePath, progressMonitor, internalArchiveDspCallBack); + selectedProcessor.process(deviceId, fileObject.toPath(), progressMonitor, internalArchiveDspCallBack); archiveDspLock.wait(); // at this point we got the content object(s) from the current DSP. @@ -201,6 +203,10 @@ class AddArchiveTask implements Runnable { success = true; newDataSources.addAll(internalDataSource.getContent()); + // this extracted file has been "claimed" by one of the DSPs, + // remove it from the list of Logical Files that will be added later + unclaimedFiles.remove(file); + // update data source info for (Content c:internalDataSource.getContent()) { if (c instanceof DataSource) { @@ -227,7 +233,7 @@ class AddArchiveTask implements Runnable { } } - if (success) { + /*if (success) { // one of the DSPs successfully processed the data source. delete the // copy of the data source in the original extracted archive folder. // otherwise the data source is going to be added again as a logical file. @@ -238,12 +244,12 @@ class AddArchiveTask implements Runnable { // copy of the data source in the temporary folder. the data source is // going to be added as a logical file with the rest of the extracted contents. FileUtils.deleteQuietly(newFolder.toFile()); - } + }*/ } // after all archive contents have been examined (and moved to separate folders if necessary), // add remaining extracted contents as one logical file set - if (numExtractedFilesRemaining > 0) { + if (unclaimedFiles.size() > 0) { progressMonitor.setProgressText(String.format("Adding: %s", destinationFolder.toString())); logger.log(Level.INFO, "Adding directory {0} as logical file set", destinationFolder.toString()); synchronized (archiveDspLock) { @@ -260,7 +266,7 @@ class AddArchiveTask implements Runnable { String archiveFileName = FilenameUtils.getName(archivePath); LocalFilesDSProcessor localFilesDSP = new LocalFilesDSProcessor(); - localFilesDSP.run(deviceId, archiveFileName, pathsList, progressMonitor, internalArchiveDspCallBack); + localFilesDSP.run(deviceId, archiveFileName, unclaimedFiles, progressMonitor, internalArchiveDspCallBack); archiveDspLock.wait(); From e6ad011e9508488b47794be7fad05e73b9cc5752 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 7 Mar 2019 13:56:03 -0500 Subject: [PATCH 11/80] 4791 correct count of data sources when duplicate name --- .../AbstractCommonAttributeSearcher.java | 2 +- .../CommonAttributeValue.java | 25 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java index 047ed4ed4d..1880489cc4 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/AbstractCommonAttributeSearcher.java @@ -135,7 +135,7 @@ public abstract class AbstractCommonAttributeSearcher { TreeMap instanceCollatedCommonFiles = new TreeMap<>(); for (CommonAttributeValue md5Metadata : commonFiles.values()) { - Integer size = md5Metadata.getDataSources().size(); + Integer size = md5Metadata.getNumberOfDataSourcesInCurrentCase(); if (instanceCollatedCommonFiles.containsKey(size)) { instanceCollatedCommonFiles.get(size).addMetadataToList(md5Metadata); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java index 95bdff19d7..b2f9085898 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java @@ -26,6 +26,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import org.sleuthkit.datamodel.AbstractFile; /** * Defines a value that was in the common file search results as well as @@ -46,10 +47,10 @@ final public class CommonAttributeValue { return this.value; } - String getTokenFileName(){ + String getTokenFileName() { return tokenFileName; } - + /** * concatenate cases this value was seen into a single string * @@ -68,8 +69,26 @@ final public class CommonAttributeValue { return sources; } + /** + * Get the number of unique data sources in the current case which the value + * appeared in. + * + * @return the number of unique data sources in the current case which + * contained the value + */ + int getNumberOfDataSourcesInCurrentCase() { + Set dataSourceIds = new HashSet<>(); + for (AbstractCommonAttributeInstance data : this.fileInstances) { + AbstractFile file = data.getAbstractFile(); + if (file != null) { + dataSourceIds.add(file.getDataSourceObjectId()); + } + } + return dataSourceIds.size(); + } + void addInstance(AbstractCommonAttributeInstance metadata) { - if (tokenFileName==null && metadata.getAbstractFile() != null){ + if (tokenFileName == null && metadata.getAbstractFile() != null) { tokenFileName = metadata.getAbstractFile().getName(); } this.fileInstances.add(metadata); From 9dd378c12f5d388b5ce0a88e99d8b1bc3e9abf2e Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 7 Mar 2019 13:58:35 -0500 Subject: [PATCH 12/80] 4791 make default selection for InterCase search to filter on file type for consistency --- .../autopsy/commonpropertiessearch/InterCasePanel.form | 2 +- .../autopsy/commonpropertiessearch/InterCasePanel.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.form b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.form index f878323524..93a06ca05c 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.form +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.form @@ -134,7 +134,6 @@ - @@ -152,6 +151,7 @@ + diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java index 2c6100a42c..143cea98f1 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java @@ -164,7 +164,6 @@ public final class InterCasePanel extends javax.swing.JPanel { categoriesLabel.setName(""); // NOI18N buttonGroup.add(allFileCategoriesRadioButton); - allFileCategoriesRadioButton.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(allFileCategoriesRadioButton, org.openide.util.NbBundle.getMessage(InterCasePanel.class, "InterCasePanel.allFileCategoriesRadioButton.text")); // NOI18N allFileCategoriesRadioButton.setToolTipText(org.openide.util.NbBundle.getMessage(InterCasePanel.class, "InterCasePanel.allFileCategoriesRadioButton.toolTipText")); // NOI18N allFileCategoriesRadioButton.setEnabled(false); @@ -175,6 +174,7 @@ public final class InterCasePanel extends javax.swing.JPanel { }); buttonGroup.add(selectedFileCategoriesButton); + selectedFileCategoriesButton.setSelected(true); org.openide.awt.Mnemonics.setLocalizedText(selectedFileCategoriesButton, org.openide.util.NbBundle.getMessage(InterCasePanel.class, "InterCasePanel.selectedFileCategoriesButton.text")); // NOI18N selectedFileCategoriesButton.setToolTipText(org.openide.util.NbBundle.getMessage(InterCasePanel.class, "InterCasePanel.selectedFileCategoriesButton.toolTipText")); // NOI18N selectedFileCategoriesButton.setEnabled(false); From 18dec7e5433beef9aafb33fe4d7c5e8affc88ad6 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 7 Mar 2019 15:54:39 -0500 Subject: [PATCH 13/80] 4791 clean up and copyright update --- .../datamodel/DataSourceUpdateService.java | 2 +- .../CommonAttributeCountSearchResults.java | 2 +- .../commonpropertiessearch/CommonAttributeValue.java | 12 +++++++++++- .../CommonAttributeValueNode.java | 2 +- .../commonpropertiessearch/InstanceCountNode.java | 2 +- .../commonpropertiessearch/InterCasePanel.java | 2 +- .../IntraCaseCommonAttributeSearcher.java | 9 ++++----- .../commonpropertiessearch/IntraCasePanel.java | 2 +- .../autopsy/datamodel/utils/DataSourceLoader.java | 2 +- 9 files changed, 22 insertions(+), 13 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java index f1e52b03e4..46696bad94 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java @@ -65,4 +65,4 @@ public class DataSourceUpdateService implements AutopsyService { } } -} \ No newline at end of file +} diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java index 9eda2b4020..8265a8db25 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeCountSearchResults.java @@ -42,7 +42,7 @@ final public class CommonAttributeCountSearchResults { private static final Logger LOGGER = Logger.getLogger(CommonAttributeCountSearchResults.class.getName()); // maps instance count to list of attribute values. - private final TreeMap instanceCountToAttributeValues; + private final Map instanceCountToAttributeValues; private final int percentageThreshold; private final int resultTypeId; diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java index b2f9085898..ca40854ec9 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -47,6 +47,11 @@ final public class CommonAttributeValue { return this.value; } + /** + * Get the file name of the first available instance of this value. + * + * @return the file name of an instance of this file + */ String getTokenFileName() { return tokenFileName; } @@ -60,6 +65,11 @@ final public class CommonAttributeValue { return this.fileInstances.stream().map(AbstractCommonAttributeInstance::getCaseName).collect(Collectors.joining(", ")); } + /** + * Get the set of data sources names this value exists in + * + * @return a set of data source names + */ public Set getDataSources() { Set sources = new HashSet<>(); for (AbstractCommonAttributeInstance data : this.fileInstances) { diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java index 86bac3dac3..475f33888b 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java index 91929488da..5cfe79f58c 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java index 143cea98f1..c437bb0a3a 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InterCasePanel.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java index 21ac1bb18b..dac83a333e 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCaseCommonAttributeSearcher.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,7 +26,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.TreeMap; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; @@ -38,8 +37,8 @@ import org.sleuthkit.datamodel.TskCoreException; /** * * Generates a List when - * findMatchesByCount() is called, which organizes files by md5 to prepare - * to display in viewer. + * findMatchesByCount() is called, which organizes files by md5 to + * prepare to display in viewer. * * This entire thing runs on a background thread where exceptions are handled. */ @@ -138,7 +137,7 @@ public abstract class IntraCaseCommonAttributeSearcher extends AbstractCommonAtt } } - TreeMap instanceCollatedCommonFiles = collateMatchesByNumberOfInstances(commonFiles); + Map instanceCollatedCommonFiles = collateMatchesByNumberOfInstances(commonFiles); return new CommonAttributeCountSearchResults(instanceCollatedCommonFiles, this.frequencyPercentageThreshold); } diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java index b513125da7..69e02eb7a7 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/IntraCasePanel.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java b/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java index 18c762d073..f435efd9bd 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/utils/DataSourceLoader.java @@ -2,7 +2,7 @@ * * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); From 01e84910c86c60eccf7051814ce942566403b188 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 7 Mar 2019 16:02:11 -0500 Subject: [PATCH 14/80] 4791 undo formating changes to datasourceUpdateService --- .../centralrepository/datamodel/DataSourceUpdateService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java index 46696bad94..f1e52b03e4 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/DataSourceUpdateService.java @@ -65,4 +65,4 @@ public class DataSourceUpdateService implements AutopsyService { } } -} +} \ No newline at end of file From 07f23f3780eabf21a3f73f30682eaedba44ede64 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 7 Mar 2019 16:12:42 -0500 Subject: [PATCH 15/80] 4791 update text for older inter case search option --- .../sleuthkit/autopsy/commonpropertiessearch/Bundle.properties | 2 +- .../autopsy/commonpropertiessearch/Bundle.properties-MERGED | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties index cf530cf013..563c433322 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties @@ -44,5 +44,5 @@ CommonAttributePanel.resultsDisplayLabel.text_2=Display results organized by: CommonAttributePanel.organizeByCaseRadio.text=Case CommonAttributePanel.organizeByCountRadio.text=Number of occurrences CommonAttributePanel.caseResultsRadioButton.text=Case -CommonAttributePanel.countResultsRadioButton.text=Number of occurrences +CommonAttributePanel.countResultsRadioButton.text=Number of data sources CommonAttributePanel.displayResultsLabel.text_2=Display results organized by: diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED index 532d9ed139..d164529639 100755 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/Bundle.properties-MERGED @@ -101,7 +101,7 @@ CommonAttributePanel.resultsDisplayLabel.text_2=Display results organized by: CommonAttributePanel.organizeByCaseRadio.text=Case CommonAttributePanel.organizeByCountRadio.text=Number of occurrences CommonAttributePanel.caseResultsRadioButton.text=Case -CommonAttributePanel.countResultsRadioButton.text=Number of occurrences +CommonAttributePanel.countResultsRadioButton.text=Number of data sources CommonAttributePanel.displayResultsLabel.text_2=Display results organized by: # {0} - case name # {1} - attr type From e69b3230da7873e553157c8bedd7dae1c7156824 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 7 Mar 2019 17:35:19 -0500 Subject: [PATCH 16/80] 4791 fix node name for non-file attributes --- .../CommonAttributePanel.java | 2 +- .../CommonAttributeSearchResultRootNode.java | 11 +++++++---- .../CommonAttributeValue.java | 1 - .../CommonAttributeValueNode.java | 12 +++++++++--- .../InstanceCountNode.java | 17 ++++++++++------- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java index 72086983de..030b78c76e 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java @@ -294,7 +294,7 @@ final class CommonAttributePanel extends javax.swing.JDialog implements Observer DataResultTopComponent.createInstance(tabTitle, Bundle.CommonAttributePanel_search_results_pathText(), commonFilesNode, 1); } else { // -3969 - Node commonFilesNode = new CommonAttributeSearchResultRootNode(metadata); + Node commonFilesNode = new CommonAttributeSearchResultRootNode(metadata, interCasePanel.getSelectedCorrelationType()); DataResultFilterNode dataResultFilterNode = new DataResultFilterNode(commonFilesNode, ExplorerManager.find(CommonAttributePanel.this)); TableFilterNode tableFilterWithDescendantsNode = new TableFilterNode(dataResultFilterNode, 3); DataResultViewerTable table = new CommonAttributesSearchResultsViewerTable(); diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeSearchResultRootNode.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeSearchResultRootNode.java index 6576c9219f..27156f97fa 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeSearchResultRootNode.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeSearchResultRootNode.java @@ -25,6 +25,7 @@ import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; import org.sleuthkit.autopsy.datamodel.DisplayableItemNode; import org.sleuthkit.autopsy.datamodel.DisplayableItemNodeVisitor; @@ -35,8 +36,8 @@ import org.sleuthkit.autopsy.datamodel.DisplayableItemNodeVisitor; */ final public class CommonAttributeSearchResultRootNode extends DisplayableItemNode { - CommonAttributeSearchResultRootNode(CommonAttributeCountSearchResults metadataList) { - super(Children.create(new InstanceCountNodeFactory(metadataList), true)); + CommonAttributeSearchResultRootNode(CommonAttributeCountSearchResults metadataList, CorrelationAttributeInstance.Type type) { + super(Children.create(new InstanceCountNodeFactory(metadataList, type), true)); } CommonAttributeSearchResultRootNode(CommonAttributeCaseSearchResults metadataList) { @@ -73,6 +74,7 @@ final public class CommonAttributeSearchResultRootNode extends DisplayableItemNo private static final Logger LOGGER = Logger.getLogger(InstanceCountNodeFactory.class.getName()); private final CommonAttributeCountSearchResults searchResults; + private final CorrelationAttributeInstance.Type type; /** * Build a factory which converts a @@ -81,8 +83,9 @@ final public class CommonAttributeSearchResultRootNode extends DisplayableItemNo * * @param searchResults */ - InstanceCountNodeFactory(CommonAttributeCountSearchResults searchResults) { + InstanceCountNodeFactory(CommonAttributeCountSearchResults searchResults, CorrelationAttributeInstance.Type type) { this.searchResults = searchResults; + this.type = type; } @Override @@ -94,7 +97,7 @@ final public class CommonAttributeSearchResultRootNode extends DisplayableItemNo @Override protected Node createNodeForKey(Integer instanceCount) { CommonAttributeValueList attributeValues = this.searchResults.getAttributeValuesForInstanceCount(instanceCount); - return new InstanceCountNode(instanceCount, attributeValues); + return new InstanceCountNode(instanceCount, attributeValues, type); } } diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java index ca40854ec9..7895e7a410 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java @@ -75,7 +75,6 @@ final public class CommonAttributeValue { for (AbstractCommonAttributeInstance data : this.fileInstances) { sources.add(data.getDataSource()); } - return sources; } diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java index 475f33888b..ed8c395b5f 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValueNode.java @@ -25,6 +25,8 @@ import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; +import static org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance.FILES_TYPE_ID; import org.sleuthkit.autopsy.datamodel.AbstractAbstractFileNode; import org.sleuthkit.autopsy.datamodel.DisplayableItemNode; import org.sleuthkit.autopsy.datamodel.DisplayableItemNodeVisitor; @@ -49,15 +51,19 @@ public class CommonAttributeValueNode extends DisplayableItemNode { * * @param data the common feature, and the children */ - public CommonAttributeValueNode(CommonAttributeValue data) { + public CommonAttributeValueNode(CommonAttributeValue data, CorrelationAttributeInstance.Type type) { super(Children.create( new FileInstanceNodeFactory(data), true)); this.commonFileCount = data.getInstanceCount(); this.cases = data.getCases(); - // @@ We seem to be doing this string concat twice. We also do it in getDataSources() this.dataSources = String.join(", ", data.getDataSources()); this.value = data.getValue(); - this.setDisplayName(data.getTokenFileName()); + //if the type is null (indicating intra-case) or files then make the node name the representitive file name + if (type == null || type.getId() == FILES_TYPE_ID) { + this.setDisplayName(data.getTokenFileName()); + } else { + this.setDisplayName(String.format(Bundle.CommonAttributeValueNode_CommonAttributeValueNode_format(), this.value)); + } this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/fileset-icon-16.png"); //NON-NLS } diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java index 5cfe79f58c..973d7711c4 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/InstanceCountNode.java @@ -28,6 +28,7 @@ import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.Sheet; import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.AbstractAbstractFileNode; @@ -45,6 +46,7 @@ public final class InstanceCountNode extends DisplayableItemNode { final private int instanceCount; final private CommonAttributeValueList attributeValues; + final private CorrelationAttributeInstance.Type type; /** * Create a node with the given number of instances, and the given selection @@ -56,9 +58,9 @@ public final class InstanceCountNode extends DisplayableItemNode { @NbBundle.Messages({ "InstanceCountNode.displayName=Exists in %s data sources (%s)" }) - public InstanceCountNode(int instanceCount, CommonAttributeValueList attributeValues) { - super(Children.create(new CommonAttributeValueNodeFactory(attributeValues.getMetadataList()), false)); - + public InstanceCountNode(int instanceCount, CommonAttributeValueList attributeValues, CorrelationAttributeInstance.Type type) { + super(Children.create(new CommonAttributeValueNodeFactory(attributeValues.getMetadataList(), type), false)); + this.type = type; this.instanceCount = instanceCount; this.attributeValues = attributeValues; @@ -81,7 +83,7 @@ public final class InstanceCountNode extends DisplayableItemNode { */ void createChildren() { attributeValues.displayDelayedMetadata(); - setChildren(Children.create(new CommonAttributeValueNodeFactory(attributeValues.getMetadataList()), false)); + setChildren(Children.create(new CommonAttributeValueNodeFactory(attributeValues.getMetadataList(), type), false)); } /** @@ -146,10 +148,11 @@ public final class InstanceCountNode extends DisplayableItemNode { */ // maps sting version of value to value Object (??) private final Map metadata; + private final CorrelationAttributeInstance.Type type; - CommonAttributeValueNodeFactory(List attributeValues) { + CommonAttributeValueNodeFactory(List attributeValues, CorrelationAttributeInstance.Type type) { this.metadata = new HashMap<>(); - + this.type = type; Iterator iterator = attributeValues.iterator(); while (iterator.hasNext()) { CommonAttributeValue attributeValue = iterator.next(); @@ -167,7 +170,7 @@ public final class InstanceCountNode extends DisplayableItemNode { @Override protected Node createNodeForKey(String attributeValue) { CommonAttributeValue md5Metadata = this.metadata.get(attributeValue); - return new CommonAttributeValueNode(md5Metadata); + return new CommonAttributeValueNode(md5Metadata, type); } } } From 6d3154c207afb441029ed3474671413c0c97162a Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Thu, 7 Mar 2019 17:52:02 -0500 Subject: [PATCH 17/80] Adding unclaimed files to virtual directory --- .../autoingest/AddArchiveTask.java | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java index 1eae877690..93c30fdb53 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java @@ -43,6 +43,9 @@ import org.sleuthkit.autopsy.coreutils.TimeStampUtils; import org.sleuthkit.autopsy.datasourceprocessors.RawDSProcessor; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.DataSource; +import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.TskData; +import org.sleuthkit.datamodel.VirtualDirectory; /* * A runnable that adds an archive data source as well as data sources contained @@ -59,6 +62,7 @@ class AddArchiveTask implements Runnable { private final Object archiveDspLock; private static final String ARCHIVE_EXTRACTOR_MODULE_OUTPUT_DIR = "Archive Extractor"; + private static final String LOGICAL_FILE_VIRTUAL_DIR_NAME = "$AdditionalFiles"; /** * Constructs a runnable task that adds an archive as well as data sources @@ -115,11 +119,9 @@ class AddArchiveTask implements Runnable { // extract contents of ZIP archive into destination folder List extractedFiles = new ArrayList<>(); - int numExtractedFilesRemaining = 0; try { progressMonitor.setProgressText(String.format("Extracting archive contents to: %s", destinationFolder.toString())); extractedFiles = ArchiveUtil.unpackArchiveFile(archivePath, destinationFolder.toString()); - numExtractedFilesRemaining = extractedFiles.size(); } catch (ArchiveUtil.ArchiveExtractionException ex) { // delete extracted contents logger.log(Level.SEVERE, "Exception while extracting archive contents into " + destinationFolder.toString() + ". Deleteing the directory", ex); @@ -134,12 +136,13 @@ class AddArchiveTask implements Runnable { List processorCandidates = getListOfValidDataSourceProcessors(); // do processing + int numValidDataSources = 0; + DataSource defaultDataSource = null; for (String file : extractedFiles) { // we only care about files, skip directories File fileObject = new File(file); if (fileObject.isDirectory()) { - numExtractedFilesRemaining--; continue; } @@ -202,10 +205,11 @@ class AddArchiveTask implements Runnable { // if we are here it means the data source was added successfully success = true; newDataSources.addAll(internalDataSource.getContent()); + numValidDataSources++; // this extracted file has been "claimed" by one of the DSPs, // remove it from the list of Logical Files that will be added later - unclaimedFiles.remove(file); + removeClaimedFiles(file, unclaimedFiles, selectedProcessor); // update data source info for (Content c:internalDataSource.getContent()) { @@ -225,6 +229,8 @@ class AddArchiveTask implements Runnable { String newName = Paths.get(archivePath).getFileName() + "/" + ds.getName(); ds.setDisplayName(newName); currentCase.notifyDataSourceNameChanged(c, newName); + + defaultDataSource = ds; } } @@ -237,7 +243,7 @@ class AddArchiveTask implements Runnable { // one of the DSPs successfully processed the data source. delete the // copy of the data source in the original extracted archive folder. // otherwise the data source is going to be added again as a logical file. - numExtractedFilesRemaining--; + numValidDataSources--; FileUtils.deleteQuietly(fileObject); } else { // none of the DSPs were able to process the data source. delete the @@ -250,7 +256,17 @@ class AddArchiveTask implements Runnable { // after all archive contents have been examined (and moved to separate folders if necessary), // add remaining extracted contents as one logical file set if (unclaimedFiles.size() > 0) { - progressMonitor.setProgressText(String.format("Adding: %s", destinationFolder.toString())); + + // ELTODO investigate if i need to aquire datase lock? + SleuthkitCase caseDatabase = Case.getCurrentCaseThrows().getSleuthkitCase(); + VirtualDirectory additionalFilesDir = caseDatabase.addVirtualDirectory(defaultDataSource.getId(), LOGICAL_FILE_VIRTUAL_DIR_NAME); + + for (String file : unclaimedFiles) { + File fileObject = new File(file); + caseDatabase.addLocalFile(fileObject.getName(), fileObject.getAbsolutePath(), fileObject.length(), 0, 0, 0, 0, fileObject.isFile(), TskData.EncodingType.NONE, additionalFilesDir); + } + + /*progressMonitor.setProgressText(String.format("Adding: %s", destinationFolder.toString())); logger.log(Level.INFO, "Adding directory {0} as logical file set", destinationFolder.toString()); synchronized (archiveDspLock) { UUID taskId = UUID.randomUUID(); @@ -281,7 +297,7 @@ class AddArchiveTask implements Runnable { ds.setAcquisitionDetails(details); } } - } + }*/ } } catch (Exception ex) { criticalErrorOccurred = true; @@ -300,6 +316,13 @@ class AddArchiveTask implements Runnable { callback.done(result, errorMessages, newDataSources); } } + + private void removeClaimedFiles(String file, List unclaimedFiles, AutoIngestDataSourceProcessor selectedProcessor) { + + //if (!(selectedProcessor instanceof ForensicToolReportProcessor)) { + unclaimedFiles.remove(file); + //} + } /** * Get a list of data source processors. LocalFiles, RawDSProcessor, and From 1edbbadf5b115664c8c223ee474c44280d26c799 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 11 Mar 2019 12:29:18 -0400 Subject: [PATCH 18/80] 4792 initial Other Occurrences Content viewer changes --- .../contentviewer/Bundle.properties-MERGED | 1 + .../DataContentViewerCasesTableModel.java | 148 +++++++++ .../DataContentViewerOtherCases.form | 184 ++++++++---- .../DataContentViewerOtherCases.java | 280 +++++++++++++----- ...tentViewerOtherCasesTableCellRenderer.java | 2 +- ...DataContentViewerOtherCasesTableModel.java | 48 +-- 6 files changed, 515 insertions(+), 148 deletions(-) create mode 100644 Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerCasesTableModel.java diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED index 3734fc5a3e..d0e6b17620 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED @@ -1,3 +1,4 @@ +DataContentViewerCasesTableModel.case=Case DataContentViewerOtherCases.caseDetailsDialog.noCaseNameError=Error DataContentViewerOtherCases.caseDetailsDialog.noDetails=No details for this case. DataContentViewerOtherCases.caseDetailsDialog.noDetailsReference=No case details for Global reference properties. diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerCasesTableModel.java new file mode 100644 index 0000000000..d75084a709 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerCasesTableModel.java @@ -0,0 +1,148 @@ +/* + * Central Repository + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.centralrepository.contentviewer; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.table.AbstractTableModel; +import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationCase; + + +public class DataContentViewerCasesTableModel extends AbstractTableModel { + + private static final long serialVersionUID = 1L; + private final List nodeDataList = new ArrayList<>(); + + DataContentViewerCasesTableModel() { + } + + @Override + public int getColumnCount() { + return TableColumns.values().length; + } + + /** + * Get the preferred width that has been configured for this column. + * + * A value of 0 means that no preferred width has been defined for this + * column. + * + * @param colIdx Column index + * + * @return preferred column width >= 0 + */ + public int getColumnPreferredWidth(int colIdx) { + return TableColumns.values()[colIdx].columnWidth(); + } + + @Override + public int getRowCount() { + return nodeDataList.size(); + } + + @Override + public String getColumnName(int colIdx) { + return TableColumns.values()[colIdx].columnName(); + } + + @Override + public Object getValueAt(int rowIdx, int colIdx) { + if (0 == nodeDataList.size()) { + return Bundle.DataContentViewerOtherCasesTableModel_noData(); + } + + CorrelationCase nodeData = nodeDataList.get(rowIdx); + TableColumns columnId = TableColumns.values()[colIdx]; + return mapNodeInstanceData(nodeData, columnId); + } + + /** + * Map a column ID to the value in that cell for node instance data. + * + * @param nodeData The node instance data. + * @param columnId The ID of the cell column. + * + * @return The value in the cell. + */ + private Object mapNodeInstanceData(CorrelationCase nodeData, TableColumns columnId) { + String value = Bundle.DataContentViewerOtherCasesTableModel_noData(); + + switch (columnId) { + case CASE_NAME: + if (null != nodeData.getDisplayName()) { + value = nodeData.getDisplayName(); + } + break; + default: //Use default "No data" value. + break; + } + return value; + } + + Object getRow(int rowIdx) { + return nodeDataList.get(rowIdx); + } + + @Override + public Class getColumnClass(int colIdx) { + return String.class; + } + + /** + * Add one correlated instance object to the table + * + * @param newNodeData data to add to the table + */ + void addNodeData(CorrelationCase newNodeData) { + nodeDataList.add(newNodeData); + fireTableDataChanged(); + } + + /** + * Clear the node data table. + */ + void clearTable() { + nodeDataList.clear(); + fireTableDataChanged(); + } + + @NbBundle.Messages({"DataContentViewerCasesTableModel.case=Case",}) + enum TableColumns { + // Ordering here determines displayed column order in Content Viewer. + // If order is changed, update the CellRenderer to ensure correct row coloring. + CASE_NAME(Bundle.DataContentViewerOtherCasesTableModel_case(), 100); + + private final String columnName; + private final int columnWidth; + + TableColumns(String columnName, int columnWidth) { + this.columnName = columnName; + this.columnWidth = columnWidth; + } + + public String columnName() { + return columnName; + } + + public int columnWidth() { + return columnWidth; + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form index 53f6f6fc4b..33b932689f 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form @@ -68,12 +68,12 @@ - + - + @@ -81,25 +81,28 @@ - + - + - + + + + - + - + @@ -117,67 +120,37 @@ - - - - - - - - + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -202,6 +175,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index 308e14be63..7853fcaeed 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -48,9 +48,8 @@ import static javax.swing.JOptionPane.DEFAULT_OPTION; import static javax.swing.JOptionPane.PLAIN_MESSAGE; import static javax.swing.JOptionPane.ERROR_MESSAGE; import javax.swing.JPanel; -import javax.swing.RowSorter; -import javax.swing.SortOrder; import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; @@ -97,7 +96,10 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi private static final int CELL_TEXT_WIDTH_PADDING = 5; private final DataContentViewerOtherCasesTableModel tableModel; + private final DataContentViewerCasesTableModel casesTableModel; private final Collection correlationAttributes; + private String dataSourceName = ""; + private String deviceId = ""; /** * Could be null. */ @@ -108,6 +110,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi */ public DataContentViewerOtherCases() { this.tableModel = new DataContentViewerOtherCasesTableModel(); + this.casesTableModel = new DataContentViewerCasesTableModel(); this.correlationAttributes = new ArrayList<>(); initComponents(); @@ -144,19 +147,28 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // Set background of every nth row as light grey. TableCellRenderer renderer = new DataContentViewerOtherCasesTableCellRenderer(); otherCasesTable.setDefaultRenderer(Object.class, renderer); - + // Configure column sorting. TableRowSorter sorter = new TableRowSorter<>(otherCasesTable.getModel()); otherCasesTable.setRowSorter(sorter); - List sortKeys = new ArrayList<>(); - - int caseNameColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.CASE_NAME.ordinal(); - sortKeys.add(new RowSorter.SortKey(caseNameColumnIndex, SortOrder.ASCENDING)); - - int dataSourceColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.DATA_SOURCE.ordinal(); - sortKeys.add(new RowSorter.SortKey(dataSourceColumnIndex, SortOrder.ASCENDING)); - - sorter.setSortKeys(sortKeys); + caseTable.getSelectionModel().addListSelectionListener((e) -> { + if (Case.isCaseOpen()) { + updateCaseSelection(); + } + }); + dataSourceTable.getSelectionModel().addListSelectionListener((e) -> { + if (Case.isCaseOpen()) { + updateDataSourceSelection(); + } + }); +// List sortKeys = new ArrayList<>(); + +// int caseNameColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.CASE_NAME.ordinal(); +// sortKeys.add(new RowSorter.SortKey(caseNameColumnIndex, SortOrder.ASCENDING)); +// +// int dataSourceColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.DATA_SOURCE.ordinal(); +// sortKeys.add(new RowSorter.SortKey(dataSourceColumnIndex, SortOrder.ASCENDING)); +// sorter.setSortKeys(sortKeys); sorter.sort(); } @@ -322,6 +334,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi */ private void reset() { // start with empty table + casesTableModel.clearTable(); + ((DefaultTableModel) dataSourceTable.getModel()).setRowCount(0); tableModel.clearTable(); correlationAttributes.clear(); earliestCaseDate.setText(Bundle.DataContentViewerOtherCases_earliestCaseNotAvailable()); @@ -357,7 +371,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi public int isPreferred(Node node) { return 1; } - + /** * Set the number of unique cases and data sources. */ @@ -366,29 +380,29 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi }) private void setOccurrenceCounts() { DataContentViewerOtherCasesTableModel model = (DataContentViewerOtherCasesTableModel) otherCasesTable.getModel(); - - int caseColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.CASE_NAME.ordinal(); - int deviceColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.DEVICE.ordinal(); - + +// int caseColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.CASE_NAME.ordinal(); +// int deviceColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.DEVICE.ordinal(); + /* * We need a unique set of data sources. We rely on device ID for this. * To mitigate edge cases where a device ID could be duplicated in the * same case (e.g. "report.xml"), we put the device ID and case name in * a key-value pair. - * + * * Note: Relying on the case name isn't a fool-proof way of determining * a case to be unique. We should improve this in the future. */ Set cases = new HashSet<>(); Map devices = new HashMap<>(); - - for (int i=0; i < model.getRowCount(); i++) { - String caseName = (String) model.getValueAt(i, caseColumnIndex); - String deviceId = (String) model.getValueAt(i, deviceColumnIndex); - cases.add(caseName); - devices.put(deviceId, caseName); + + for (int i = 0; i < model.getRowCount(); i++) { +// String caseName = (String) model.getValueAt(i, caseColumnIndex); +// String deviceId = (String) model.getValueAt(i, deviceColumnIndex); +// cases.add(caseName); +// devices.put(deviceId, caseName); } - + foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), model.getRowCount(), cases.size(), devices.size())); } @@ -489,7 +503,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi CorrelationDataSource.fromTSKDataSource(corCase, file.getDataSource()), file.getParentPath() + file.getName(), "", - file.getKnown(), + file.getKnown(), file.getId())); } catch (CorrelationAttributeNormalizationException ex) { LOGGER.log(Level.INFO, String.format("Unable to check create CorrelationAttribtueInstance for value %s and type %s.", md5, aType.toString()), ex); @@ -574,7 +588,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi private Map getCorrelatedInstances(CorrelationAttributeInstance corAttr, String dataSourceName, String deviceId) { // @@@ Check exception try { - final Case openCase = Case.getCurrentCase(); + final Case openCase = Case.getCurrentCaseThrows(); String caseUUID = openCase.getName(); HashMap nodeDataMap = new HashMap<>(); @@ -709,7 +723,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi if (EamDb.isEnabled()) { return !getCorrelationAttributesFromNode(node).isEmpty(); } else { - return this.file != null + return this.file != null && this.file.getSize() > 0 && ((this.file.getMd5Hash() != null) && (!this.file.getMd5Hash().isEmpty())); } @@ -726,6 +740,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi //could be null this.file = this.getAbstractFileFromNode(node); populateTable(node); + } /** @@ -739,8 +754,6 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi "DataContentViewerOtherCases.table.noResultsFound=No results found." }) private void populateTable(Node node) { - String dataSourceName = ""; - String deviceId = ""; try { if (this.file != null) { Content dataSource = this.file.getDataSource(); @@ -754,29 +767,101 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // get the attributes we can correlate on correlationAttributes.addAll(getCorrelationAttributesFromNode(node)); + Map caseNames = new HashMap<>(); for (CorrelationAttributeInstance corAttr : correlationAttributes) { Map correlatedNodeDataMap = new HashMap<>(0); // get correlation and reference set instances from DB correlatedNodeDataMap.putAll(getCorrelatedInstances(corAttr, dataSourceName, deviceId)); - - correlatedNodeDataMap.values().forEach((nodeData) -> { - tableModel.addNodeData(nodeData); - }); + for (OtherOccurrenceNodeInstanceData nodeData : correlatedNodeDataMap.values()) { + try { + caseNames.put(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID(), nodeData.getCorrelationAttributeInstance().getCorrelationCase()); + } catch (EamDbException ex) { + System.out.println("can't get correlation case"); + } + } } - - if (correlationAttributes.isEmpty()) { - tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noArtifacts())); - setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noArtifacts()); - } else if (0 == tableModel.getRowCount()) { - tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noResultsFound())); - setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noResultsFound()); - } else { - setColumnWidths(); +// if (caseNames.isEmpty()) { +// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noArtifacts()); +// } else if (0 == casesTableModel.getRowCount()) { +// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noResultsFound()); +// } else { + for (CorrelationCase corCase : caseNames.values()) { + casesTableModel.addNodeData(corCase); } - +// } + +// if (correlationAttributes.isEmpty()) { +// tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noArtifacts())); +// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noArtifacts()); +// } else if (0 == tableModel.getRowCount()) { +// tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noResultsFound())); +// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noResultsFound()); +// } else { +// setColumnWidths(); +// } setEarliestCaseDate(); + setOccurrenceCounts(); + + if (caseTable.getRowCount() > 0) { + caseTable.setRowSelectionInterval(0, 0); + } + } + + private void updateCaseSelection() { + int[] selectedCaseIndexes = caseTable.getSelectedRows(); + DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourceTable.getModel(); + dataSourceModel.setRowCount(0); + tableModel.clearTable(); + for (CorrelationAttributeInstance corAttr : correlationAttributes) { + Map correlatedNodeDataMap = new HashMap<>(0); + + // get correlation and reference set instances from DB + correlatedNodeDataMap.putAll(getCorrelatedInstances(corAttr, dataSourceName, deviceId)); + for (OtherOccurrenceNodeInstanceData nodeData : correlatedNodeDataMap.values()) { + for (int selectedRow : selectedCaseIndexes) { + try { + if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID())) { + dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); + } + } catch (EamDbException ex) { + System.out.println("failure 1 to compare"); + } + } + } + } + if (dataSourceTable.getRowCount() > 0) { + dataSourceTable.setRowSelectionInterval(0, 0); + } + } + + private void updateDataSourceSelection() { + int[] selectedCaseIndexes = caseTable.getSelectedRows(); + DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourceTable.getModel(); + int[] selectedDataSources = dataSourceTable.getSelectedRows(); + tableModel.clearTable(); + for (CorrelationAttributeInstance corAttr : correlationAttributes) { + Map correlatedNodeDataMap = new HashMap<>(0); + + // get correlation and reference set instances from DB + correlatedNodeDataMap.putAll(getCorrelatedInstances(corAttr, dataSourceName, deviceId)); + for (OtherOccurrenceNodeInstanceData nodeData : correlatedNodeDataMap.values()) { + for (int selectedCaseRow : selectedCaseIndexes) { + for (int selectedDataSourceRow : selectedDataSources) { + try { + if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) + && dataSourceModel.getValueAt(dataSourceTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { + System.out.println(((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID()); + tableModel.addNodeData(nodeData); + } + } catch (EamDbException ex) { + System.out.println("failure 2 to compare"); + } + } + } + } + } } /** @@ -824,11 +909,17 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi CSVFileChooser = new javax.swing.JFileChooser(); otherCasesPanel = new javax.swing.JPanel(); tableContainerPanel = new javax.swing.JPanel(); - tableScrollPane = new javax.swing.JScrollPane(); - otherCasesTable = new javax.swing.JTable(); earliestCaseLabel = new javax.swing.JLabel(); earliestCaseDate = new javax.swing.JLabel(); foundInLabel = new javax.swing.JLabel(); + jSplitPane2 = new javax.swing.JSplitPane(); + jSplitPane3 = new javax.swing.JSplitPane(); + caseScrollPane = new javax.swing.JScrollPane(); + caseTable = new javax.swing.JTable(); + dataSourceScrollPane = new javax.swing.JScrollPane(); + dataSourceTable = new javax.swing.JTable(); + propertiesTableScrollPane = new javax.swing.JScrollPane(); + otherCasesTable = new javax.swing.JTable(); rightClickPopupMenu.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { @@ -856,19 +947,10 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi setOpaque(false); setPreferredSize(new java.awt.Dimension(1500, 44)); - otherCasesPanel.setPreferredSize(new java.awt.Dimension(1500, 144)); + otherCasesPanel.setPreferredSize(new java.awt.Dimension(921, 62)); tableContainerPanel.setPreferredSize(new java.awt.Dimension(1500, 63)); - tableScrollPane.setPreferredSize(new java.awt.Dimension(1500, 30)); - - otherCasesTable.setAutoCreateRowSorter(true); - otherCasesTable.setModel(tableModel); - otherCasesTable.setToolTipText(org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.table.toolTip.text")); // NOI18N - otherCasesTable.setComponentPopupMenu(rightClickPopupMenu); - otherCasesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION); - tableScrollPane.setViewportView(otherCasesTable); - org.openide.awt.Mnemonics.setLocalizedText(earliestCaseLabel, org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.earliestCaseLabel.text")); // NOI18N earliestCaseLabel.setToolTipText(org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.earliestCaseLabel.toolTipText")); // NOI18N @@ -876,45 +958,93 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi org.openide.awt.Mnemonics.setLocalizedText(foundInLabel, org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.foundInLabel.text")); // NOI18N + jSplitPane2.setDividerLocation(500); + + jSplitPane3.setDividerLocation(150); + + caseTable.setAutoCreateRowSorter(true); + caseTable.setModel(casesTableModel); + caseScrollPane.setViewportView(caseTable); + + jSplitPane3.setLeftComponent(caseScrollPane); + + dataSourceTable.setAutoCreateRowSorter(true); + dataSourceTable.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + + }, + new String [] { + "Data Source Name", "Device ID" + } + ) { + boolean[] canEdit = new boolean [] { + false, false + }; + + public boolean isCellEditable(int rowIndex, int columnIndex) { + return canEdit [columnIndex]; + } + }); + dataSourceScrollPane.setViewportView(dataSourceTable); + + jSplitPane3.setRightComponent(dataSourceScrollPane); + + jSplitPane2.setLeftComponent(jSplitPane3); + + propertiesTableScrollPane.setPreferredSize(new java.awt.Dimension(1000, 30)); + + otherCasesTable.setAutoCreateRowSorter(true); + otherCasesTable.setModel(tableModel); + otherCasesTable.setToolTipText(org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.table.toolTip.text")); // NOI18N + otherCasesTable.setComponentPopupMenu(rightClickPopupMenu); + otherCasesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION); + propertiesTableScrollPane.setViewportView(otherCasesTable); + + jSplitPane2.setRightComponent(propertiesTableScrollPane); + javax.swing.GroupLayout tableContainerPanelLayout = new javax.swing.GroupLayout(tableContainerPanel); tableContainerPanel.setLayout(tableContainerPanelLayout); tableContainerPanelLayout.setHorizontalGroup( tableContainerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1508, Short.MAX_VALUE) .addGroup(tableContainerPanelLayout.createSequentialGroup() - .addComponent(earliestCaseLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(earliestCaseDate) - .addGap(66, 66, 66) - .addComponent(foundInLabel) - .addGap(0, 1157, Short.MAX_VALUE)) + .addGroup(tableContainerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(tableContainerPanelLayout.createSequentialGroup() + .addComponent(earliestCaseLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(earliestCaseDate) + .addGap(66, 66, 66) + .addComponent(foundInLabel)) + .addComponent(jSplitPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 911, Short.MAX_VALUE)) + .addContainerGap()) ); tableContainerPanelLayout.setVerticalGroup( tableContainerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, tableContainerPanelLayout.createSequentialGroup() - .addComponent(tableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE) + .addComponent(jSplitPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(tableContainerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(earliestCaseLabel) .addComponent(earliestCaseDate) .addComponent(foundInLabel)) - .addGap(6, 6, 6)) + .addContainerGap()) ); javax.swing.GroupLayout otherCasesPanelLayout = new javax.swing.GroupLayout(otherCasesPanel); otherCasesPanel.setLayout(otherCasesPanelLayout); otherCasesPanelLayout.setHorizontalGroup( otherCasesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 1500, Short.MAX_VALUE) + .addGap(0, 921, Short.MAX_VALUE) .addGroup(otherCasesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tableContainerPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(otherCasesPanelLayout.createSequentialGroup() + .addComponent(tableContainerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 921, Short.MAX_VALUE) + .addGap(0, 0, 0))) ); otherCasesPanelLayout.setVerticalGroup( otherCasesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 61, Short.MAX_VALUE) + .addGap(0, 62, Short.MAX_VALUE) .addGroup(otherCasesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(otherCasesPanelLayout.createSequentialGroup() - .addComponent(tableContainerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 53, Short.MAX_VALUE) + .addComponent(tableContainerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE) .addGap(0, 0, 0))) ); @@ -922,11 +1052,11 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(otherCasesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(otherCasesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1500, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(otherCasesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 53, Short.MAX_VALUE) + .addComponent(otherCasesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); }// //GEN-END:initComponents @@ -947,18 +1077,24 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JFileChooser CSVFileChooser; + private javax.swing.JScrollPane caseScrollPane; + private javax.swing.JTable caseTable; + private javax.swing.JScrollPane dataSourceScrollPane; + private javax.swing.JTable dataSourceTable; private javax.swing.JLabel earliestCaseDate; private javax.swing.JLabel earliestCaseLabel; private javax.swing.JMenuItem exportToCSVMenuItem; private javax.swing.JLabel foundInLabel; + private javax.swing.JSplitPane jSplitPane2; + private javax.swing.JSplitPane jSplitPane3; private javax.swing.JPanel otherCasesPanel; private javax.swing.JTable otherCasesTable; + private javax.swing.JScrollPane propertiesTableScrollPane; private javax.swing.JPopupMenu rightClickPopupMenu; private javax.swing.JMenuItem selectAllMenuItem; private javax.swing.JMenuItem showCaseDetailsMenuItem; private javax.swing.JMenuItem showCommonalityMenuItem; private javax.swing.JPanel tableContainerPanel; - private javax.swing.JScrollPane tableScrollPane; // End of variables declaration//GEN-END:variables /** diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableCellRenderer.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableCellRenderer.java index 9ba05589ce..0d12bbb2c6 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableCellRenderer.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableCellRenderer.java @@ -47,7 +47,7 @@ public class DataContentViewerOtherCasesTableCellRenderer implements TableCellRe Color foreground, background; if (isSelected) { foreground = Color.WHITE; - background = Color.BLUE; + background = new Color(51,153,255); } else { String known_status = (String) table.getModel().getValueAt(table.convertRowIndexToModel(row), table.getColumn(DataContentViewerOtherCasesTableModel.TableColumns.KNOWN.columnName()).getModelIndex()); diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java index 1a3527d940..19b2be09d4 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java @@ -42,14 +42,14 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { enum TableColumns { // Ordering here determines displayed column order in Content Viewer. // If order is changed, update the CellRenderer to ensure correct row coloring. - CASE_NAME(Bundle.DataContentViewerOtherCasesTableModel_case(), 100), - DATA_SOURCE(Bundle.DataContentViewerOtherCasesTableModel_dataSource(), 100), +// CASE_NAME(Bundle.DataContentViewerOtherCasesTableModel_case(), 100), +// DATA_SOURCE(Bundle.DataContentViewerOtherCasesTableModel_dataSource(), 100), ATTRIBUTE(Bundle.DataContentViewerOtherCasesTableModel_attribute(), 125), VALUE(Bundle.DataContentViewerOtherCasesTableModel_value(), 200), KNOWN(Bundle.DataContentViewerOtherCasesTableModel_known(), 50), FILE_PATH(Bundle.DataContentViewerOtherCasesTableModel_path(), 450), - COMMENT(Bundle.DataContentViewerOtherCasesTableModel_comment(), 200), - DEVICE(Bundle.DataContentViewerOtherCasesTableModel_device(), 250); + COMMENT(Bundle.DataContentViewerOtherCasesTableModel_comment(), 200); +// DEVICE(Bundle.DataContentViewerOtherCasesTableModel_device(), 250); private final String columnName; private final int columnWidth; @@ -68,10 +68,10 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { } }; - private final List nodeDataList; + private final List nodeDataList = new ArrayList<>(); DataContentViewerOtherCasesTableModel() { - nodeDataList = new ArrayList<>(); + } @Override @@ -126,9 +126,9 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { * @return The value in the cell. */ private Object mapNodeMessageData(OtherOccurrenceNodeMessageData nodeData, TableColumns columnId) { - if (columnId == TableColumns.CASE_NAME) { - return nodeData.getDisplayMessage(); - } +// if (columnId == TableColumns.CASE_NAME) { +// return nodeData.getDisplayMessage(); +// } return ""; } @@ -144,21 +144,21 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { String value = Bundle.DataContentViewerOtherCasesTableModel_noData(); switch (columnId) { - case CASE_NAME: - if (null != nodeData.getCaseName()) { - value = nodeData.getCaseName(); - } - break; - case DEVICE: - if (null != nodeData.getDeviceID()) { - value = nodeData.getDeviceID(); - } - break; - case DATA_SOURCE: - if (null != nodeData.getDataSourceName()) { - value = nodeData.getDataSourceName(); - } - break; +// case CASE_NAME: +// if (null != nodeData.getCaseName()) { +// value = nodeData.getCaseName(); +// } +// break; +// case DEVICE: +// if (null != nodeData.getDeviceID()) { +// value = nodeData.getDeviceID(); +// } +// break; +// case DATA_SOURCE: +// if (null != nodeData.getDataSourceName()) { +// value = nodeData.getDataSourceName(); +// } +// break; case FILE_PATH: value = nodeData.getFilePath(); break; From 564d28148928aebf0b4fd024d04620648d2969fe Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Mon, 11 Mar 2019 12:43:40 -0400 Subject: [PATCH 19/80] Moved Cross case keyword search into Autopsy --- KeywordSearch/nbproject/project.xml | 8 + .../keywordsearch/multicase/Bundle.properties | 22 + .../multicase/Bundle.properties-MERGED | 108 +++ .../MultiCaseKeywordSearchErrorDialog.form | 87 ++ .../MultiCaseKeywordSearchErrorDialog.java | 112 +++ .../multicase/MultiCaseKeywordSearchNode.java | 291 ++++++ .../MultiCaseKeywordSearchOpenAction.java | 66 ++ .../MultiCaseKeywordSearchPanel.form | 432 +++++++++ .../MultiCaseKeywordSearchPanel.java | 908 ++++++++++++++++++ ...ltiCaseKeywordSearchProgressIndicator.java | 167 ++++ .../MultiCaseKeywordSearchTopComponent.form | 33 + .../MultiCaseKeywordSearchTopComponent.java | 140 +++ .../multicase/MultiCaseSearcher.java | 845 ++++++++++++++++ .../keywordsearch/multicase/SearchHit.java | 137 +++ .../keywordsearch/multicase/SearchQuery.java | 156 +++ .../SelectMultiUserCaseDialogCustomizer.java | 61 ++ .../multicase/SelectMultiUserCasesDialog.java | 90 ++ .../multicase/SelectMultiUserCasesPanel.form | 110 +++ .../multicase/SelectMultiUserCasesPanel.java | 206 ++++ 19 files changed, 3979 insertions(+) create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchOpenAction.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchProgressIndicator.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.form create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchQuery.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form create mode 100755 KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java diff --git a/KeywordSearch/nbproject/project.xml b/KeywordSearch/nbproject/project.xml index 109ee0e66c..b87ba81e88 100644 --- a/KeywordSearch/nbproject/project.xml +++ b/KeywordSearch/nbproject/project.xml @@ -49,6 +49,14 @@ 1.31.1 + + org.netbeans.swing.outline + + + + 1.34.1 + + org.openide.awt diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties new file mode 100755 index 0000000000..8d03fe3edd --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties @@ -0,0 +1,22 @@ +SelectMultiUserCasesPanel.selectAllButton.text=Select All +SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All +SelectMultiUserCasesPanel.jLabel1.text=Select case(s) for keyword search or start typing to search by case name +SelectMultiUserCasesPanel.confirmSelections.text=OK +SelectMultiUserCasesPanel.cancelButton.text=Cancel +MultiCaseKeywordSearchErrorDialog.closeButton.text=Close +MultiCaseKeywordSearchPanel.exactRadioButton.text_1=Exact Match +MultiCaseKeywordSearchPanel.substringRadioButton.text_1=Substring Match +MultiCaseKeywordSearchPanel.regexRadioButton.text_1=Regular Expression +MultiCaseKeywordSearchPanel.keywordTextField.text_1= +MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected collections to find cases which contain hits. The cases can be opened to examine the results more closely. +MultiCaseKeywordSearchPanel.casesLabel.text_1=Cases +MultiCaseKeywordSearchPanel.resultsLabel.text=Results +MultiCaseKeywordSearchPanel.uncheckButton.text=Uncheck All +MultiCaseKeywordSearchPanel.checkButton.text=Check All +MultiCaseKeywordSearchPanel.searchButton.text=Search +MultiCaseKeywordSearchPanel.viewErrorsButton.text=View Errors +MultiCaseKeywordSearchPanel.warningLabel.text= +MultiCaseKeywordSearchPanel.exportButton.text=Export Results +MultiCaseKeywordSearchPanel.cancelButton.text=Cancel +MultiCaseKeywordSearchPanel.resultsCountLabel.text= +MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Pick Cases diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED new file mode 100755 index 0000000000..7b5dabbe0c --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -0,0 +1,108 @@ +CTL_MultiCaseKeywordSearchOpenAction=Multi-case Keyword Search +CTL_MultiCaseKeywordSearchTopComponent=Multi-case Keyword Search +CTL_MultiCaseKeywordSearchTopComponentAction=Multi-case Keyword Search +MultiCaseKeywordSearchErrorDialog.title.text=Error(s) While Searching +MultiCaseKeywordSearchNode.copyResultAction.text=Copy to clipboard +MultiCaseKeywordSearchNode.OpenCaseAction.text=Open Case +MultiCaseKeywordSearchNode.properties.case=Case +MultiCaseKeywordSearchNode.properties.caseDirectory=Case Directory +MultiCaseKeywordSearchNode.properties.dataSource=Data Source +MultiCaseKeywordSearchNode.properties.path=Keyword Hit Source Path +MultiCaseKeywordSearchNode.properties.source=Keyword Hit Source +MultiCaseKeywordSearchNode.properties.sourceType=Keyword Hit Source Type +MultiCaseKeywordSearchPanel.continueSearch.text=A search is currently being performed. Would you like the search to continue in the background while the search window is closed? +MultiCaseKeywordSearchPanel.continueSearch.title=Closing multi-case search +MultiCaseKeywordSearchPanel.countOfResults.label=Count: +MultiCaseKeywordSearchPanel.emptyNode.waitText=Please Wait... +# {0} - numberOfErrors +MultiCaseKeywordSearchPanel.errorsEncounter.text={0} Error(s) encountered while performing search +MultiCaseKeywordSearchPanel.searchResultsExport.csvExtensionFilterlbl=Comma Separated Values File (csv) +# {0} - file name +MultiCaseKeywordSearchPanel.searchResultsExport.exportMsg=Search results exported to {0} +MultiCaseKeywordSearchPanel.searchResultsExport.failedExportMsg=Export of search results failed +MultiCaseKeywordSearchPanel.searchResultsExport.featureName=Search Results Export +# {0} - file name +MultiCaseKeywordSearchPanel.searchResultsExport.fileExistPrompt=File {0} exists, overwrite? +MultiCaseKeywordSearchPanel.searchThread.cancellingText=Cancelling search +MultiCaseKeywordSearchPanel.warningText.emptySearch=You must enter something to search for in the text field. +MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be selected to perform a search. +MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel. +MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search +MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled +# {0} - connection info +# {1} - case name +# {2} - case directory +MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2} +# {0} - PostgreSQL server host +# {1} - PostgreSQL server port +# {2} - case database name +# {3} - case directory +MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3} +# {0} - case directory +MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0} +# {0} - case_name +MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0} +# {0} - case directory path +MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} +# {0} - case directory +MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} +# {0} - host +# {1} - port +MultiCaseSearcher.exceptionMessage.failedToQueryCoordinationServer=Failed to obtain read lock for case directory at {0}:{1} +# {0} - Solr document id +# {1} - case database name +# {2} - case directory +MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2} +# {0} - file name +# {1} - case directory +MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} +# {0} - list of cases +MultiCaseSearcher.exceptionMessage.noCasesFound=No cases found for: {0} +# {0} - file name +# {1} - case directory +MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} +# {0} - query +# {1} - case_name +MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query "{0}" on case {1} +# {0} - case name +# {1} - case counter +# {2} - total cases +MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for "{0}" ({1} of {2} case(s)) +MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server +# {0} - case name +# {1} - case counter +# {2} - total cases +MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for "{0}" ({1} of {2} case(s)) +MultiCaseSearcher.progressMessage.findingCases=Finding selected cases +# {0} - case name +# {1} - case counter +# {2} - total cases +MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for "{0}" ({1} of {2} case(s)) +# {0} - case name +# {1} - case counter +# {2} - total cases +MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for "{0}" ({1} of {2} case(s)) +# {0} - total cases +MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s) +SelectMultiUserCasesPanel.selectAllButton.text=Select All +SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All +SelectMultiUserCasesPanel.jLabel1.text=Select case(s) for keyword search or start typing to search by case name +SelectMultiUserCasesPanel.confirmSelections.text=OK +SelectMultiUserCasesPanel.cancelButton.text=Cancel +MultiCaseKeywordSearchErrorDialog.closeButton.text=Close +MultiCaseKeywordSearchPanel.exactRadioButton.text_1=Exact Match +MultiCaseKeywordSearchPanel.substringRadioButton.text_1=Substring Match +MultiCaseKeywordSearchPanel.regexRadioButton.text_1=Regular Expression +MultiCaseKeywordSearchPanel.keywordTextField.text_1= +MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected collections to find cases which contain hits. The cases can be opened to examine the results more closely. +MultiCaseKeywordSearchPanel.casesLabel.text_1=Cases +MultiCaseKeywordSearchPanel.resultsLabel.text=Results +MultiCaseKeywordSearchPanel.uncheckButton.text=Uncheck All +MultiCaseKeywordSearchPanel.checkButton.text=Check All +MultiCaseKeywordSearchPanel.searchButton.text=Search +MultiCaseKeywordSearchPanel.viewErrorsButton.text=View Errors +MultiCaseKeywordSearchPanel.warningLabel.text= +MultiCaseKeywordSearchPanel.exportButton.text=Export Results +MultiCaseKeywordSearchPanel.cancelButton.text=Cancel +MultiCaseKeywordSearchPanel.resultsCountLabel.text= +MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Pick Cases diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form new file mode 100755 index 0000000000..368f9ebaa0 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form @@ -0,0 +1,87 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java new file mode 100755 index 0000000000..fd21972f69 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java @@ -0,0 +1,112 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import javax.swing.JDialog; +import org.openide.util.NbBundle.Messages; +import org.openide.windows.WindowManager; + +/** + * Dialog to display the errors encounter while perfomring a multi-case keyword search. + */ +final class MultiCaseKeywordSearchErrorDialog extends JDialog { + + private static final long serialVersionUID = 1L; + + /** + * Creates new MultiCaseKeywordSearchErrorDialog + */ + @Messages({"MultiCaseKeywordSearchErrorDialog.title.text=Error(s) While Searching"}) + MultiCaseKeywordSearchErrorDialog(String contents) { + setTitle(Bundle.MultiCaseKeywordSearchErrorDialog_title_text()); + initComponents(); + errorsTextArea.setText(contents); + this.setLocationRelativeTo(WindowManager.getDefault().getMainWindow()); + pack(); + setModal(true); + setResizable(false); + setVisible(true); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + errorsScrollPane = new javax.swing.JScrollPane(); + errorsTextArea = new javax.swing.JTextArea(); + closeButton = new javax.swing.JButton(); + + errorsScrollPane.setPreferredSize(new java.awt.Dimension(470, 175)); + + errorsTextArea.setEditable(false); + errorsTextArea.setColumns(40); + errorsTextArea.setLineWrap(true); + errorsTextArea.setRows(5); + errorsTextArea.setWrapStyleWord(true); + errorsTextArea.setPreferredSize(new java.awt.Dimension(460, 160)); + errorsScrollPane.setViewportView(errorsTextArea); + + org.openide.awt.Mnemonics.setLocalizedText(closeButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchErrorDialog.class, "MultiCaseKeywordSearchErrorDialog.closeButton.text")); // NOI18N + closeButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + closeButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(errorsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(closeButton))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(errorsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 196, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(closeButton) + .addGap(14, 14, 14)) + ); + }// //GEN-END:initComponents + + private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed + dispose(); + }//GEN-LAST:event_closeButtonActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton closeButton; + private javax.swing.JScrollPane errorsScrollPane; + private javax.swing.JTextArea errorsTextArea; + // End of variables declaration//GEN-END:variables +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java new file mode 100755 index 0000000000..2e69b41422 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java @@ -0,0 +1,291 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import java.awt.Toolkit; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.io.File; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.logging.Level; +import javax.swing.AbstractAction; +import javax.swing.Action; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.openide.nodes.Sheet; +import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.CaseActionCancelledException; +import org.sleuthkit.autopsy.casemodule.CaseActionException; +import static org.sleuthkit.autopsy.casemodule.CaseMetadata.getFileExtension; +import org.sleuthkit.autopsy.casemodule.StartupWindowProvider; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import org.sleuthkit.autopsy.datamodel.NodeProperty; + +@NbBundle.Messages({ + "MultiCaseKeywordSearchNode.properties.case=Case", + "MultiCaseKeywordSearchNode.properties.caseDirectory=Case Directory", + "MultiCaseKeywordSearchNode.properties.dataSource=Data Source", + "MultiCaseKeywordSearchNode.properties.sourceType=Keyword Hit Source Type", + "MultiCaseKeywordSearchNode.properties.source=Keyword Hit Source", + "MultiCaseKeywordSearchNode.properties.path=Keyword Hit Source Path" +}) + +/** + * A root node containing child nodes of the results of a multi-case keyword + * Search. + */ +class MultiCaseKeywordSearchNode extends AbstractNode { + + private static final Logger LOGGER = Logger.getLogger(MultiCaseKeywordSearchNode.class.getName()); + + /** + * Construct a new MultiCaseKeywordSearchNode + * + * @param resultList the list of KeywordSearchHits which will be the + * children of this node. + */ + MultiCaseKeywordSearchNode(Collection resultList) { + super(new MultiCaseKeywordSearchChildren(resultList)); + } + + /** + * A factory for creating children of the MultiCaseKeywordSearchNode. + */ + static class MultiCaseKeywordSearchChildren extends Children.Keys { + private final Collection resultList; + + /** + * Construct a new MultiCaseKeywordSearchChildren + * + * @param resultList the list of KeywordSearchHits which will be used to + * construct the children. + */ + MultiCaseKeywordSearchChildren(Collection resultList) { + this.resultList = resultList; + } + + @Override + protected void addNotify() { + super.addNotify(); + setKeys(resultList); + } + + @Override + protected void removeNotify() { + super.removeNotify(); + setKeys(Collections.emptyList()); + } + + @Override + protected Node[] createNodes(SearchHit t) { + return new Node[]{new SearchHitNode(t)}; + } + + @Override + public Object clone() { + return super.clone(); + } + + } + + /** + * A leaf node which represents a hit for the multi-case keyword search. + */ + static final class SearchHitNode extends AbstractNode { + + private final SearchHit searchHit; + + /** + * Construct a new SearchHitNode + * + * @param kwsHit the KeywordSearchHit which will be represented by this + * node. + */ + SearchHitNode(SearchHit kwsHit) { + super(Children.LEAF); + searchHit = kwsHit; + super.setName(searchHit.getCaseDisplayName()); + setDisplayName(searchHit.getCaseDisplayName()); + } + + @Override + public Action getPreferredAction() { + return new OpenCaseAction(getCasePath()); + } + + /** + * Get the path to the case directory + * + * @return the path to the case directory for the KeywordSearchHit + * represented by this node + */ + private String getCasePath() { + return searchHit.getCaseDirectoryPath(); + } + + @Override + protected Sheet createSheet() { + Sheet s = super.createSheet(); + Sheet.Set ss = s.get(Sheet.PROPERTIES); + if (ss == null) { + ss = Sheet.createPropertiesSet(); + s.put(ss); + } + ss.put(new NodeProperty<>(Bundle.MultiCaseKeywordSearchNode_properties_case(), Bundle.MultiCaseKeywordSearchNode_properties_case(), Bundle.MultiCaseKeywordSearchNode_properties_case(), + searchHit.getCaseDisplayName())); + ss.put(new NodeProperty<>(Bundle.MultiCaseKeywordSearchNode_properties_caseDirectory(), Bundle.MultiCaseKeywordSearchNode_properties_caseDirectory(), Bundle.MultiCaseKeywordSearchNode_properties_caseDirectory(), + searchHit.getCaseDirectoryPath())); + ss.put(new NodeProperty<>(Bundle.MultiCaseKeywordSearchNode_properties_dataSource(), Bundle.MultiCaseKeywordSearchNode_properties_dataSource(), Bundle.MultiCaseKeywordSearchNode_properties_dataSource(), + searchHit.getDataSourceName())); + ss.put(new NodeProperty<>(Bundle.MultiCaseKeywordSearchNode_properties_path(), Bundle.MultiCaseKeywordSearchNode_properties_path(), Bundle.MultiCaseKeywordSearchNode_properties_path(), + searchHit.getSourcePath())); + ss.put(new NodeProperty<>(Bundle.MultiCaseKeywordSearchNode_properties_sourceType(), Bundle.MultiCaseKeywordSearchNode_properties_sourceType(), Bundle.MultiCaseKeywordSearchNode_properties_sourceType(), + searchHit.getSourceType().getDisplayName())); + ss.put(new NodeProperty<>(Bundle.MultiCaseKeywordSearchNode_properties_source(), Bundle.MultiCaseKeywordSearchNode_properties_source(), Bundle.MultiCaseKeywordSearchNode_properties_source(), + searchHit.getSourceName())); + return s; + } + + @Override + public Action[] getActions(boolean context) { + List actions = new ArrayList<>(); + actions.add(new OpenCaseAction(getCasePath())); + actions.add(new CopyResultAction(searchHit)); + return actions.toArray(new Action[actions.size()]); + } + } + + @NbBundle.Messages({"MultiCaseKeywordSearchNode.copyResultAction.text=Copy to clipboard"}) + /** + * Put the contents of the selected row in the clipboard in the same tab + * seperated format as pressing ctrl+c. + */ + private static class CopyResultAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + + SearchHit result; + + /** + * Construct a new CopyResultAction + */ + CopyResultAction(SearchHit selectedResult) { + super(Bundle.MultiCaseKeywordSearchNode_copyResultAction_text()); + result = selectedResult; + } + + @Override + public void actionPerformed(ActionEvent e) { + StringSelection resultSelection = new StringSelection(result.getCaseDisplayName()+ "\t" + + result.getCaseDirectoryPath() + "\t" + + result.getDataSourceName() + "\t" + + result.getSourceType().getDisplayName() + "\t" + + result.getSourceName() + "\t" + + result.getSourcePath() + "\t"); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(resultSelection, resultSelection); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of generated methods, choose Tools | Templates. + } + + } + + @NbBundle.Messages({"MultiCaseKeywordSearchNode.OpenCaseAction.text=Open Case"}) + /** + * Action to open the case associated with the selected node. + */ + private static class OpenCaseAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + private final String caseDirPath; + + /** + * Finds the path to the .aut file for the specified case directory. + * + * @param caseDirectory the directory to check for a .aut file + * + * @return the path to the first .aut file found in the directory + * + * @throws CaseActionException if there was an issue finding a .aut file + */ + private static String findAutFile(String caseDirectory) throws CaseActionException { + File caseFolder = Paths.get(caseDirectory).toFile(); + if (caseFolder.exists()) { + /* + * Search for '*.aut' files. + */ + File[] fileArray = caseFolder.listFiles(); + if (fileArray == null) { + throw new CaseActionException("No files found in case directory"); + } + String autFilePath = null; + for (File file : fileArray) { + String name = file.getName().toLowerCase(); + if (autFilePath == null && name.endsWith(getFileExtension())) { + return file.getAbsolutePath(); + } + } + throw new CaseActionException("No .aut files found in case directory"); + } + throw new CaseActionException("Case directory was not found"); + } + + /** + * Construct a new open case action + * + * @param path the path to the case directory for the case to open + */ + OpenCaseAction(String path) { + super(Bundle.MultiCaseKeywordSearchNode_OpenCaseAction_text()); + caseDirPath = path; + } + + @Override + public void actionPerformed(ActionEvent e) { + StartupWindowProvider.getInstance().close(); + new Thread( + () -> { + try { + Case.openAsCurrentCase(findAutFile(caseDirPath)); + } catch (CaseActionException ex) { + if (null != ex.getCause() && !(ex.getCause() instanceof CaseActionCancelledException)) { + LOGGER.log(Level.SEVERE, String.format("Error opening case with metadata file path %s", caseDirPath), ex); //NON-NLS + MessageNotifyUtil.Message.error(ex.getCause().getLocalizedMessage()); + } + } + } + ).start(); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); //To change body of generated methods, choose Tools | Templates. + } + + } +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchOpenAction.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchOpenAction.java new file mode 100755 index 0000000000..2cc30ab381 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchOpenAction.java @@ -0,0 +1,66 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle.Messages; +import org.openide.util.actions.CallableSystemAction; +import org.sleuthkit.autopsy.core.UserPreferences; + +@ActionID(category = "Tools", id = "org.sleuthkit.autopsy.experimental.autoingest.MultiCaseKeywordSearchOpenAction") +@ActionReference(path = "Menu/Tools", position = 202) +@ActionRegistration(displayName = "#CTL_MultiCaseKeywordSearchOpenAction", lazy = false) +@Messages({"CTL_MultiCaseKeywordSearchOpenAction=Multi-case Keyword Search"}) +/** + * Action to open the top level component for the multi-case keyword search. + */ +public final class MultiCaseKeywordSearchOpenAction extends CallableSystemAction { + + private static final String DISPLAY_NAME = Bundle.CTL_MultiCaseKeywordSearchOpenAction(); + private static final long serialVersionUID = 1L; + + @Override + public boolean isEnabled() { + return UserPreferences.getIsMultiUserModeEnabled(); + } + + @Override + public void performAction() { + MultiCaseKeywordSearchTopComponent.openTopComponent(); + } + + @Override + public String getName() { + return DISPLAY_NAME; + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + @Override + public boolean asynchronous() { + return false; // run on edt + } + +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form new file mode 100755 index 0000000000..ffe256e8da --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form @@ -0,0 +1,432 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java new file mode 100755 index 0000000000..6aed7b3aa4 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java @@ -0,0 +1,908 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import com.google.common.eventbus.Subscribe; +import com.google.common.eventbus.DeadEvent; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.logging.Level; +import javax.swing.AbstractButton; +import javax.swing.JCheckBox; +import javax.swing.JFileChooser; +import javax.swing.table.TableColumn; +import javax.swing.JOptionPane; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.table.TableCellRenderer; +import org.netbeans.swing.outline.DefaultOutlineModel; +import org.openide.explorer.ExplorerManager; +import org.netbeans.swing.outline.Outline; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.openide.util.NbBundle.Messages; +import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.datamodel.EmptyNode; +import org.sleuthkit.autopsy.keywordsearch.multicase.MultiCaseSearcher.MultiCaseSearcherException; +import org.sleuthkit.autopsy.keywordsearch.multicase.SearchQuery.QueryType; + +/** + * Panel to display the controls and results for the multi-case search. + */ +final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements ExplorerManager.Provider { + + @Messages({ + "MultiCaseKeywordSearchPanel.emptyNode.waitText=Please Wait..." + }) + private static final long serialVersionUID = 1L; + private volatile SearchThread searchThread = null; + private final Outline outline; + private final ExplorerManager em; + private final org.openide.explorer.view.OutlineView outlineView; + private static final Logger LOGGER = Logger.getLogger(MultiCaseKeywordSearchPanel.class.getName()); + private static final EmptyNode PLEASE_WAIT_NODE = new EmptyNode(Bundle.MultiCaseKeywordSearchPanel_emptyNode_waitText()); + private static final MultiCaseKeywordSearchNode NO_RESULTS_NODE = new MultiCaseKeywordSearchNode(new ArrayList<>()); + private Collection allSearchHits = new ArrayList<>(); + private Collection searchExceptions = new ArrayList<>(); + private SelectMultiUserCasesDialog caseSelectionDialog = SelectMultiUserCasesDialog.getInstance(); + private Node[] currentSelections; + + /** + * Creates new form MultiCaseKeywordSearchPanel + */ + MultiCaseKeywordSearchPanel() { + em = new ExplorerManager(); + outlineView = new org.openide.explorer.view.OutlineView(); + outline = outlineView.getOutline(); + outlineView.setPropertyColumns( + Bundle.MultiCaseKeywordSearchNode_properties_caseDirectory(), Bundle.MultiCaseKeywordSearchNode_properties_caseDirectory(), + Bundle.MultiCaseKeywordSearchNode_properties_dataSource(), Bundle.MultiCaseKeywordSearchNode_properties_dataSource(), + Bundle.MultiCaseKeywordSearchNode_properties_path(), Bundle.MultiCaseKeywordSearchNode_properties_path(), + Bundle.MultiCaseKeywordSearchNode_properties_sourceType(), Bundle.MultiCaseKeywordSearchNode_properties_sourceType(), + Bundle.MultiCaseKeywordSearchNode_properties_source(), Bundle.MultiCaseKeywordSearchNode_properties_source()); + ((DefaultOutlineModel) outline.getOutlineModel()).setNodesColumnLabel(Bundle.MultiCaseKeywordSearchNode_properties_case()); + initComponents(); + outline.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + outline.setRootVisible(false); + outlineView.setPreferredSize(resultsScrollPane.getPreferredSize()); + resultsScrollPane.setViewportView(outlineView); + caseSelectionDialog.subscribeToNewCaseSelections(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + populateCasesList((Node[])e.getSource()); + revalidate(); + } + }); + searchEnabled(true); + outline.setRowSelectionAllowed(false); + searchProgressBar.setVisible(false); + exportButton.setEnabled(false); + outline.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + setColumnWidths(); + } + + /** + * If a collection of SearchHits is received update the results shown on the + * panel to include them. + * + * @param hits the collection of SearchHits which was received. + */ + @Messages({"MultiCaseKeywordSearchPanel.countOfResults.label=Count: "}) + @Subscribe + void subscribeToResults(Collection hits) { + allSearchHits.addAll(hits); + if (allSearchHits.size() > 0) { + MultiCaseKeywordSearchNode resultsNode = new MultiCaseKeywordSearchNode(allSearchHits); + SwingUtilities.invokeLater(() -> { + em.setRootContext(resultsNode); + outline.setRowSelectionAllowed(true); + resultsCountLabel.setText(Bundle.MultiCaseKeywordSearchPanel_countOfResults_label() + Integer.toString(outline.getRowCount())); + }); + } else { + em.setRootContext(NO_RESULTS_NODE); + resultsCountLabel.setText(Bundle.MultiCaseKeywordSearchPanel_countOfResults_label() + 0); + } + } + + /** + * If a string is received and it matches the + * MultiCaseSearcher.SEARCH_COMPLETE_STRING reset elements of this panel + * to reflect that the search is done. + * + * @param stringRecived the String which was received + */ + @Subscribe + void subscribeToStrings(String stringReceived) { + if (stringReceived.equals(MultiCaseSearcher.getSearchCompleteMessage())) { + searchThread.unregisterWithSearcher(MultiCaseKeywordSearchPanel.this); + searchThread = null; + searchEnabled(true); + if (!searchExceptions.isEmpty()) { + warningLabel.setText(Bundle.MultiCaseKeywordSearchPanel_errorsEncounter_text(searchExceptions.size())); + } + if (!em.getRootContext().equals(PLEASE_WAIT_NODE) && !em.getRootContext().equals(NO_RESULTS_NODE)) { + exportButton.setEnabled(true); + SwingUtilities.invokeLater(() -> { + exportButton.setEnabled(true); + setColumnWidths(); + }); + } + } else { + //If it is not the SEARCH_COMPLETE_STRING log it. + LOGGER.log(Level.INFO, "String posted to MultiCaseKeywordSearchPanel EventBus with value of " + stringReceived); + } + } + + /** + * If a InterruptedException is received over the EventBus update the + * warning label. + * + * @param exception the InterruptedException which was received. + */ + @Subscribe + void subscribeToInterruptionExceptions(InterruptedException exception) { + warningLabel.setText(exception.getMessage()); + //if we are still displaying please wait force it to update to no results + if (em.getRootContext().equals(PLEASE_WAIT_NODE)) { + em.setRootContext(NO_RESULTS_NODE); + resultsCountLabel.setText(Bundle.MultiCaseKeywordSearchPanel_countOfResults_label() + 0); + } + } + + /** + * If a MultiCaseSearcherException is received over the EventBus cancel the + * current search and update the warning label. + * + * @param exception the MultiCaseSearcherException which was received. + */ + @Messages({"# {0} - numberOfErrors", + "MultiCaseKeywordSearchPanel.errorsEncounter.text={0} Error(s) encountered while performing search" + }) + @Subscribe + void subscribeToMultiCaseSearcherExceptions(MultiCaseSearcherException exception) { + searchExceptions.add(exception); + } + + /** + * Log all other events received over the event bus which are not + * specifically covered by another @Subscribe method + * + * @param deadEvent Any object received over the event bus which was not of + * a type otherwise subscribed to + */ + @Subscribe + void subscribeToDeadEvents(DeadEvent deadEvent) { + LOGGER.log(Level.INFO, "Dead Event posted to MultiCaseKeywordSearchPanel EventBus " + deadEvent.toString()); + } + + private void displaySearchErrors() { + if (!searchExceptions.isEmpty()) { + StringBuilder strBuilder = new StringBuilder(""); + searchExceptions.forEach((exception) -> { + strBuilder.append("- ").append(exception.getMessage()).append(System.lineSeparator()); + }); + SwingUtilities.invokeLater(() -> { + new MultiCaseKeywordSearchErrorDialog(strBuilder.toString()); + }); + } + + } + + /** + * Get the list of cases from the Multi user case browser + */ + private void populateCasesList(Node[] selectedNodes) { + Collection disabledCases = getCases(false); + casesPanel.removeAll(); + currentSelections = selectedNodes; + int casePanelWidth = casesPanel.getPreferredSize().width; + int heightOfAllRows = 0; + for(Node data : selectedNodes) { + //select all new cases and cases which were previously selected + String multiUserCaseName = data.getName(); + boolean isSelected = true; + if (disabledCases.contains(multiUserCaseName)) { + isSelected = false; + } + JCheckBox caseCheckBox = new JCheckBox(multiUserCaseName, isSelected); + caseCheckBox.setBackground(Color.white); + if (casePanelWidth < caseCheckBox.getPreferredSize().width) { + casePanelWidth = caseCheckBox.getPreferredSize().width; + } + heightOfAllRows += caseCheckBox.getPreferredSize().height; + casesPanel.add(caseCheckBox); + } + casesPanel.setPreferredSize(new Dimension(casePanelWidth, heightOfAllRows)); + } + + @Override + public ExplorerManager getExplorerManager() { + return em; + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + searchTypeGroup = new javax.swing.ButtonGroup(); + searchButton = new javax.swing.JButton(); + substringRadioButton = new javax.swing.JRadioButton(); + keywordTextField = new javax.swing.JTextField(); + exactRadioButton = new javax.swing.JRadioButton(); + regexRadioButton = new javax.swing.JRadioButton(); + casesScrollPane = new javax.swing.JScrollPane(); + casesPanel = new javax.swing.JPanel(); + casesLabel = new javax.swing.JLabel(); + resultsLabel = new javax.swing.JLabel(); + uncheckButton = new javax.swing.JButton(); + checkButton = new javax.swing.JButton(); + toolDescriptionScrollPane = new javax.swing.JScrollPane(); + toolDescriptionTextArea = new javax.swing.JTextArea(); + resultsScrollPane = new javax.swing.JScrollPane(); + cancelButton = new javax.swing.JButton(); + searchProgressBar = new javax.swing.JProgressBar(); + warningLabel = new javax.swing.JLabel(); + exportButton = new javax.swing.JButton(); + resultsCountLabel = new javax.swing.JLabel(); + viewErrorsButton = new javax.swing.JButton(); + pickCasesButton = new javax.swing.JButton(); + + setName(""); // NOI18N + setOpaque(false); + setPreferredSize(new java.awt.Dimension(1000, 442)); + + org.openide.awt.Mnemonics.setLocalizedText(searchButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.searchButton.text")); // NOI18N + searchButton.setMaximumSize(new java.awt.Dimension(84, 23)); + searchButton.setMinimumSize(new java.awt.Dimension(84, 23)); + searchButton.setPreferredSize(new java.awt.Dimension(84, 23)); + searchButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + searchButtonActionPerformed(evt); + } + }); + + searchTypeGroup.add(substringRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(substringRadioButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.substringRadioButton.text_1")); // NOI18N + substringRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + substringRadioButtonActionPerformed(evt); + } + }); + + keywordTextField.setFont(new java.awt.Font("Monospaced", 0, 14)); // NOI18N + keywordTextField.setText(org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.keywordTextField.text_1")); // NOI18N + keywordTextField.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(192, 192, 192), 1, true)); + keywordTextField.setMinimumSize(new java.awt.Dimension(2, 25)); + keywordTextField.setPreferredSize(new java.awt.Dimension(2, 25)); + + searchTypeGroup.add(exactRadioButton); + exactRadioButton.setSelected(true); + org.openide.awt.Mnemonics.setLocalizedText(exactRadioButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.exactRadioButton.text_1")); // NOI18N + + searchTypeGroup.add(regexRadioButton); + org.openide.awt.Mnemonics.setLocalizedText(regexRadioButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.regexRadioButton.text_1")); // NOI18N + + casesScrollPane.setPreferredSize(new java.awt.Dimension(174, 281)); + + casesPanel.setBackground(new java.awt.Color(255, 255, 255)); + casesPanel.setPreferredSize(new java.awt.Dimension(152, 197)); + casesPanel.setLayout(new javax.swing.BoxLayout(casesPanel, javax.swing.BoxLayout.Y_AXIS)); + casesScrollPane.setViewportView(casesPanel); + + org.openide.awt.Mnemonics.setLocalizedText(casesLabel, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.casesLabel.text_1")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(resultsLabel, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.resultsLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(uncheckButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.uncheckButton.text")); // NOI18N + uncheckButton.setMargin(new java.awt.Insets(2, 6, 2, 6)); + uncheckButton.setMaximumSize(new java.awt.Dimension(84, 23)); + uncheckButton.setMinimumSize(new java.awt.Dimension(84, 23)); + uncheckButton.setPreferredSize(new java.awt.Dimension(84, 23)); + uncheckButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + uncheckButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(checkButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.checkButton.text")); // NOI18N + checkButton.setMaximumSize(new java.awt.Dimension(84, 23)); + checkButton.setMinimumSize(new java.awt.Dimension(84, 23)); + checkButton.setPreferredSize(new java.awt.Dimension(84, 23)); + checkButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + checkButtonActionPerformed(evt); + } + }); + + toolDescriptionTextArea.setEditable(false); + toolDescriptionTextArea.setBackground(new java.awt.Color(240, 240, 240)); + toolDescriptionTextArea.setColumns(20); + toolDescriptionTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N + toolDescriptionTextArea.setLineWrap(true); + toolDescriptionTextArea.setRows(3); + toolDescriptionTextArea.setText(org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text")); // NOI18N + toolDescriptionTextArea.setWrapStyleWord(true); + toolDescriptionTextArea.setFocusable(false); + toolDescriptionScrollPane.setViewportView(toolDescriptionTextArea); + + resultsScrollPane.setMinimumSize(new java.awt.Dimension(100, 40)); + resultsScrollPane.setPreferredSize(new java.awt.Dimension(200, 100)); + resultsScrollPane.setRequestFocusEnabled(false); + + org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.cancelButton.text")); // NOI18N + cancelButton.setEnabled(false); + cancelButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cancelButtonActionPerformed(evt); + } + }); + + warningLabel.setForeground(new java.awt.Color(200, 0, 0)); + org.openide.awt.Mnemonics.setLocalizedText(warningLabel, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.warningLabel.text")); // NOI18N + warningLabel.setFocusable(false); + + org.openide.awt.Mnemonics.setLocalizedText(exportButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.exportButton.text")); // NOI18N + exportButton.setMargin(new java.awt.Insets(2, 2, 2, 2)); + exportButton.setMaximumSize(new java.awt.Dimension(84, 23)); + exportButton.setMinimumSize(new java.awt.Dimension(84, 23)); + exportButton.setPreferredSize(new java.awt.Dimension(84, 23)); + exportButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + exportButtonActionPerformed(evt); + } + }); + + resultsCountLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + org.openide.awt.Mnemonics.setLocalizedText(resultsCountLabel, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.resultsCountLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(viewErrorsButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.viewErrorsButton.text")); // NOI18N + viewErrorsButton.setEnabled(false); + viewErrorsButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + viewErrorsButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(pickCasesButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.pickCasesButton.text_1")); // NOI18N + pickCasesButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + pickCasesButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(exactRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(substringRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(regexRadioButton)) + .addComponent(keywordTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 570, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(toolDescriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 84, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(casesLabel) + .addComponent(casesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(pickCasesButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(uncheckButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(checkButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(resultsLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(resultsCountLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(resultsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(viewErrorsButton) + .addComponent(warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 695, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(exportButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE)))))) + .addContainerGap()) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(196, 196, 196) + .addComponent(searchProgressBar, javax.swing.GroupLayout.DEFAULT_SIZE, 769, Short.MAX_VALUE) + .addGap(108, 108, 108))) + ); + + layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {checkButton, uncheckButton}); + + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(keywordTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(regexRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(exactRadioButton) + .addComponent(substringRadioButton)))) + .addComponent(toolDescriptionScrollPane)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(casesLabel) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(resultsLabel) + .addComponent(resultsCountLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(resultsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(casesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(uncheckButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(checkButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(viewErrorsButton) + .addComponent(pickCasesButton)) + .addComponent(cancelButton)) + .addContainerGap()) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap(433, Short.MAX_VALUE) + .addComponent(searchProgressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap())) + ); + }// //GEN-END:initComponents + + @Messages({ + "MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be selected to perform a search.", + "MultiCaseKeywordSearchPanel.warningText.emptySearch=You must enter something to search for in the text field." + }) + /** + * perform a search if the previous search is done or no previous search has + * occured + */ + private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed + if (null == searchThread) { + Collection cases = getCases(true); + String searchString = keywordTextField.getText(); + if (cases.isEmpty()) { + warningLabel.setText(Bundle.MultiCaseKeywordSearchPanel_warningText_noCases()); + } else if (searchString.isEmpty()) { + warningLabel.setText(Bundle.MultiCaseKeywordSearchPanel_warningText_emptySearch()); + } else { + //perform the search + warningLabel.setText(""); + allSearchHits = new ArrayList<>(); + searchExceptions = new ArrayList<>(); + searchEnabled(false); + exportButton.setEnabled(false); + outline.setRowSelectionAllowed(false); + SearchQuery kwsQuery = new SearchQuery(getQueryType(), searchString); + em.setRootContext(PLEASE_WAIT_NODE); + resultsCountLabel.setText(""); + searchThread = new SearchThread(cases, kwsQuery); + searchThread.registerWithSearcher(MultiCaseKeywordSearchPanel.this); + searchThread.start(); + } + } + }//GEN-LAST:event_searchButtonActionPerformed + + /** + * Get the cases which match the selected status specified by + * isSelected. + * + * @param isSelected true to get selected cases false to get + * unselected cases + * + * @return cases the cases that match the selected status of + * isSelected + */ + private Collection getCases(boolean isSelected) { + Collection cases = new HashSet<>(); + for (Component comp : casesPanel.getComponents()) { + if (comp instanceof JCheckBox) { + if (((AbstractButton) comp).isSelected() == isSelected) { + cases.add(((AbstractButton) comp).getText()); + } + } + } + return cases; + } + + /** + * Get the type of Query which was selected by the user. + * + * @return one of the values of the QueryType enum + */ + private QueryType getQueryType() { + String queryTypeText = ""; + Enumeration buttonGroup = searchTypeGroup.getElements(); + while (buttonGroup.hasMoreElements()) { + AbstractButton dspButton = buttonGroup.nextElement(); + if (dspButton.isSelected()) { + queryTypeText = dspButton.getText(); + break; + } + } + if (queryTypeText.equals(substringRadioButton.getText())) { + return QueryType.SUBSTRING; + } else if (queryTypeText.equals(regexRadioButton.getText())) { + return QueryType.REGEX; + } else { + //default to Exact match + return QueryType.EXACT_MATCH; + } + } + + /** + * Set the column widths to have their width influenced by the width of the + * content in them for up to the first hundred rows. + */ + private void setColumnWidths() { + int widthLimit = 1000; + int margin = 4; + int padding = 8; + for (int col = 0; col < outline.getColumnCount(); col++) { + int width = 115; //min initial width for columns + int rowsToResize = Math.min(outline.getRowCount(), 100); + for (int row = 0; row < rowsToResize; row++) { + if (outline.getValueAt(row, col) != null) { + TableCellRenderer renderer = outline.getCellRenderer(row, col); + Component comp = outline.prepareRenderer(renderer, row, col); + width = Math.max(comp.getPreferredSize().width, width); + } + + } + width += 2 * margin + padding; + width = Math.min(width, widthLimit); + TableColumn column = outline.getColumnModel().getColumn(outline.convertColumnIndexToModel(col)); + column.setPreferredWidth(width); + } + resultsScrollPane.setPreferredSize(new Dimension(outline.getPreferredSize().width, resultsScrollPane.getPreferredSize().height)); + } + + /** + * Un-select all check boxes in the cases list + * + * @param evt ignored + */ + private void uncheckButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uncheckButtonActionPerformed + allCheckboxesSetSelected(false); + }//GEN-LAST:event_uncheckButtonActionPerformed + + /** + * Select all check boxes in the cases list + * + * @param evt ignored + */ + private void checkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkButtonActionPerformed + allCheckboxesSetSelected(true); + }//GEN-LAST:event_checkButtonActionPerformed + + /** + * Cancel the current multi-case search which is being performed. + * + * @param evt ignored + */ + private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed + cancelSearch(); + }//GEN-LAST:event_cancelButtonActionPerformed + + /** + * Cancel the current multi-case search which is being performed. + */ + @Messages({ + "MultiCaseKeywordSearchPanel.searchThread.cancellingText=Cancelling search"}) + private void cancelSearch() { + if (null != searchThread) { + warningLabel.setText(Bundle.MultiCaseKeywordSearchPanel_searchThread_cancellingText()); + searchThread.interrupt(); + } + } + + @Messages({"MultiCaseKeywordSearchPanel.searchResultsExport.csvExtensionFilterlbl=Comma Separated Values File (csv)", + "MultiCaseKeywordSearchPanel.searchResultsExport.featureName=Search Results Export", + "MultiCaseKeywordSearchPanel.searchResultsExport.failedExportMsg=Export of search results failed" + }) + /** + * Export the currently displayed search results to a file specified by the + * user with data saved in comma seperated format. + */ + private void exportButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportButtonActionPerformed + JFileChooser chooser = new JFileChooser(); + final String EXTENSION = "csv"; //NON-NLS + FileNameExtensionFilter csvFilter = new FileNameExtensionFilter( + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_csvExtensionFilterlbl(), EXTENSION); + chooser.setFileFilter(csvFilter); + chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + chooser.setName("Choose file to export results to"); + chooser.setMultiSelectionEnabled(false); + int returnVal = chooser.showSaveDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + File selFile = chooser.getSelectedFile(); + if (selFile == null) { + JOptionPane.showMessageDialog(this, + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_failedExportMsg(), + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_featureName(), + JOptionPane.WARNING_MESSAGE); + LOGGER.warning("Selected file was null, when trying to export search results"); + return; + } + String fileAbs = selFile.getAbsolutePath(); + if (!fileAbs.endsWith("." + EXTENSION)) { + fileAbs = fileAbs + "." + EXTENSION; + selFile = new File(fileAbs); + } + saveResultsAsTextFile(selFile); + } + }//GEN-LAST:event_exportButtonActionPerformed + + private void viewErrorsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewErrorsButtonActionPerformed + displaySearchErrors(); + }//GEN-LAST:event_viewErrorsButtonActionPerformed + + private void pickCasesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pickCasesButtonActionPerformed + if(currentSelections != null) { + caseSelectionDialog.setNodeSelections(currentSelections); + } + caseSelectionDialog.setVisible(true); + }//GEN-LAST:event_pickCasesButtonActionPerformed + + private void substringRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_substringRadioButtonActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_substringRadioButtonActionPerformed + + /** + * Set the user interface elements to reflect whether the search feature is + * currently enabled or disabled. + * + * @param canSearch True if the search feature should be enabled, false if + * it should be disabled. + */ + private void searchEnabled(boolean canSearch) { + searchButton.setEnabled(canSearch); + cancelButton.setEnabled(!canSearch); + viewErrorsButton.setEnabled(canSearch); + viewErrorsButton.setVisible(!searchExceptions.isEmpty()); + } + + @Messages({"# {0} - file name", + "MultiCaseKeywordSearchPanel.searchResultsExport.fileExistPrompt=File {0} exists, overwrite?", + "# {0} - file name", + "MultiCaseKeywordSearchPanel.searchResultsExport.exportMsg=Search results exported to {0}" + }) + /** + * Saves the results to the file specified + */ + private void saveResultsAsTextFile(File resultsFile) { + if (resultsFile.exists()) { + //if the file already exists ask the user how to proceed + boolean shouldWrite = JOptionPane.showConfirmDialog(null, + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_fileExistPrompt(resultsFile.getName()), + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_featureName(), + JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) + == JOptionPane.YES_OPTION; + if (!shouldWrite) { + return; + } + } + try { + BufferedWriter resultsWriter; + resultsWriter = new BufferedWriter(new FileWriter(resultsFile)); + int col = 0; + //write headers + while (col < outline.getColumnCount()) { + + resultsWriter.write(outline.getColumnName(col)); + col++; + if (col < outline.getColumnCount()) { + resultsWriter.write(","); + } + } + resultsWriter.write(System.lineSeparator()); + //write data + Children resultsChildren = em.getRootContext().getChildren(); + for (int row = 0; row < resultsChildren.getNodesCount(); row++) { + col = 0; + while (col < outline.getColumnCount()) { + if (outline.getValueAt(row, col) instanceof Node.Property) { + resultsWriter.write(((Node.Property) outline.getValueAt(row, col)).getValue().toString()); + } else { + resultsWriter.write(outline.getValueAt(row, col).toString()); + } + col++; + if (col < outline.getColumnCount()) { + resultsWriter.write(","); + } + } + resultsWriter.write(System.lineSeparator()); + } + resultsWriter.flush(); + resultsWriter.close(); + setColumnWidths(); + JOptionPane.showMessageDialog( + WindowManager.getDefault().getMainWindow(), + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_exportMsg(resultsFile.getName()), + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_featureName(), + JOptionPane.INFORMATION_MESSAGE); + } catch (IllegalAccessException | IOException | InvocationTargetException ex) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_failedExportMsg(), + Bundle.MultiCaseKeywordSearchPanel_searchResultsExport_featureName(), + JOptionPane.WARNING_MESSAGE); + LOGGER.log(Level.WARNING, "Export of search results failed unable to write results csv file", ex); + } + } + + /** + * Set the selected status of all checkboxes. + * + * @param selected true if all checkboxes should be selected, false if no + * check boxes should be selected. + */ + private void allCheckboxesSetSelected(boolean selected) { + for (Component comp : casesPanel.getComponents()) { + if (comp instanceof JCheckBox) { + ((AbstractButton) comp).setSelected(selected); + } + } + } + + /** + * Ask the user if they want to continue their search while this window is + * closed. Cancels the current search if they select no. + */ + @Messages({ + "MultiCaseKeywordSearchPanel.continueSearch.text=A search is currently being performed. " + + "Would you like the search to continue in the background while the search window is closed?", + "MultiCaseKeywordSearchPanel.continueSearch.title=Closing multi-case search" + }) + void closeSearchPanel() { + if (cancelButton.isEnabled()) { + boolean shouldContinueSearch = JOptionPane.showConfirmDialog(null, + Bundle.MultiCaseKeywordSearchPanel_continueSearch_text(), + Bundle.MultiCaseKeywordSearchPanel_continueSearch_title(), + JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) + == JOptionPane.YES_OPTION; + if (!shouldContinueSearch) { + cancelSearch(); + } + } + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton cancelButton; + private javax.swing.JLabel casesLabel; + private javax.swing.JPanel casesPanel; + private javax.swing.JScrollPane casesScrollPane; + private javax.swing.JButton checkButton; + private javax.swing.JRadioButton exactRadioButton; + private javax.swing.JButton exportButton; + private javax.swing.JTextField keywordTextField; + private javax.swing.JButton pickCasesButton; + private javax.swing.JRadioButton regexRadioButton; + private javax.swing.JLabel resultsCountLabel; + private javax.swing.JLabel resultsLabel; + private javax.swing.JScrollPane resultsScrollPane; + private javax.swing.JButton searchButton; + private javax.swing.JProgressBar searchProgressBar; + private javax.swing.ButtonGroup searchTypeGroup; + private javax.swing.JRadioButton substringRadioButton; + private javax.swing.JScrollPane toolDescriptionScrollPane; + private javax.swing.JTextArea toolDescriptionTextArea; + private javax.swing.JButton uncheckButton; + private javax.swing.JButton viewErrorsButton; + private javax.swing.JLabel warningLabel; + // End of variables declaration//GEN-END:variables + + /* + * A thread that performs a keyword search of cases + */ + private final class SearchThread extends Thread { + + private final Collection caseNames; + private final SearchQuery searchQuery; + private final MultiCaseSearcher multiCaseSearcher = new MultiCaseSearcher(); + + /** + * Constructs a thread that performs a keyword search of cases + * + * @param caseNames The names of the cases to search. + * @param query The keyword search query to perform. + */ + private SearchThread(Collection caseNames, SearchQuery searchQuery) { + this.caseNames = caseNames; + this.searchQuery = searchQuery; + } + + /** + * Register an object with the MultiCaseSearcher eventBus so that the + * object's subscribe methods can receive results. + * + * @param object the object to register with the MultiCaseSearcher + */ + private void registerWithSearcher(Object object) { + multiCaseSearcher.registerWithEventBus(object); + } + + /** + * Unregister an object with the MultiCaseSearcher so that the + * object's subscribe methods no longer receive results. + * + * @param object the object to unregister with the MultiCaseSearcher + */ + private void unregisterWithSearcher(Object object) { + multiCaseSearcher.unregisterWithEventBus(object); + } + + @Override + public void interrupt() { + super.interrupt(); + //in case it is running a method which causes InterruptedExceptions to be ignored + multiCaseSearcher.stopMultiCaseSearch(); + } + + @Override + public void run() { + multiCaseSearcher.performKeywordSearch(caseNames, searchQuery, new MultiCaseKeywordSearchProgressIndicator(searchProgressBar)); + } + + } + +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchProgressIndicator.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchProgressIndicator.java new file mode 100755 index 0000000000..d63b2a1f8e --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchProgressIndicator.java @@ -0,0 +1,167 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import javax.swing.JProgressBar; +import javax.swing.SwingUtilities; +import org.sleuthkit.autopsy.progress.ProgressIndicator; + +/** + * A progress indicator that updates a JProgressBar. + */ +final class MultiCaseKeywordSearchProgressIndicator implements ProgressIndicator { + + private final JProgressBar progress; + + /** + * Construct a new JProgressIndicator + * + * @param progressBar the JProgressBar you want this indicator to update + */ + MultiCaseKeywordSearchProgressIndicator(JProgressBar progressBar) { + progress = progressBar; + progress.setStringPainted(true); + } + + /** + * Start showing progress in the progress bar. + * + * @param message the message to be displayed on the progress bar, null to + * display percent complete + * @param max The total number of work units to be completed. + */ + @Override + public void start(String message, int max) { + SwingUtilities.invokeLater(() -> { + progress.setIndeterminate(false); + progress.setMinimum(0); + progress.setString(message); //the message + progress.setValue(0); + progress.setMaximum(max); + progress.setVisible(true); + }); + } + + /** + * Start showing progress in the progress bar. + * + * @param message the message to be displayed on the progress bar, null to + * display percent complete + */ + @Override + public void start(String message) { + SwingUtilities.invokeLater(() -> { + progress.setIndeterminate(true); + progress.setMinimum(0); + progress.setString(message); + progress.setValue(0); + progress.setVisible(true); + }); + } + + /** + * Switches the progress indicator to indeterminate mode (the total number + * of work units to be completed is unknown). + * + * @param message the message to be displayed on the progress bar, null to + * display percent complete + */ + @Override + public void switchToIndeterminate(String message) { + SwingUtilities.invokeLater(() -> { + progress.setIndeterminate(true); + progress.setString(message); + }); + } + + /** + * Switches the progress indicator to determinate mode (the total number of + * work units to be completed is known). + * + * @param message the message to be displayed on the progress bar, null to + * display percent complete + * @param current The number of work units completed so far. + * @param max The total number of work units to be completed. + */ + @Override + public void switchToDeterminate(String message, int current, int max) { + SwingUtilities.invokeLater(() -> { + progress.setIndeterminate(false); + progress.setMinimum(0); + progress.setString(message); + progress.setValue(current); + progress.setMaximum(max); + }); + } + + /** + * Updates the progress indicator with a progress message. + * + * @param message the message to be displayed on the progress bar, null to + * display percent complete + */ + @Override + public void progress(String message) { + SwingUtilities.invokeLater(() -> { + progress.setString(message); + }); + } + + /** + * Updates the progress indicator with the number of work units completed so + * far when in determinate mode (the total number of work units to be + * completed is known). + * + * @param current Number of work units completed so far. + */ + @Override + public void progress(int current) { + SwingUtilities.invokeLater(() -> { + progress.setValue(current); + }); + } + + /** + * Updates the progress indicator with a progress message and the number of + * work units completed so far when in determinate mode (the total number of + * work units to be completed is known). + * + * @param message the message to be displayed on the progress bar, null to + * display percent complete + * @param current Number of work units completed so far. + */ + @Override + public void progress(String message, int current) { + SwingUtilities.invokeLater(() -> { + progress.setString(message); + progress.setValue(current); + }); + } + + /** + * Finishes the progress indicator when the task is completed. + */ + @Override + public void finish() { + SwingUtilities.invokeLater(() -> { + progress.setVisible(false); + }); + } + +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.form new file mode 100755 index 0000000000..cbd81a1c12 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.form @@ -0,0 +1,33 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.java new file mode 100755 index 0000000000..3ce6b28505 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchTopComponent.java @@ -0,0 +1,140 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import java.awt.BorderLayout; +import java.awt.Component; +import org.openide.util.NbBundle.Messages; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; +import org.openide.windows.Mode; + +@TopComponent.Description( + preferredID = "MultiCaseKeywordSearchTopComponent", + persistenceType = TopComponent.PERSISTENCE_NEVER +) +@TopComponent.Registration(mode = "multiCaseKeywordSearch", openAtStartup = false) +@Messages({ + "CTL_MultiCaseKeywordSearchTopComponentAction=Multi-case Keyword Search", + "CTL_MultiCaseKeywordSearchTopComponent=Multi-case Keyword Search"}) +/** + * A top level component for the multi case keyword search feature. + */ +final class MultiCaseKeywordSearchTopComponent extends TopComponent { + + public final static String PREFERRED_ID = "MultiCaseKeywordSearchTopComponent"; // NON-NLS + private static final long serialVersionUID = 1L; + private static boolean topComponentInitialized = false; + + @Messages({ + "MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel.",}) + /** + * Open the top level component if it is not already open, if it is open + * bring it to the front and select it. + */ + static void openTopComponent() { + final MultiCaseKeywordSearchTopComponent tc = (MultiCaseKeywordSearchTopComponent) WindowManager.getDefault().findTopComponent(PREFERRED_ID); + if (tc != null) { + if (tc.isOpened() == false) { + topComponentInitialized = true; + Mode mode = WindowManager.getDefault().findMode("multiCaseKeywordSearch"); // NON-NLS + if (mode != null) { + mode.dockInto(tc); + } + tc.open(); + } + tc.toFront(); + tc.requestActive(); + } + } + + /** + * Close the top level componet. + */ + static void closeTopComponent() { + if (topComponentInitialized) { + final TopComponent tc = WindowManager.getDefault().findTopComponent(PREFERRED_ID); + if (tc != null) { + try { + tc.close(); + } catch (Exception e) { + + } + } + } + } + + @Messages({"MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search"}) + /** + * Construct a new "MultiCaseKeywordSearchTopComponent. + */ + MultiCaseKeywordSearchTopComponent() { + initComponents(); + setName(Bundle.MultiCaseKeywordSearchTopComponent_name_text()); + setDisplayName(Bundle.MultiCaseKeywordSearchTopComponent_name_text()); + setToolTipText(Bundle.MultiCaseKeywordSearchTopComponent_name_text()); + setSize(this.getPreferredSize()); + setLayout(new BorderLayout()); + MultiCaseKeywordSearchPanel searchPanel = new MultiCaseKeywordSearchPanel(); + searchPanel.setSize(searchPanel.getPreferredSize()); + searchPanel.setVisible(true); + add(searchPanel); + } + + @Override + public void componentOpened() { + super.componentOpened(); + WindowManager.getDefault().setTopComponentFloating(this, true); + } + + @Override + public boolean canClose() { + for (Component component : getComponents()) { + if (component instanceof MultiCaseKeywordSearchPanel) { + ((MultiCaseKeywordSearchPanel) component).closeSearchPanel(); + } + } + return super.canClose(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + setPreferredSize(new java.awt.Dimension(1002, 444)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 902, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 444, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java new file mode 100755 index 0000000000..ab0bbfc296 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java @@ -0,0 +1,845 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import com.google.common.eventbus.EventBus; +import java.io.File; +import java.io.IOException; +import java.nio.file.LinkOption; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import org.apache.commons.lang.StringUtils; +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.SolrRequest; +import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.impl.HttpSolrServer; +import org.apache.solr.client.solrj.request.CoreAdminRequest; +import org.apache.solr.client.solrj.response.CoreAdminResponse; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.common.SolrDocument; +import org.apache.solr.common.SolrDocumentList; +import org.apache.solr.common.params.CoreAdminParams; +import org.apache.solr.common.params.CursorMarkParams; +import org.openide.util.NbBundle; +import org.sleuthkit.autopsy.casemodule.CaseMetadata; +import org.sleuthkit.autopsy.coordinationservice.CoordinationService; +import org.sleuthkit.autopsy.core.UserPreferences; +import org.sleuthkit.autopsy.core.UserPreferencesException; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.UNCPathUtilities; +import org.sleuthkit.autopsy.keywordsearch.Server; +import org.sleuthkit.autopsy.progress.ProgressIndicator; +import org.sleuthkit.datamodel.AbstractFile; +import org.sleuthkit.datamodel.BlackboardArtifact; +import org.sleuthkit.datamodel.CaseDbConnectionInfo; +import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.TskCoreException; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +/** + * Performs keyword searches across multiple cases + */ +final class MultiCaseSearcher { + + private static final String CASE_AUTO_INGEST_LOG_NAME = "AUTO_INGEST_LOG.TXT"; //NON-NLS + private static final String SEARCH_COMPLETE_MESSAGE = "SEARCH_COMPLETE"; + private static final String RESOURCES_LOCK_SUFFIX = "_RESOURCES"; //NON-NLS + private static final int CASE_DIR_READ_LOCK_TIMEOUT_HOURS = 12; //NON-NLS + private static final String SOLR_SERVER_URL_FORMAT_STRING = "http://%s:%s/solr"; //NON-NLS + private static final String SOLR_CORE_URL_FORMAT_STRING = "http://%s:%s/solr/%s"; //NON-NLS + private final static String SOLR_METADATA_FILE_NAME = "SolrCore.properties"; //NON-NLS + private static final String SOLR_CORE_NAME_XPATH = "/SolrCores/Core/CoreName/text()"; //NON-NLS + private static final String TEXT_INDEX_NAME_XPATH = "/SolrCores/Core/TextIndexPath/text()"; //NON-NLS + private static final String SOLR_CORE_INSTANCE_PATH_PROPERTY = "instanceDir"; //NON-NLS + private static final String SOLR_CONFIG_SET_NAME = "AutopsyConfig"; //NON-NLS + private static final int MAX_RESULTS_PER_CURSOR_MARK = 512; + private static final String SOLR_DOC_ID_FIELD = Server.Schema.ID.toString(); //NON-NLS + private static final String SOLR_DOC_CONTENT_STR_FIELD = Server.Schema.CONTENT_STR.toString(); //NON-NLS + private static final String SOLR_DOC_CHUNK_SIZE_FIELD = Server.Schema.CHUNK_SIZE.toString(); //NON-NLS + private static final String SOLR_DOC_ID_PARTS_SEPARATOR = "_"; + private static final Logger logger = Logger.getLogger(MultiCaseSearcher.class.getName()); + private final EventBus eventBus = new EventBus("MultiCaseSearcherEventBus"); + private static final UNCPathUtilities pathUtils = new UNCPathUtilities(); + private volatile boolean searchStopped = true; + + MultiCaseSearcher() { + + } + + static String getSearchCompleteMessage() { + return SEARCH_COMPLETE_MESSAGE; + } + + /** + * + * Performs keyword searches across multiple cases + * + * @param caseNames The names of the cases to search. + * @param query The keyword search query to perform. + * @param progressIndicator A progrss indicator for the search. + * + * @return The search results. + * + * @throws MultiCaseSearcherException + * @throws InterruptedException + */ + @NbBundle.Messages({ + "MultiCaseSearcher.progressMessage.findingCases=Finding selected cases", + "MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server", + "# {0} - total cases", + "MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s)", + "# {0} - case name", + "# {1} - case counter", + "# {2} - total cases", + "MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for \"{0}\" ({1} of {2} case(s))", + "# {0} - case name", + "# {1} - case counter", + "# {2} - total cases", + "MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for \"{0}\" ({1} of {2} case(s))", + "# {0} - case name", + "# {1} - case counter", + "# {2} - total cases", + "MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for \"{0}\" ({1} of {2} case(s))", + "# {0} - case name", + "# {1} - case counter", + "# {2} - total cases", + "MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for \"{0}\" ({1} of {2} case(s))", + "# {0} - case directory path", + "MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0}", + "MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled" + }) + void performKeywordSearch(final Collection caseNames, final SearchQuery query, final ProgressIndicator progressIndicator) { + progressIndicator.start(Bundle.MultiCaseSearcher_progressMessage_findingCases()); + try { + searchStopped = false; //mark the search as started + final List caseMetadata = getMultiCaseMetadata(caseNames); + checkForCancellation(); + //eventBus.post("number of cases to search determined"); + progressIndicator.progress(Bundle.MultiCaseSearcher_progressMessage_creatingSolrQuery()); + final SolrQuery solrQuery = createSolrQuery(query); + checkForCancellation(); + final int totalCases = caseMetadata.size(); + int caseCounter = 1; + progressIndicator.progress(Bundle.MultiCaseSearcher_progressMessage_startingCaseSearches(totalCases)); + int totalSteps = 5; + progressIndicator.switchToDeterminate(Bundle.MultiCaseSearcher_progressMessage_startingCaseSearches(totalCases), 0, totalCases * totalSteps); + int caseNumber = 0; + for (MultiCaseMetadata aCase : caseMetadata) { + CaseMetadata metadata = aCase.getCaseMetadata(); + String caseName = metadata.getCaseDisplayName(); + SleuthkitCase caseDatabase = null; + + int stepsCompleted = 0; + progressIndicator.progress(Bundle.MultiCaseSearcher_progressMessage_acquiringSharedLockForCase(caseName, caseCounter, totalCases), stepsCompleted + caseNumber * totalSteps); + try (CoordinationService.Lock caseDirReadLock = CoordinationService.getInstance().tryGetSharedLock(CoordinationService.CategoryNode.CASES, aCase.getCaseMetadata().getCaseDirectory(), CASE_DIR_READ_LOCK_TIMEOUT_HOURS, TimeUnit.HOURS)) { + if (null == caseDirReadLock) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToGetCaseDirReadlock(aCase.getCaseMetadata().getCaseDirectory())); + } + checkForCancellation(); + ++stepsCompleted; + progressIndicator.progress(Bundle.MultiCaseSearcher_progressMessage_loadingSolrCoreForCase(caseName, caseCounter, totalCases), stepsCompleted + caseNumber * totalSteps); + final HttpSolrServer solrServer = loadSolrCoreForCase(aCase); + checkForCancellation(); + ++stepsCompleted; + progressIndicator.progress(Bundle.MultiCaseSearcher_progressMessage_openingCaseDbForCase(caseName, caseCounter, totalCases), stepsCompleted + caseNumber * totalSteps); + caseDatabase = openCase(aCase); + checkForCancellation(); + ++stepsCompleted; + progressIndicator.progress(Bundle.MultiCaseSearcher_progressMessage_executingSolrQueryForCase(caseName, caseCounter, totalCases), stepsCompleted + caseNumber * totalSteps); + eventBus.post(executeQuery(solrServer, solrQuery, caseDatabase, aCase)); + ++stepsCompleted; + + progressIndicator.progress(stepsCompleted + caseNumber * totalSteps); + ++caseCounter; + } catch (CoordinationService.CoordinationServiceException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToGetCaseDirReadlock(aCase.getCaseMetadata().getCaseDirectory()), ex); + } catch (MultiCaseSearcherException exception) { + logger.log(Level.INFO, "Exception encountered while performing multi-case keyword search", exception); + eventBus.post(exception); + } finally { + if (null != caseDatabase) { + closeCase(caseDatabase); + } + } + caseNumber++; + } + } catch (InterruptedException exception) { + logger.log(Level.INFO, Bundle.MultiCaseSearcher_exceptionMessage_cancelledMessage(), exception); + eventBus.post(exception); + } catch (MultiCaseSearcherException exception) { + logger.log(Level.WARNING, "Exception encountered while performing multi-case keyword search", exception); + eventBus.post(new InterruptedException("Exception encountered while performing multi-case keyword search")); + eventBus.post(exception); + } finally { + progressIndicator.finish(); + eventBus.post(SEARCH_COMPLETE_MESSAGE); + } + } + + /** + * Gets metadata for the cases associated with one or more with the search + * + * @param caseNames The names of the cases to search. + * + * @return The metadata for the cases. + * + * @throws MultiCaseSearcherException + * @throws InterruptedException + */ + private List getMultiCaseMetadata(final Collection caseNames) throws MultiCaseSearcherException, InterruptedException { + final Map casesToCasePaths = getCaseDirectories(caseNames); + checkForCancellation(); + final List cases = new ArrayList<>(); + for (Map.Entry entry : casesToCasePaths.entrySet()) { + final Path caseDirectoryPath = entry.getKey(); + final CaseMetadata caseMetadata = getCaseMetadata(caseDirectoryPath); + checkForCancellation(); + final TextIndexMetadata textIndexMetadata = getTextIndexMetadata(caseDirectoryPath); + checkForCancellation(); + cases.add(new MultiCaseMetadata(caseMetadata, textIndexMetadata)); + } + return cases; + } + + /** + * Uses coordination service data to find the case directories of the cases. + * + * @param caseNames The names of the cases. + * + * @return A mapping of case directory paths to case names, + * possibly empty. + * + * @throws MultiCaseSearcherException + * @throws InterruptedException + */ + @NbBundle.Messages({ + "# {0} - host", "# {1} - port", "MultiCaseSearcher.exceptionMessage.failedToQueryCoordinationServer=Failed to obtain read lock for case directory at {0}:{1}", + "# {0} - list of cases", "MultiCaseSearcher.exceptionMessage.noCasesFound=No cases found for: {0}" + }) + private Map getCaseDirectories(final Collection caseNames) throws MultiCaseSearcherException, InterruptedException { + final Map casePathToCaseMap = new HashMap<>(); + final List caseNodeNames; + try { + CoordinationService coordinationService = CoordinationService.getInstance(); + caseNodeNames = coordinationService.getNodeList(CoordinationService.CategoryNode.CASES); + } catch (CoordinationService.CoordinationServiceException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToQueryCoordinationServer(UserPreferences.getIndexingServerHost(), UserPreferences.getIndexingServerPort()), ex); + } + for (String nodeName : caseNodeNames) { + /* + * Find the case directory paths by + * selecting each coordination service case directory lock node path + * that has the case name in the path. + */ + checkForCancellation(); + final Path caseDirectoryPath = Paths.get(nodeName); + boolean contansSlash = caseDirectoryPath.toString().contains("\\") || caseDirectoryPath.toString().contains("//"); + if (!contansSlash) { + /* + * Skip case name lock nodes. + */ + continue; + } + final String fileName = caseDirectoryPath.getFileName().toString(); + if (fileName.equals(CASE_AUTO_INGEST_LOG_NAME) || fileName.endsWith(RESOURCES_LOCK_SUFFIX)) { + /* + * Skip case auto ingest log and case resource lock nodes. + */ + continue; + } + for (String aCase : caseNames) { + checkForCancellation(); + final String normalizedCaseName = aCase.toUpperCase(); + if (fileName.contains(normalizedCaseName)) { + logger.log(Level.INFO, "Match found: Case node name {0} contains case name {1}", new Object[]{nodeName, normalizedCaseName}); + try { + Path realCaseDirectoryPath = caseDirectoryPath.toRealPath(LinkOption.NOFOLLOW_LINKS); + logger.log(Level.INFO, "Case directory path {0} resolves to real path {1}", new Object[]{caseDirectoryPath, realCaseDirectoryPath}); + final File caseDirectory = realCaseDirectoryPath.toFile(); + if (caseDirectory.exists()) { + casePathToCaseMap.put(realCaseDirectoryPath, aCase); + } else { + logger.log(Level.SEVERE, String.format("Case directory %s does NOT exist", caseDirectoryPath)); + } + } catch (IOException ex) { + logger.log(Level.SEVERE, String.format("Case directory path %s does NOT resolve to a real path", caseDirectoryPath), ex); + } + break; + } + } + } + if (casePathToCaseMap.isEmpty()) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_noCasesFound(StringUtils.join(caseNames, ','))); + } + return casePathToCaseMap; + } + + /** + * Gets the metadata for a case from the case metadata file in a given case + * directory. + * + * @param caseDirectoryPath A case directory path. + * + * @return The case metadata. + * + * @throws MultiCaseSearcherException + */ + @NbBundle.Messages({ + "# {0} - case directory", "MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0}", + "# {0} - case directory", "MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0}" + }) + + private static CaseMetadata getCaseMetadata(Path caseDirectoryPath) throws MultiCaseSearcherException { + CaseMetadata caseMetadata = null; + final File[] caseFiles = caseDirectoryPath.toFile().listFiles(); + for (File file : caseFiles) { + final String fileName = file.getName().toLowerCase(); + if (fileName.endsWith(CaseMetadata.getFileExtension())) { + try { + return new CaseMetadata(file.toPath()); + } catch (CaseMetadata.CaseMetadataException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToParseCaseMetadata(caseDirectoryPath), ex); + } + } + } + if (null == caseMetadata) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToFindCaseMetadata(caseDirectoryPath)); + } + return caseMetadata; + } + + /** + * Gets the text index metadata from the Solr.properties file in a given + * case directory. + * + * @param caseDirectoryPath A case directory path. + * + * @return The text index metadata. + * + * @throws MultiCaseSearcherException + */ + @NbBundle.Messages({ + "# {0} - file name", "# {1} - case directory", "MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1}", + "# {0} - file name", "# {1} - case directory", "MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1}",}) + private static TextIndexMetadata getTextIndexMetadata(Path caseDirectoryPath) throws MultiCaseSearcherException { + final Path solrMetaDataFilePath = Paths.get(caseDirectoryPath.toString(), SOLR_METADATA_FILE_NAME); + final File solrMetaDataFile = solrMetaDataFilePath.toFile(); + if (!solrMetaDataFile.exists() || !solrMetaDataFile.canRead()) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_missingSolrPropertiesFile(SOLR_METADATA_FILE_NAME, caseDirectoryPath)); + } + try { + final DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + final Document doc = docBuilder.parse(solrMetaDataFile); + final XPath xPath = XPathFactory.newInstance().newXPath(); + XPathExpression xPathExpr = xPath.compile(SOLR_CORE_NAME_XPATH); + final String solrCoreName = (String) xPathExpr.evaluate(doc, XPathConstants.STRING); + xPathExpr = xPath.compile(TEXT_INDEX_NAME_XPATH); + final String relativeTextIndexPath = (String) xPathExpr.evaluate(doc, XPathConstants.STRING); + Path textIndexPath = caseDirectoryPath.resolve(relativeTextIndexPath); + textIndexPath = textIndexPath.getParent(); // Remove "index" path component + final String textIndexUNCPath = pathUtils.convertPathToUNC(textIndexPath.toString()); + return new TextIndexMetadata(caseDirectoryPath, solrCoreName, textIndexUNCPath); + } catch (ParserConfigurationException | SAXException | XPathExpressionException | IOException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_solrPropertiesFileParseError(SOLR_METADATA_FILE_NAME, caseDirectoryPath), ex); + } + } + + /** + * Converts a keyword search query into a Solr query. + * + * @param searchQuery A keyword search query. + * + * @return A Solr query. + */ + private static SolrQuery createSolrQuery(SearchQuery searchQuery) { + final SolrQuery solrQuery = new SolrQuery(); + solrQuery.setQuery(searchQuery.getSearchTerm()); + solrQuery.setRows(MAX_RESULTS_PER_CURSOR_MARK); + /* + * Note that setting the sort order is necessary for cursor based paging + * to work. + */ + solrQuery.setSort(SolrQuery.SortClause.asc(SOLR_DOC_ID_FIELD)); + solrQuery.setFields(SOLR_DOC_ID_FIELD, SOLR_DOC_CHUNK_SIZE_FIELD, SOLR_DOC_CONTENT_STR_FIELD); + return solrQuery; + } + + /** + * Connects to the Solr server and loads the Solr core for a given case. + * + * @param aCase + * + * @return A Solr server client object that can be used for executing + * queries of the specified text index. + * + * MultiCaseSearcherException + * + * @throws InterruptedException + */ + @NbBundle.Messages({ + "# {0} - connection info", + "# {1} - case name", + "# {2} - case directory", + "MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2}" + }) + private HttpSolrServer loadSolrCoreForCase(MultiCaseMetadata aCase) throws MultiCaseSearcherException, InterruptedException { + TextIndexMetadata textIndexMetadata = aCase.getTextIndexMetadata(); + Server.IndexingServerProperties indexServer = Server.getMultiUserServerProperties(aCase.getCaseMetadata().getCaseDirectory()); + final String serverURL = String.format(SOLR_SERVER_URL_FORMAT_STRING, indexServer.getHost(), indexServer.getPort()); + try { + /* + * Connect to the Solr server. + */ + final HttpSolrServer solrServer = new HttpSolrServer(serverURL); + CoreAdminRequest statusRequest = new CoreAdminRequest(); + statusRequest.setCoreName(null); + statusRequest.setAction(CoreAdminParams.CoreAdminAction.STATUS); + statusRequest.setIndexInfoNeeded(false); + checkForCancellation(); + statusRequest.process(solrServer); + checkForCancellation(); + + /* + * Load the core for the text index if it is not already loaded. + */ + CoreAdminResponse response = CoreAdminRequest.getStatus(textIndexMetadata.getSolrCoreName(), solrServer); + if (null == response.getCoreStatus(textIndexMetadata.getSolrCoreName()).get(SOLR_CORE_INSTANCE_PATH_PROPERTY)) { + CoreAdminRequest.Create loadCoreRequest = new CoreAdminRequest.Create(); + loadCoreRequest.setDataDir(textIndexMetadata.getTextIndexPath()); + loadCoreRequest.setCoreName(textIndexMetadata.getSolrCoreName()); + loadCoreRequest.setConfigSet(SOLR_CONFIG_SET_NAME); + loadCoreRequest.setIsLoadOnStartup(false); + loadCoreRequest.setIsTransient(true); + solrServer.request(loadCoreRequest); + } + + /* + * Create a server client object that can be used for executing + * queries of the specified text index. + */ + final String coreURL = String.format(SOLR_CORE_URL_FORMAT_STRING, indexServer.getHost(), indexServer.getPort(), textIndexMetadata.getSolrCoreName()); + final HttpSolrServer coreServer = new HttpSolrServer(coreURL); + return coreServer; + + } catch (SolrServerException | IOException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_errorLoadingCore(serverURL, aCase.getCaseMetadata().getCaseName(), textIndexMetadata.getCaseDirectoryPath()), ex); + } + } + + /** + * Opens a case database. + * + * @param caseMetadata + * + * @return A case database. + * + * @throws MultiCaseSearcherException + * @throws InterruptedException + */ + @NbBundle.Messages({ + "# {0} - case_name", + "MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0}", + "# {0} - PostgreSQL server host", + "# {1} - PostgreSQL server port", + "# {2} - case database name", + "# {3} - case directory", + "MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3}" + }) + private SleuthkitCase openCase(MultiCaseMetadata aCase) throws MultiCaseSearcherException, InterruptedException { + CaseDbConnectionInfo dbConnectionInfo; + try { + dbConnectionInfo = UserPreferences.getDatabaseConnectionInfo(); + } catch (UserPreferencesException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToGetCaseDatabaseConnectionInfo(aCase.getCaseMetadata().getCaseName()), ex); + } + checkForCancellation(); + final CaseMetadata caseMetadata = aCase.getCaseMetadata(); + try { + return SleuthkitCase.openCase(caseMetadata.getCaseDatabaseName(), UserPreferences.getDatabaseConnectionInfo(), caseMetadata.getCaseDirectory()); + } catch (UserPreferencesException | TskCoreException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_errorOpeningCaseDatabase(dbConnectionInfo.getHost(), dbConnectionInfo.getPort(), caseMetadata.getCaseDatabaseName(), caseMetadata.getCaseDirectory()), ex); + } + } + + /** + * Closes a case database. + * + * @param aCase a case database. + */ + private static void closeCase(SleuthkitCase aCase) { + aCase.close(); + } + + /** + * Executes a keyword search searchTerm in the text index of a case. + * + * @param solrServer The Solr server. + * @param solrQuery The Solr searchTerm. + * @param caseDatabase The case database. + * @param aCase The case metadata. + * + * @return A list of search results, possibly empty. + * + * @throws MultiCaseSearcherException + * @throws InterruptedException + */ + @NbBundle.Messages({ + "# {0} - query", + "# {1} - case_name", + "MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query \"{0}\" on case {1}" + }) + private Collection executeQuery(HttpSolrServer solrServer, SolrQuery solrQuery, SleuthkitCase caseDatabase, MultiCaseMetadata aCase) throws MultiCaseSearcherException, InterruptedException { + final List hits = new ArrayList<>(); + final Set uniqueObjectIds = new HashSet<>(); + String cursorMark = CursorMarkParams.CURSOR_MARK_START; + boolean allResultsProcessed = false; + while (!allResultsProcessed) { + checkForCancellation(); + solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark); + QueryResponse response; + try { + checkForCancellation(); + response = solrServer.query(solrQuery, SolrRequest.METHOD.POST); + } catch (SolrServerException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_solrQueryError(solrQuery.getQuery(), aCase.getCaseMetadata().getCaseName()), ex); + } + SolrDocumentList resultDocuments = response.getResults(); + for (SolrDocument resultDoc : resultDocuments) { + checkForCancellation(); + String solrDocumentId = resultDoc.getFieldValue(SOLR_DOC_ID_FIELD).toString(); + Long solrObjectId = parseSolrObjectId(solrDocumentId); + if (!uniqueObjectIds.contains(solrObjectId)) { + uniqueObjectIds.add(solrObjectId); + checkForCancellation(); + hits.add(processHit(solrObjectId, caseDatabase, aCase)); + } + } + checkForCancellation(); + String nextCursorMark = response.getNextCursorMark(); + if (cursorMark.equals(nextCursorMark)) { + allResultsProcessed = true; + } + cursorMark = nextCursorMark; + } + return hits; + } + + /** + * Parses a Solr document id to get the Solr object id. + * + * @param solrDocumentId A Solr document id. + * + * @return A Solr object id. + */ + private static Long parseSolrObjectId(String solrDocumentId) { + /** + * A Solr document id is of the form [solr_object_id] for Content object + * metadata documents and + * [solr_object_id][SOLR_DOC_ID_PARTS_SEPARATOR][chunk_id] for Content + * object text chunk documents. + */ + final String[] solrDocumentIdParts = solrDocumentId.split(SOLR_DOC_ID_PARTS_SEPARATOR); + if (1 == solrDocumentIdParts.length) { + return Long.parseLong(solrDocumentId); + } else { + return Long.parseLong(solrDocumentIdParts[0]); + } + } + + /** + * Creates a keyword search hit object for a Content object identified by + * its Solr object id. + * + * @param solrObjectId The Solr object id of a Content object. + * @param caseDatabase The case database of the case that has the + * Content. + * @param caseInfo Metadata about the case that has the content. + * + * @return + * + * @throws MultiCaseSearcherException + */ + @NbBundle.Messages({ + "# {0} - Solr document id", + "# {1} - case database name", + "# {2} - case directory", + "MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2}" + }) + + private static SearchHit processHit(Long solrObjectId, SleuthkitCase caseDatabase, MultiCaseMetadata caseInfo) throws MultiCaseSearcherException { + try { + final long objectId = getObjectIdForSolrObjectId(solrObjectId, caseDatabase); + final CaseMetadata caseMetadata = caseInfo.getCaseMetadata(); + final String caseDisplayName = caseMetadata.getCaseDisplayName(); + final String caseDirectoryPath = caseMetadata.getCaseDirectory(); + final Content content = caseDatabase.getContentById(objectId); + final Content dataSource = content.getDataSource(); + final String dataSourceName = dataSource.getName(); + SearchHit.SourceType sourceType = SearchHit.SourceType.FILE; + String sourceName = ""; + String sourcePath = ""; + if (content instanceof AbstractFile) { + AbstractFile sourceFile = (AbstractFile) content; + sourceName = sourceFile.getName(); + sourcePath = sourceFile.getLocalAbsPath(); + if (null == sourcePath) { + sourceType = SearchHit.SourceType.FILE; + sourcePath = sourceFile.getUniquePath(); + } else { + sourceType = SearchHit.SourceType.LOCAL_FILE; + sourceName = sourceFile.getName(); + } + } else if (content instanceof BlackboardArtifact) { + BlackboardArtifact sourceArtifact = (BlackboardArtifact) content; + sourceType = SearchHit.SourceType.ARTIFACT; + BlackboardArtifact.Type artifactType = caseDatabase.getArtifactType(sourceArtifact.getArtifactTypeName()); + sourceName = artifactType.getDisplayName(); + Content source = sourceArtifact.getParent(); + if (source instanceof AbstractFile) { + AbstractFile sourceFile = (AbstractFile) source; + sourcePath = sourceFile.getLocalAbsPath(); + if (null == sourcePath) { + sourcePath = sourceFile.getUniquePath(); + } + } else { + sourcePath = source.getUniquePath(); + } + } + return new SearchHit(caseDisplayName, caseDirectoryPath, dataSourceName, sourceType, sourceName, sourcePath); + } catch (SQLException | TskCoreException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_hitProcessingError(solrObjectId, caseInfo.getCaseMetadata().getCaseName(), caseInfo.getCaseMetadata().getCaseDirectory()), ex); + } + } + + /** + * Gets the Sleuthkit object id that corresponds to the Solr object id of + * some content. + * + * @param solrObjectId A solr object id for some content. + * @param caseDatabase The case database for the case that includes the + * content. + * + * @return The Sleuthkit object id of the content. + * + * @throws MultiCaseSearcherException + * @throws TskCoreException + * @throws SQLException + */ + private static long getObjectIdForSolrObjectId(long solrObjectId, SleuthkitCase caseDatabase) throws MultiCaseSearcherException, TskCoreException, SQLException { + if (0 < solrObjectId) { + return solrObjectId; + } else { + try (SleuthkitCase.CaseDbQuery databaseQuery = caseDatabase.executeQuery("SELECT artifact_obj_id FROM blackboard_artifacts WHERE artifact_id = " + solrObjectId)) { + final ResultSet resultSet = databaseQuery.getResultSet(); + if (resultSet.next()) { + return resultSet.getLong("artifact_obj_id"); + } else { + throw new TskCoreException("Empty result set getting obj_id for artifact with artifact_id =" + solrObjectId); + } + } + } + } + + /** + * Checks to see if the current thread has been interrupted (i.e, the search + * has been cancelled) and throws an InterruptedException if it has been. + * + * @throws InterruptedException + */ + private void checkForCancellation() throws InterruptedException { + if (Thread.currentThread().isInterrupted() || searchStopped) { + throw new InterruptedException("Search Cancelled"); + } + } + + /** + * A bundle of metadata for a case. + */ + private final static class MultiCaseMetadata { + + private final CaseMetadata caseMetadata; + private final TextIndexMetadata textIndexMetadata; + + /** + * Contructs a bundle of metadata for a case + * + * @param caseMetadata The case metadata. + * @param textIndexMetaData The text index metadata for the case. + */ + private MultiCaseMetadata(CaseMetadata caseMetadata, TextIndexMetadata textIndexMetaData) { + this.caseMetadata = caseMetadata; + this.textIndexMetadata = textIndexMetaData; + } + + /** + * Gets the case metadata. + * + * @return The case metadata. + */ + private CaseMetadata getCaseMetadata() { + return this.caseMetadata; + } + + /** + * Gets the text index metadata for the case. + * + * @return The text index metadata. + */ + private TextIndexMetadata getTextIndexMetadata() { + return this.textIndexMetadata; + } + + } + + /** + * Bundles a case directory path, a Solr core fileName, and a text index UNC + * path. + */ + private final static class TextIndexMetadata { + + private final Path caseDirectoryPath; + private final String solrCoreName; + private final String textIndexUNCPath; + + /** + * Constructs an object that bundles a Solr core fileName and a text + * index UNC path. + * + * @param caseDirectoryPath The case directory path. + * @param solrCoreName The core fileName. + * @param textIndexUNCPath The text index path. + */ + private TextIndexMetadata(Path caseDirectoryPath, String solrCoreName, String textIndexUNCPath) { + this.caseDirectoryPath = caseDirectoryPath; + this.solrCoreName = solrCoreName; + this.textIndexUNCPath = textIndexUNCPath; + } + + /** + * Gets the case directory path. + * + * @return The path. + */ + private Path getCaseDirectoryPath() { + return this.caseDirectoryPath; + } + + /** + * Gets the Solr core fileName. + * + * @return The Solr core fileName. + */ + private String getSolrCoreName() { + return this.solrCoreName; + } + + /** + * + * Gets the UNC path of the text index. + * + * @return The path. + */ + private String getTextIndexPath() { + return this.textIndexUNCPath; + } + + } + + /** + * Exception thrown if there is an error executing a search. + */ + static final class MultiCaseSearcherException extends Exception { + + private static final long serialVersionUID = 1L; + + /** + * Constructs an instance of the exception thrown if there is an error + * executing a search. + * + * @param message The exception message. + */ + private MultiCaseSearcherException(String message) { + super(message); + } + + /** + * Constructs an instance of the exception thrown if there is an error + * executing a search. + * + * @param message The exception message. + * @param cause The Throwable that caused the error. + */ + private MultiCaseSearcherException(String message, Throwable cause) { + super(message, cause); + } + + } + + /** + * Tell the MultiCaseSearcher that it's current search can be stopped the + * next time it checks for cancellation. + */ + void stopMultiCaseSearch() { + //This is necessary because if the interrupt occurs during CoreAdminRequest.process, + //CoreAdminRequest.getStatus, or HttpSolrServer.query the interrupt gets ignored + searchStopped = true; + } + + /** + * Register an object with the MultiCaseSearcher eventBus so that it's + * subscribe methods can receive results. + * + * @param object the object to register with the eventBus + */ + void registerWithEventBus(Object object) { + eventBus.register(object); + } + + /** + * Unregister an object with the MultiCaseSearcher eventBus so that it's + * subscribe methods no longer receive results. + * + * @param object the object to unregister with the eventBus + */ + void unregisterWithEventBus(Object object) { + eventBus.unregister(object); + } + +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java new file mode 100755 index 0000000000..975d96094b --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java @@ -0,0 +1,137 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import javax.annotation.concurrent.Immutable; + +/** + * A keyword search hit from a multi-case keyword search. + */ +@Immutable +final class SearchHit { + + private final String caseDisplayName; + private final String caseDirectoryPath; + private final String dataSourceName; + private final SourceType sourceType; + private final String sourceName; + private final String sourcePath; + + /** + * Constructs a keyword search hit from a multi-case search. + * + * @param caseDisplayName The display name of the case where the hit occurred. + * @param caseDirectoryPath The path of the directory of the case where the hit occurred. + * @param dataSourceName The name of the data source within the case + * where the hit occurred. + * @param sourceType The type of the source content object. + * @param sourceName The name of the source, e.g., a file name, an + * artifact type name, or a report module name. + * @param sourcePath The path of the source content, or the path of + * the parent source content object for an artifact + * source. + */ + SearchHit(String caseDisplayName, String caseDirectoryPath, String dataSourceName, SourceType sourceType, String sourceName, String sourcePath) { + this.caseDisplayName = caseDisplayName; + this.caseDirectoryPath = caseDirectoryPath; + this.dataSourceName = dataSourceName; + this.sourceType = sourceType; + this.sourceName = sourceName; + this.sourcePath = sourcePath; + } + + /** + * Gets the display name of the case where the hit + * occurred. + * + * @return The case display name. + */ + String getCaseDisplayName() { + return this.caseDisplayName; + } + + /** + * Gets the path of the directory of the case where + * the hit occurred. + * + * @return The case directory path. + */ + String getCaseDirectoryPath() { + return this.caseDirectoryPath; + } + + /** + * Gets the name of the data source within the case where the hit occurred. + * + * @return + */ + String getDataSourceName() { + return this.dataSourceName; + } + + /** + * Gets the type of the source content object. + * + * @return The source type. + */ + SourceType getSourceType() { + return this.sourceType; + } + + /** + * Gets the name of the source, e.g., a file name, an artifact type name, or + * a report module name. + * + * @return The source name. + */ + String getSourceName() { + return this.sourceName; + } + + /** + * Gets the path of the source content, or the path of the parent source + * content object for an artifact source. + * + * @return The source object path. + */ + String getSourcePath() { + return this.sourcePath; + } + + /** + * An enumeration of the source types for keyword search hits. + */ + enum SourceType { + FILE("File"), + LOCAL_FILE("Local File"), + ARTIFACT("Artifact"), + REPORT("Report"); + + private final String displayName; + + private SourceType(String displayName) { + this.displayName = displayName; + } + + String getDisplayName() { + return this.displayName; + } + } + +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchQuery.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchQuery.java new file mode 100755 index 0000000000..89b224e06c --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchQuery.java @@ -0,0 +1,156 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import javax.annotation.concurrent.Immutable; +import org.sleuthkit.autopsy.keywordsearch.Server; + +/** + * A keyword search query. + */ +@Immutable +final class SearchQuery { + + private static final String SEARCH_TERM_CHARS_TO_ESCAPE = "/+-&|!(){}[]^\"~*?:\\"; + private static final String SOLR_DOC_CONTENT_STR_FIELD = Server.Schema.CONTENT_STR.toString(); //NON-NLS + private final String searchTerm; + + /** + * Constructs a multicase keyword search query. + * + * @param queryType The query type. + * @param searchTerm The search term for the query. + */ + SearchQuery(QueryType queryType, String searchTerm) { + switch (queryType) { + case EXACT_MATCH: + this.searchTerm = prepareExactMatchSearchTerm(searchTerm); + break; + case SUBSTRING: + this.searchTerm = prepareSubstringSearchTerm(searchTerm); + break; + case REGEX: + this.searchTerm = prepareRegexSearchTerm(searchTerm); + break; + default: + this.searchTerm = searchTerm; + break; + } + } + + /** + * Gets the search term. + * + * @return The query. + */ + String getSearchTerm() { + return searchTerm; + } + + /** + * Escapes and quotes a given search term as required for an exact match + * search query. + * + * @param searchTerm A "raw" input search term. + * + * @return A search term suitable for an exact match query. + */ + private static String prepareExactMatchSearchTerm(String searchTerm) { + String escapedSearchTerm = escapeSearchTerm(searchTerm); + if (!searchTerm.startsWith("\"")) { + escapedSearchTerm = "\"" + escapedSearchTerm; + } + if (!searchTerm.endsWith("\"")) { + escapedSearchTerm += "\""; + } + return escapedSearchTerm; + } + + /** + * Adds delimiters and possibly wildcards to a given search terms as + * required for a regular expression search query. + * + * @param searchTerm A "raw" input search term. + * + * @return A search term suitable for a regex query. + */ + private static String prepareRegexSearchTerm(String searchTerm) { + /* + * Add slash delimiters and, if necessary, wildcards (.*) at the + * beginning and end of the search term. The wildcards are added because + * Lucerne automatically adds a '^' prefix and '$' suffix to the search + * terms for regex searches. Without the '.*' wildcards, the search term + * will have to match the entire content_str field, which is not + * generally the intent of the user. + */ + String regexSearchTerm = SOLR_DOC_CONTENT_STR_FIELD + + ":/" + + (searchTerm.startsWith(".*") ? "" : ".*") + + searchTerm.toLowerCase() + + (searchTerm.endsWith(".*") ? "" : ".*") + + "/"; + return regexSearchTerm; + } + + /** + * Escapes and adds delimiters and wpossibly wildcards to a given search + * term as required for a substring search. + * + * @param searchTerm A "raw" input search term. + * + * @return A search term suitable for a substring query. + */ + private static String prepareSubstringSearchTerm(String searchTerm) { + String escapedSearchTerm = escapeSearchTerm(searchTerm); + return prepareRegexSearchTerm(escapedSearchTerm); + } + + /** + * Escapes a search term as required for a Lucene query. + * + * @param searchTerm A "raw" input search term. + * + * @return An escaped version of the "raw" input search term. + */ + public static String escapeSearchTerm(String searchTerm) { + String rawSearchTerm = searchTerm.trim(); + if (0 == rawSearchTerm.length()) { + return rawSearchTerm; + } + StringBuilder escapedSearchTerm = new StringBuilder(rawSearchTerm.length()); + for (int i = 0; i < rawSearchTerm.length(); ++i) { + final char nextChar = rawSearchTerm.charAt(i); + if (SEARCH_TERM_CHARS_TO_ESCAPE.contains(Character.toString(nextChar))) { + escapedSearchTerm.append("\\"); + } + escapedSearchTerm.append(nextChar); + } + return escapedSearchTerm.toString(); + } + + /** + * An enumeration of the supported query types for keywod searches. + */ + enum QueryType { + EXACT_MATCH, + SUBSTRING, + REGEX; + } + +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java new file mode 100755 index 0000000000..a4345e2f41 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java @@ -0,0 +1,61 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.Action; +import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData; +import org.sleuthkit.autopsy.casemodule.multiusercasesbrowser.MultiUserCaseBrowserCustomizer; + +/** + * Customizer for SelectMultiUserCasesPanel. Displays the 'Create date' and 'Directory' columns + */ +public class SelectMultiUserCaseDialogCustomizer implements MultiUserCaseBrowserCustomizer { + + @Override + public List getColumns() { + List properties = new ArrayList<>(); + properties.add(Column.CREATE_DATE); + properties.add(Column.DIRECTORY); + return properties; } + + @Override + public List getSortColumns() { + List sortColumns = new ArrayList<>(); + sortColumns.add(new SortColumn(Column.CREATE_DATE, false, 1)); + return sortColumns; } + + @Override + public boolean allowMultiSelect() { + return true; + } + + @Override + public List getActions(CaseNodeData nodeData) { + return new ArrayList<>(); + } + + @Override + public Action getPreferredAction(CaseNodeData nodeData) { + return null; + } + + +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java new file mode 100755 index 0000000000..0bcb40bb14 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java @@ -0,0 +1,90 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; +import java.awt.Dialog; +import java.awt.event.ActionListener; +import java.beans.PropertyVetoException; +import org.openide.nodes.Node; +import org.openide.windows.WindowManager; + +/** + * Dialog that will display the SelectMultiUserCasesPanel + */ +public class SelectMultiUserCasesDialog extends javax.swing.JDialog { + private static final long serialVersionUID = 1L; + private static SelectMultiUserCasesDialog instance; + private static SelectMultiUserCasesPanel multiUserCasesPanel; + + /** + * Gets the singleton JDialog that allows a user to open a multi-user case. + * + * @return The singleton JDialog instance. + */ + public synchronized static SelectMultiUserCasesDialog getInstance() { + if (instance == null) { + instance = new SelectMultiUserCasesDialog(); + instance.init(); + } + return instance; + } + + /** + * Listen for new case selections from the user. + * + * @param l Listener on new case selection events + */ + void subscribeToNewCaseSelections(ActionListener l) { + multiUserCasesPanel.subscribeToNewCaseSelections(l); + } + + /** + * Set the node selections for the window + * + * @param selections Nodes to be automatically selected in the explorer view + */ + void setNodeSelections(Node[] selections) { + try { + multiUserCasesPanel.setSelections(selections); + } catch (PropertyVetoException ex) { + + } + } + + /** + * Constructs a singleton JDialog that allows a user to open a multi-user + * case. + */ + private SelectMultiUserCasesDialog() { + super(WindowManager.getDefault().getMainWindow(), "Select Multi-User Cases", Dialog.ModalityType.APPLICATION_MODAL); + } + + + + /** + * Registers a keyboard action to hide the dialog when the escape key is + * pressed and adds a OpenMultiUserCasePanel child component. + */ + private void init() { + multiUserCasesPanel = new SelectMultiUserCasesPanel(this); + add(multiUserCasesPanel); + pack(); + setResizable(false); + multiUserCasesPanel.refreshDisplay(); + } +} \ No newline at end of file diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form new file mode 100755 index 0000000000..161898a806 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form @@ -0,0 +1,110 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java new file mode 100755 index 0000000000..14c419e927 --- /dev/null +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java @@ -0,0 +1,206 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.keywordsearch.multicase; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyVetoException; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JDialog; +import org.openide.explorer.ExplorerManager; +import org.openide.nodes.Node; +import org.openide.util.Exceptions; +import org.sleuthkit.autopsy.casemodule.multiusercasesbrowser.MultiUserCasesBrowserPanel; + +/** + * Panel for multi-user case selection + */ +public class SelectMultiUserCasesPanel extends javax.swing.JPanel { + + private static final long serialVersionUID = 1L; + private final JDialog parentDialog; + private final MultiUserCasesBrowserPanel caseBrowserPanel; + private final List listeners; + + /** + * Constructs a JPanel that allows a user to open a multi-user case. + * + * @param parentDialog The parent dialog of the panel, may be null. If + * provided, the dialog is hidden when this poanel's + * cancel button is pressed. + */ + SelectMultiUserCasesPanel(JDialog parentDialog) { + initComponents(); + this.parentDialog = parentDialog; + initComponents(); // Machine generated code + caseBrowserPanel = new MultiUserCasesBrowserPanel(new ExplorerManager(), new SelectMultiUserCaseDialogCustomizer()); + multiUserCaseScrollPane.add(caseBrowserPanel); + multiUserCaseScrollPane.setViewportView(caseBrowserPanel); + listeners = new ArrayList<>(); + } + + /** + * Refreshes the child component that displays the multi-user cases known to + * the coordination service.. + */ + void refreshDisplay() { + caseBrowserPanel.displayCases(); + } + + /** + * Subscribes to the selections when the user presses the OK button. + * + * @param listener + */ + void subscribeToNewCaseSelections(ActionListener listener) { + listeners.add(listener); + } + + /** + * Sets the selections in the panel + * + * @param selections + * @throws PropertyVetoException + */ + void setSelections(Node[] selections) throws PropertyVetoException { + caseBrowserPanel.getExplorerManager().setSelectedNodes(selections); + caseBrowserPanel.requestFocus(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + multiUserCaseScrollPane = new javax.swing.JScrollPane(); + selectAllButton = new javax.swing.JButton(); + deselectAllButton = new javax.swing.JButton(); + jLabel1 = new javax.swing.JLabel(); + confirmSelections = new javax.swing.JButton(); + cancelButton = new javax.swing.JButton(); + + org.openide.awt.Mnemonics.setLocalizedText(selectAllButton, org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, "SelectMultiUserCasesPanel.selectAllButton.text")); // NOI18N + selectAllButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + selectAllButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(deselectAllButton, org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, "SelectMultiUserCasesPanel.deselectAllButton.text")); // NOI18N + deselectAllButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + deselectAllButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, "SelectMultiUserCasesPanel.jLabel1.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(confirmSelections, org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, "SelectMultiUserCasesPanel.confirmSelections.text")); // NOI18N + confirmSelections.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + confirmSelectionsActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, "SelectMultiUserCasesPanel.cancelButton.text")); // NOI18N + cancelButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cancelButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(multiUserCaseScrollPane) + .addGroup(layout.createSequentialGroup() + .addComponent(selectAllButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(deselectAllButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 365, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 367, Short.MAX_VALUE) + .addComponent(confirmSelections, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cancelButton))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(multiUserCaseScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 486, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(selectAllButton) + .addComponent(deselectAllButton) + .addComponent(confirmSelections) + .addComponent(cancelButton)) + .addContainerGap(15, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed + try { + caseBrowserPanel.getExplorerManager().setSelectedNodes(caseBrowserPanel.getExplorerManager().getRootContext().getChildren().getNodes()); + } catch (PropertyVetoException ex) { + Exceptions.printStackTrace(ex); + } + }//GEN-LAST:event_selectAllButtonActionPerformed + + private void deselectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deselectAllButtonActionPerformed + try { + caseBrowserPanel.getExplorerManager().setSelectedNodes(new Node[0]); + } catch (PropertyVetoException ex) { + Exceptions.printStackTrace(ex); + } + }//GEN-LAST:event_deselectAllButtonActionPerformed + + private void confirmSelectionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_confirmSelectionsActionPerformed + listeners.forEach((l) -> { + //Pass along the selected nodes in the event. + l.actionPerformed(new ActionEvent(caseBrowserPanel.getExplorerManager().getSelectedNodes(), -1, "")); + }); + parentDialog.setVisible(false); + }//GEN-LAST:event_confirmSelectionsActionPerformed + + private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed + parentDialog.setVisible(false); + }//GEN-LAST:event_cancelButtonActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton cancelButton; + private javax.swing.JButton confirmSelections; + private javax.swing.JButton deselectAllButton; + private javax.swing.JLabel jLabel1; + private javax.swing.JScrollPane multiUserCaseScrollPane; + private javax.swing.JButton selectAllButton; + // End of variables declaration//GEN-END:variables +} From 1d60335340ee21502f399148c218927405383cbf Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Mon, 11 Mar 2019 12:50:34 -0400 Subject: [PATCH 20/80] Applied source code formatting --- .../MultiCaseKeywordSearchErrorDialog.java | 5 ++-- .../multicase/MultiCaseKeywordSearchNode.java | 7 +++-- .../MultiCaseKeywordSearchPanel.java | 28 +++++++++---------- .../multicase/MultiCaseSearcher.java | 28 +++++++++---------- .../keywordsearch/multicase/SearchHit.java | 14 +++++----- .../SelectMultiUserCaseDialogCustomizer.java | 10 ++++--- .../multicase/SelectMultiUserCasesDialog.java | 18 ++++++------ .../multicase/SelectMultiUserCasesPanel.java | 15 +++++----- 8 files changed, 63 insertions(+), 62 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java index fd21972f69..69d5755d37 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.java @@ -23,7 +23,8 @@ import org.openide.util.NbBundle.Messages; import org.openide.windows.WindowManager; /** - * Dialog to display the errors encounter while perfomring a multi-case keyword search. + * Dialog to display the errors encounter while perfomring a multi-case keyword + * search. */ final class MultiCaseKeywordSearchErrorDialog extends JDialog { @@ -100,7 +101,7 @@ final class MultiCaseKeywordSearchErrorDialog extends JDialog { }// //GEN-END:initComponents private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed - dispose(); + dispose(); }//GEN-LAST:event_closeButtonActionPerformed diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java index 2e69b41422..04e66f1717 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchNode.java @@ -75,6 +75,7 @@ class MultiCaseKeywordSearchNode extends AbstractNode { * A factory for creating children of the MultiCaseKeywordSearchNode. */ static class MultiCaseKeywordSearchChildren extends Children.Keys { + private final Collection resultList; /** @@ -87,7 +88,7 @@ class MultiCaseKeywordSearchNode extends AbstractNode { this.resultList = resultList; } - @Override + @Override protected void addNotify() { super.addNotify(); setKeys(resultList); @@ -98,7 +99,7 @@ class MultiCaseKeywordSearchNode extends AbstractNode { super.removeNotify(); setKeys(Collections.emptyList()); } - + @Override protected Node[] createNodes(SearchHit t) { return new Node[]{new SearchHitNode(t)}; @@ -199,7 +200,7 @@ class MultiCaseKeywordSearchNode extends AbstractNode { @Override public void actionPerformed(ActionEvent e) { - StringSelection resultSelection = new StringSelection(result.getCaseDisplayName()+ "\t" + StringSelection resultSelection = new StringSelection(result.getCaseDisplayName() + "\t" + result.getCaseDirectoryPath() + "\t" + result.getDataSourceName() + "\t" + result.getSourceType().getDisplayName() + "\t" diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java index 6aed7b3aa4..3a25471819 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java @@ -100,7 +100,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex caseSelectionDialog.subscribeToNewCaseSelections(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - populateCasesList((Node[])e.getSource()); + populateCasesList((Node[]) e.getSource()); revalidate(); } }); @@ -137,8 +137,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex /** * If a string is received and it matches the - * MultiCaseSearcher.SEARCH_COMPLETE_STRING reset elements of this panel - * to reflect that the search is done. + * MultiCaseSearcher.SEARCH_COMPLETE_STRING reset elements of this panel to + * reflect that the search is done. * * @param stringRecived the String which was received */ @@ -228,7 +228,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex currentSelections = selectedNodes; int casePanelWidth = casesPanel.getPreferredSize().width; int heightOfAllRows = 0; - for(Node data : selectedNodes) { + for (Node data : selectedNodes) { //select all new cases and cases which were previously selected String multiUserCaseName = data.getName(); boolean isSelected = true; @@ -544,14 +544,12 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex }//GEN-LAST:event_searchButtonActionPerformed /** - * Get the cases which match the selected status specified by - * isSelected. + * Get the cases which match the selected status specified by isSelected. * - * @param isSelected true to get selected cases false to get - * unselected cases + * @param isSelected true to get selected cases false to get unselected + * cases * - * @return cases the cases that match the selected status of - * isSelected + * @return cases the cases that match the selected status of isSelected */ private Collection getCases(boolean isSelected) { Collection cases = new HashSet<>(); @@ -698,7 +696,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex }//GEN-LAST:event_viewErrorsButtonActionPerformed private void pickCasesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pickCasesButtonActionPerformed - if(currentSelections != null) { + if (currentSelections != null) { caseSelectionDialog.setNodeSelections(currentSelections); } caseSelectionDialog.setVisible(true); @@ -852,7 +850,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex // End of variables declaration//GEN-END:variables /* - * A thread that performs a keyword search of cases + * A thread that performs a keyword search of cases */ private final class SearchThread extends Thread { @@ -864,7 +862,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex * Constructs a thread that performs a keyword search of cases * * @param caseNames The names of the cases to search. - * @param query The keyword search query to perform. + * @param query The keyword search query to perform. */ private SearchThread(Collection caseNames, SearchQuery searchQuery) { this.caseNames = caseNames; @@ -882,8 +880,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex } /** - * Unregister an object with the MultiCaseSearcher so that the - * object's subscribe methods no longer receive results. + * Unregister an object with the MultiCaseSearcher so that the object's + * subscribe methods no longer receive results. * * @param object the object to unregister with the MultiCaseSearcher */ diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java index ab0bbfc296..cd06a01bed 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java @@ -111,7 +111,7 @@ final class MultiCaseSearcher { * * Performs keyword searches across multiple cases * - * @param caseNames The names of the cases to search. + * @param caseNames The names of the cases to search. * @param query The keyword search query to perform. * @param progressIndicator A progrss indicator for the search. * @@ -243,8 +243,7 @@ final class MultiCaseSearcher { * * @param caseNames The names of the cases. * - * @return A mapping of case directory paths to case names, - * possibly empty. + * @return A mapping of case directory paths to case names, possibly empty. * * @throws MultiCaseSearcherException * @throws InterruptedException @@ -264,9 +263,9 @@ final class MultiCaseSearcher { } for (String nodeName : caseNodeNames) { /* - * Find the case directory paths by - * selecting each coordination service case directory lock node path - * that has the case name in the path. + * Find the case directory paths by selecting each coordination + * service case directory lock node path that has the case name in + * the path. */ checkForCancellation(); final Path caseDirectoryPath = Paths.get(nodeName); @@ -510,10 +509,10 @@ final class MultiCaseSearcher { /** * Executes a keyword search searchTerm in the text index of a case. * - * @param solrServer The Solr server. - * @param solrQuery The Solr searchTerm. - * @param caseDatabase The case database. - * @param aCase The case metadata. + * @param solrServer The Solr server. + * @param solrQuery The Solr searchTerm. + * @param caseDatabase The case database. + * @param aCase The case metadata. * * @return A list of search results, possibly empty. * @@ -521,7 +520,7 @@ final class MultiCaseSearcher { * @throws InterruptedException */ @NbBundle.Messages({ - "# {0} - query", + "# {0} - query", "# {1} - case_name", "MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query \"{0}\" on case {1}" }) @@ -587,10 +586,9 @@ final class MultiCaseSearcher { * Creates a keyword search hit object for a Content object identified by * its Solr object id. * - * @param solrObjectId The Solr object id of a Content object. - * @param caseDatabase The case database of the case that has the - * Content. - * @param caseInfo Metadata about the case that has the content. + * @param solrObjectId The Solr object id of a Content object. + * @param caseDatabase The case database of the case that has the Content. + * @param caseInfo Metadata about the case that has the content. * * @return * diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java index 975d96094b..9ed845f43c 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SearchHit.java @@ -35,9 +35,11 @@ final class SearchHit { /** * Constructs a keyword search hit from a multi-case search. - * - * @param caseDisplayName The display name of the case where the hit occurred. - * @param caseDirectoryPath The path of the directory of the case where the hit occurred. + * + * @param caseDisplayName The display name of the case where the hit + * occurred. + * @param caseDirectoryPath The path of the directory of the case where the + * hit occurred. * @param dataSourceName The name of the data source within the case * where the hit occurred. * @param sourceType The type of the source content object. @@ -57,8 +59,7 @@ final class SearchHit { } /** - * Gets the display name of the case where the hit - * occurred. + * Gets the display name of the case where the hit occurred. * * @return The case display name. */ @@ -67,8 +68,7 @@ final class SearchHit { } /** - * Gets the path of the directory of the case where - * the hit occurred. + * Gets the path of the directory of the case where the hit occurred. * * @return The case directory path. */ diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java index a4345e2f41..be5fee183f 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCaseDialogCustomizer.java @@ -25,7 +25,8 @@ import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData; import org.sleuthkit.autopsy.casemodule.multiusercasesbrowser.MultiUserCaseBrowserCustomizer; /** - * Customizer for SelectMultiUserCasesPanel. Displays the 'Create date' and 'Directory' columns + * Customizer for SelectMultiUserCasesPanel. Displays the 'Create date' and + * 'Directory' columns */ public class SelectMultiUserCaseDialogCustomizer implements MultiUserCaseBrowserCustomizer { @@ -34,13 +35,15 @@ public class SelectMultiUserCaseDialogCustomizer implements MultiUserCaseBrowser List properties = new ArrayList<>(); properties.add(Column.CREATE_DATE); properties.add(Column.DIRECTORY); - return properties; } + return properties; + } @Override public List getSortColumns() { List sortColumns = new ArrayList<>(); sortColumns.add(new SortColumn(Column.CREATE_DATE, false, 1)); - return sortColumns; } + return sortColumns; + } @Override public boolean allowMultiSelect() { @@ -57,5 +60,4 @@ public class SelectMultiUserCaseDialogCustomizer implements MultiUserCaseBrowser return null; } - } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java index 0bcb40bb14..bb0fe4dab3 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java @@ -17,6 +17,7 @@ * limitations under the License. */ package org.sleuthkit.autopsy.keywordsearch.multicase; + import java.awt.Dialog; import java.awt.event.ActionListener; import java.beans.PropertyVetoException; @@ -27,6 +28,7 @@ import org.openide.windows.WindowManager; * Dialog that will display the SelectMultiUserCasesPanel */ public class SelectMultiUserCasesDialog extends javax.swing.JDialog { + private static final long serialVersionUID = 1L; private static SelectMultiUserCasesDialog instance; private static SelectMultiUserCasesPanel multiUserCasesPanel; @@ -43,28 +45,28 @@ public class SelectMultiUserCasesDialog extends javax.swing.JDialog { } return instance; } - + /** * Listen for new case selections from the user. - * + * * @param l Listener on new case selection events */ void subscribeToNewCaseSelections(ActionListener l) { multiUserCasesPanel.subscribeToNewCaseSelections(l); } - + /** * Set the node selections for the window - * + * * @param selections Nodes to be automatically selected in the explorer view */ void setNodeSelections(Node[] selections) { try { multiUserCasesPanel.setSelections(selections); } catch (PropertyVetoException ex) { - + } - } + } /** * Constructs a singleton JDialog that allows a user to open a multi-user @@ -73,8 +75,6 @@ public class SelectMultiUserCasesDialog extends javax.swing.JDialog { private SelectMultiUserCasesDialog() { super(WindowManager.getDefault().getMainWindow(), "Select Multi-User Cases", Dialog.ModalityType.APPLICATION_MODAL); } - - /** * Registers a keyboard action to hide the dialog when the escape key is @@ -87,4 +87,4 @@ public class SelectMultiUserCasesDialog extends javax.swing.JDialog { setResizable(false); multiUserCasesPanel.refreshDisplay(); } -} \ No newline at end of file +} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java index 14c419e927..02a7eab8a2 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java @@ -55,7 +55,7 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { multiUserCaseScrollPane.setViewportView(caseBrowserPanel); listeners = new ArrayList<>(); } - + /** * Refreshes the child component that displays the multi-user cases known to * the coordination service.. @@ -63,21 +63,22 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { void refreshDisplay() { caseBrowserPanel.displayCases(); } - + /** * Subscribes to the selections when the user presses the OK button. - * - * @param listener + * + * @param listener */ void subscribeToNewCaseSelections(ActionListener listener) { listeners.add(listener); } - + /** * Sets the selections in the panel - * + * * @param selections - * @throws PropertyVetoException + * + * @throws PropertyVetoException */ void setSelections(Node[] selections) throws PropertyVetoException { caseBrowserPanel.getExplorerManager().setSelectedNodes(selections); From 8787f225e9b0be3e64806e7defe7e2170a20b55a Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Mon, 11 Mar 2019 13:38:25 -0400 Subject: [PATCH 21/80] Removed problematic references --- .../MultiCaseKeywordSearchErrorDialog.form | 5 ----- .../multicase/SelectMultiUserCasesPanel.form | 15 --------------- 2 files changed, 20 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form index 368f9ebaa0..c93c91817b 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchErrorDialog.form @@ -74,11 +74,6 @@ - - - - - diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form index 161898a806..a2bf4e2cc6 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form @@ -80,28 +80,13 @@
- - - - - - - - - - - - - - - From 48e1f224c96dc8079e2d2c847af60d2ffb92bbf4 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Mon, 11 Mar 2019 13:56:38 -0400 Subject: [PATCH 22/80] Moved some of the Experimental utility code to Autopsy Core --- .../AddDataSourceCallback.java | 10 +- .../AutoIngestDataSource.java | 20 +- .../DataSourceProcessorUtility.java | 15 +- .../autoingest/AddArchiveTask.java | 403 ------------------ .../ArchiveExtractorDSProcessor.java | 176 -------- .../autoingest/ArchiveFilePanel.form | 94 ---- .../autoingest/ArchiveFilePanel.java | 289 ------------- .../experimental/autoingest/ArchiveUtil.java | 313 -------------- .../autoingest/AutoIngestManager.java | 5 +- .../experimental/autoingest/Bundle.properties | 4 - .../autoingest/Bundle.properties-MERGED | 10 - 11 files changed, 25 insertions(+), 1314 deletions(-) rename {Experimental/src/org/sleuthkit/autopsy/experimental/autoingest => Core/src/org/sleuthkit/autopsy/datasourceprocessors}/AddDataSourceCallback.java (90%) rename {Experimental/src/org/sleuthkit/autopsy/experimental/autoingest => Core/src/org/sleuthkit/autopsy/datasourceprocessors}/AutoIngestDataSource.java (71%) rename {Experimental/src/org/sleuthkit/autopsy/experimental/autoingest => Core/src/org/sleuthkit/autopsy/datasourceprocessors}/DataSourceProcessorUtility.java (83%) delete mode 100644 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java delete mode 100644 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveExtractorDSProcessor.java delete mode 100644 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.form delete mode 100644 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.java delete mode 100644 Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveUtil.java diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddDataSourceCallback.java b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AddDataSourceCallback.java similarity index 90% rename from Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddDataSourceCallback.java rename to Core/src/org/sleuthkit/autopsy/datasourceprocessors/AddDataSourceCallback.java index fc00149249..3ee02b9026 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddDataSourceCallback.java +++ b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AddDataSourceCallback.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2017 Basis Technology Corp. + * Copyright 2011-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.experimental.autoingest; +package org.sleuthkit.autopsy.datasourceprocessors; import java.util.List; import java.util.UUID; @@ -32,7 +32,7 @@ import org.sleuthkit.datamodel.Content; * processor finishes running in its own thread. */ @Immutable -class AddDataSourceCallback extends DataSourceProcessorCallback { +public class AddDataSourceCallback extends DataSourceProcessorCallback { private final Case caseForJob; private final AutoIngestDataSource dataSourceInfo; @@ -48,7 +48,7 @@ class AddDataSourceCallback extends DataSourceProcessorCallback { * @param dataSourceInfo The data source * @param taskId The task id to associate with ingest job events. */ - AddDataSourceCallback(Case caseForJob, AutoIngestDataSource dataSourceInfo, UUID taskId, Object lock) { + public AddDataSourceCallback(Case caseForJob, AutoIngestDataSource dataSourceInfo, UUID taskId, Object lock) { this.caseForJob = caseForJob; this.dataSourceInfo = dataSourceInfo; this.taskId = taskId; @@ -87,7 +87,7 @@ class AddDataSourceCallback extends DataSourceProcessorCallback { * @param result The result code for the processing of the data source. * @param errorMessages Any error messages generated during the processing * of the data source. - * @param dataSourceContent The content produced by processing the data + * @param dataSources The content produced by processing the data * source. */ @Override diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDataSource.java b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AutoIngestDataSource.java similarity index 71% rename from Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDataSource.java rename to Core/src/org/sleuthkit/autopsy/datasourceprocessors/AutoIngestDataSource.java index 89a0d0ad5f..fbf5de11c5 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestDataSource.java +++ b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/AutoIngestDataSource.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2017 Basis Technology Corp. + * Copyright 2011-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.experimental.autoingest; +package org.sleuthkit.autopsy.datasourceprocessors; import java.nio.file.Path; import java.util.ArrayList; @@ -26,7 +26,7 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback import org.sleuthkit.datamodel.Content; @ThreadSafe -class AutoIngestDataSource { +public class AutoIngestDataSource { private final String deviceId; private final Path path; @@ -34,34 +34,34 @@ class AutoIngestDataSource { private List errorMessages; private List content; - AutoIngestDataSource(String deviceId, Path path) { + public AutoIngestDataSource(String deviceId, Path path) { this.deviceId = deviceId; this.path = path; } - String getDeviceId() { + public String getDeviceId() { return deviceId; } - Path getPath() { + public Path getPath() { return this.path; } - synchronized void setDataSourceProcessorOutput(DataSourceProcessorResult result, List errorMessages, List content) { + public synchronized void setDataSourceProcessorOutput(DataSourceProcessorResult result, List errorMessages, List content) { this.resultCode = result; this.errorMessages = new ArrayList<>(errorMessages); this.content = new ArrayList<>(content); } - synchronized DataSourceProcessorResult getResultDataSourceProcessorResultCode() { + public synchronized DataSourceProcessorResult getResultDataSourceProcessorResultCode() { return resultCode; } - synchronized List getDataSourceProcessorErrorMessages() { + public synchronized List getDataSourceProcessorErrorMessages() { return new ArrayList<>(errorMessages); } - synchronized List getContent() { + public synchronized List getContent() { return new ArrayList<>(content); } diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DataSourceProcessorUtility.java b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/DataSourceProcessorUtility.java similarity index 83% rename from Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DataSourceProcessorUtility.java rename to Core/src/org/sleuthkit/autopsy/datasourceprocessors/DataSourceProcessorUtility.java index 4878f7fa7d..8b27ff6c19 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/DataSourceProcessorUtility.java +++ b/Core/src/org/sleuthkit/autopsy/datasourceprocessors/DataSourceProcessorUtility.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2017 Basis Technology Corp. + * Copyright 2011-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,7 +16,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.sleuthkit.autopsy.experimental.autoingest; +package org.sleuthkit.autopsy.datasourceprocessors; import java.nio.file.Path; import java.util.Collection; @@ -25,13 +25,12 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.openide.util.Lookup; -import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor; import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException; /** * A utility class to find Data Source Processors */ -class DataSourceProcessorUtility { +public class DataSourceProcessorUtility { private DataSourceProcessorUtility() { } @@ -47,7 +46,7 @@ class DataSourceProcessorUtility { * @throws * org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException */ - static Map getDataSourceProcessorForFile(Path dataSourcePath, Collection processorCandidates) throws AutoIngestDataSourceProcessorException { + public static Map getDataSourceProcessorForFile(Path dataSourcePath, Collection processorCandidates) throws AutoIngestDataSourceProcessorException { Map validDataSourceProcessorsMap = new HashMap<>(); for (AutoIngestDataSourceProcessor processor : processorCandidates) { int confidence = processor.canProcess(dataSourcePath); @@ -74,7 +73,7 @@ class DataSourceProcessorUtility { * @throws * org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException */ - static List getOrderedListOfDataSourceProcessors(Path dataSourcePath) throws AutoIngestDataSourceProcessorException { + public static List getOrderedListOfDataSourceProcessors(Path dataSourcePath) throws AutoIngestDataSourceProcessorException { // lookup all AutomatedIngestDataSourceProcessors Collection processorCandidates = Lookup.getDefault().lookupAll(AutoIngestDataSourceProcessor.class); return getOrderedListOfDataSourceProcessors(dataSourcePath, processorCandidates); @@ -96,7 +95,7 @@ class DataSourceProcessorUtility { * @throws * org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException */ - static List getOrderedListOfDataSourceProcessors(Path dataSourcePath, Collection processorCandidates) throws AutoIngestDataSourceProcessorException { + public static List getOrderedListOfDataSourceProcessors(Path dataSourcePath, Collection processorCandidates) throws AutoIngestDataSourceProcessorException { Map validDataSourceProcessorsMap = getDataSourceProcessorForFile(dataSourcePath, processorCandidates); return orderDataSourceProcessorsByConfidence(validDataSourceProcessorsMap); } @@ -110,7 +109,7 @@ class DataSourceProcessorUtility { * the data source along with their confidence score * @return Ordered list of data source processors */ - static List orderDataSourceProcessorsByConfidence(Map validDataSourceProcessorsMap) { + public static List orderDataSourceProcessorsByConfidence(Map validDataSourceProcessorsMap) { List validDataSourceProcessors = validDataSourceProcessorsMap.entrySet().stream() .sorted(Map.Entry.comparingByValue().reversed()) .map(Map.Entry::getKey) diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java deleted file mode 100644 index 93c30fdb53..0000000000 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AddArchiveTask.java +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011-2018 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.experimental.autoingest; - -import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.UUID; -import java.util.logging.Level; -import java.util.stream.Collectors; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.FilenameUtils; -import org.openide.util.Lookup; -import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.casemodule.LocalFilesDSProcessor; -import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; -import static org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS; -import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor; -import org.sleuthkit.autopsy.coreutils.TimeStampUtils; -import org.sleuthkit.autopsy.datasourceprocessors.RawDSProcessor; -import org.sleuthkit.datamodel.Content; -import org.sleuthkit.datamodel.DataSource; -import org.sleuthkit.datamodel.SleuthkitCase; -import org.sleuthkit.datamodel.TskData; -import org.sleuthkit.datamodel.VirtualDirectory; - -/* - * A runnable that adds an archive data source as well as data sources contained - * in the archive to the case database. - */ -class AddArchiveTask implements Runnable { - - private final Logger logger = Logger.getLogger(AddArchiveTask.class.getName()); - private final String deviceId; - private final String archivePath; - private final DataSourceProcessorProgressMonitor progressMonitor; - private final DataSourceProcessorCallback callback; - private boolean criticalErrorOccurred; - private final Object archiveDspLock; - - private static final String ARCHIVE_EXTRACTOR_MODULE_OUTPUT_DIR = "Archive Extractor"; - private static final String LOGICAL_FILE_VIRTUAL_DIR_NAME = "$AdditionalFiles"; - - /** - * Constructs a runnable task that adds an archive as well as data sources - * contained in the archive to the case database. - * - * @param deviceId An ASCII-printable identifier for the device - * associated with the data source that is intended - * to be unique across multiple cases (e.g., a UUID). - * @param archivePath Path to the archive file. - * @param progressMonitor Progress monitor to report progress during - * processing. - * @param callback Callback to call when processing is done. - */ - AddArchiveTask(String deviceId, String archivePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { - this.deviceId = deviceId; - this.archivePath = archivePath; - this.callback = callback; - this.progressMonitor = progressMonitor; - this.archiveDspLock = new Object(); - } - - /** - * Adds the archive to the case database. - */ - @Override - public void run() { - progressMonitor.setIndeterminate(true); - List errorMessages = new ArrayList<>(); - List newDataSources = new ArrayList<>(); - DataSourceProcessorCallback.DataSourceProcessorResult result; - if (!ArchiveUtil.isArchive(Paths.get(archivePath))) { - criticalErrorOccurred = true; - logger.log(Level.SEVERE, String.format("Input data source is not a valid datasource: %s", archivePath)); //NON-NLS - errorMessages.add("Input data source is not a valid datasource: " + archivePath); - result = DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS; - callback.done(result, errorMessages, newDataSources); - } - - logger.log(Level.INFO, "Using Archive Extractor DSP to process archive {0} ", archivePath); - - // extract the archive and pass the extracted folder as input - try { - Case currentCase = Case.getCurrentCaseThrows(); - - // create folder to extract archive to - Path destinationFolder = createDirectoryForFile(archivePath, currentCase.getModuleDirectory()); - if (destinationFolder.toString().isEmpty()) { - // unable to create directory - criticalErrorOccurred = true; - errorMessages.add(String.format("Unable to create directory {0} to extract archive {1} ", new Object[]{destinationFolder.toString(), archivePath})); - logger.log(Level.SEVERE, "Unable to create directory {0} to extract archive {1} ", new Object[]{destinationFolder.toString(), archivePath}); - return; - } - - // extract contents of ZIP archive into destination folder - List extractedFiles = new ArrayList<>(); - try { - progressMonitor.setProgressText(String.format("Extracting archive contents to: %s", destinationFolder.toString())); - extractedFiles = ArchiveUtil.unpackArchiveFile(archivePath, destinationFolder.toString()); - } catch (ArchiveUtil.ArchiveExtractionException ex) { - // delete extracted contents - logger.log(Level.SEVERE, "Exception while extracting archive contents into " + destinationFolder.toString() + ". Deleteing the directory", ex); - FileUtils.deleteDirectory(destinationFolder.toFile()); - throw ex; - } - - List unclaimedFiles = new ArrayList<>(extractedFiles); - - // lookup all AutomatedIngestDataSourceProcessors so that we only do it once. - // LocalDisk, LocalFiles, and ArchiveDSP are removed from the list. - List processorCandidates = getListOfValidDataSourceProcessors(); - - // do processing - int numValidDataSources = 0; - DataSource defaultDataSource = null; - for (String file : extractedFiles) { - - // we only care about files, skip directories - File fileObject = new File(file); - if (fileObject.isDirectory()) { - continue; - } - - // identify all "valid" DSPs that can process this file - List validDataSourceProcessors = getDataSourceProcessorsForFile(Paths.get(file), errorMessages, processorCandidates); - if (validDataSourceProcessors.isEmpty()) { - continue; - } - - // identified a "valid" data source within the archive - progressMonitor.setProgressText(String.format("Adding: %s", file)); - - /* - * NOTE: we have to move the valid data sources to a separate - * folder and then add the data source from that folder. This is - * necessary because after all valid data sources have been - * identified, we are going to add the remaining extracted - * contents of the archive as a single logical file set. Hence, - * if we do not move the data sources out of the extracted - * contents folder, those data source files will get added twice - * and can potentially result in duplicate keyword hits. - - Path newFolder = createDirectoryForFile(file, currentCase.getModuleDirectory()); - if (newFolder.toString().isEmpty()) { - // unable to create directory - criticalErrorOccurred = true; - errorMessages.add(String.format("Unable to create directory {0} to extract content of archive {1} ", new Object[]{newFolder.toString(), archivePath})); - logger.log(Level.SEVERE, "Unable to create directory {0} to extract content of archive {1} ", new Object[]{newFolder.toString(), archivePath}); - return; - } - - // Copy it to a different folder - //FileUtils.copyFileToDirectory(fileObject, newFolder.toFile()); - //Path newFilePath = Paths.get(newFolder.toString(), FilenameUtils.getName(file)); -*/ - // Try each DSP in decreasing order of confidence - boolean success = false; - for (AutoIngestDataSourceProcessor selectedProcessor : validDataSourceProcessors) { - - logger.log(Level.INFO, "Using {0} to process extracted file {1} ", new Object[]{selectedProcessor.getDataSourceType(), file}); - synchronized (archiveDspLock) { - UUID taskId = UUID.randomUUID(); - currentCase.notifyAddingDataSource(taskId); - AutoIngestDataSource internalDataSource = new AutoIngestDataSource(deviceId, fileObject.toPath()); - DataSourceProcessorCallback internalArchiveDspCallBack = new AddDataSourceCallback(currentCase, internalDataSource, taskId, archiveDspLock); - selectedProcessor.process(deviceId, fileObject.toPath(), progressMonitor, internalArchiveDspCallBack); - archiveDspLock.wait(); - - // at this point we got the content object(s) from the current DSP. - // check whether the data source was processed successfully - if ((internalDataSource.getResultDataSourceProcessorResultCode() == CRITICAL_ERRORS) - || internalDataSource.getContent().isEmpty()) { - // move onto the the next DSP that can process this data source - for (String errorMessage : internalDataSource.getDataSourceProcessorErrorMessages()) { - logger.log(Level.SEVERE, "Data source processor {0} was unable to process {1}: {2}", new Object[]{selectedProcessor.getDataSourceType(), internalDataSource.getPath(), errorMessage}); - } - continue; - } - - // if we are here it means the data source was added successfully - success = true; - newDataSources.addAll(internalDataSource.getContent()); - numValidDataSources++; - - // this extracted file has been "claimed" by one of the DSPs, - // remove it from the list of Logical Files that will be added later - removeClaimedFiles(file, unclaimedFiles, selectedProcessor); - - // update data source info - for (Content c:internalDataSource.getContent()) { - if (c instanceof DataSource) { - DataSource ds = (DataSource) c; - - // Read existing aquisition details and update them - String details = "Extracted from archive: " + archivePath.toString(); - String existingDetails = ds.getAcquisitionDetails(); - if (existingDetails != null && !existingDetails.isEmpty()) { - ds.setAcquisitionDetails(existingDetails + System.getProperty("line.separator") + details); - } else { - ds.setAcquisitionDetails(details); - } - - // Update the names for all new data sources to be the root archive plus the name of the data source - String newName = Paths.get(archivePath).getFileName() + "/" + ds.getName(); - ds.setDisplayName(newName); - currentCase.notifyDataSourceNameChanged(c, newName); - - defaultDataSource = ds; - } - } - - // skip all other DSPs for this data source - break; - } - } - - /*if (success) { - // one of the DSPs successfully processed the data source. delete the - // copy of the data source in the original extracted archive folder. - // otherwise the data source is going to be added again as a logical file. - numValidDataSources--; - FileUtils.deleteQuietly(fileObject); - } else { - // none of the DSPs were able to process the data source. delete the - // copy of the data source in the temporary folder. the data source is - // going to be added as a logical file with the rest of the extracted contents. - FileUtils.deleteQuietly(newFolder.toFile()); - }*/ - } - - // after all archive contents have been examined (and moved to separate folders if necessary), - // add remaining extracted contents as one logical file set - if (unclaimedFiles.size() > 0) { - - // ELTODO investigate if i need to aquire datase lock? - SleuthkitCase caseDatabase = Case.getCurrentCaseThrows().getSleuthkitCase(); - VirtualDirectory additionalFilesDir = caseDatabase.addVirtualDirectory(defaultDataSource.getId(), LOGICAL_FILE_VIRTUAL_DIR_NAME); - - for (String file : unclaimedFiles) { - File fileObject = new File(file); - caseDatabase.addLocalFile(fileObject.getName(), fileObject.getAbsolutePath(), fileObject.length(), 0, 0, 0, 0, fileObject.isFile(), TskData.EncodingType.NONE, additionalFilesDir); - } - - /*progressMonitor.setProgressText(String.format("Adding: %s", destinationFolder.toString())); - logger.log(Level.INFO, "Adding directory {0} as logical file set", destinationFolder.toString()); - synchronized (archiveDspLock) { - UUID taskId = UUID.randomUUID(); - currentCase.notifyAddingDataSource(taskId); - AutoIngestDataSource internalDataSource = new AutoIngestDataSource(deviceId, destinationFolder); - DataSourceProcessorCallback internalArchiveDspCallBack = new AddDataSourceCallback(currentCase, internalDataSource, taskId, archiveDspLock); - - // folder where archive was extracted to - List pathsList = new ArrayList<>(); - pathsList.add(destinationFolder.toString()); - - // use archive file name as the name of the logical file set - String archiveFileName = FilenameUtils.getName(archivePath); - - LocalFilesDSProcessor localFilesDSP = new LocalFilesDSProcessor(); - localFilesDSP.run(deviceId, archiveFileName, unclaimedFiles, progressMonitor, internalArchiveDspCallBack); - - archiveDspLock.wait(); - - // at this point we got the content object(s) from the current DSP. - newDataSources.addAll(internalDataSource.getContent()); - - for (Content c : internalDataSource.getContent()) { - if (c instanceof DataSource) { - DataSource ds = (DataSource) c; - // This is a new data source so just write the aquisition details - String details = "Extracted from archive: " + archivePath.toString(); - ds.setAcquisitionDetails(details); - } - } - }*/ - } - } catch (Exception ex) { - criticalErrorOccurred = true; - errorMessages.add(ex.getMessage()); - logger.log(Level.SEVERE, String.format("Critical error occurred while extracting archive %s", archivePath), ex); //NON-NLS - } finally { - logger.log(Level.INFO, "Finished processing of archive {0}", archivePath); - progressMonitor.setProgress(100); - if (criticalErrorOccurred) { - result = DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS; - } else if (!errorMessages.isEmpty()) { - result = DataSourceProcessorCallback.DataSourceProcessorResult.NONCRITICAL_ERRORS; - } else { - result = DataSourceProcessorCallback.DataSourceProcessorResult.NO_ERRORS; - } - callback.done(result, errorMessages, newDataSources); - } - } - - private void removeClaimedFiles(String file, List unclaimedFiles, AutoIngestDataSourceProcessor selectedProcessor) { - - //if (!(selectedProcessor instanceof ForensicToolReportProcessor)) { - unclaimedFiles.remove(file); - //} - } - - /** - * Get a list of data source processors. LocalFiles, RawDSProcessor, and - * ArchiveDSP are removed from the list. - * - * @return List of data source processors - */ - private List getListOfValidDataSourceProcessors() { - - Collection processorCandidates = Lookup.getDefault().lookupAll(AutoIngestDataSourceProcessor.class); - - List validDataSourceProcessors = processorCandidates.stream().collect(Collectors.toList()); - - for (Iterator iterator = validDataSourceProcessors.iterator(); iterator.hasNext();) { - AutoIngestDataSourceProcessor selectedProcessor = iterator.next(); - - // skip local files, only looking for "valid" data sources. - // also skip RawDSP as we don't want to add random "bin" and "raw" files that may be inside archive - // as individual data sources. - // also skip nested archive files, those will be ingested as logical files and extracted during ingest - if ((selectedProcessor instanceof LocalFilesDSProcessor) - || (selectedProcessor instanceof RawDSProcessor) - || (selectedProcessor instanceof ArchiveExtractorDSProcessor)) { - iterator.remove(); - } - } - - return validDataSourceProcessors; - } - - /** - * Get a list of data source processors that can process the data source of - * interest. The list is sorted by confidence in decreasing order. - * - * @param dataSourcePath Full path to the data source - * @param errorMessages List for error messages - * @param errorMessages List of AutoIngestDataSourceProcessor to try - * - * @return Ordered list of applicable DSPs - */ - private List getDataSourceProcessorsForFile(Path dataSourcePath, List errorMessages, - List processorCandidates) { - - // Get an ordered list of data source processors to try - List validDataSourceProcessorsForFile = Collections.emptyList(); - try { - validDataSourceProcessorsForFile = DataSourceProcessorUtility.getOrderedListOfDataSourceProcessors(dataSourcePath, processorCandidates); - } catch (AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException ex) { - criticalErrorOccurred = true; - errorMessages.add(ex.getMessage()); - logger.log(Level.SEVERE, String.format("Critical error occurred while extracting archive %s", archivePath), ex); //NON-NLS - return Collections.emptyList(); - } - return validDataSourceProcessorsForFile; - } - - /** - * Create a directory in ModuleOutput folder based on input file name. A - * time stamp is appended to the directory name. - * - * @param fileName File name - * @param baseDirectory Base directory. Typically the case output directory. - * - * @return Full path to the new directory - */ - private Path createDirectoryForFile(String fileName, String baseDirectory) { - // get file name without full path or extension - String fileNameNoExt = FilenameUtils.getBaseName(fileName); - - // create folder to extract archive to - Path newFolder = Paths.get(baseDirectory, ARCHIVE_EXTRACTOR_MODULE_OUTPUT_DIR, fileNameNoExt + "_" + TimeStampUtils.createTimeStamp()); - if (newFolder.toFile().mkdirs() == false) { - // unable to create directory - return Paths.get(""); - } - return newFolder; - } -} diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveExtractorDSProcessor.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveExtractorDSProcessor.java deleted file mode 100644 index a30fbf0c75..0000000000 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveExtractorDSProcessor.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011-2017 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.experimental.autoingest; - -import com.google.common.util.concurrent.ThreadFactoryBuilder; -import java.nio.file.Path; -import java.util.UUID; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import javax.swing.JPanel; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; -import org.openide.util.lookup.ServiceProviders; -import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; -import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; -import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor; - -/** - * A data source processor that handles archive files. Implements the - * DataSourceProcessor service provider interface to allow integration with the - * add data source wizard. It also provides a run method overload to allow it to - * be used independently of the wizard. - */ -@ServiceProviders(value={ - @ServiceProvider(service=AutoIngestDataSourceProcessor.class)} -) -@NbBundle.Messages({ - "ArchiveDSP.dsType.text=Archive file"}) -public class ArchiveExtractorDSProcessor implements AutoIngestDataSourceProcessor { - - private final static String DATA_SOURCE_TYPE = Bundle.ArchiveDSP_dsType_text(); - - private final ArchiveFilePanel configPanel; - private String deviceId; - private String archivePath; - private boolean setDataSourceOptionsCalled; - - private final ExecutorService jobProcessingExecutor; - private static final String ARCHIVE_DSP_THREAD_NAME = "Archive-DSP-%d"; - private AddArchiveTask addArchiveTask; - - /** - * Constructs an archive data source processor that - * implements the DataSourceProcessor service provider interface to allow - * integration with the add data source wizard. It also provides a run - * method overload to allow it to be used independently of the wizard. - */ - public ArchiveExtractorDSProcessor() { - configPanel = ArchiveFilePanel.createInstance(ArchiveExtractorDSProcessor.class.getName(), ArchiveUtil.getArchiveFilters()); - jobProcessingExecutor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat(ARCHIVE_DSP_THREAD_NAME).build()); - } - - @Override - public int canProcess(Path dataSourcePath) throws AutoIngestDataSourceProcessorException { - // check whether this is an archive - if (ArchiveUtil.isArchive(dataSourcePath)){ - // return "high confidence" value - return 100; - } - return 0; - } - - @Override - public void process(String deviceId, Path dataSourcePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callBack) { - run(deviceId, dataSourcePath.toString(), progressMonitor, callBack); - } - - @Override - public String getDataSourceType() { - return DATA_SOURCE_TYPE; - } - - /** - * Gets the panel that allows a user to select a data source and do any - * configuration required by the data source. The panel is less than 544 - * pixels wide and less than 173 pixels high. - * - * @return A selection and configuration panel for this data source - * processor. - */ - @Override - public JPanel getPanel() { - configPanel.readSettings(); - configPanel.select(); - return configPanel; - } - - /** - * Indicates whether the settings in the selection and configuration panel - * are valid and complete. - * - * @return True if the settings are valid and complete and the processor is - * ready to have its run method called, false otherwise. - */ - @Override - public boolean isPanelValid() { - return configPanel.validatePanel(); - } - - /** - * Adds a data source to the case database using a background task in a - * separate thread and the settings provided by the selection and - * configuration panel. Returns as soon as the background task is started. - * The background task uses a callback object to signal task completion and - * return results. - * - * This method should not be called unless isPanelValid returns true. - * - * @param progressMonitor Progress monitor that will be used by the - * background task to report progress. - * @param callback Callback that will be used by the background task - * to return results. - */ - @Override - public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { - if (!setDataSourceOptionsCalled) { - configPanel.storeSettings(); - deviceId = UUID.randomUUID().toString(); - archivePath = configPanel.getContentPaths(); - } - run(deviceId, archivePath, progressMonitor, callback); - } - - /** - * Adds a data source to the case database using a background task in a - * separate thread and the given settings instead of those provided by the - * selection and configuration panel. Returns as soon as the background task - * is started and uses the callback object to signal task completion and - * return results. - * - * @param deviceId An ASCII-printable identifier for the device - * associated with the data source that is - * intended to be unique across multiple cases - * (e.g., a UUID). - * @param archivePath Path to the archive file. - * @param progressMonitor Progress monitor for reporting progress - * during processing. - * @param callback Callback to call when processing is done. - */ - public void run(String deviceId, String archivePath, DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) { - addArchiveTask = new AddArchiveTask(deviceId, archivePath, progressMonitor, callback); - jobProcessingExecutor.submit(addArchiveTask); - } - - /** - * This DSP is a service to AutoIngestDataSourceProcessor only. Hence it is - * only used by AIM. AIM currently doesn't support DSP cancellation. - */ - @Override - public void cancel() { - } - - @Override - public void reset() { - deviceId = null; - archivePath = null; - configPanel.reset(); - setDataSourceOptionsCalled = false; - } -} diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.form b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.form deleted file mode 100644 index af9347df0c..0000000000 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.form +++ /dev/null @@ -1,94 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.java deleted file mode 100644 index cbe39cac1b..0000000000 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveFilePanel.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2011-2018 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.experimental.autoingest; - -import java.io.File; -import java.util.List; -import java.util.logging.Level; -import javax.swing.JFileChooser; -import javax.swing.JPanel; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.filechooser.FileFilter; -import org.apache.commons.lang3.StringUtils; -import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; -import static org.sleuthkit.autopsy.experimental.autoingest.Bundle.*; -import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; -import org.sleuthkit.autopsy.coreutils.DriveUtils; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import org.sleuthkit.autopsy.coreutils.ModuleSettings; -import org.sleuthkit.autopsy.coreutils.PathValidator; - -/** - * Panel for adding an archive file which is supported by 7zip library (e.g. - * "zip", "rar", "arj", "7z", "7zip", "gzip, etc). Allows the user to select a - * file. - */ -@SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives -class ArchiveFilePanel extends JPanel implements DocumentListener { - - private static final Logger logger = Logger.getLogger(ArchiveFilePanel.class.getName()); - private static final String PROP_LAST_ARCHIVE_PATH = "LBL_LastImage_PATH"; //NON-NLS - - private final JFileChooser fileChooser = new JFileChooser(); - - /** - * Externally supplied name is used to store settings - */ - private final String contextName; - - /** - * Creates new form ArchiveFilePanel - * - * @param context A string context name used to read/store last - * used settings. - * @param fileChooserFilters A list of filters to be used with the - * FileChooser. - */ - private ArchiveFilePanel(String context, List fileChooserFilters) { - this.contextName = context; - initComponents(); - - errorLabel.setVisible(false); - - fileChooser.setDragEnabled(false); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - fileChooser.setMultiSelectionEnabled(false); - fileChooserFilters.forEach(fileChooser::addChoosableFileFilter); - if (fileChooserFilters.isEmpty() == false) { - fileChooser.setFileFilter(fileChooserFilters.get(0)); - } - } - - /** - * Creates and returns an instance of a ArchiveFilePanel. - * - * @param context A string context name used to read/store last - * used settings. - * @param fileChooserFilters A list of filters to be used with the - * FileChooser. - * - * @return instance of the ArchiveFilePanel - */ - public static synchronized ArchiveFilePanel createInstance(String context, List fileChooserFilters) { - ArchiveFilePanel instance = new ArchiveFilePanel(context, fileChooserFilters); - // post-constructor initialization of listener support without leaking references of uninitialized objects - instance.pathTextField.getDocument().addDocumentListener(instance); - return instance; - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - - pathLabel = new javax.swing.JLabel(); - browseButton = new javax.swing.JButton(); - pathTextField = new javax.swing.JTextField(); - errorLabel = new javax.swing.JLabel(); - - setMinimumSize(new java.awt.Dimension(0, 65)); - setPreferredSize(new java.awt.Dimension(403, 65)); - - org.openide.awt.Mnemonics.setLocalizedText(pathLabel, org.openide.util.NbBundle.getMessage(ArchiveFilePanel.class, "ArchiveFilePanel.pathLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(ArchiveFilePanel.class, "ArchiveFilePanel.browseButton.text")); // NOI18N - browseButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - browseButtonActionPerformed(evt); - } - }); - - pathTextField.setText(org.openide.util.NbBundle.getMessage(ArchiveFilePanel.class, "ArchiveFilePanel.pathTextField.text")); // NOI18N - - errorLabel.setForeground(new java.awt.Color(255, 0, 0)); - org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(ArchiveFilePanel.class, "ArchiveFilePanel.errorLabel.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(pathTextField) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(browseButton) - .addGap(2, 2, 2)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(pathLabel) - .addComponent(errorLabel)) - .addGap(0, 277, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(pathLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(browseButton) - .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(3, 3, 3) - .addComponent(errorLabel) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - - private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed - String oldText = getContentPaths(); - // set the current directory of the FileChooser if the ArchivePath Field is valid - File currentDir = new File(oldText); - if (currentDir.exists()) { - fileChooser.setCurrentDirectory(currentDir); - } - - if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { - String path = fileChooser.getSelectedFile().getPath(); - setContentPath(path); - } - - updateHelper(); - }//GEN-LAST:event_browseButtonActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton browseButton; - private javax.swing.JLabel errorLabel; - private javax.swing.JLabel pathLabel; - private javax.swing.JTextField pathTextField; - // End of variables declaration//GEN-END:variables - - /** - * Get the path of the user selected archive. - * - * @return the archive path - */ - public String getContentPaths() { - return pathTextField.getText(); - } - - /** - * Set the path of the archive file. - * - * @param s path of the archive file - */ - public void setContentPath(String s) { - pathTextField.setText(s); - } - - public void reset() { - //reset the UI elements to default - pathTextField.setText(null); - } - - /** - * Should we enable the next button of the wizard? - * - * @return true if a proper archive has been selected, false otherwise - */ - @NbBundle.Messages({"DataSourceOnCDriveError.text=Warning: Path to multi-user data source is on \"C:\" drive", - "DataSourceOnCDriveError.noOpenCase.errMsg=Warning: Exception while getting open case." - }) - public boolean validatePanel() { - errorLabel.setVisible(false); - String path = getContentPaths(); - if (StringUtils.isBlank(path)) { - return false; - } - - // display warning if there is one (but don't disable "next" button) - try { - if (false == PathValidator.isValidForMultiUserCase(path, Case.getCurrentCaseThrows().getCaseType())) { - errorLabel.setVisible(true); - errorLabel.setText(Bundle.DataSourceOnCDriveError_text()); - } - } catch (NoCurrentCaseException ex) { - errorLabel.setVisible(true); - errorLabel.setText(Bundle.DataSourceOnCDriveError_noOpenCase_errMsg()); - } - - return new File(path).isFile() - || DriveUtils.isPhysicalDrive(path) - || DriveUtils.isPartition(path); - } - - public void storeSettings() { - String archivePathName = getContentPaths(); - if (null != archivePathName) { - String archivePath = archivePathName.substring(0, archivePathName.lastIndexOf(File.separator) + 1); - ModuleSettings.setConfigSetting(contextName, PROP_LAST_ARCHIVE_PATH, archivePath); - } - } - - public void readSettings() { - String lastArchivePath = ModuleSettings.getConfigSetting(contextName, PROP_LAST_ARCHIVE_PATH); - if (StringUtils.isNotBlank(lastArchivePath)) { - setContentPath(lastArchivePath); - } - } - - @Override - public void insertUpdate(DocumentEvent e) { - updateHelper(); - } - - @Override - public void removeUpdate(DocumentEvent e) { - updateHelper(); - } - - @Override - public void changedUpdate(DocumentEvent e) { - updateHelper(); - } - - /** - * Update functions are called by the pathTextField which has this set as - * it's DocumentEventListener. Each update function fires a property change - * to be caught by the parent panel. - * - */ - @NbBundle.Messages({"ArchiveFilePanel.moduleErr=Module Error", - "ArchiveFilePanel.moduleErr.msg=A module caused an error listening to ArchiveFilePanel updates." - + " See log to determine which module. Some data could be incomplete.\n"}) - private void updateHelper() { - try { - firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true); - } catch (Exception e) { - logger.log(Level.SEVERE, "ArchiveFilePanel listener threw exception", e); //NON-NLS - MessageNotifyUtil.Notify.error(ArchiveFilePanel_moduleErr(), ArchiveFilePanel_moduleErr_msg()); - } - } - - /** - * Set the focus to the pathTextField. - */ - public void select() { - pathTextField.requestFocusInWindow(); - } -} diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveUtil.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveUtil.java deleted file mode 100644 index c22dfbd4ee..0000000000 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/ArchiveUtil.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2015 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.experimental.autoingest; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.RandomAccessFile; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import javax.swing.filechooser.FileFilter; -import net.sf.sevenzipjbinding.ISequentialOutStream; -import net.sf.sevenzipjbinding.ISevenZipInArchive; -import net.sf.sevenzipjbinding.SevenZip; -import net.sf.sevenzipjbinding.SevenZipException; -import net.sf.sevenzipjbinding.SevenZipNativeInitializationException; -import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream; -import net.sf.sevenzipjbinding.simple.ISimpleInArchive; -import net.sf.sevenzipjbinding.simple.ISimpleInArchiveItem; -import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.casemodule.GeneralFilter; -import org.sleuthkit.autopsy.coreutils.FileUtil; - -/** - * Set of utilities that handles archive file extraction. Uses 7zip library. - */ -final class ArchiveUtil { - - private static final String[] SUPPORTED_EXTENSIONS = {"zip", "rar", "arj", "7z", "7zip", "gzip", "gz", "bzip2", "tar", "tgz",}; // NON-NLS - private static final List ARCHIVE_EXTS = Arrays.asList(".zip", ".rar", ".arj", ".7z", ".7zip", ".gzip", ".gz", ".bzip2", ".tar", ".tgz"); //NON-NLS - @NbBundle.Messages("GeneralFilter.archiveDesc.text=Archive Files (.zip, .rar, .arj, .7z, .7zip, .gzip, .gz, .bzip2, .tar, .tgz)") - private static final String ARCHIVE_DESC = Bundle.GeneralFilter_archiveDesc_text(); - private static final GeneralFilter SEVEN_ZIP_FILTER = new GeneralFilter(ARCHIVE_EXTS, ARCHIVE_DESC); - private static final List ARCHIVE_FILTERS = new ArrayList<>(); - static { - ARCHIVE_FILTERS.add(SEVEN_ZIP_FILTER); - } - - private ArchiveUtil() { - } - - static List getArchiveFilters() { - return ARCHIVE_FILTERS; - } - - static boolean isArchive(Path dataSourcePath) { - String fileName = dataSourcePath.getFileName().toString(); - // check whether it's a zip archive file that can be extracted - return isAcceptedByFiler(new File(fileName), ARCHIVE_FILTERS); - } - - private static boolean isAcceptedByFiler(File file, List filters) { - for (FileFilter filter : filters) { - if (filter.accept(file)) { - return true; - } - } - return false; - } - - /** - * Enum of mime types which support archive extraction - */ - private enum SupportedArchiveExtractionFormats { - - ZIP("application/zip"), //NON-NLS - SEVENZ("application/x-7z-compressed"), //NON-NLS - GZIP("application/gzip"), //NON-NLS - XGZIP("application/x-gzip"), //NON-NLS - XBZIP2("application/x-bzip2"), //NON-NLS - XTAR("application/x-tar"), //NON-NLS - XGTAR("application/x-gtar"), - XRAR("application/x-rar-compressed"); //NON-NLS - - private final String mimeType; - - SupportedArchiveExtractionFormats(final String mimeType) { - this.mimeType = mimeType; - } - - @Override - public String toString() { - return this.mimeType; - } - } - - /** - * Exception thrown when archive handling resulted in an error - */ - static class ArchiveExtractionException extends Exception { - - private static final long serialVersionUID = 1L; - - ArchiveExtractionException(String message) { - super(message); - } - - ArchiveExtractionException(String message, Throwable cause) { - super(message, cause); - } - } - - /** - * This method returns array of supported file extensions. - * - * @return String array of supported file extensions. - */ - static String[] getSupportedArchiveTypes(){ - return SUPPORTED_EXTENSIONS; - } - - /** - * This method returns true if the MIME type is currently supported. Else it - * returns false. - * - * @param mimeType File mime type - * - * @return This method returns true if the file format is currently - * supported. Else it returns false. - */ - static boolean isExtractionSupportedByMimeType(String mimeType) { - for (SupportedArchiveExtractionFormats s : SupportedArchiveExtractionFormats.values()) { - if (s.toString().equals(mimeType)) { - return true; - } - } - return false; - } - - /** - * This method returns true if the file extension is currently supported. - * Else it returns false. Attempt extension based detection in case Apache - * Tika based detection fails. - * - * @param extension File extension - * - * @return This method returns true if the file format is currently - * supported. Else it returns false. - */ - static boolean isExtractionSupportedByFileExtension(String extension) { - // attempt extension matching - for (String supportedExtension : SUPPORTED_EXTENSIONS) { - if (extension.equals(supportedExtension)) { - return true; - } - } - return false; - } - - /** - * Returns a list of file names contained within an archive. - * - * @param archiveFilePath Full path to the archive file - * - * @return List of file names contained within archive - * - * @throws - * ArchiveExtractionException - */ - static List getListOfFilesWithinArchive(String archiveFilePath) throws ArchiveExtractionException { - if (!SevenZip.isInitializedSuccessfully() && (SevenZip.getLastInitializationException() == null)) { - try { - SevenZip.initSevenZipFromPlatformJAR(); - } catch (SevenZipNativeInitializationException ex) { - throw new ArchiveExtractionException("AutoIngestDashboard_bnPause_paused", ex); - } - } - List files = new ArrayList<>(); - ISevenZipInArchive inArchive = null; - try { - RandomAccessFile randomAccessFile = new RandomAccessFile(new File(archiveFilePath), "r"); - inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile)); - final ISimpleInArchive simpleInArchive = inArchive.getSimpleInterface(); - for (ISimpleInArchiveItem item : simpleInArchive.getArchiveItems()) { - files.add(item.getPath()); - } - } catch (Exception ex) { - throw new ArchiveExtractionException("Exception while reading archive contents", ex); - } finally { - if (inArchive != null) { - try { - inArchive.close(); - } catch (SevenZipException ex) { - throw new ArchiveExtractionException("Exception while closing the archive", ex); - } - } - } - return files; - } - - /** - * Extracts contents of an archive file into a directory. - * - * @param archiveFilePath Full path to archive. - * @param destinationFolder Path to directory where results will be - * extracted to. - * - * @return List of file names contained within archive - * @throws - * ArchiveExtractionException - */ - static List unpackArchiveFile(String archiveFilePath, String destinationFolder) throws ArchiveExtractionException { - if (!SevenZip.isInitializedSuccessfully() && (SevenZip.getLastInitializationException() == null)) { - try { - SevenZip.initSevenZipFromPlatformJAR(); - } catch (SevenZipNativeInitializationException ex) { - throw new ArchiveExtractionException("Unable to initialize 7Zip libraries", ex); - } - } - List files = new ArrayList<>(); - ISevenZipInArchive inArchive = null; - try { - RandomAccessFile randomAccessFile = new RandomAccessFile(new File(archiveFilePath), "r"); - inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile)); - final ISimpleInArchive simpleInArchive = inArchive.getSimpleInterface(); - - for (ISimpleInArchiveItem entry : simpleInArchive.getArchiveItems()) { - String entryPathInArchive = entry.getPath(); - Path fullPath = Paths.get(destinationFolder, FileUtil.escapeFileName(entryPathInArchive)); // remove illegal characters from file name - File destFile = new File(fullPath.toString()); - File destinationParent = destFile.getParentFile(); - destinationParent.mkdirs(); - if (!entry.isFolder()) { - UnpackStream unpackStream = null; - try { - Long size = entry.getSize(); - unpackStream = new UnpackStream(destFile.toString(), size); - entry.extractSlow(unpackStream); - } catch (Exception ex) { - throw new ArchiveExtractionException("Exception while unpacking archive contents", ex); - } finally { - if (unpackStream != null) { - unpackStream.close(); - } - } - } - // keep track of extracted files - files.add(fullPath.toString()); - } - } catch (Exception ex) { - throw new ArchiveExtractionException("Exception while unpacking archive contents", ex); - } finally { - try { - if (inArchive != null) { - inArchive.close(); - } - } catch (SevenZipException ex) { - throw new ArchiveExtractionException("Exception while closing the archive", ex); - } - } - return files; - } - - /** - * Stream used to unpack an archive to local file - */ - private static class UnpackStream implements ISequentialOutStream { - - private OutputStream output; - private String destFilePath; - - UnpackStream(String destFilePath, long size) throws ArchiveExtractionException { - this.destFilePath = destFilePath; - try { - output = new FileOutputStream(destFilePath); - } catch (IOException ex) { - throw new ArchiveExtractionException("Exception while unpacking archive contents", ex); - } - - } - - @Override - public int write(byte[] bytes) throws SevenZipException { - try { - output.write(bytes); - } catch (IOException ex) { - throw new SevenZipException("Error writing unpacked file to " + destFilePath, ex); - } - return bytes.length; - } - - public void close() throws ArchiveExtractionException { - if (output != null) { - try { - output.flush(); - output.close(); - } catch (IOException ex) { - throw new ArchiveExtractionException("Exception while closing the archive", ex); - } - } - } - } -} diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java index 55332cc03c..cf0e5c615d 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/AutoIngestManager.java @@ -32,7 +32,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; -import java.sql.SQLException; import java.time.Duration; import java.time.Instant; import java.util.ArrayList; @@ -70,7 +69,6 @@ import org.sleuthkit.autopsy.coordinationservice.CoordinationService.Lock; import org.sleuthkit.autopsy.core.RuntimeProperties; import org.sleuthkit.autopsy.core.ServicesMonitor; import org.sleuthkit.autopsy.core.ServicesMonitor.ServicesMonitorException; -import org.sleuthkit.autopsy.core.UserPreferencesException; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult; import static org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS; @@ -92,6 +90,9 @@ import org.sleuthkit.autopsy.experimental.configuration.SharedConfiguration; import org.sleuthkit.autopsy.experimental.configuration.SharedConfiguration.SharedConfigurationException; import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor; import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException; +import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSource; +import org.sleuthkit.autopsy.datasourceprocessors.AddDataSourceCallback; +import org.sleuthkit.autopsy.datasourceprocessors.DataSourceProcessorUtility; import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestJob.AutoIngestJobException; import org.sleuthkit.autopsy.experimental.autoingest.AutoIngestNodeControlEvent.ControlEventType; import org.sleuthkit.autopsy.ingest.IngestJob; diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties index 4d2ade1b0a..0f074ca11c 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties @@ -219,10 +219,6 @@ AutoIngestMetricsDialog.reportTextArea.text= AutoIngestMetricsDialog.metricsButton.text=Generate Metrics Report AutoIngestMetricsDialog.closeButton.text=Close AutoIngestMetricsDialog.datePicker.toolTipText=Choose a date -ArchiveFilePanel.pathLabel.text=Browse for an archive file: -ArchiveFilePanel.browseButton.text=Browse -ArchiveFilePanel.pathTextField.text= -ArchiveFilePanel.errorLabel.text=Error Label AutoIngestMetricsDialog.startingDataLabel.text=Starting Date: AutoIngestControlPanel.bnDeprioritizeCase.text=Deprioritize Case AutoIngestControlPanel.bnDeprioritizeJob.text=Deprioritize Job diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED index c10ac5581f..a7336e26a6 100755 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/autoingest/Bundle.properties-MERGED @@ -8,9 +8,6 @@ AinStatusNode.status.shuttingdown=Shutting Down AinStatusNode.status.startingup=Starting Up AinStatusNode.status.title=Status AinStatusNode.status.unknown=Unknown -ArchiveDSP.dsType.text=Archive file -ArchiveFilePanel.moduleErr=Module Error -ArchiveFilePanel.moduleErr.msg=A module caused an error listening to ArchiveFilePanel updates. See log to determine which module. Some data could be incomplete.\n AutoIngestAdminActions.cancelJobAction.title=Cancel Job AutoIngestAdminActions.cancelModuleAction.title=Cancel Module AutoIngestAdminActions.deleteCaseAction.error=Failed to delete case. @@ -170,12 +167,9 @@ CTL_AutoIngestDashboardOpenAction=Auto Ingest Dashboard CTL_AutoIngestDashboardTopComponent=Auto Ingest Jobs CTL_CasesDashboardAction=Multi-User Cases Dashboard CTL_CasesDashboardTopComponent=Cases -DataSourceOnCDriveError.noOpenCase.errMsg=Warning: Exception while getting open case. -DataSourceOnCDriveError.text=Warning: Path to multi-user data source is on "C:" drive DeleteCaseInputDirectoriesAction.menuItemText=Delete Input Directories DeleteCasesAction.menuItemText=Delete Case and Jobs DeleteCasesForReprocessingAction.menuItemText=Delete for Reprocessing -GeneralFilter.archiveDesc.text=Archive Files (.zip, .rar, .arj, .7z, .7zip, .gzip, .gz, .bzip2, .tar, .tgz) HINT_CasesDashboardTopComponent=This is an adminstrative dashboard for multi-user cases OpenAutoIngestLogAction.deletedLogErrorMsg=The case auto ingest log has been deleted. OpenAutoIngestLogAction.logOpenFailedErrorMsg=Failed to open case auto ingest log. See application log for details. @@ -377,10 +371,6 @@ AutoIngestMetricsDialog.reportTextArea.text= AutoIngestMetricsDialog.metricsButton.text=Generate Metrics Report AutoIngestMetricsDialog.closeButton.text=Close AutoIngestMetricsDialog.datePicker.toolTipText=Choose a date -ArchiveFilePanel.pathLabel.text=Browse for an archive file: -ArchiveFilePanel.browseButton.text=Browse -ArchiveFilePanel.pathTextField.text= -ArchiveFilePanel.errorLabel.text=Error Label AutoIngestMetricsDialog.startingDataLabel.text=Starting Date: AutoIngestControlPanel.bnDeprioritizeCase.text=Deprioritize Case AutoIngestControlPanel.bnDeprioritizeJob.text=Deprioritize Job From 572c1af5a3967831a3984d6e13bffe0815c1ef4c Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Mon, 11 Mar 2019 14:02:23 -0400 Subject: [PATCH 23/80] 4792 adjustments to support intra-case other ocurrences again --- .../DataContentViewerOtherCases.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index 7853fcaeed..75b6875f2c 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -774,10 +774,19 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // get correlation and reference set instances from DB correlatedNodeDataMap.putAll(getCorrelatedInstances(corAttr, dataSourceName, deviceId)); for (OtherOccurrenceNodeInstanceData nodeData : correlatedNodeDataMap.values()) { - try { - caseNames.put(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID(), nodeData.getCorrelationAttributeInstance().getCorrelationCase()); - } catch (EamDbException ex) { - System.out.println("can't get correlation case"); + if (nodeData.isCentralRepoNode()) { + try { + caseNames.put(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID(), nodeData.getCorrelationAttributeInstance().getCorrelationCase()); + } catch (EamDbException ex) { + System.out.println("can't get correlation case"); + } + } else { + try { + caseNames.put(Case.getCurrentCaseThrows().getName(), new CorrelationCase(Case.getCurrentCaseThrows().getName(), Case.getCurrentCaseThrows().getDisplayName())); + } catch (NoCurrentCaseException ex){ + System.out.println("NO cURRENT CASE"); + } + } } } @@ -852,7 +861,6 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi try { if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) && dataSourceModel.getValueAt(dataSourceTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { - System.out.println(((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID()); tableModel.addNodeData(nodeData); } } catch (EamDbException ex) { From ae60e0a819297bd96382a42b0ca7e99e92153856 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Mon, 11 Mar 2019 15:01:41 -0400 Subject: [PATCH 24/80] Added a refresh button --- .../keywordsearch/multicase/Bundle.properties | 1 + .../multicase/Bundle.properties-MERGED | 37 +------------------ .../MultiCaseKeywordSearchPanel.java | 1 + .../multicase/SelectMultiUserCasesPanel.form | 30 ++++++++++++++- .../multicase/SelectMultiUserCasesPanel.java | 20 +++++++++- 5 files changed, 50 insertions(+), 39 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties index 8d03fe3edd..b94b04069b 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties @@ -20,3 +20,4 @@ MultiCaseKeywordSearchPanel.exportButton.text=Export Results MultiCaseKeywordSearchPanel.cancelButton.text=Cancel MultiCaseKeywordSearchPanel.resultsCountLabel.text= MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Pick Cases +SelectMultiUserCasesPanel.refreshButton.text=Refresh diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index 7b5dabbe0c..e1ef2fb028 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -29,60 +29,24 @@ MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be select MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel. MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled -# {0} - connection info -# {1} - case name -# {2} - case directory MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2} -# {0} - PostgreSQL server host -# {1} - PostgreSQL server port -# {2} - case database name -# {3} - case directory MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3} -# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0} -# {0} - case_name MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0} -# {0} - case directory path MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} -# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} -# {0} - host -# {1} - port MultiCaseSearcher.exceptionMessage.failedToQueryCoordinationServer=Failed to obtain read lock for case directory at {0}:{1} -# {0} - Solr document id -# {1} - case database name -# {2} - case directory MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2} -# {0} - file name -# {1} - case directory MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} -# {0} - list of cases MultiCaseSearcher.exceptionMessage.noCasesFound=No cases found for: {0} -# {0} - file name -# {1} - case directory MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} -# {0} - query -# {1} - case_name MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query "{0}" on case {1} -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.findingCases=Finding selected cases -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for "{0}" ({1} of {2} case(s)) -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for "{0}" ({1} of {2} case(s)) -# {0} - total cases MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s) SelectMultiUserCasesPanel.selectAllButton.text=Select All SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All @@ -106,3 +70,4 @@ MultiCaseKeywordSearchPanel.exportButton.text=Export Results MultiCaseKeywordSearchPanel.cancelButton.text=Cancel MultiCaseKeywordSearchPanel.resultsCountLabel.text= MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Pick Cases +SelectMultiUserCasesPanel.jButton1.text=Refresh diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java index 3a25471819..c329046abc 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java @@ -242,6 +242,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex } heightOfAllRows += caseCheckBox.getPreferredSize().height; casesPanel.add(caseCheckBox); + casesPanel.revalidate(); } casesPanel.setPreferredSize(new Dimension(casePanelWidth, heightOfAllRows)); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form index a2bf4e2cc6..936ae9bb7e 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form @@ -26,7 +26,9 @@ - + + + @@ -48,6 +50,7 @@ + @@ -80,16 +83,41 @@
+ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java index 02a7eab8a2..b6cce38a69 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java @@ -100,6 +100,7 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { jLabel1 = new javax.swing.JLabel(); confirmSelections = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); + refreshButton = new javax.swing.JButton(); org.openide.awt.Mnemonics.setLocalizedText(selectAllButton, org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, "SelectMultiUserCasesPanel.selectAllButton.text")); // NOI18N selectAllButton.addActionListener(new java.awt.event.ActionListener() { @@ -131,6 +132,13 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { } }); + org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle.getMessage(SelectMultiUserCasesPanel.class, "SelectMultiUserCasesPanel.refreshButton.text")); // NOI18N + refreshButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + refreshButtonActionPerformed(evt); + } + }); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -145,7 +153,9 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { .addComponent(deselectAllButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 365, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 367, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 286, Short.MAX_VALUE) + .addComponent(refreshButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(confirmSelections, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cancelButton))) @@ -162,7 +172,8 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { .addComponent(selectAllButton) .addComponent(deselectAllButton) .addComponent(confirmSelections) - .addComponent(cancelButton)) + .addComponent(cancelButton) + .addComponent(refreshButton)) .addContainerGap(15, Short.MAX_VALUE)) ); }// //GEN-END:initComponents @@ -195,6 +206,10 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { parentDialog.setVisible(false); }//GEN-LAST:event_cancelButtonActionPerformed + private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed + caseBrowserPanel.displayCases(); + }//GEN-LAST:event_refreshButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; @@ -202,6 +217,7 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { private javax.swing.JButton deselectAllButton; private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane multiUserCaseScrollPane; + private javax.swing.JButton refreshButton; private javax.swing.JButton selectAllButton; // End of variables declaration//GEN-END:variables } From 04a132f3b4c65d1ce666d1f8ee82b42d34b5ebf6 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Mon, 11 Mar 2019 15:31:57 -0400 Subject: [PATCH 25/80] Fixed merged bundle issue --- .../multicase/Bundle.properties-MERGED | 38 ++++++++++++++++++- .../multicase/SelectMultiUserCasesPanel.form | 23 +---------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index e1ef2fb028..f0173b2afe 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -29,24 +29,60 @@ MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be select MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel. MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled +# {0} - connection info +# {1} - case name +# {2} - case directory MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2} +# {0} - PostgreSQL server host +# {1} - PostgreSQL server port +# {2} - case database name +# {3} - case directory MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3} +# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0} +# {0} - case_name MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0} +# {0} - case directory path MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} +# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} +# {0} - host +# {1} - port MultiCaseSearcher.exceptionMessage.failedToQueryCoordinationServer=Failed to obtain read lock for case directory at {0}:{1} +# {0} - Solr document id +# {1} - case database name +# {2} - case directory MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2} +# {0} - file name +# {1} - case directory MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} +# {0} - list of cases MultiCaseSearcher.exceptionMessage.noCasesFound=No cases found for: {0} +# {0} - file name +# {1} - case directory MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} +# {0} - query +# {1} - case_name MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query "{0}" on case {1} +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.findingCases=Finding selected cases +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for "{0}" ({1} of {2} case(s)) +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for "{0}" ({1} of {2} case(s)) +# {0} - total cases MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s) SelectMultiUserCasesPanel.selectAllButton.text=Select All SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All @@ -70,4 +106,4 @@ MultiCaseKeywordSearchPanel.exportButton.text=Export Results MultiCaseKeywordSearchPanel.cancelButton.text=Cancel MultiCaseKeywordSearchPanel.resultsCountLabel.text= MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Pick Cases -SelectMultiUserCasesPanel.jButton1.text=Refresh +SelectMultiUserCasesPanel.refreshButton.text=Refresh diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form index 936ae9bb7e..2de6a9ec23 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form @@ -82,39 +82,18 @@ - - - - - - - + - - - - - - - - - - - - - - - From 6cc77655b10dc98dab04730d0678ac632ab44660 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Tue, 12 Mar 2019 12:15:42 -0400 Subject: [PATCH 26/80] Requested changes, API change, and new CaseMetadata method for locating metadata file --- .../multiusercases/CaseNodeData.java | 2 +- .../multicase/Bundle.properties-MERGED | 5 - .../MultiCaseKeywordSearchPanel.form | 12 +- .../MultiCaseKeywordSearchPanel.java | 52 +++++---- .../multicase/MultiCaseSearcher.java | 105 +++--------------- .../multicase/SelectMultiUserCasesDialog.java | 2 +- .../multicase/SelectMultiUserCasesPanel.java | 12 +- 7 files changed, 64 insertions(+), 126 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java b/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java index 3869e364d0..8c32c88895 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java @@ -151,7 +151,7 @@ public final class CaseNodeData { * @return The case directory path. */ public Path getDirectory() { - return this.directory; + return this.directory; } /** diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index f0173b2afe..cbb81b3e99 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -46,9 +46,6 @@ MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} # {0} - case directory MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} -# {0} - host -# {1} - port -MultiCaseSearcher.exceptionMessage.failedToQueryCoordinationServer=Failed to obtain read lock for case directory at {0}:{1} # {0} - Solr document id # {1} - case database name # {2} - case directory @@ -56,8 +53,6 @@ MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case datab # {0} - file name # {1} - case directory MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} -# {0} - list of cases -MultiCaseSearcher.exceptionMessage.noCasesFound=No cases found for: {0} # {0} - file name # {1} - case directory MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form index ffe256e8da..f348e17108 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form @@ -39,10 +39,10 @@ - + - - + + @@ -61,7 +61,7 @@ - + @@ -72,9 +72,9 @@ - + - + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java index c329046abc..e8b5561978 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.keywordsearch.multicase; +import com.google.common.collect.Lists; import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.DeadEvent; import java.awt.Color; @@ -33,8 +34,12 @@ import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.logging.Level; +import java.util.stream.Collectors; import javax.swing.AbstractButton; import javax.swing.JCheckBox; import javax.swing.JFileChooser; @@ -52,6 +57,7 @@ import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.NbBundle.Messages; import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.EmptyNode; import org.sleuthkit.autopsy.keywordsearch.multicase.MultiCaseSearcher.MultiCaseSearcherException; @@ -75,8 +81,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex private static final MultiCaseKeywordSearchNode NO_RESULTS_NODE = new MultiCaseKeywordSearchNode(new ArrayList<>()); private Collection allSearchHits = new ArrayList<>(); private Collection searchExceptions = new ArrayList<>(); - private SelectMultiUserCasesDialog caseSelectionDialog = SelectMultiUserCasesDialog.getInstance(); - private Node[] currentSelections; + private final SelectMultiUserCasesDialog caseSelectionDialog = SelectMultiUserCasesDialog.getInstance(); + private Map caseNameToCaseDataMap; /** * Creates new form MultiCaseKeywordSearchPanel @@ -100,7 +106,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex caseSelectionDialog.subscribeToNewCaseSelections(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - populateCasesList((Node[]) e.getSource()); + populateCasesList((List) e.getSource()); revalidate(); } }); @@ -109,6 +115,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex searchProgressBar.setVisible(false); exportButton.setEnabled(false); outline.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + caseNameToCaseDataMap = new HashMap<>(); setColumnWidths(); } @@ -222,15 +229,16 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex /** * Get the list of cases from the Multi user case browser */ - private void populateCasesList(Node[] selectedNodes) { + private void populateCasesList(List selectedNodes) { Collection disabledCases = getCases(false); casesPanel.removeAll(); - currentSelections = selectedNodes; + caseNameToCaseDataMap.clear(); int casePanelWidth = casesPanel.getPreferredSize().width; int heightOfAllRows = 0; - for (Node data : selectedNodes) { + for (CaseNodeData data : selectedNodes) { //select all new cases and cases which were previously selected String multiUserCaseName = data.getName(); + caseNameToCaseDataMap.put(multiUserCaseName, data); boolean isSelected = true; if (disabledCases.contains(multiUserCaseName)) { isSelected = false; @@ -422,9 +430,9 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex .addComponent(substringRadioButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(regexRadioButton)) - .addComponent(keywordTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 570, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(toolDescriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 84, Short.MAX_VALUE)) + .addComponent(keywordTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 679, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(toolDescriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(casesLabel) @@ -448,8 +456,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(viewErrorsButton) - .addComponent(warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 695, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(warningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 695, Short.MAX_VALUE)) + .addGap(14, 14, 14) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(exportButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE)))))) @@ -527,6 +535,11 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex } else if (searchString.isEmpty()) { warningLabel.setText(Bundle.MultiCaseKeywordSearchPanel_warningText_emptySearch()); } else { + //Map case names to CaseNodeData objects + Collection caseNodeData = cases.stream() + .map(c -> caseNameToCaseDataMap.get(c)) + .collect(Collectors.toList()); + //perform the search warningLabel.setText(""); allSearchHits = new ArrayList<>(); @@ -537,7 +550,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex SearchQuery kwsQuery = new SearchQuery(getQueryType(), searchString); em.setRootContext(PLEASE_WAIT_NODE); resultsCountLabel.setText(""); - searchThread = new SearchThread(cases, kwsQuery); + searchThread = new SearchThread(caseNodeData, kwsQuery); searchThread.registerWithSearcher(MultiCaseKeywordSearchPanel.this); searchThread.start(); } @@ -697,10 +710,11 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex }//GEN-LAST:event_viewErrorsButtonActionPerformed private void pickCasesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pickCasesButtonActionPerformed - if (currentSelections != null) { - caseSelectionDialog.setNodeSelections(currentSelections); - } + //if (currentSelections != null) { + // caseSelectionDialog.setNodeSelections(currentSelections); + //} caseSelectionDialog.setVisible(true); + }//GEN-LAST:event_pickCasesButtonActionPerformed private void substringRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_substringRadioButtonActionPerformed @@ -855,7 +869,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex */ private final class SearchThread extends Thread { - private final Collection caseNames; + private final Collection caseNodes; private final SearchQuery searchQuery; private final MultiCaseSearcher multiCaseSearcher = new MultiCaseSearcher(); @@ -865,8 +879,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex * @param caseNames The names of the cases to search. * @param query The keyword search query to perform. */ - private SearchThread(Collection caseNames, SearchQuery searchQuery) { - this.caseNames = caseNames; + private SearchThread(Collection caseNodes, SearchQuery searchQuery) { + this.caseNodes = caseNodes; this.searchQuery = searchQuery; } @@ -899,7 +913,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex @Override public void run() { - multiCaseSearcher.performKeywordSearch(caseNames, searchQuery, new MultiCaseKeywordSearchProgressIndicator(searchProgressBar)); + multiCaseSearcher.performKeywordSearch(caseNodes, searchQuery, new MultiCaseKeywordSearchProgressIndicator(searchProgressBar)); } } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java index cd06a01bed..e391a9de22 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java @@ -35,6 +35,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Level; +import java.util.stream.Collectors; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -55,8 +56,10 @@ import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.CoreAdminParams; import org.apache.solr.common.params.CursorMarkParams; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.CaseMetadata; +import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData; import org.sleuthkit.autopsy.coordinationservice.CoordinationService; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.core.UserPreferencesException; @@ -145,11 +148,11 @@ final class MultiCaseSearcher { "MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0}", "MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled" }) - void performKeywordSearch(final Collection caseNames, final SearchQuery query, final ProgressIndicator progressIndicator) { + void performKeywordSearch(final Collection caseNodes, final SearchQuery query, final ProgressIndicator progressIndicator) { progressIndicator.start(Bundle.MultiCaseSearcher_progressMessage_findingCases()); try { searchStopped = false; //mark the search as started - final List caseMetadata = getMultiCaseMetadata(caseNames); + final List caseMetadata = getMultiCaseMetadata(caseNodes); checkForCancellation(); //eventBus.post("number of cases to search determined"); progressIndicator.progress(Bundle.MultiCaseSearcher_progressMessage_creatingSolrQuery()); @@ -223,8 +226,9 @@ final class MultiCaseSearcher { * @throws MultiCaseSearcherException * @throws InterruptedException */ - private List getMultiCaseMetadata(final Collection caseNames) throws MultiCaseSearcherException, InterruptedException { - final Map casesToCasePaths = getCaseDirectories(caseNames); + private List getMultiCaseMetadata(final Collection caseNodes) throws MultiCaseSearcherException, InterruptedException { + final Map casesToCasePaths = caseNodes.stream() + .collect(Collectors.toMap(CaseNodeData::getDirectory, CaseNodeData::getName)); checkForCancellation(); final List cases = new ArrayList<>(); for (Map.Entry entry : casesToCasePaths.entrySet()) { @@ -238,78 +242,6 @@ final class MultiCaseSearcher { return cases; } - /** - * Uses coordination service data to find the case directories of the cases. - * - * @param caseNames The names of the cases. - * - * @return A mapping of case directory paths to case names, possibly empty. - * - * @throws MultiCaseSearcherException - * @throws InterruptedException - */ - @NbBundle.Messages({ - "# {0} - host", "# {1} - port", "MultiCaseSearcher.exceptionMessage.failedToQueryCoordinationServer=Failed to obtain read lock for case directory at {0}:{1}", - "# {0} - list of cases", "MultiCaseSearcher.exceptionMessage.noCasesFound=No cases found for: {0}" - }) - private Map getCaseDirectories(final Collection caseNames) throws MultiCaseSearcherException, InterruptedException { - final Map casePathToCaseMap = new HashMap<>(); - final List caseNodeNames; - try { - CoordinationService coordinationService = CoordinationService.getInstance(); - caseNodeNames = coordinationService.getNodeList(CoordinationService.CategoryNode.CASES); - } catch (CoordinationService.CoordinationServiceException ex) { - throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToQueryCoordinationServer(UserPreferences.getIndexingServerHost(), UserPreferences.getIndexingServerPort()), ex); - } - for (String nodeName : caseNodeNames) { - /* - * Find the case directory paths by selecting each coordination - * service case directory lock node path that has the case name in - * the path. - */ - checkForCancellation(); - final Path caseDirectoryPath = Paths.get(nodeName); - boolean contansSlash = caseDirectoryPath.toString().contains("\\") || caseDirectoryPath.toString().contains("//"); - if (!contansSlash) { - /* - * Skip case name lock nodes. - */ - continue; - } - final String fileName = caseDirectoryPath.getFileName().toString(); - if (fileName.equals(CASE_AUTO_INGEST_LOG_NAME) || fileName.endsWith(RESOURCES_LOCK_SUFFIX)) { - /* - * Skip case auto ingest log and case resource lock nodes. - */ - continue; - } - for (String aCase : caseNames) { - checkForCancellation(); - final String normalizedCaseName = aCase.toUpperCase(); - if (fileName.contains(normalizedCaseName)) { - logger.log(Level.INFO, "Match found: Case node name {0} contains case name {1}", new Object[]{nodeName, normalizedCaseName}); - try { - Path realCaseDirectoryPath = caseDirectoryPath.toRealPath(LinkOption.NOFOLLOW_LINKS); - logger.log(Level.INFO, "Case directory path {0} resolves to real path {1}", new Object[]{caseDirectoryPath, realCaseDirectoryPath}); - final File caseDirectory = realCaseDirectoryPath.toFile(); - if (caseDirectory.exists()) { - casePathToCaseMap.put(realCaseDirectoryPath, aCase); - } else { - logger.log(Level.SEVERE, String.format("Case directory %s does NOT exist", caseDirectoryPath)); - } - } catch (IOException ex) { - logger.log(Level.SEVERE, String.format("Case directory path %s does NOT resolve to a real path", caseDirectoryPath), ex); - } - break; - } - } - } - if (casePathToCaseMap.isEmpty()) { - throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_noCasesFound(StringUtils.join(caseNames, ','))); - } - return casePathToCaseMap; - } - /** * Gets the metadata for a case from the case metadata file in a given case * directory. @@ -326,22 +258,15 @@ final class MultiCaseSearcher { }) private static CaseMetadata getCaseMetadata(Path caseDirectoryPath) throws MultiCaseSearcherException { - CaseMetadata caseMetadata = null; - final File[] caseFiles = caseDirectoryPath.toFile().listFiles(); - for (File file : caseFiles) { - final String fileName = file.getName().toLowerCase(); - if (fileName.endsWith(CaseMetadata.getFileExtension())) { - try { - return new CaseMetadata(file.toPath()); - } catch (CaseMetadata.CaseMetadataException ex) { - throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToParseCaseMetadata(caseDirectoryPath), ex); - } + Path metadataPath = CaseMetadata.getCaseMetadataFile(caseDirectoryPath); + if (metadataPath != null) { + try { + return new CaseMetadata(metadataPath); + } catch (CaseMetadata.CaseMetadataException ex) { + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToParseCaseMetadata(caseDirectoryPath), ex); } } - if (null == caseMetadata) { - throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToFindCaseMetadata(caseDirectoryPath)); - } - return caseMetadata; + throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_failedToFindCaseMetadata(caseDirectoryPath)); } /** diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java index bb0fe4dab3..ceabe127cf 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java @@ -54,7 +54,7 @@ public class SelectMultiUserCasesDialog extends javax.swing.JDialog { void subscribeToNewCaseSelections(ActionListener l) { multiUserCasesPanel.subscribeToNewCaseSelections(l); } - + /** * Set the node selections for the window * diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java index b6cce38a69..726363ad9f 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java @@ -23,10 +23,12 @@ import java.awt.event.ActionListener; import java.beans.PropertyVetoException; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.swing.JDialog; import org.openide.explorer.ExplorerManager; import org.openide.nodes.Node; -import org.openide.util.Exceptions; +import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData; import org.sleuthkit.autopsy.casemodule.multiusercasesbrowser.MultiUserCasesBrowserPanel; /** @@ -182,7 +184,6 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { try { caseBrowserPanel.getExplorerManager().setSelectedNodes(caseBrowserPanel.getExplorerManager().getRootContext().getChildren().getNodes()); } catch (PropertyVetoException ex) { - Exceptions.printStackTrace(ex); } }//GEN-LAST:event_selectAllButtonActionPerformed @@ -190,14 +191,17 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { try { caseBrowserPanel.getExplorerManager().setSelectedNodes(new Node[0]); } catch (PropertyVetoException ex) { - Exceptions.printStackTrace(ex); } }//GEN-LAST:event_deselectAllButtonActionPerformed private void confirmSelectionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_confirmSelectionsActionPerformed + Node[] selections = caseBrowserPanel.getExplorerManager().getSelectedNodes(); + List caseNodeData = Stream.of(selections) + .map(n -> n.getLookup().lookup(CaseNodeData.class)) + .collect(Collectors.toList()); listeners.forEach((l) -> { //Pass along the selected nodes in the event. - l.actionPerformed(new ActionEvent(caseBrowserPanel.getExplorerManager().getSelectedNodes(), -1, "")); + l.actionPerformed(new ActionEvent(caseNodeData, -1, "")); }); parentDialog.setVisible(false); }//GEN-LAST:event_confirmSelectionsActionPerformed From b0a369fab0bd63d31f2d7341e76582b9a461820f Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Tue, 12 Mar 2019 12:28:57 -0400 Subject: [PATCH 27/80] Removed unncessary new space in CaseNodeData, and checked in changes to CaseMetadata --- .../autopsy/casemodule/CaseMetadata.java | 22 +++++++++++++++++++ .../multiusercases/CaseNodeData.java | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java index 9b71d51b06..abd2edbccf 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseMetadata.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.casemodule; import java.io.BufferedWriter; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; @@ -189,6 +190,27 @@ public final class CaseMetadata { this.metadataFilePath = metadataFilePath; readFromFile(); } + + /** + * Locate the case meta data file in the supplied directory. If the file does + * not exist, null is returned. + * + * @param directoryPath Directory path to search + * @return case meta data file path or null + */ + public static Path getCaseMetadataFile(Path directoryPath) { + final File[] caseFiles = directoryPath.toFile().listFiles(); + if(caseFiles != null) { + for (File file : caseFiles) { + final String fileName = file.getName().toLowerCase(); + if (fileName.endsWith(CaseMetadata.getFileExtension())) { + return file.toPath(); + } + } + } + + return null; + } /** * Gets the full path to the case metadata file. diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java b/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java index 8c32c88895..3869e364d0 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/multiusercases/CaseNodeData.java @@ -151,7 +151,7 @@ public final class CaseNodeData { * @return The case directory path. */ public Path getDirectory() { - return this.directory; + return this.directory; } /** From 88c5b62de5943d7b9d2f940e78ee1fb0113314da Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Tue, 12 Mar 2019 13:40:36 -0400 Subject: [PATCH 28/80] Fixed the repaint issue that I was previously unsuccessful fixing, added a listener interface to fix the warning on build --- .../multicase/Bundle.properties-MERGED | 33 ------------------- .../MultiCaseKeywordSearchPanel.java | 32 +++++++++++------- .../multicase/SelectMultiUserCasesDialog.java | 6 ++-- .../multicase/SelectMultiUserCasesPanel.form | 3 +- .../multicase/SelectMultiUserCasesPanel.java | 15 +++++---- 5 files changed, 33 insertions(+), 56 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index cbb81b3e99..59bb4a5db0 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -29,55 +29,22 @@ MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be select MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel. MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled -# {0} - connection info -# {1} - case name -# {2} - case directory MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2} -# {0} - PostgreSQL server host -# {1} - PostgreSQL server port -# {2} - case database name -# {3} - case directory MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3} -# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0} -# {0} - case_name MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0} -# {0} - case directory path MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} -# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} -# {0} - Solr document id -# {1} - case database name -# {2} - case directory MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2} -# {0} - file name -# {1} - case directory MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} -# {0} - file name -# {1} - case directory MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} -# {0} - query -# {1} - case_name MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query "{0}" on case {1} -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.findingCases=Finding selected cases -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for "{0}" ({1} of {2} case(s)) -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for "{0}" ({1} of {2} case(s)) -# {0} - total cases MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s) SelectMultiUserCasesPanel.selectAllButton.text=Select All SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java index e8b5561978..b55a1e426d 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java @@ -18,14 +18,11 @@ */ package org.sleuthkit.autopsy.keywordsearch.multicase; -import com.google.common.collect.Lists; import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.DeadEvent; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; @@ -82,8 +79,9 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex private Collection allSearchHits = new ArrayList<>(); private Collection searchExceptions = new ArrayList<>(); private final SelectMultiUserCasesDialog caseSelectionDialog = SelectMultiUserCasesDialog.getInstance(); - private Map caseNameToCaseDataMap; - + private final Map caseNameToCaseDataMap; + private Node[] currentConfirmedSelections; + /** * Creates new form MultiCaseKeywordSearchPanel */ @@ -103,11 +101,13 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex outline.setRootVisible(false); outlineView.setPreferredSize(resultsScrollPane.getPreferredSize()); resultsScrollPane.setViewportView(outlineView); - caseSelectionDialog.subscribeToNewCaseSelections(new ActionListener() { + caseSelectionDialog.subscribeToNewCaseSelections(new ChangeListener() { @Override - public void actionPerformed(ActionEvent e) { - populateCasesList((List) e.getSource()); + public void nodeSelectionChanged(Node[] selections, List selectionCaseData) { + populateCasesList(selectionCaseData); + currentConfirmedSelections = selections; revalidate(); + repaint(); } }); searchEnabled(true); @@ -119,6 +119,13 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex setColumnWidths(); } + /** + * Listener for new selections + */ + public interface ChangeListener { + public void nodeSelectionChanged(Node[] selections, List selectionCaseData); + } + /** * If a collection of SearchHits is received update the results shown on the * panel to include them. @@ -232,6 +239,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex private void populateCasesList(List selectedNodes) { Collection disabledCases = getCases(false); casesPanel.removeAll(); + casesPanel.revalidate(); + casesPanel.repaint(); caseNameToCaseDataMap.clear(); int casePanelWidth = casesPanel.getPreferredSize().width; int heightOfAllRows = 0; @@ -250,7 +259,6 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex } heightOfAllRows += caseCheckBox.getPreferredSize().height; casesPanel.add(caseCheckBox); - casesPanel.revalidate(); } casesPanel.setPreferredSize(new Dimension(casePanelWidth, heightOfAllRows)); } @@ -710,9 +718,9 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex }//GEN-LAST:event_viewErrorsButtonActionPerformed private void pickCasesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pickCasesButtonActionPerformed - //if (currentSelections != null) { - // caseSelectionDialog.setNodeSelections(currentSelections); - //} + if (currentConfirmedSelections != null) { + caseSelectionDialog.setNodeSelections(currentConfirmedSelections); + } caseSelectionDialog.setVisible(true); }//GEN-LAST:event_pickCasesButtonActionPerformed diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java index ceabe127cf..28b583e563 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java @@ -19,15 +19,15 @@ package org.sleuthkit.autopsy.keywordsearch.multicase; import java.awt.Dialog; -import java.awt.event.ActionListener; import java.beans.PropertyVetoException; import org.openide.nodes.Node; import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.keywordsearch.multicase.MultiCaseKeywordSearchPanel.ChangeListener; /** * Dialog that will display the SelectMultiUserCasesPanel */ -public class SelectMultiUserCasesDialog extends javax.swing.JDialog { +class SelectMultiUserCasesDialog extends javax.swing.JDialog { private static final long serialVersionUID = 1L; private static SelectMultiUserCasesDialog instance; @@ -51,7 +51,7 @@ public class SelectMultiUserCasesDialog extends javax.swing.JDialog { * * @param l Listener on new case selection events */ - void subscribeToNewCaseSelections(ActionListener l) { + void subscribeToNewCaseSelections(ChangeListener l) { multiUserCasesPanel.subscribeToNewCaseSelections(l); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form index 2de6a9ec23..2751a26eae 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.form @@ -82,7 +82,8 @@ - + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java index 726363ad9f..decae45b49 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesPanel.java @@ -18,8 +18,6 @@ */ package org.sleuthkit.autopsy.keywordsearch.multicase; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.beans.PropertyVetoException; import java.util.ArrayList; import java.util.List; @@ -30,16 +28,17 @@ import org.openide.explorer.ExplorerManager; import org.openide.nodes.Node; import org.sleuthkit.autopsy.casemodule.multiusercases.CaseNodeData; import org.sleuthkit.autopsy.casemodule.multiusercasesbrowser.MultiUserCasesBrowserPanel; +import org.sleuthkit.autopsy.keywordsearch.multicase.MultiCaseKeywordSearchPanel.ChangeListener; /** * Panel for multi-user case selection */ -public class SelectMultiUserCasesPanel extends javax.swing.JPanel { +class SelectMultiUserCasesPanel extends javax.swing.JPanel { private static final long serialVersionUID = 1L; private final JDialog parentDialog; private final MultiUserCasesBrowserPanel caseBrowserPanel; - private final List listeners; + private final List listeners; /** * Constructs a JPanel that allows a user to open a multi-user case. @@ -71,7 +70,7 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { * * @param listener */ - void subscribeToNewCaseSelections(ActionListener listener) { + void subscribeToNewCaseSelections(ChangeListener listener) { listeners.add(listener); } @@ -184,6 +183,7 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { try { caseBrowserPanel.getExplorerManager().setSelectedNodes(caseBrowserPanel.getExplorerManager().getRootContext().getChildren().getNodes()); } catch (PropertyVetoException ex) { + //Ignore } }//GEN-LAST:event_selectAllButtonActionPerformed @@ -191,17 +191,18 @@ public class SelectMultiUserCasesPanel extends javax.swing.JPanel { try { caseBrowserPanel.getExplorerManager().setSelectedNodes(new Node[0]); } catch (PropertyVetoException ex) { + //Ignore } }//GEN-LAST:event_deselectAllButtonActionPerformed private void confirmSelectionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_confirmSelectionsActionPerformed + //Pull out the CaseNodeData objects from the selections Node[] selections = caseBrowserPanel.getExplorerManager().getSelectedNodes(); List caseNodeData = Stream.of(selections) .map(n -> n.getLookup().lookup(CaseNodeData.class)) .collect(Collectors.toList()); listeners.forEach((l) -> { - //Pass along the selected nodes in the event. - l.actionPerformed(new ActionEvent(caseNodeData, -1, "")); + l.nodeSelectionChanged(selections, caseNodeData); }); parentDialog.setVisible(false); }//GEN-LAST:event_confirmSelectionsActionPerformed From 7297678f30df9278d469d1a702b3dbf6c334bb37 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Tue, 12 Mar 2019 13:52:51 -0400 Subject: [PATCH 29/80] Fixed merged file missing comments, THE PR IS NOW GOOD --- .../multicase/Bundle.properties-MERGED | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index 59bb4a5db0..cbb81b3e99 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -29,22 +29,55 @@ MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be select MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel. MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled +# {0} - connection info +# {1} - case name +# {2} - case directory MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2} +# {0} - PostgreSQL server host +# {1} - PostgreSQL server port +# {2} - case database name +# {3} - case directory MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3} +# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0} +# {0} - case_name MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0} +# {0} - case directory path MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} +# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} +# {0} - Solr document id +# {1} - case database name +# {2} - case directory MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2} +# {0} - file name +# {1} - case directory MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} +# {0} - file name +# {1} - case directory MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} +# {0} - query +# {1} - case_name MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query "{0}" on case {1} +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.findingCases=Finding selected cases +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for "{0}" ({1} of {2} case(s)) +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for "{0}" ({1} of {2} case(s)) +# {0} - total cases MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s) SelectMultiUserCasesPanel.selectAllButton.text=Select All SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All From 19797646a03f5fd4f62eaadebd692bc4c2c901b3 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 12 Mar 2019 14:12:49 -0400 Subject: [PATCH 30/80] 4792 fix counts and display of intra case results --- .../DataContentViewerOtherCases.java | 74 ++++++++++--------- ...DataContentViewerOtherCasesTableModel.java | 23 +----- 2 files changed, 45 insertions(+), 52 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index 75b6875f2c..67ec40ba97 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -44,6 +44,8 @@ import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JFileChooser; import javax.swing.JMenuItem; import javax.swing.JOptionPane; +import javax.swing.RowSorter; +import javax.swing.SortOrder; import static javax.swing.JOptionPane.DEFAULT_OPTION; import static javax.swing.JOptionPane.PLAIN_MESSAGE; import static javax.swing.JOptionPane.ERROR_MESSAGE; @@ -161,15 +163,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi updateDataSourceSelection(); } }); -// List sortKeys = new ArrayList<>(); - -// int caseNameColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.CASE_NAME.ordinal(); -// sortKeys.add(new RowSorter.SortKey(caseNameColumnIndex, SortOrder.ASCENDING)); -// -// int dataSourceColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.DATA_SOURCE.ordinal(); -// sortKeys.add(new RowSorter.SortKey(dataSourceColumnIndex, SortOrder.ASCENDING)); -// sorter.setSortKeys(sortKeys); - sorter.sort(); + caseTable.getRowSorter().toggleSortOrder(0); + dataSourceTable.getRowSorter().toggleSortOrder(0); } @Messages({"DataContentViewerOtherCases.correlatedArtifacts.isEmpty=There are no files or artifacts to correlate.", @@ -403,7 +398,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // devices.put(deviceId, caseName); } - foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), model.getRowCount(), cases.size(), devices.size())); + foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), model.getRowCount(), casesTableModel.getRowCount(), devices.size())); } /** @@ -768,6 +763,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // get the attributes we can correlate on correlationAttributes.addAll(getCorrelationAttributesFromNode(node)); Map caseNames = new HashMap<>(); + int totalCount = 0; + Set dataSources = new HashSet<>(); for (CorrelationAttributeInstance corAttr : correlationAttributes) { Map correlatedNodeDataMap = new HashMap<>(0); @@ -776,47 +773,48 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (OtherOccurrenceNodeInstanceData nodeData : correlatedNodeDataMap.values()) { if (nodeData.isCentralRepoNode()) { try { + dataSources.add(makeDataSourceString(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID(), nodeData.getDeviceID(), nodeData.getDataSourceName())); caseNames.put(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID(), nodeData.getCorrelationAttributeInstance().getCorrelationCase()); } catch (EamDbException ex) { System.out.println("can't get correlation case"); } } else { try { - caseNames.put(Case.getCurrentCaseThrows().getName(), new CorrelationCase(Case.getCurrentCaseThrows().getName(), Case.getCurrentCaseThrows().getDisplayName())); - } catch (NoCurrentCaseException ex){ + dataSources.add(makeDataSourceString(Case.getCurrentCaseThrows().getName(), nodeData.getDeviceID(), nodeData.getDataSourceName())); + caseNames.put(Case.getCurrentCaseThrows().getName(), new CorrelationCase(Case.getCurrentCaseThrows().getName(), Case.getCurrentCaseThrows().getDisplayName())); + } catch (NoCurrentCaseException ex) { System.out.println("NO cURRENT CASE"); } - + } + totalCount++; } } -// if (caseNames.isEmpty()) { -// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noArtifacts()); -// } else if (0 == casesTableModel.getRowCount()) { -// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noResultsFound()); -// } else { for (CorrelationCase corCase : caseNames.values()) { casesTableModel.addNodeData(corCase); } -// } -// if (correlationAttributes.isEmpty()) { -// tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noArtifacts())); -// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noArtifacts()); -// } else if (0 == tableModel.getRowCount()) { -// tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noResultsFound())); -// setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noResultsFound()); -// } else { -// setColumnWidths(); -// } + if (correlationAttributes.isEmpty()) { + tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noArtifacts())); + setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noArtifacts()); + } else if (0 == tableModel.getRowCount()) { + tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noResultsFound())); + setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noResultsFound()); + } else { + setColumnWidths(); + } setEarliestCaseDate(); - setOccurrenceCounts(); + foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), totalCount, casesTableModel.getRowCount(), dataSources.size())); if (caseTable.getRowCount() > 0) { caseTable.setRowSelectionInterval(0, 0); } } + + private String makeDataSourceString(String caseUUID, String deviceId, String dataSourceName){ + return caseUUID + deviceId + dataSourceName; + } private void updateCaseSelection() { int[] selectedCaseIndexes = caseTable.getSelectedRows(); @@ -831,7 +829,11 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (OtherOccurrenceNodeInstanceData nodeData : correlatedNodeDataMap.values()) { for (int selectedRow : selectedCaseIndexes) { try { - if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID())) { + if (nodeData.isCentralRepoNode()) { + if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID())) { + dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); + } + } else { dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); } } catch (EamDbException ex) { @@ -859,9 +861,15 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (int selectedCaseRow : selectedCaseIndexes) { for (int selectedDataSourceRow : selectedDataSources) { try { - if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) - && dataSourceModel.getValueAt(dataSourceTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { - tableModel.addNodeData(nodeData); + if (nodeData.isCentralRepoNode()) { + if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) + && dataSourceModel.getValueAt(dataSourceTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { + tableModel.addNodeData(nodeData); + } + } else { + if (dataSourceModel.getValueAt(dataSourceTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { + tableModel.addNodeData(nodeData); + } } } catch (EamDbException ex) { System.out.println("failure 2 to compare"); diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java index 19b2be09d4..fa4ae5c6fb 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java @@ -1,7 +1,7 @@ /* * Central Repository * - * Copyright 2015-2018 Basis Technology Corp. + * Copyright 2015-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -126,9 +126,9 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { * @return The value in the cell. */ private Object mapNodeMessageData(OtherOccurrenceNodeMessageData nodeData, TableColumns columnId) { -// if (columnId == TableColumns.CASE_NAME) { -// return nodeData.getDisplayMessage(); -// } + if (columnId == TableColumns.ATTRIBUTE) { + return nodeData.getDisplayMessage(); + } return ""; } @@ -144,21 +144,6 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { String value = Bundle.DataContentViewerOtherCasesTableModel_noData(); switch (columnId) { -// case CASE_NAME: -// if (null != nodeData.getCaseName()) { -// value = nodeData.getCaseName(); -// } -// break; -// case DEVICE: -// if (null != nodeData.getDeviceID()) { -// value = nodeData.getDeviceID(); -// } -// break; -// case DATA_SOURCE: -// if (null != nodeData.getDataSourceName()) { -// value = nodeData.getDataSourceName(); -// } -// break; case FILE_PATH: value = nodeData.getFilePath(); break; From 634edc7ec6c4a26782b49e523805c634bff06b4f Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 13 Mar 2019 14:16:07 -0400 Subject: [PATCH 31/80] 4792 clean up and refactoring for Other Occurrences content viewer --- .../DataContentViewerOtherCases.form | 2 +- .../DataContentViewerOtherCases.java | 31 +++++++------- ...a => OtherOccurrencesCasesTableModel.java} | 13 +++--- ...herOccurrencesFilesTableCellRenderer.java} | 11 +++-- ...a => OtherOccurrencesFilesTableModel.java} | 42 +++++++++---------- 5 files changed, 46 insertions(+), 53 deletions(-) rename Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/{DataContentViewerCasesTableModel.java => OtherOccurrencesCasesTableModel.java} (90%) rename Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/{DataContentViewerOtherCasesTableCellRenderer.java => OtherOccurrencesFilesTableCellRenderer.java} (85%) rename Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/{DataContentViewerOtherCasesTableModel.java => OtherOccurrencesFilesTableModel.java} (75%) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form index 33b932689f..fa0b8c3a9e 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form @@ -177,7 +177,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index 67ec40ba97..c8e17444eb 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -44,8 +44,6 @@ import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JFileChooser; import javax.swing.JMenuItem; import javax.swing.JOptionPane; -import javax.swing.RowSorter; -import javax.swing.SortOrder; import static javax.swing.JOptionPane.DEFAULT_OPTION; import static javax.swing.JOptionPane.PLAIN_MESSAGE; import static javax.swing.JOptionPane.ERROR_MESSAGE; @@ -97,8 +95,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi private static final int DEFAULT_MIN_CELL_WIDTH = 15; private static final int CELL_TEXT_WIDTH_PADDING = 5; - private final DataContentViewerOtherCasesTableModel tableModel; - private final DataContentViewerCasesTableModel casesTableModel; + private final OtherOccurrencesFilesTableModel tableModel; + private final OtherOccurrencesCasesTableModel casesTableModel; private final Collection correlationAttributes; private String dataSourceName = ""; private String deviceId = ""; @@ -111,8 +109,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi * Creates new form DataContentViewerOtherCases */ public DataContentViewerOtherCases() { - this.tableModel = new DataContentViewerOtherCasesTableModel(); - this.casesTableModel = new DataContentViewerCasesTableModel(); + this.tableModel = new OtherOccurrencesFilesTableModel(); + this.casesTableModel = new OtherOccurrencesCasesTableModel(); this.correlationAttributes = new ArrayList<>(); initComponents(); @@ -147,7 +145,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi showCommonalityMenuItem.addActionListener(actList); // Set background of every nth row as light grey. - TableCellRenderer renderer = new DataContentViewerOtherCasesTableCellRenderer(); + TableCellRenderer renderer = new OtherOccurrencesFilesTableCellRenderer(); otherCasesTable.setDefaultRenderer(Object.class, renderer); // Configure column sorting. @@ -374,10 +372,10 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi "DataContentViewerOtherCases.foundIn.text=Found %d instances in %d cases and %d data sources." }) private void setOccurrenceCounts() { - DataContentViewerOtherCasesTableModel model = (DataContentViewerOtherCasesTableModel) otherCasesTable.getModel(); + OtherOccurrencesFilesTableModel model = (OtherOccurrencesFilesTableModel) otherCasesTable.getModel(); -// int caseColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.CASE_NAME.ordinal(); -// int deviceColumnIndex = DataContentViewerOtherCasesTableModel.TableColumns.DEVICE.ordinal(); +// int caseColumnIndex = OtherOccurrencesFilesTableModel.TableColumns.CASE_NAME.ordinal(); +// int deviceColumnIndex = OtherOccurrencesFilesTableModel.TableColumns.DEVICE.ordinal(); /* * We need a unique set of data sources. We rely on device ID for this. @@ -776,16 +774,15 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi dataSources.add(makeDataSourceString(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID(), nodeData.getDeviceID(), nodeData.getDataSourceName())); caseNames.put(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID(), nodeData.getCorrelationAttributeInstance().getCorrelationCase()); } catch (EamDbException ex) { - System.out.println("can't get correlation case"); + LOGGER.log(Level.WARNING, "Unable to get correlation case for displaying other occurrence for case: " + nodeData.getCaseName()); } } else { try { dataSources.add(makeDataSourceString(Case.getCurrentCaseThrows().getName(), nodeData.getDeviceID(), nodeData.getDataSourceName())); caseNames.put(Case.getCurrentCaseThrows().getName(), new CorrelationCase(Case.getCurrentCaseThrows().getName(), Case.getCurrentCaseThrows().getDisplayName())); } catch (NoCurrentCaseException ex) { - System.out.println("NO cURRENT CASE"); + LOGGER.log(Level.WARNING, "No current case open for other occurrences"); } - } totalCount++; } @@ -837,7 +834,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); } } catch (EamDbException ex) { - System.out.println("failure 1 to compare"); + LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName() } } } @@ -872,7 +869,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } } } catch (EamDbException ex) { - System.out.println("failure 2 to compare"); + LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName() } } } @@ -974,7 +971,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi org.openide.awt.Mnemonics.setLocalizedText(foundInLabel, org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.foundInLabel.text")); // NOI18N - jSplitPane2.setDividerLocation(500); + jSplitPane2.setDividerLocation(450); jSplitPane3.setDividerLocation(150); @@ -1052,7 +1049,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi .addGap(0, 921, Short.MAX_VALUE) .addGroup(otherCasesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(otherCasesPanelLayout.createSequentialGroup() - .addComponent(tableContainerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 921, Short.MAX_VALUE) + .addComponent(tableContainerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(0, 0, 0))) ); otherCasesPanelLayout.setVerticalGroup( diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java similarity index 90% rename from Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerCasesTableModel.java rename to Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java index d75084a709..b4ef96a216 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerCasesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java @@ -21,16 +21,16 @@ package org.sleuthkit.autopsy.centralrepository.contentviewer; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; -import org.openide.util.NbBundle; +import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationCase; -public class DataContentViewerCasesTableModel extends AbstractTableModel { +public class OtherOccurrencesCasesTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; private final List nodeDataList = new ArrayList<>(); - DataContentViewerCasesTableModel() { + OtherOccurrencesCasesTableModel() { } @Override @@ -81,8 +81,9 @@ public class DataContentViewerCasesTableModel extends AbstractTableModel { * * @return The value in the cell. */ + @Messages({"OtherOccurrencesCasesTableModel.noData=No Data."}) private Object mapNodeInstanceData(CorrelationCase nodeData, TableColumns columnId) { - String value = Bundle.DataContentViewerOtherCasesTableModel_noData(); + String value = Bundle.OtherOccurrencesCasesTableModel_noData(); switch (columnId) { case CASE_NAME: @@ -123,11 +124,11 @@ public class DataContentViewerCasesTableModel extends AbstractTableModel { fireTableDataChanged(); } - @NbBundle.Messages({"DataContentViewerCasesTableModel.case=Case",}) + @Messages({"OtherOccurrencesCasesTableModel.case=Case",}) enum TableColumns { // Ordering here determines displayed column order in Content Viewer. // If order is changed, update the CellRenderer to ensure correct row coloring. - CASE_NAME(Bundle.DataContentViewerOtherCasesTableModel_case(), 100); + CASE_NAME(Bundle.OtherOccurrencesCasesTableModel_case(), 100); private final String columnName; private final int columnWidth; diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableCellRenderer.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableCellRenderer.java similarity index 85% rename from Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableCellRenderer.java rename to Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableCellRenderer.java index 0d12bbb2c6..289cc73172 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableCellRenderer.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableCellRenderer.java @@ -1,7 +1,7 @@ /* * Central Repository * - * Copyright 2015-2017 Basis Technology Corp. + * Copyright 2015-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,7 @@ package org.sleuthkit.autopsy.centralrepository.contentviewer; import java.awt.Color; import java.awt.Component; -import javax.swing.JLabel; +import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellRenderer; @@ -29,7 +29,7 @@ import org.sleuthkit.datamodel.TskData; /** * Renderer for cells in data content viewer table */ -public class DataContentViewerOtherCasesTableCellRenderer implements TableCellRenderer { +public class OtherOccurrencesFilesTableCellRenderer implements TableCellRenderer { public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer(); @@ -43,20 +43,19 @@ public class DataContentViewerOtherCasesTableCellRenderer implements TableCellRe int column) { Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column); - ((JLabel) renderer).setOpaque(true); + ((JComponent) renderer).setOpaque(true); Color foreground, background; if (isSelected) { foreground = Color.WHITE; background = new Color(51,153,255); } else { String known_status = (String) table.getModel().getValueAt(table.convertRowIndexToModel(row), - table.getColumn(DataContentViewerOtherCasesTableModel.TableColumns.KNOWN.columnName()).getModelIndex()); + table.getColumn(OtherOccurrencesFilesTableModel.TableColumns.KNOWN.columnName()).getModelIndex()); if (known_status.equals(TskData.FileKnown.BAD.getName())) { foreground = Color.WHITE; background = Color.RED; } else if (known_status.equals(TskData.FileKnown.UNKNOWN.getName())) { foreground = Color.BLACK; - //background = Color.YELLOW; background = Color.WHITE; } else { foreground = Color.BLACK; diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java similarity index 75% rename from Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java rename to Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java index fa4ae5c6fb..46f5097cd0 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCasesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java @@ -26,31 +26,27 @@ import org.openide.util.NbBundle.Messages; /** * Model for cells in data content viewer table */ -public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { +public class OtherOccurrencesFilesTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; - @Messages({"DataContentViewerOtherCasesTableModel.case=Case", - "DataContentViewerOtherCasesTableModel.device=Device", - "DataContentViewerOtherCasesTableModel.dataSource=Data Source", - "DataContentViewerOtherCasesTableModel.path=Path", - "DataContentViewerOtherCasesTableModel.attribute=Matched Attribute", - "DataContentViewerOtherCasesTableModel.value=Attribute Value", - "DataContentViewerOtherCasesTableModel.known=Known", - "DataContentViewerOtherCasesTableModel.comment=Comment", - "DataContentViewerOtherCasesTableModel.noData=No Data.",}) + @Messages({"OtherOccurrencesFilesTableModel.device=Device", + "OtherOccurrencesFilesTableModel.dataSource=Data Source", + "OtherOccurrencesFilesTableModel.path=Path", + "OtherOccurrencesFilesTableModel.attribute=Matched Attribute", + "OtherOccurrencesFilesTableModel.value=Attribute Value", + "OtherOccurrencesFilesTableModel.known=Known", + "OtherOccurrencesFilesTableModel.comment=Comment", + "OtherOccurrencesFilesTableModel.noData=No Data.",}) enum TableColumns { // Ordering here determines displayed column order in Content Viewer. // If order is changed, update the CellRenderer to ensure correct row coloring. -// CASE_NAME(Bundle.DataContentViewerOtherCasesTableModel_case(), 100), -// DATA_SOURCE(Bundle.DataContentViewerOtherCasesTableModel_dataSource(), 100), - ATTRIBUTE(Bundle.DataContentViewerOtherCasesTableModel_attribute(), 125), - VALUE(Bundle.DataContentViewerOtherCasesTableModel_value(), 200), - KNOWN(Bundle.DataContentViewerOtherCasesTableModel_known(), 50), - FILE_PATH(Bundle.DataContentViewerOtherCasesTableModel_path(), 450), - COMMENT(Bundle.DataContentViewerOtherCasesTableModel_comment(), 200); -// DEVICE(Bundle.DataContentViewerOtherCasesTableModel_device(), 250); - + ATTRIBUTE(Bundle.OtherOccurrencesFilesTableModel_attribute(), 40), + VALUE(Bundle.OtherOccurrencesFilesTableModel_value(), 200), + KNOWN(Bundle.OtherOccurrencesFilesTableModel_known(), 40), + FILE_PATH(Bundle.OtherOccurrencesFilesTableModel_path(), 450), + COMMENT(Bundle.OtherOccurrencesFilesTableModel_comment(), 200); + private final String columnName; private final int columnWidth; @@ -70,7 +66,7 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { private final List nodeDataList = new ArrayList<>(); - DataContentViewerOtherCasesTableModel() { + OtherOccurrencesFilesTableModel() { } @@ -106,7 +102,7 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { @Override public Object getValueAt(int rowIdx, int colIdx) { if (0 == nodeDataList.size()) { - return Bundle.DataContentViewerOtherCasesTableModel_noData(); + return Bundle.OtherOccurrencesFilesTableModel_noData(); } OtherOccurrenceNodeData nodeData = nodeDataList.get(rowIdx); @@ -141,7 +137,7 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { * @return The value in the cell. */ private Object mapNodeInstanceData(OtherOccurrenceNodeInstanceData nodeData, TableColumns columnId) { - String value = Bundle.DataContentViewerOtherCasesTableModel_noData(); + String value = Bundle.OtherOccurrencesFilesTableModel_noData(); switch (columnId) { case FILE_PATH: @@ -159,7 +155,7 @@ public class DataContentViewerOtherCasesTableModel extends AbstractTableModel { case COMMENT: value = nodeData.getComment(); break; - default: // This shouldn't occur! Use default "No data" value. + default: //Use default "No data" value. break; } return value; From 1a37b8db94f2bed0da18bc491d47443e10cb46b9 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 13 Mar 2019 14:25:46 -0400 Subject: [PATCH 32/80] 4792 update MERGED files fix error with missing paren --- .../contentviewer/Bundle.properties-MERGED | 20 +++++++++---------- .../DataContentViewerOtherCases.java | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED index d0e6b17620..105c8ec7f7 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED @@ -1,4 +1,3 @@ -DataContentViewerCasesTableModel.case=Case DataContentViewerOtherCases.caseDetailsDialog.noCaseNameError=Error DataContentViewerOtherCases.caseDetailsDialog.noDetails=No details for this case. DataContentViewerOtherCases.caseDetailsDialog.noDetailsReference=No case details for Global reference properties. @@ -27,12 +26,13 @@ DataContentViewerOtherCases.earliestCaseLabel.text=Central Repository Starting D DataContentViewerOtherCases.foundInLabel.text= DataContentViewerOtherCases.title=Other Occurrences DataContentViewerOtherCases.toolTip=Displays instances of the selected file/artifact from other occurrences. -DataContentViewerOtherCasesTableModel.attribute=Matched Attribute -DataContentViewerOtherCasesTableModel.case=Case -DataContentViewerOtherCasesTableModel.comment=Comment -DataContentViewerOtherCasesTableModel.dataSource=Data Source -DataContentViewerOtherCasesTableModel.device=Device -DataContentViewerOtherCasesTableModel.known=Known -DataContentViewerOtherCasesTableModel.noData=No Data. -DataContentViewerOtherCasesTableModel.path=Path -DataContentViewerOtherCasesTableModel.value=Attribute Value +OtherOccurrencesCasesTableModel.case=Case +OtherOccurrencesCasesTableModel.noData=No Data. +OtherOccurrencesFilesTableModel.attribute=Matched Attribute +OtherOccurrencesFilesTableModel.comment=Comment +OtherOccurrencesFilesTableModel.dataSource=Data Source +OtherOccurrencesFilesTableModel.device=Device +OtherOccurrencesFilesTableModel.known=Known +OtherOccurrencesFilesTableModel.noData=No Data. +OtherOccurrencesFilesTableModel.path=Path +OtherOccurrencesFilesTableModel.value=Attribute Value diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index c8e17444eb..4c68f7f73f 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -834,7 +834,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); } } catch (EamDbException ex) { - LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName() + LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName()); } } } @@ -869,7 +869,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } } } catch (EamDbException ex) { - LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName() + LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName()); } } } From c8fc5a976561592bbf86e13ae09e4c47aee01a10 Mon Sep 17 00:00:00 2001 From: Raman Date: Wed, 13 Mar 2019 15:24:56 -0400 Subject: [PATCH 33/80] 4706: detect Android media cards. --- .../recentactivity/Bundle.properties-MERGED | 4 ++ .../DataSourceUsageAnalyzer.java | 63 ++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED index 521b871e47..d909db9e71 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED @@ -2,6 +2,9 @@ cannotBuildXmlParser=Unable to build XML parser: cannotLoadSEUQA=Unable to load Search Engine URL Query Analyzer settings file, SEUQAMappings.xml: cannotParseXml=Unable to parse XML file: ChromeCacheExtractor.moduleName=ChromeCacheExtractor +DataSourceUsage_AndroidMedia=Android Media Card +DataSourceUsage_FlashDrive=Flash Drive +# {0} - OS name DataSourceUsageAnalyzer.customVolume.label=OS Drive ({0}) DataSourceUsageAnalyzer.parentModuleName=Recent Activity Extract.indexError.message=Failed to index artifact for keyword search. @@ -180,6 +183,7 @@ RecentDocumentsByLnk.parentModuleName.noSpace=RecentActivity RecentDocumentsByLnk.parentModuleName=Recent Activity RegRipperFullNotFound=Full version RegRipper executable not found. RegRipperNotFound=Autopsy RegRipper executable not found. +# {0} - file name SearchEngineURLQueryAnalyzer.init.exception.msg=Unable to find {0}. SearchEngineURLQueryAnalyzer.moduleName.text=Search Engine SearchEngineURLQueryAnalyzer.engineName.none=NONE diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java index 8b40633d2b..36631a37a8 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java @@ -32,7 +32,10 @@ import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.FileSystem; +import org.sleuthkit.datamodel.Image; import org.sleuthkit.datamodel.TskCoreException; +import org.sleuthkit.datamodel.TskData; /** * Analyzes data sources using heuristics to determine which types of operating @@ -43,6 +46,9 @@ import org.sleuthkit.datamodel.TskCoreException; class DataSourceUsageAnalyzer extends Extract { private static final Logger logger = Logger.getLogger(DataSourceUsageAnalyzer.class.getName()); + private static final int FAT_EXFAT_FLAGS = TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_FAT16.getValue() | TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_FAT32.getValue() | TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_EXFAT.getValue(); + private static final long HUNDRED_GB = 100*1024*1024*1024l; + private static final String ANDROID_MEDIACARD_PATHS[] = {"/.android_secure", "/android", "/audio", "/photos", "/dcim", "/music", "/pictures", "/videos"}; //NON-NLS private Content dataSource; @Messages({ @@ -62,13 +68,18 @@ class DataSourceUsageAnalyzer extends Extract { } + private void createDataSourceUsageArtifacts() throws TskCoreException { + + createOSInfoDataSourceUsageArtifacts(); + createAndroidMediaCardArtifacts(); + } /** * Create TSK_DATA_SOURCE_USAGE artifacts based on OS_INFO artifacts * existing as well as other criteria such as specific paths existing. * * @throws TskCoreException */ - private void createDataSourceUsageArtifacts() throws TskCoreException { + private void createOSInfoDataSourceUsageArtifacts() throws TskCoreException { boolean windowsOsDetected = false; List osInfoArtifacts = tskCase.getBlackboardArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_OS_INFO); for (BlackboardArtifact osInfoArt : osInfoArtifacts) { @@ -143,4 +154,54 @@ class DataSourceUsageAnalyzer extends Extract { } } } + + /** + * Checks to see if the data source might be an Android media card or a Flash drive. + * If so, creates TSK_DATA_SOURCE_USAGE artifact. + * + * @return true if any specified files exist false if none exist + * + * @throws TskCoreException + */ + @Messages({ + "DataSourceUsage_AndroidMedia=Android Media Card", + "DataSourceUsage_FlashDrive=Flash Drive" + }) + private void createAndroidMediaCardArtifacts() throws TskCoreException { + + if (dataSource instanceof Image) { + Image image = (Image) dataSource; + try { + if (image.getSize() > HUNDRED_GB) { + return; + } + + List fileSystems = image.getFileSystems(); + if (fileSystems.isEmpty() || fileSystems.size() > 1) { + return; + } + + FileSystem fileSystem = fileSystems.get(0); + if ( fileSystem == null || (fileSystem.getFsType().getValue() & FAT_EXFAT_FLAGS) == 0) { + return ; + } + + FileManager fileManager = currentCase.getServices().getFileManager(); + for (String path : ANDROID_MEDIACARD_PATHS ) { + for (AbstractFile file : fileManager.findFiles(dataSource, FilenameUtils.getName(path), FilenameUtils.getPath(path))) { + if ((file.getParentPath() + file.getName()).equalsIgnoreCase(path)) { + createDataSourceUsageArtifact(Bundle.DataSourceUsage_AndroidMedia()); + return; + } + } + } + + // If none of the Android paths is found but it meets other criteria, it might be just a flash drive + createDataSourceUsageArtifact(Bundle.DataSourceUsage_FlashDrive()); + + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Exception while checking image: {0} for Andriod media card", image.getName() + ex.getMessage()); //NON-NLS + } + } + } } From 46a8fe5c6213fdf5f14c52d73cf9ac41b07f7f87 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 13 Mar 2019 16:02:19 -0400 Subject: [PATCH 34/80] 4792 adjust column widths for other occurrences content viewer --- .../contentviewer/Bundle.properties-MERGED | 1 + .../DataContentViewerOtherCases.form | 8 +- .../DataContentViewerOtherCases.java | 131 +++++++++--------- .../OtherOccurrencesFilesTableModel.java | 10 +- 4 files changed, 78 insertions(+), 72 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED index 105c8ec7f7..a0321b2f77 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED @@ -9,6 +9,7 @@ DataContentViewerOtherCases.correlatedArtifacts.byType={0}% of data sources have DataContentViewerOtherCases.correlatedArtifacts.failed=Failed to get frequency details. DataContentViewerOtherCases.correlatedArtifacts.isEmpty=There are no files or artifacts to correlate. DataContentViewerOtherCases.correlatedArtifacts.title=Attribute Frequency +DataContentViewerOtherCases.dataSources.header.text=Data Source Name DataContentViewerOtherCases.earliestCaseNotAvailable=\ Not Enabled. DataContentViewerOtherCases.foundIn.text=Found %d instances in %d cases and %d data sources. DataContentViewerOtherCases.noOpenCase.errMsg=No open case available. diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form index fa0b8c3a9e..9b30385d0f 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.form @@ -177,7 +177,7 @@ - + @@ -206,7 +206,7 @@ - + @@ -228,7 +228,7 @@ - + @@ -257,7 +257,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index 4c68f7f73f..3ad87f97e2 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -124,9 +124,9 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi public void actionPerformed(ActionEvent e) { JMenuItem jmi = (JMenuItem) e.getSource(); if (jmi.equals(selectAllMenuItem)) { - otherCasesTable.selectAll(); + filesTable.selectAll(); } else if (jmi.equals(showCaseDetailsMenuItem)) { - showCaseDetails(otherCasesTable.getSelectedRow()); + showCaseDetails(filesTable.getSelectedRow()); } else if (jmi.equals(exportToCSVMenuItem)) { try { saveToCSV(); @@ -146,23 +146,23 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // Set background of every nth row as light grey. TableCellRenderer renderer = new OtherOccurrencesFilesTableCellRenderer(); - otherCasesTable.setDefaultRenderer(Object.class, renderer); + filesTable.setDefaultRenderer(Object.class, renderer); // Configure column sorting. - TableRowSorter sorter = new TableRowSorter<>(otherCasesTable.getModel()); - otherCasesTable.setRowSorter(sorter); - caseTable.getSelectionModel().addListSelectionListener((e) -> { + TableRowSorter sorter = new TableRowSorter<>(filesTable.getModel()); + filesTable.setRowSorter(sorter); + casesTable.getSelectionModel().addListSelectionListener((e) -> { if (Case.isCaseOpen()) { updateCaseSelection(); } }); - dataSourceTable.getSelectionModel().addListSelectionListener((e) -> { + dataSourcesTable.getSelectionModel().addListSelectionListener((e) -> { if (Case.isCaseOpen()) { updateDataSourceSelection(); } }); - caseTable.getRowSorter().toggleSortOrder(0); - dataSourceTable.getRowSorter().toggleSortOrder(0); + casesTable.getRowSorter().toggleSortOrder(0); + dataSourcesTable.getRowSorter().toggleSortOrder(0); } @Messages({"DataContentViewerOtherCases.correlatedArtifacts.isEmpty=There are no files or artifacts to correlate.", @@ -222,7 +222,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi try { if (-1 != selectedRowViewIdx) { EamDb dbManager = EamDb.getInstance(); - int selectedRowModelIdx = otherCasesTable.convertRowIndexToModel(selectedRowViewIdx); + int selectedRowModelIdx = filesTable.convertRowIndexToModel(selectedRowViewIdx); OtherOccurrenceNodeInstanceData nodeData = (OtherOccurrenceNodeInstanceData) tableModel.getRow(selectedRowModelIdx); CorrelationCase eamCasePartial = nodeData.getCorrelationAttributeInstance().getCorrelationCase(); if (eamCasePartial == null) { @@ -264,14 +264,14 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } private void saveToCSV() throws NoCurrentCaseException { - if (0 != otherCasesTable.getSelectedRowCount()) { + if (0 != filesTable.getSelectedRowCount()) { Calendar now = Calendar.getInstance(); String fileName = String.format("%1$tY%1$tm%1$te%1$tI%1$tM%1$tS_other_data_sources.csv", now); CSVFileChooser.setCurrentDirectory(new File(Case.getCurrentCaseThrows().getExportDirectory())); CSVFileChooser.setSelectedFile(new File(fileName)); CSVFileChooser.setFileFilter(new FileNameExtensionFilter("csv file", "csv")); - int returnVal = CSVFileChooser.showSaveDialog(otherCasesTable); + int returnVal = CSVFileChooser.showSaveDialog(filesTable); if (returnVal == JFileChooser.APPROVE_OPTION) { File selectedFile = CSVFileChooser.getSelectedFile(); @@ -286,7 +286,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi private void writeSelectedRowsToFileAsCSV(File destFile) { StringBuilder content; - int[] selectedRowViewIndices = otherCasesTable.getSelectedRows(); + int[] selectedRowViewIndices = filesTable.getSelectedRows(); int colCount = tableModel.getColumnCount(); try (BufferedWriter writer = Files.newBufferedWriter(destFile.toPath())) { @@ -307,7 +307,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (int rowViewIdx : selectedRowViewIndices) { content = new StringBuilder(""); for (int colIdx = 0; colIdx < colCount; colIdx++) { - int rowModelIdx = otherCasesTable.convertRowIndexToModel(rowViewIdx); + int rowModelIdx = filesTable.convertRowIndexToModel(rowViewIdx); content.append('"').append(tableModel.getValueAt(rowModelIdx, colIdx)).append('"'); if (colIdx < (colCount - 1)) { content.append(","); @@ -328,7 +328,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi private void reset() { // start with empty table casesTableModel.clearTable(); - ((DefaultTableModel) dataSourceTable.getModel()).setRowCount(0); + ((DefaultTableModel) dataSourcesTable.getModel()).setRowCount(0); tableModel.clearTable(); correlationAttributes.clear(); earliestCaseDate.setText(Bundle.DataContentViewerOtherCases_earliestCaseNotAvailable()); @@ -372,7 +372,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi "DataContentViewerOtherCases.foundIn.text=Found %d instances in %d cases and %d data sources." }) private void setOccurrenceCounts() { - OtherOccurrencesFilesTableModel model = (OtherOccurrencesFilesTableModel) otherCasesTable.getModel(); + OtherOccurrencesFilesTableModel model = (OtherOccurrencesFilesTableModel) filesTable.getModel(); // int caseColumnIndex = OtherOccurrencesFilesTableModel.TableColumns.CASE_NAME.ordinal(); // int deviceColumnIndex = OtherOccurrencesFilesTableModel.TableColumns.DEVICE.ordinal(); @@ -744,7 +744,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi */ @Messages({ "DataContentViewerOtherCases.table.noArtifacts=Item has no attributes with which to search.", - "DataContentViewerOtherCases.table.noResultsFound=No results found." + "DataContentViewerOtherCases.table.noResultsFound=No results found.", + "DataContentViewerOtherCases.dataSources.header.text=Data Source Name" }) private void populateTable(Node node) { try { @@ -781,7 +782,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi dataSources.add(makeDataSourceString(Case.getCurrentCaseThrows().getName(), nodeData.getDeviceID(), nodeData.getDataSourceName())); caseNames.put(Case.getCurrentCaseThrows().getName(), new CorrelationCase(Case.getCurrentCaseThrows().getName(), Case.getCurrentCaseThrows().getDisplayName())); } catch (NoCurrentCaseException ex) { - LOGGER.log(Level.WARNING, "No current case open for other occurrences"); + LOGGER.log(Level.WARNING, "No current case open for other occurrences"); } } totalCount++; @@ -793,29 +794,26 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi if (correlationAttributes.isEmpty()) { tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noArtifacts())); - setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noArtifacts()); } else if (0 == tableModel.getRowCount()) { tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noResultsFound())); - setColumnWidthToText(0, Bundle.DataContentViewerOtherCases_table_noResultsFound()); - } else { - setColumnWidths(); } + setColumnWidths(); setEarliestCaseDate(); foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), totalCount, casesTableModel.getRowCount(), dataSources.size())); - if (caseTable.getRowCount() > 0) { - caseTable.setRowSelectionInterval(0, 0); + if (casesTable.getRowCount() > 0) { + casesTable.setRowSelectionInterval(0, 0); } } - - private String makeDataSourceString(String caseUUID, String deviceId, String dataSourceName){ - return caseUUID + deviceId + dataSourceName; + + private String makeDataSourceString(String caseUUID, String deviceId, String dataSourceName) { + return caseUUID + deviceId + dataSourceName; } private void updateCaseSelection() { - int[] selectedCaseIndexes = caseTable.getSelectedRows(); - DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourceTable.getModel(); + int[] selectedCaseIndexes = casesTable.getSelectedRows(); + DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourcesTable.getModel(); dataSourceModel.setRowCount(0); tableModel.clearTable(); for (CorrelationAttributeInstance corAttr : correlationAttributes) { @@ -827,27 +825,27 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (int selectedRow : selectedCaseIndexes) { try { if (nodeData.isCentralRepoNode()) { - if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID())) { + if (((CorrelationCase) casesTableModel.getRow(casesTable.convertRowIndexToModel(selectedRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID())) { dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); } } else { dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); } } catch (EamDbException ex) { - LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName()); + LOGGER.log(Level.WARNING, "Unable to get correlation attribute instance from OtherOccurrenceNodeInstanceData for case " + nodeData.getCaseName()); } } } } - if (dataSourceTable.getRowCount() > 0) { - dataSourceTable.setRowSelectionInterval(0, 0); + if (dataSourcesTable.getRowCount() > 0) { + dataSourcesTable.setRowSelectionInterval(0, 0); } } private void updateDataSourceSelection() { - int[] selectedCaseIndexes = caseTable.getSelectedRows(); - DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourceTable.getModel(); - int[] selectedDataSources = dataSourceTable.getSelectedRows(); + int[] selectedCaseIndexes = casesTable.getSelectedRows(); + DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourcesTable.getModel(); + int[] selectedDataSources = dataSourcesTable.getSelectedRows(); tableModel.clearTable(); for (CorrelationAttributeInstance corAttr : correlationAttributes) { Map correlatedNodeDataMap = new HashMap<>(0); @@ -859,12 +857,12 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (int selectedDataSourceRow : selectedDataSources) { try { if (nodeData.isCentralRepoNode()) { - if (((CorrelationCase) casesTableModel.getRow(caseTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) - && dataSourceModel.getValueAt(dataSourceTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { + if (((CorrelationCase) casesTableModel.getRow(casesTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) + && dataSourceModel.getValueAt(dataSourcesTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { tableModel.addNodeData(nodeData); } } else { - if (dataSourceModel.getValueAt(dataSourceTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { + if (dataSourceModel.getValueAt(dataSourcesTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { tableModel.addNodeData(nodeData); } } @@ -885,8 +883,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi * column width. */ private void setColumnWidthToText(int columnIndex, String text) { - TableColumn column = otherCasesTable.getColumnModel().getColumn(columnIndex); - FontMetrics fontMetrics = otherCasesTable.getFontMetrics(otherCasesTable.getFont()); + TableColumn column = filesTable.getColumnModel().getColumn(columnIndex); + FontMetrics fontMetrics = filesTable.getFontMetrics(filesTable.getFont()); int stringWidth = fontMetrics.stringWidth(text); column.setMinWidth(stringWidth + CELL_TEXT_WIDTH_PADDING); } @@ -896,13 +894,20 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi */ private void setColumnWidths() { for (int idx = 0; idx < tableModel.getColumnCount(); idx++) { - TableColumn column = otherCasesTable.getColumnModel().getColumn(idx); + TableColumn column = filesTable.getColumnModel().getColumn(idx); column.setMinWidth(DEFAULT_MIN_CELL_WIDTH); int columnWidth = tableModel.getColumnPreferredWidth(idx); if (columnWidth > 0) { column.setPreferredWidth(columnWidth); } } + for (int idx = 0; idx < dataSourcesTable.getColumnCount(); idx++) { + if (dataSourcesTable.getColumnModel().getColumn(idx).getHeaderValue().toString().equals(Bundle.DataContentViewerOtherCases_dataSources_header_text())) { + dataSourcesTable.getColumnModel().getColumn(idx).setPreferredWidth(100); + } else { + dataSourcesTable.getColumnModel().getColumn(idx).setPreferredWidth(210); + } + } } /** @@ -928,11 +933,11 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi jSplitPane2 = new javax.swing.JSplitPane(); jSplitPane3 = new javax.swing.JSplitPane(); caseScrollPane = new javax.swing.JScrollPane(); - caseTable = new javax.swing.JTable(); + casesTable = new javax.swing.JTable(); dataSourceScrollPane = new javax.swing.JScrollPane(); - dataSourceTable = new javax.swing.JTable(); + dataSourcesTable = new javax.swing.JTable(); propertiesTableScrollPane = new javax.swing.JScrollPane(); - otherCasesTable = new javax.swing.JTable(); + filesTable = new javax.swing.JTable(); rightClickPopupMenu.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { @@ -971,18 +976,18 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi org.openide.awt.Mnemonics.setLocalizedText(foundInLabel, org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.foundInLabel.text")); // NOI18N - jSplitPane2.setDividerLocation(450); + jSplitPane2.setDividerLocation(470); jSplitPane3.setDividerLocation(150); - caseTable.setAutoCreateRowSorter(true); - caseTable.setModel(casesTableModel); - caseScrollPane.setViewportView(caseTable); + casesTable.setAutoCreateRowSorter(true); + casesTable.setModel(casesTableModel); + caseScrollPane.setViewportView(casesTable); jSplitPane3.setLeftComponent(caseScrollPane); - dataSourceTable.setAutoCreateRowSorter(true); - dataSourceTable.setModel(new javax.swing.table.DefaultTableModel( + dataSourcesTable.setAutoCreateRowSorter(true); + dataSourcesTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, @@ -998,7 +1003,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi return canEdit [columnIndex]; } }); - dataSourceScrollPane.setViewportView(dataSourceTable); + dataSourceScrollPane.setViewportView(dataSourcesTable); jSplitPane3.setRightComponent(dataSourceScrollPane); @@ -1006,12 +1011,12 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi propertiesTableScrollPane.setPreferredSize(new java.awt.Dimension(1000, 30)); - otherCasesTable.setAutoCreateRowSorter(true); - otherCasesTable.setModel(tableModel); - otherCasesTable.setToolTipText(org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.table.toolTip.text")); // NOI18N - otherCasesTable.setComponentPopupMenu(rightClickPopupMenu); - otherCasesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION); - propertiesTableScrollPane.setViewportView(otherCasesTable); + filesTable.setAutoCreateRowSorter(true); + filesTable.setModel(tableModel); + filesTable.setToolTipText(org.openide.util.NbBundle.getMessage(DataContentViewerOtherCases.class, "DataContentViewerOtherCases.table.toolTip.text")); // NOI18N + filesTable.setComponentPopupMenu(rightClickPopupMenu); + filesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION); + propertiesTableScrollPane.setViewportView(filesTable); jSplitPane2.setRightComponent(propertiesTableScrollPane); @@ -1076,8 +1081,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi private void rightClickPopupMenuPopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {//GEN-FIRST:event_rightClickPopupMenuPopupMenuWillBecomeVisible boolean enableCentralRepoActions = false; - if (EamDb.isEnabled() && otherCasesTable.getSelectedRowCount() == 1) { - int rowIndex = otherCasesTable.getSelectedRow(); + if (EamDb.isEnabled() && filesTable.getSelectedRowCount() == 1) { + int rowIndex = filesTable.getSelectedRow(); OtherOccurrenceNodeData selectedNode = (OtherOccurrenceNodeData) tableModel.getRow(rowIndex); if (selectedNode instanceof OtherOccurrenceNodeInstanceData) { OtherOccurrenceNodeInstanceData instanceData = (OtherOccurrenceNodeInstanceData) selectedNode; @@ -1091,17 +1096,17 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JFileChooser CSVFileChooser; private javax.swing.JScrollPane caseScrollPane; - private javax.swing.JTable caseTable; + private javax.swing.JTable casesTable; private javax.swing.JScrollPane dataSourceScrollPane; - private javax.swing.JTable dataSourceTable; + private javax.swing.JTable dataSourcesTable; private javax.swing.JLabel earliestCaseDate; private javax.swing.JLabel earliestCaseLabel; private javax.swing.JMenuItem exportToCSVMenuItem; + private javax.swing.JTable filesTable; private javax.swing.JLabel foundInLabel; private javax.swing.JSplitPane jSplitPane2; private javax.swing.JSplitPane jSplitPane3; private javax.swing.JPanel otherCasesPanel; - private javax.swing.JTable otherCasesTable; private javax.swing.JScrollPane propertiesTableScrollPane; private javax.swing.JPopupMenu rightClickPopupMenu; private javax.swing.JMenuItem selectAllMenuItem; diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java index 46f5097cd0..8dbbfd64d7 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java @@ -41,11 +41,11 @@ public class OtherOccurrencesFilesTableModel extends AbstractTableModel { enum TableColumns { // Ordering here determines displayed column order in Content Viewer. // If order is changed, update the CellRenderer to ensure correct row coloring. - ATTRIBUTE(Bundle.OtherOccurrencesFilesTableModel_attribute(), 40), - VALUE(Bundle.OtherOccurrencesFilesTableModel_value(), 200), - KNOWN(Bundle.OtherOccurrencesFilesTableModel_known(), 40), - FILE_PATH(Bundle.OtherOccurrencesFilesTableModel_path(), 450), - COMMENT(Bundle.OtherOccurrencesFilesTableModel_comment(), 200); + ATTRIBUTE(Bundle.OtherOccurrencesFilesTableModel_attribute(), 75), + VALUE(Bundle.OtherOccurrencesFilesTableModel_value(), 190), + KNOWN(Bundle.OtherOccurrencesFilesTableModel_known(), 25), + FILE_PATH(Bundle.OtherOccurrencesFilesTableModel_path(), 470), + COMMENT(Bundle.OtherOccurrencesFilesTableModel_comment(), 190); private final String columnName; private final int columnWidth; From 5bcd983c47712f7c99b73a8039c687e3ad8c8d89 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 13 Mar 2019 17:18:23 -0400 Subject: [PATCH 35/80] 4792 move no results messages to Case table --- .../contentviewer/Bundle.properties-MERGED | 1 - .../contentviewer/CorrelationCaseWrapper.java | 28 +++++ .../DataContentViewerOtherCases.java | 102 ++++++------------ .../OtherOccurrencesCasesTableModel.java | 32 +++--- 4 files changed, 72 insertions(+), 91 deletions(-) create mode 100644 Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED index a0321b2f77..fc30931457 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/Bundle.properties-MERGED @@ -16,7 +16,6 @@ DataContentViewerOtherCases.noOpenCase.errMsg=No open case available. DataContentViewerOtherCases.selectAllMenuItem.text=Select All DataContentViewerOtherCases.showCaseDetailsMenuItem.text=Show Case Details DataContentViewerOtherCases.table.noArtifacts=Item has no attributes with which to search. -DataContentViewerOtherCases.table.nodbconnection=Cannot connect to central repository database. DataContentViewerOtherCases.table.noResultsFound=No results found. DataContentViewerOtherCases.table.toolTip.text=Click column name to sort. Right-click on the table for more options. DataContentViewerOtherCases.exportToCSVMenuItem.text=Export Selected Rows to CSV diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java new file mode 100644 index 0000000000..285b5fc95a --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java @@ -0,0 +1,28 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.sleuthkit.autopsy.centralrepository.contentviewer; + +import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationCase; + +class CorrelationCaseWrapper { + + private final CorrelationCase corCase; + private final String message; + + CorrelationCaseWrapper(CorrelationCase corrCase) { + corCase = corrCase; + message = corrCase.getDisplayName(); + } + + CorrelationCaseWrapper(String msg) { + corCase = null; + message = msg; + } + + String getMessage() { + return message; + } +} diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index 3ad87f97e2..cfd0d0e96e 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -85,15 +85,17 @@ import org.sleuthkit.datamodel.TskData; @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives @ServiceProvider(service = DataContentViewer.class, position = 9) @Messages({"DataContentViewerOtherCases.title=Other Occurrences", - "DataContentViewerOtherCases.toolTip=Displays instances of the selected file/artifact from other occurrences.",}) + "DataContentViewerOtherCases.toolTip=Displays instances of the selected file/artifact from other occurrences.", + "DataContentViewerOtherCases.table.noArtifacts=Item has no attributes with which to search.", + "DataContentViewerOtherCases.table.noResultsFound=No results found."}) public class DataContentViewerOtherCases extends JPanel implements DataContentViewer { private static final long serialVersionUID = -1L; private static final Logger LOGGER = Logger.getLogger(DataContentViewerOtherCases.class.getName()); - + private static final CorrelationCaseWrapper NO_ARTIFACTS_CASE = new CorrelationCaseWrapper(Bundle.DataContentViewerOtherCases_table_noArtifacts()); + private static final CorrelationCaseWrapper NO_RESULTS_CASE = new CorrelationCaseWrapper(Bundle.DataContentViewerOtherCases_table_noArtifacts()); private static final int DEFAULT_MIN_CELL_WIDTH = 15; - private static final int CELL_TEXT_WIDTH_PADDING = 5; private final OtherOccurrencesFilesTableModel tableModel; private final OtherOccurrencesCasesTableModel casesTableModel; @@ -365,40 +367,6 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi return 1; } - /** - * Set the number of unique cases and data sources. - */ - @Messages({ - "DataContentViewerOtherCases.foundIn.text=Found %d instances in %d cases and %d data sources." - }) - private void setOccurrenceCounts() { - OtherOccurrencesFilesTableModel model = (OtherOccurrencesFilesTableModel) filesTable.getModel(); - -// int caseColumnIndex = OtherOccurrencesFilesTableModel.TableColumns.CASE_NAME.ordinal(); -// int deviceColumnIndex = OtherOccurrencesFilesTableModel.TableColumns.DEVICE.ordinal(); - - /* - * We need a unique set of data sources. We rely on device ID for this. - * To mitigate edge cases where a device ID could be duplicated in the - * same case (e.g. "report.xml"), we put the device ID and case name in - * a key-value pair. - * - * Note: Relying on the case name isn't a fool-proof way of determining - * a case to be unique. We should improve this in the future. - */ - Set cases = new HashSet<>(); - Map devices = new HashMap<>(); - - for (int i = 0; i < model.getRowCount(); i++) { -// String caseName = (String) model.getValueAt(i, caseColumnIndex); -// String deviceId = (String) model.getValueAt(i, deviceColumnIndex); -// cases.add(caseName); -// devices.put(deviceId, caseName); - } - - foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), model.getRowCount(), casesTableModel.getRowCount(), devices.size())); - } - /** * Get the associated BlackboardArtifact from a node, if it exists. * @@ -406,9 +374,12 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi * * @return The associated BlackboardArtifact, or null */ - private BlackboardArtifact getBlackboardArtifactFromNode(Node node) { - BlackboardArtifactTag nodeBbArtifactTag = node.getLookup().lookup(BlackboardArtifactTag.class); - BlackboardArtifact nodeBbArtifact = node.getLookup().lookup(BlackboardArtifact.class); + private BlackboardArtifact + getBlackboardArtifactFromNode(Node node) { + BlackboardArtifactTag nodeBbArtifactTag = node.getLookup().lookup(BlackboardArtifactTag.class + ); + BlackboardArtifact nodeBbArtifact = node.getLookup().lookup(BlackboardArtifact.class + ); if (nodeBbArtifactTag != null) { return nodeBbArtifactTag.getArtifact(); @@ -417,6 +388,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } return null; + } /** @@ -427,10 +399,14 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi * @return The associated AbstractFile, or null */ private AbstractFile getAbstractFileFromNode(Node node) { - BlackboardArtifactTag nodeBbArtifactTag = node.getLookup().lookup(BlackboardArtifactTag.class); - ContentTag nodeContentTag = node.getLookup().lookup(ContentTag.class); - BlackboardArtifact nodeBbArtifact = node.getLookup().lookup(BlackboardArtifact.class); - AbstractFile nodeAbstractFile = node.getLookup().lookup(AbstractFile.class); + BlackboardArtifactTag nodeBbArtifactTag = node.getLookup().lookup(BlackboardArtifactTag.class + ); + ContentTag nodeContentTag = node.getLookup().lookup(ContentTag.class + ); + BlackboardArtifact nodeBbArtifact = node.getLookup().lookup(BlackboardArtifact.class + ); + AbstractFile nodeAbstractFile = node.getLookup().lookup(AbstractFile.class + ); if (nodeBbArtifactTag != null) { Content content = nodeBbArtifactTag.getContent(); @@ -723,7 +699,6 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } @Override - @Messages({"DataContentViewerOtherCases.table.nodbconnection=Cannot connect to central repository database."}) public void setNode(Node node) { reset(); // reset the table to empty. @@ -743,9 +718,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi * @param node The node being viewed. */ @Messages({ - "DataContentViewerOtherCases.table.noArtifacts=Item has no attributes with which to search.", - "DataContentViewerOtherCases.table.noResultsFound=No results found.", - "DataContentViewerOtherCases.dataSources.header.text=Data Source Name" + "DataContentViewerOtherCases.dataSources.header.text=Data Source Name", + "DataContentViewerOtherCases.foundIn.text=Found %d instances in %d cases and %d data sources." }) private void populateTable(Node node) { try { @@ -789,20 +763,18 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } } for (CorrelationCase corCase : caseNames.values()) { - casesTableModel.addNodeData(corCase); + casesTableModel.addCorrelationCase(new CorrelationCaseWrapper(corCase)); } - + int caseCount = casesTableModel.getRowCount(); if (correlationAttributes.isEmpty()) { - tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noArtifacts())); - } else if (0 == tableModel.getRowCount()) { - tableModel.addNodeData(new OtherOccurrenceNodeMessageData(Bundle.DataContentViewerOtherCases_table_noResultsFound())); - } + casesTableModel.addCorrelationCase(NO_ARTIFACTS_CASE); + } else if (caseCount == 0) { + casesTableModel.addCorrelationCase(NO_RESULTS_CASE); + } setColumnWidths(); setEarliestCaseDate(); - - foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), totalCount, casesTableModel.getRowCount(), dataSources.size())); - - if (casesTable.getRowCount() > 0) { + foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), totalCount, caseCount, dataSources.size())); + if (caseCount > 0) { casesTable.setRowSelectionInterval(0, 0); } } @@ -875,20 +847,6 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } } - /** - * Adjust a given column for the text provided. - * - * @param columnIndex The index of the column to adjust. - * @param text The text whose length will be used to adjust the - * column width. - */ - private void setColumnWidthToText(int columnIndex, String text) { - TableColumn column = filesTable.getColumnModel().getColumn(columnIndex); - FontMetrics fontMetrics = filesTable.getFontMetrics(filesTable.getFont()); - int stringWidth = fontMetrics.stringWidth(text); - column.setMinWidth(stringWidth + CELL_TEXT_WIDTH_PADDING); - } - /** * Adjust column widths to their preferred values. */ diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java index b4ef96a216..b0c79641df 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java @@ -22,13 +22,11 @@ import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; import org.openide.util.NbBundle.Messages; -import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationCase; - public class OtherOccurrencesCasesTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; - private final List nodeDataList = new ArrayList<>(); + private final List correlationCaseList = new ArrayList<>(); OtherOccurrencesCasesTableModel() { } @@ -54,7 +52,7 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { @Override public int getRowCount() { - return nodeDataList.size(); + return correlationCaseList.size(); } @Override @@ -64,32 +62,30 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { @Override public Object getValueAt(int rowIdx, int colIdx) { - if (0 == nodeDataList.size()) { - return Bundle.DataContentViewerOtherCasesTableModel_noData(); + if (0 == correlationCaseList.size()) { + return Bundle.OtherOccurrencesCasesTableModel_noData(); } - CorrelationCase nodeData = nodeDataList.get(rowIdx); + CorrelationCaseWrapper caseWrapper = correlationCaseList.get(rowIdx); TableColumns columnId = TableColumns.values()[colIdx]; - return mapNodeInstanceData(nodeData, columnId); + return mapCorrelationCase(caseWrapper, columnId); } /** * Map a column ID to the value in that cell for node instance data. * - * @param nodeData The node instance data. + * @param correlationCaseWrapper The node instance data. * @param columnId The ID of the cell column. * * @return The value in the cell. */ @Messages({"OtherOccurrencesCasesTableModel.noData=No Data."}) - private Object mapNodeInstanceData(CorrelationCase nodeData, TableColumns columnId) { + private Object mapCorrelationCase(CorrelationCaseWrapper correlationCaseWrapper, TableColumns columnId) { String value = Bundle.OtherOccurrencesCasesTableModel_noData(); switch (columnId) { case CASE_NAME: - if (null != nodeData.getDisplayName()) { - value = nodeData.getDisplayName(); - } + value = correlationCaseWrapper.getMessage(); break; default: //Use default "No data" value. break; @@ -98,7 +94,7 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { } Object getRow(int rowIdx) { - return nodeDataList.get(rowIdx); + return correlationCaseList.get(rowIdx); } @Override @@ -109,10 +105,10 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { /** * Add one correlated instance object to the table * - * @param newNodeData data to add to the table + * @param newCorrelationCaseWrapper data to add to the table */ - void addNodeData(CorrelationCase newNodeData) { - nodeDataList.add(newNodeData); + void addCorrelationCase(CorrelationCaseWrapper newCorrelationCaseWrapper) { + correlationCaseList.add(newCorrelationCaseWrapper); fireTableDataChanged(); } @@ -120,7 +116,7 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { * Clear the node data table. */ void clearTable() { - nodeDataList.clear(); + correlationCaseList.clear(); fireTableDataChanged(); } From d631f95729ac70e81c12a3fbf91b214505d64276 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 13 Mar 2019 17:40:08 -0400 Subject: [PATCH 36/80] 4792 fix display for cr enabled other occurences --- .../contentviewer/CorrelationCaseWrapper.java | 26 ++++++++++++++++--- .../DataContentViewerOtherCases.java | 9 ++++--- .../OtherOccurrencesCasesTableModel.java | 4 +-- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java index 285b5fc95a..ea44469eee 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java @@ -1,12 +1,28 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Central Repository + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.sleuthkit.autopsy.centralrepository.contentviewer; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationCase; +/** + * Class to wrap CorrelationCases or a text message + */ class CorrelationCaseWrapper { private final CorrelationCase corCase; @@ -22,6 +38,10 @@ class CorrelationCaseWrapper { message = msg; } + CorrelationCase getCorrelationCase() { + return corCase; + } + String getMessage() { return message; } diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index cfd0d0e96e..2a7ffa42a0 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -19,7 +19,6 @@ package org.sleuthkit.autopsy.centralrepository.contentviewer; import java.awt.Component; -import java.awt.FontMetrics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedWriter; @@ -770,7 +769,7 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi casesTableModel.addCorrelationCase(NO_ARTIFACTS_CASE); } else if (caseCount == 0) { casesTableModel.addCorrelationCase(NO_RESULTS_CASE); - } + } setColumnWidths(); setEarliestCaseDate(); foundInLabel.setText(String.format(Bundle.DataContentViewerOtherCases_foundIn_text(), totalCount, caseCount, dataSources.size())); @@ -797,7 +796,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (int selectedRow : selectedCaseIndexes) { try { if (nodeData.isCentralRepoNode()) { - if (((CorrelationCase) casesTableModel.getRow(casesTable.convertRowIndexToModel(selectedRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID())) { + if (casesTableModel.getCorrelationCase(casesTable.convertRowIndexToModel(selectedRow)) != null + && ((CorrelationCase) casesTableModel.getCorrelationCase(casesTable.convertRowIndexToModel(selectedRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID())) { dataSourceModel.addRow(new Object[]{nodeData.getDataSourceName(), nodeData.getDeviceID()}); } } else { @@ -829,7 +829,8 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi for (int selectedDataSourceRow : selectedDataSources) { try { if (nodeData.isCentralRepoNode()) { - if (((CorrelationCase) casesTableModel.getRow(casesTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) + if (casesTableModel.getCorrelationCase(casesTable.convertRowIndexToModel(selectedCaseRow)) != null + && ((CorrelationCase) casesTableModel.getCorrelationCase(casesTable.convertRowIndexToModel(selectedCaseRow))).getCaseUUID().equals(nodeData.getCorrelationAttributeInstance().getCorrelationCase().getCaseUUID()) && dataSourceModel.getValueAt(dataSourcesTable.convertRowIndexToModel(selectedDataSourceRow), 1).toString().equals(nodeData.getDeviceID())) { tableModel.addNodeData(nodeData); } diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java index b0c79641df..65e780d445 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java @@ -93,8 +93,8 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { return value; } - Object getRow(int rowIdx) { - return correlationCaseList.get(rowIdx); + Object getCorrelationCase(int rowIdx) { + return correlationCaseList.get(rowIdx).getCorrelationCase(); } @Override From 449583cd187a8246431066870568d122a2a6d0f2 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Wed, 13 Mar 2019 17:51:21 -0400 Subject: [PATCH 37/80] 4792 additional comment fixes --- .../contentviewer/CorrelationCaseWrapper.java | 12 ++++++++++++ .../OtherOccurrencesCasesTableModel.java | 12 ++++++++---- .../OtherOccurrencesFilesTableCellRenderer.java | 2 +- .../OtherOccurrencesFilesTableModel.java | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java index ea44469eee..cee853eadb 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/CorrelationCaseWrapper.java @@ -38,10 +38,22 @@ class CorrelationCaseWrapper { message = msg; } + /** + * Get the correlation case this is wrapping or null if it only has a + * message. + * + * @return CorrelationCase or Null + */ CorrelationCase getCorrelationCase() { return corCase; } + /** + * Get the message this is wrapping, if a correlation case is being wrapped + * this will be it's display name. + * + * @return the message or Correlation Case display name + */ String getMessage() { return message; } diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java index 65e780d445..07ecc0878a 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesCasesTableModel.java @@ -23,6 +23,10 @@ import java.util.List; import javax.swing.table.AbstractTableModel; import org.openide.util.NbBundle.Messages; +/** + * Model for cells in the cases section of the other occurrences data content + * viewer + */ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; @@ -72,10 +76,10 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { } /** - * Map a column ID to the value in that cell for node instance data. + * Map a column ID to the value in that cell for correlation case wrapper. * - * @param correlationCaseWrapper The node instance data. - * @param columnId The ID of the cell column. + * @param correlationCaseWrapper The correlation case wrapper + * @param columnId The ID of the cell column. * * @return The value in the cell. */ @@ -113,7 +117,7 @@ public class OtherOccurrencesCasesTableModel extends AbstractTableModel { } /** - * Clear the node data table. + * Clear the correlation case table. */ void clearTable() { correlationCaseList.clear(); diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableCellRenderer.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableCellRenderer.java index 289cc73172..2f258d3e7b 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableCellRenderer.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableCellRenderer.java @@ -27,7 +27,7 @@ import javax.swing.table.TableCellRenderer; import org.sleuthkit.datamodel.TskData; /** - * Renderer for cells in data content viewer table + * Renderer for cells in the files section of the other occurrences data content viewer */ public class OtherOccurrencesFilesTableCellRenderer implements TableCellRenderer { diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java index 8dbbfd64d7..e6c0a4215f 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/OtherOccurrencesFilesTableModel.java @@ -24,7 +24,7 @@ import javax.swing.table.AbstractTableModel; import org.openide.util.NbBundle.Messages; /** - * Model for cells in data content viewer table + * Model for cells in the files section of the other occurrences data content viewer */ public class OtherOccurrencesFilesTableModel extends AbstractTableModel { From d9d6c8aa6c13850701d409febdc47adc9ca167fe Mon Sep 17 00:00:00 2001 From: Raman Date: Wed, 13 Mar 2019 19:21:10 -0400 Subject: [PATCH 38/80] Address review comments. --- .../recentactivity/DataSourceUsageAnalyzer.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java index 36631a37a8..e1ff144097 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/DataSourceUsageAnalyzer.java @@ -46,9 +46,14 @@ import org.sleuthkit.datamodel.TskData; class DataSourceUsageAnalyzer extends Extract { private static final Logger logger = Logger.getLogger(DataSourceUsageAnalyzer.class.getName()); - private static final int FAT_EXFAT_FLAGS = TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_FAT16.getValue() | TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_FAT32.getValue() | TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_EXFAT.getValue(); + private static final int FAT_EXFAT_FLAGS = TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_FAT16.getValue() | + TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_FAT32.getValue() | + TskData.TSK_FS_TYPE_ENUM.TSK_FS_TYPE_EXFAT.getValue(); private static final long HUNDRED_GB = 100*1024*1024*1024l; - private static final String ANDROID_MEDIACARD_PATHS[] = {"/.android_secure", "/android", "/audio", "/photos", "/dcim", "/music", "/pictures", "/videos"}; //NON-NLS + + private static final String ANDROID_MEDIACARD_ROOT_FILENAMES[] = // files expected in root folder of an Android media card + {".android_secure", "android", "audio", + "photos", "dcim", "music", "pictures", "videos"}; //NON-NLS private Content dataSource; @Messages({ @@ -187,9 +192,9 @@ class DataSourceUsageAnalyzer extends Extract { } FileManager fileManager = currentCase.getServices().getFileManager(); - for (String path : ANDROID_MEDIACARD_PATHS ) { - for (AbstractFile file : fileManager.findFiles(dataSource, FilenameUtils.getName(path), FilenameUtils.getPath(path))) { - if ((file.getParentPath() + file.getName()).equalsIgnoreCase(path)) { + for (String fileName : ANDROID_MEDIACARD_ROOT_FILENAMES ) { + for (AbstractFile file : fileManager.findFiles(dataSource, fileName, "/")) { // NON-NLS + if (file.getParentPath().equals("/") && file.getName().equalsIgnoreCase(fileName)) { // NON-NLS createDataSourceUsageArtifact(Bundle.DataSourceUsage_AndroidMedia()); return; } From 81cd78d695ddbde7a71b515d8fa421cdc7af1e7a Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Thu, 14 Mar 2019 10:12:55 -0400 Subject: [PATCH 39/80] Removed code duplication --- .../AddDataSourceCallback.java | 96 -------------- .../CommandLineIngestManager.java | 13 +- .../autopsy/commandlineingest/DataSource.java | 66 ---------- .../DataSourceProcessorUtility.java | 121 ------------------ 4 files changed, 8 insertions(+), 288 deletions(-) delete mode 100755 Core/src/org/sleuthkit/autopsy/commandlineingest/AddDataSourceCallback.java delete mode 100755 Core/src/org/sleuthkit/autopsy/commandlineingest/DataSource.java delete mode 100755 Core/src/org/sleuthkit/autopsy/commandlineingest/DataSourceProcessorUtility.java diff --git a/Core/src/org/sleuthkit/autopsy/commandlineingest/AddDataSourceCallback.java b/Core/src/org/sleuthkit/autopsy/commandlineingest/AddDataSourceCallback.java deleted file mode 100755 index b4a000b0f3..0000000000 --- a/Core/src/org/sleuthkit/autopsy/commandlineingest/AddDataSourceCallback.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2019-2019 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.commandlineingest; - -import java.util.List; -import java.util.UUID; -import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; -import org.sleuthkit.datamodel.Content; - - -/** - * A "callback" that collects the results of running a data source processor on - * a data source and unblocks the job processing thread when the data source - * processor finishes running in its own thread. - */ -class AddDataSourceCallback extends DataSourceProcessorCallback { - - private final Case caseForJob; - private final DataSource dataSourceInfo; - private final UUID taskId; - private final Object lock; - - /** - * Constructs a "callback" that collects the results of running a data - * source processor on a data source and unblocks the job processing thread - * when the data source processor finishes running in its own thread. - * - * @param caseForJob The case for the current job. - * @param dataSourceInfo The data source - * @param taskId The task id to associate with ingest job events. - */ - AddDataSourceCallback(Case caseForJob, DataSource dataSourceInfo, UUID taskId, Object lock) { - this.caseForJob = caseForJob; - this.dataSourceInfo = dataSourceInfo; - this.taskId = taskId; - this.lock = lock; - } - - /** - * Called by the data source processor when it finishes running in its own - * thread. - * - * @param result The result code for the processing of the data source. - * @param errorMessages Any error messages generated during the processing - * of the data source. - * @param dataSourceContent The content produced by processing the data - * source. - */ - @Override - public void done(DataSourceProcessorCallback.DataSourceProcessorResult result, List errorMessages, List dataSourceContent) { - if (!dataSourceContent.isEmpty()) { - caseForJob.notifyDataSourceAdded(dataSourceContent.get(0), taskId); - } else { - caseForJob.notifyFailedAddingDataSource(taskId); - } - dataSourceInfo.setDataSourceProcessorOutput(result, errorMessages, dataSourceContent); - dataSourceContent.addAll(dataSourceContent); - synchronized (lock) { - lock.notifyAll(); - } - } - - /** - * Called by the data source processor when it finishes running in its own - * thread, if that thread is the AWT (Abstract Window Toolkit) event - * dispatch thread (EDT). - * - * @param result The result code for the processing of the data source. - * @param errorMessages Any error messages generated during the processing - * of the data source. - * @param dataSourceContent The content produced by processing the data - * source. - */ - @Override - public void doneEDT(DataSourceProcessorCallback.DataSourceProcessorResult result, List errorMessages, List dataSources) { - done(result, errorMessages, dataSources); - } - -} diff --git a/Core/src/org/sleuthkit/autopsy/commandlineingest/CommandLineIngestManager.java b/Core/src/org/sleuthkit/autopsy/commandlineingest/CommandLineIngestManager.java index 13b76a5eca..8039aa0479 100755 --- a/Core/src/org/sleuthkit/autopsy/commandlineingest/CommandLineIngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/commandlineingest/CommandLineIngestManager.java @@ -43,6 +43,9 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgress import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.TimeStampUtils; import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor; +import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSource; +import org.sleuthkit.autopsy.datasourceprocessors.AddDataSourceCallback; +import org.sleuthkit.autopsy.datasourceprocessors.DataSourceProcessorUtility; import org.sleuthkit.autopsy.events.AutopsyEvent; import org.sleuthkit.autopsy.ingest.IngestJob; import org.sleuthkit.autopsy.ingest.IngestJobSettings; @@ -177,7 +180,7 @@ public class CommandLineIngestManager { return; } - DataSource dataSource = new DataSource("", Paths.get(dataSourcePath)); + AutoIngestDataSource dataSource = new AutoIngestDataSource("", Paths.get(dataSourcePath)); try { // run data source processor runDataSourceProcessor(caseForJob, dataSource); @@ -228,7 +231,7 @@ public class CommandLineIngestManager { * @param dataSource DataSource object * @return object ID */ - private Long getDataSourceId(DataSource dataSource) { + private Long getDataSourceId(AutoIngestDataSource dataSource) { Content content = dataSource.getContent().get(0); return content.getId(); } @@ -271,7 +274,7 @@ public class CommandLineIngestManager { * task is interrupted while blocked, i.e., if auto ingest is shutting * down. */ - private void runDataSourceProcessor(Case caseForJob, DataSource dataSource) throws InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException { + private void runDataSourceProcessor(Case caseForJob, AutoIngestDataSource dataSource) throws InterruptedException, AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException { LOGGER.log(Level.INFO, "Adding data source {0} ", dataSource.getPath().toString()); @@ -329,7 +332,7 @@ public class CommandLineIngestManager { * * @param dataSource The data source. */ - private void logDataSourceProcessorResult(DataSource dataSource) { + private void logDataSourceProcessorResult(AutoIngestDataSource dataSource) { DataSourceProcessorCallback.DataSourceProcessorResult resultCode = dataSource.getResultDataSourceProcessorResultCode(); if (null != resultCode) { @@ -376,7 +379,7 @@ public class CommandLineIngestManager { * task is interrupted while blocked, i.e., if auto ingest is shutting * down. */ - private void analyze(DataSource dataSource) throws AnalysisStartupException, InterruptedException { + private void analyze(AutoIngestDataSource dataSource) throws AnalysisStartupException, InterruptedException { LOGGER.log(Level.INFO, "Starting ingest modules analysis for {0} ", dataSource.getPath()); IngestJobEventListener ingestJobEventListener = new IngestJobEventListener(); diff --git a/Core/src/org/sleuthkit/autopsy/commandlineingest/DataSource.java b/Core/src/org/sleuthkit/autopsy/commandlineingest/DataSource.java deleted file mode 100755 index 527a4e57f3..0000000000 --- a/Core/src/org/sleuthkit/autopsy/commandlineingest/DataSource.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2019-2019 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.commandlineingest; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult; -import org.sleuthkit.datamodel.Content; - -class DataSource { - - private final String deviceId; - private final Path path; - private DataSourceProcessorResult resultCode; - private List errorMessages; - private List content; - - DataSource(String deviceId, Path path) { - this.deviceId = deviceId; - this.path = path; - } - - String getDeviceId() { - return deviceId; - } - - Path getPath() { - return this.path; - } - - synchronized void setDataSourceProcessorOutput(DataSourceProcessorResult result, List errorMessages, List content) { - this.resultCode = result; - this.errorMessages = new ArrayList<>(errorMessages); - this.content = new ArrayList<>(content); - } - - synchronized DataSourceProcessorResult getResultDataSourceProcessorResultCode() { - return resultCode; - } - - synchronized List getDataSourceProcessorErrorMessages() { - return new ArrayList<>(errorMessages); - } - - synchronized List getContent() { - return new ArrayList<>(content); - } - -} diff --git a/Core/src/org/sleuthkit/autopsy/commandlineingest/DataSourceProcessorUtility.java b/Core/src/org/sleuthkit/autopsy/commandlineingest/DataSourceProcessorUtility.java deleted file mode 100755 index d5df4cef3d..0000000000 --- a/Core/src/org/sleuthkit/autopsy/commandlineingest/DataSourceProcessorUtility.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Autopsy Forensic Browser - * - * Copyright 2019-2019 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.commandlineingest; - -import java.nio.file.Path; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import org.openide.util.Lookup; -import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor; -import org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException; - -/** - * A utility class to find Data Source Processors - */ -final class DataSourceProcessorUtility { - - private DataSourceProcessorUtility() { - } - - /** - * A utility method to find all Data Source Processors (DSP) that are able - * to process the input data source. Only the DSPs that implement - * AutoIngestDataSourceProcessor interface are used. - * - * @param dataSourcePath Full path to the data source - * @return Hash map of all DSPs that can process the data source along with - * their confidence score - * @throws - * org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException - */ - static Map getDataSourceProcessorForFile(Path dataSourcePath, Collection processorCandidates) throws AutoIngestDataSourceProcessorException { - Map validDataSourceProcessorsMap = new HashMap<>(); - for (AutoIngestDataSourceProcessor processor : processorCandidates) { - int confidence = processor.canProcess(dataSourcePath); - if (confidence > 0) { - validDataSourceProcessorsMap.put(processor, confidence); - } - } - - return validDataSourceProcessorsMap; - } - - /** - * A utility method to find all Data Source Processors (DSP) that are able - * to process the input data source. Only the DSPs that implement - * AutoIngestDataSourceProcessor interface are used. Returns ordered list of - * data source processors. DSPs are ordered in descending order from highest - * confidence to lowest. - * - * @param dataSourcePath Full path to the data source - * - * @return Ordered list of data source processors. DSPs are ordered in - * descending order from highest confidence to lowest. - * - * @throws - * org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException - */ - static List getOrderedListOfDataSourceProcessors(Path dataSourcePath) throws AutoIngestDataSourceProcessorException { - // lookup all AutomatedIngestDataSourceProcessors - Collection processorCandidates = Lookup.getDefault().lookupAll(AutoIngestDataSourceProcessor.class); - return getOrderedListOfDataSourceProcessors(dataSourcePath, processorCandidates); - } - - /** - * A utility method to find all Data Source Processors (DSP) that are able - * to process the input data source. Only the DSPs that implement - * AutoIngestDataSourceProcessor interface are used. Returns ordered list of - * data source processors. DSPs are ordered in descending order from highest - * confidence to lowest. - * - * @param dataSourcePath Full path to the data source - * @param processorCandidates Collection of AutoIngestDataSourceProcessor objects to use - * - * @return Ordered list of data source processors. DSPs are ordered in - * descending order from highest confidence to lowest. - * - * @throws - * org.sleuthkit.autopsy.datasourceprocessors.AutoIngestDataSourceProcessor.AutoIngestDataSourceProcessorException - */ - static List getOrderedListOfDataSourceProcessors(Path dataSourcePath, Collection processorCandidates) throws AutoIngestDataSourceProcessorException { - Map validDataSourceProcessorsMap = getDataSourceProcessorForFile(dataSourcePath, processorCandidates); - return orderDataSourceProcessorsByConfidence(validDataSourceProcessorsMap); - } - - - /** - * A utility method to get an ordered list of data source processors. DSPs - * are ordered in descending order from highest confidence to lowest. - * - * @param validDataSourceProcessorsMap Hash map of all DSPs that can process - * the data source along with their confidence score - * @return Ordered list of data source processors - */ - static List orderDataSourceProcessorsByConfidence(Map validDataSourceProcessorsMap) { - List validDataSourceProcessors = validDataSourceProcessorsMap.entrySet().stream() - .sorted(Map.Entry.comparingByValue().reversed()) - .map(Map.Entry::getKey) - .collect(Collectors.toList()); - - return validDataSourceProcessors; - } -} From 114c8a913a9007a33c6dea42e267ff683ecadc17 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Thu, 14 Mar 2019 12:04:31 -0400 Subject: [PATCH 40/80] Inital commit for communications snapshot report support --- .../autopsy/communications/Bundle.properties | 1 + .../communications/Bundle.properties-MERGED | 5 + .../communications/VisualizationPanel.form | 30 ++- .../communications/VisualizationPanel.java | 163 ++++++++++++- .../snapshot/CommSnapShotReportWriter.java | 126 ++++++++++ .../snapshot/comm_snapshot_template.html | 27 +++ .../sleuthkit/autopsy/report/images/image.png | Bin 0 -> 516 bytes .../uisnapshot/UiSnapShotReportWriter.java | 226 ++++++++++++++++++ .../autopsy/report/uisnapshot/index.css | 19 ++ .../report/uisnapshot/index_template.html | 14 ++ .../autopsy/report/uisnapshot/navigation.html | 16 ++ .../autopsy/report/uisnapshot/summary.css | 14 ++ .../report/uisnapshot/summary_template.html | 55 +++++ 13 files changed, 687 insertions(+), 9 deletions(-) create mode 100755 Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java create mode 100755 Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html create mode 100755 Core/src/org/sleuthkit/autopsy/report/images/image.png create mode 100755 Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java create mode 100755 Core/src/org/sleuthkit/autopsy/report/uisnapshot/index.css create mode 100755 Core/src/org/sleuthkit/autopsy/report/uisnapshot/index_template.html create mode 100755 Core/src/org/sleuthkit/autopsy/report/uisnapshot/navigation.html create mode 100755 Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary.css create mode 100755 Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary_template.html diff --git a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties index 358971eaa8..6665c2e958 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties @@ -38,3 +38,4 @@ VisualizationPanel.organicLayoutButton.text=Organic VisualizationPanel.fastOrganicLayoutButton.text=Fast Organic VisualizationPanel.hierarchyLayoutButton.text=Hierarchical VisualizationPanel.clearVizButton.text_1=Clear Viz. +VisualizationPanel.snapshotButton.text_1=Snapshot Report diff --git a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED index 381ec7b337..949d7876e1 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED @@ -32,6 +32,8 @@ ResetAndPinAccountsAction.singularText=Visualize Only Selected Account UnpinAccountsAction.pluralText=Remove Selected Accounts UnpinAccountsAction.singularText=Remove Selected Account VisalizationPanel.paintingError=Problem painting visualization. +VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report: +VisualizationPane_reportName=Communications Snapshot VisualizationPanel.cancelButton.text=Cancel VisualizationPanel.computingLayout=Computing Layout VisualizationPanel.jButton1.text=Fast Organic @@ -65,3 +67,6 @@ VisualizationPanel.organicLayoutButton.text=Organic VisualizationPanel.fastOrganicLayoutButton.text=Fast Organic VisualizationPanel.hierarchyLayoutButton.text=Hierarchical VisualizationPanel.clearVizButton.text_1=Clear Viz. +VisualizationPanel.snapshotButton.text_1=Snapshot Report +VisualizationPanel_action_dialogs_title=Communications +VisualizationPanel_action_name_text=Snapshot Report diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form index 49b86ae014..4e0a73a6c7 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.form @@ -11,7 +11,7 @@ - + @@ -49,9 +49,9 @@ - + - + @@ -120,6 +120,10 @@ + + + + @@ -143,6 +147,8 @@ + + @@ -310,6 +316,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java index 8f5e6e5c94..a3c0fad868 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java @@ -28,6 +28,7 @@ import com.mxgraph.model.mxCell; import com.mxgraph.model.mxICell; import com.mxgraph.swing.handler.mxRubberband; import com.mxgraph.swing.mxGraphComponent; +import com.mxgraph.util.mxCellRenderer; import com.mxgraph.util.mxEvent; import com.mxgraph.util.mxEventObject; import com.mxgraph.util.mxEventSource; @@ -41,19 +42,28 @@ import com.mxgraph.view.mxGraphView; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; +import java.awt.Desktop; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; +import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; +import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; import java.beans.PropertyVetoException; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.text.DecimalFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; @@ -75,14 +85,17 @@ import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JMenuItem; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSplitPane; import javax.swing.JTextArea; +import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; +import org.apache.commons.lang3.StringUtils; import org.controlsfx.control.Notifications; import org.jdesktop.layout.GroupLayout; import org.jdesktop.layout.LayoutStyle; @@ -92,8 +105,11 @@ import org.openide.nodes.Node; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ProxyLookup; +import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.communications.snapshot.CommSnapShotReportWriter; +import org.sleuthkit.autopsy.coreutils.FileUtil; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.ThreadConfined; import org.sleuthkit.autopsy.progress.ModalDialogProgressIndicator; @@ -101,7 +117,6 @@ import org.sleuthkit.datamodel.CommunicationsFilter; import org.sleuthkit.datamodel.CommunicationsManager; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.TskCoreException; - /** * A panel that goes in the Visualize tab of the Communications Visualization * Tool. Hosts an JGraphX mxGraphComponent that implements the communications @@ -172,7 +187,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider public void paint(Graphics graphics) { try { super.paint(graphics); - } catch (NullPointerException ex) { //NOPMD + } catch (NullPointerException ex) { //NOPMD /* We can't find the underlying cause of the NPE in * jgraphx, but it doesn't seem to cause any * noticeable problems, so we are just logging it @@ -387,6 +402,8 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider zoomLabel = new JLabel(); clearVizButton = new JButton(); jSeparator2 = new JToolBar.Separator(); + snapshotButton = new JButton(); + jSeparator3 = new JToolBar.Separator(); notificationsJFXPanel = new JFXPanel(); setLayout(new BorderLayout()); @@ -406,9 +423,9 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider placeHolderPanel.setLayout(placeHolderPanelLayout); placeHolderPanelLayout.setHorizontalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING) .add(placeHolderPanelLayout.createSequentialGroup() - .addContainerGap(71, Short.MAX_VALUE) + .addContainerGap(268, Short.MAX_VALUE) .add(jTextArea1, GroupLayout.PREFERRED_SIZE, 424, GroupLayout.PREFERRED_SIZE) - .addContainerGap(248, Short.MAX_VALUE)) + .addContainerGap(445, Short.MAX_VALUE)) ); placeHolderPanelLayout.setVerticalGroup(placeHolderPanelLayout.createParallelGroup(GroupLayout.LEADING) .add(placeHolderPanelLayout.createSequentialGroup() @@ -505,6 +522,16 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider jSeparator2.setOrientation(SwingConstants.VERTICAL); + snapshotButton.setIcon(new ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/report/images/image.png"))); // NOI18N + snapshotButton.setText(NbBundle.getMessage(VisualizationPanel.class, "VisualizationPanel.snapshotButton.text_1")); // NOI18N + snapshotButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + snapshotButtonActionPerformed(evt); + } + }); + + jSeparator3.setOrientation(SwingConstants.VERTICAL); + GroupLayout toolbarLayout = new GroupLayout(toolbar); toolbar.setLayout(toolbarLayout); toolbarLayout.setHorizontalGroup(toolbarLayout.createParallelGroup(GroupLayout.LEADING) @@ -537,6 +564,10 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider .add(zoomActualButton, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.RELATED) .add(fitZoomButton, GroupLayout.PREFERRED_SIZE, 32, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(LayoutStyle.RELATED) + .add(jSeparator3, GroupLayout.PREFERRED_SIZE, 10, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(LayoutStyle.RELATED) + .add(snapshotButton) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); toolbarLayout.setVerticalGroup(toolbarLayout.createParallelGroup(GroupLayout.LEADING) @@ -556,7 +587,9 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider .add(jLabel2) .add(zoomLabel) .add(clearVizButton) - .add(jSeparator2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .add(jSeparator2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(snapshotButton) + .add(jSeparator3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .add(3, 3, 3)) ); @@ -648,6 +681,14 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider setCursor(Cursor.getDefaultCursor()); }//GEN-LAST:event_clearVizButtonActionPerformed + private void snapshotButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_snapshotButtonActionPerformed + try{ + handleSnapshotEvent(); + } catch (NoCurrentCaseException | IOException ex) { + // TODO something here + } + }//GEN-LAST:event_snapshotButtonActionPerformed + private void fitGraph() { graphComponent.zoomTo(1, true); mxPoint translate = graph.getView().getTranslate(); @@ -674,7 +715,115 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider graphComponent.zoom((heightFactor + widthFactor) / 2.0); } + + /** + * Handle the ActionPerformed event from the Snapshot button. + * + * @throws NoCurrentCaseException + * @throws IOException + */ + @NbBundle.Messages({ + "VisualizationPanel_action_dialogs_title=Communications", + "VisualizationPanel_action_name_text=Snapshot Report", + "VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report:", + "VisualizationPane_reportName=Communications Snapshot",}) + private void handleSnapshotEvent() throws NoCurrentCaseException, IOException { + Case currentCase = Case.getCurrentCaseThrows(); + Date generationDate = new Date(); + final String defaultReportName = FileUtil.escapeFileName(currentCase.getDisplayName() + " " + new SimpleDateFormat("MMddyyyyHHmmss").format(generationDate)); //NON_NLS + + final JTextField text = new JTextField(50); + final JPanel panel = new JPanel(new GridLayout(2, 1)); + panel.add(new JLabel(Bundle.VisualizationPane_fileName_prompt())); + panel.add(text); + + text.setText(defaultReportName); + + int result = JOptionPane.showConfirmDialog(graphComponent, panel, + Bundle.VisualizationPanel_action_dialogs_title(), JOptionPane.OK_CANCEL_OPTION); + + List filters = currentFilter.getAndFilters(); + + if (result == JOptionPane.OK_OPTION) { + String enteredReportName = text.getText(); + String reportName = StringUtils.defaultIfBlank(enteredReportName, defaultReportName); + Path reportPath = Paths.get(currentCase.getReportDirectory(), reportName); + if (!Files.exists(reportPath)) { + createReport(currentCase, reportName); + } else { + String message = String.format("Overwrite existing report?\n%s", reportName); + result = JOptionPane.showConfirmDialog(graphComponent, message, + Bundle.VisualizationPanel_action_dialogs_title(), JOptionPane.OK_CANCEL_OPTION); + + if (result == JOptionPane.OK_OPTION) { + FileUtil.deleteFileDir(reportPath.toFile()); + createReport(currentCase, reportName); + } + } + } + } + + /** + * Create the Snapshot Report. + * + * @param currentCase The current case + * @param reportName User selected name for the report + * + * @throws IOException + */ + @NbBundle.Messages({ + "VisualizationPane_DisplayName=Open Report", + "VisualizationPane_NoAssociatedEditorMessage=There is no associated editor for reports of this type or the associated application failed to launch.", + "VisualizationPane_MessageBoxTitle=Open Report Failure", + "VisualizationPane_NoOpenInEditorSupportMessage=This platform (operating system) does not support opening a file in an editor this way.", + "VisualizationPane_MissingReportFileMessage=The report file no longer exists.", + "VisualizationPane_ReportFileOpenPermissionDeniedMessage=Permission to open the report file was denied.", + "VisualizationPane_Report_Success=Report Successfully create at:\n{0}", + "VisualizationPane_Report_OK_Button=OK", + "VisualizationPane_Open_Report=Open Report",}) + private void createReport(Case currentCase, String reportName) throws IOException { + + // Create the report. + Path reportFolderPath = Paths.get(currentCase.getReportDirectory(), reportName, Bundle.VisualizationPane_reportName()); //NON_NLS + BufferedImage image = mxCellRenderer.createBufferedImage(graph, null, graph.getView().getScale(), Color.WHITE, true, null); + Path reportPath = (new CommSnapShotReportWriter(currentCase, reportFolderPath, reportName, new Date(), image, currentFilter)).writeReport(); + + // Report success to the user and offer to open the report. + String message = Bundle.VisualizationPane_Report_Success(reportPath.toAbsolutePath()); + String[] buttons = {Bundle.VisualizationPane_Report_OK_Button(), + Bundle.VisualizationPane_Open_Report()}; + + int result = JOptionPane.showOptionDialog(graphComponent, message, + Bundle.VisualizationPanel_action_dialogs_title(), + JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, + null, buttons, buttons[1]); + if (result == JOptionPane.NO_OPTION) { + try { + Desktop.getDesktop().open(reportPath.toFile()); + } catch (IOException ex) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + Bundle.VisualizationPane_NoAssociatedEditorMessage(), + Bundle.VisualizationPane_MessageBoxTitle(), + JOptionPane.ERROR_MESSAGE); + } catch (UnsupportedOperationException ex) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + Bundle.VisualizationPane_NoOpenInEditorSupportMessage(), + Bundle.VisualizationPane_MessageBoxTitle(), + JOptionPane.ERROR_MESSAGE); + } catch (IllegalArgumentException ex) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + Bundle.VisualizationPane_MissingReportFileMessage(), + Bundle.VisualizationPane_MessageBoxTitle(), + JOptionPane.ERROR_MESSAGE); + } catch (SecurityException ex) { + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + Bundle.VisualizationPane_ReportFileOpenPermissionDeniedMessage(), + Bundle.VisualizationPane_MessageBoxTitle(), + JOptionPane.ERROR_MESSAGE); + } + } + } // Variables declaration - do not modify//GEN-BEGIN:variables private JPanel borderLayoutPanel; @@ -687,10 +836,12 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider private JLabel jLabel2; private JToolBar.Separator jSeparator1; private JToolBar.Separator jSeparator2; + private JToolBar.Separator jSeparator3; private JTextArea jTextArea1; private JFXPanel notificationsJFXPanel; private JButton organicLayoutButton; private JPanel placeHolderPanel; + private JButton snapshotButton; private JSplitPane splitPane; private JPanel toolbar; private JButton zoomActualButton; @@ -1001,4 +1152,4 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider lockedVertexModel.lock(selectedVertices); } } -} +} \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java b/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java new file mode 100755 index 0000000000..becea9ebcd --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java @@ -0,0 +1,126 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2019 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.communications.snapshot; + +import java.util.List; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.nio.file.Path; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.util.Date; +import java.util.HashMap; +import java.util.Set; +import javax.imageio.ImageIO; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.report.uisnapshot.UiSnapShotReportWriter; +import org.sleuthkit.datamodel.Account; +import org.sleuthkit.datamodel.CommunicationsFilter; +import org.sleuthkit.datamodel.CommunicationsFilter.AccountTypeFilter; +import org.sleuthkit.datamodel.CommunicationsFilter.DateRangeFilter; +import org.sleuthkit.datamodel.CommunicationsFilter.SubFilter; + +/** + * Generate and write the Communication snapshot report to disk. + */ +public class CommSnapShotReportWriter extends UiSnapShotReportWriter { + + private final BufferedImage image; + private final CommunicationsFilter filter; + + /** + * Constructor + * + * @param currentCase The Case to write a report for. + * @param reportFolderPath The Path to the folder that will contain the + * report. + * @param reportName The name of the report. + * @param generationDate The generation Date of the report. + * @param snapshot A snapshot of the view to include in the report. + */ + public CommSnapShotReportWriter(Case currentCase, Path reportFolderPath, String reportName, Date generationDate, BufferedImage snapshot, CommunicationsFilter filter) { + + super(currentCase, reportFolderPath, reportName, generationDate); + + this.image = snapshot; + this.filter = filter; + + } + + /** + * Generate and write the html page that shows the snapshot and the state of + * the CommunicationFilters + * + * @throws IOException If there is a problem writing the html file to disk. + */ + @Override + protected void writeSnapShotHTMLFile() throws IOException { + SimpleDateFormat formatter = new SimpleDateFormat("MMMMM dd, yyyy"); + + ImageIO.write(image, "png", getReportFolderPath().resolve("snapshot.png").toFile()); //NON-NLS + + //make a map of context objects to resolve template paramaters against + HashMap snapShotContext = new HashMap<>(); + snapShotContext.put("reportTitle", getReportName()); //NON-NLS + + List filters = filter.getAndFilters(); + + for (SubFilter f : filters) { + if (f.getClass().getName().equals(DateRangeFilter.class.getName())) { + long startDate = ((DateRangeFilter) f).getStartDate(); + long endDate = ((DateRangeFilter) f).getEndDate(); + + if (startDate > 0) { + + snapShotContext.put("startTime", formatter.format(new Date((Instant.ofEpochSecond(startDate)).toEpochMilli()))); //NON-NLS + } + + if (endDate > 0) { + snapShotContext.put("endTime", formatter.format(new Date((Instant.ofEpochSecond(endDate)).toEpochMilli()))); //NON-NLS + } + } else if (f.getClass().getName().equals(AccountTypeFilter.class.getName())) { + snapShotContext.put("emailSelected", "checked"); //NON-NLS + + Set types = ((AccountTypeFilter) f).getAccountTypes(); + for (Account.Type type : types) { + if (type == Account.Type.DEVICE) { + snapShotContext.put("deviceSelected", "checked"); //NON-NLS + } else if (type == Account.Type.PHONE) { + snapShotContext.put("phoneSelected", "checked"); //NON-NLS + } else if (type == Account.Type.EMAIL) { + snapShotContext.put("emailSelected", "checked"); //NON-NLS + } else if (type == Account.Type.FACEBOOK) { + snapShotContext.put("facebookSelected", "checked"); //NON-NLS + } else if (type == Account.Type.TWITTER) { + snapShotContext.put("twitterSelected", "checked"); //NON-NLS + } else if (type == Account.Type.INSTAGRAM) { + snapShotContext.put("instagramSelected", "checked"); //NON-NLS + } else if (type == Account.Type.WHATSAPP) { + snapShotContext.put("whatsAppSelected", "checked"); //NON-NLS + } else if (type == Account.Type.WEBSITE) { + snapShotContext.put("websiteSelected", "checked"); //NON-NLS + } + } + } + } + + fillTemplateAndWrite("/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html", "Snapshot", snapShotContext, getReportFolderPath().resolve("snapshot.html")); //NON-NLS + } + +} diff --git a/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html b/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html new file mode 100755 index 0000000000..9b5640c3c1 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html @@ -0,0 +1,27 @@ + + + Communications Snapshot: {{reportTitle}} + + + + +
+ Timeline Snapshot + + + + + + + + + + + + + +
FiltersDate Range
Start:{{startTime}}
End:{{endTime}}
Account Types
Device:
Phone: +
Email:
Facebook:
Twitter
Instagram
WhatsApp
MessagingApp
Website
+
+ + \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/report/images/image.png b/Core/src/org/sleuthkit/autopsy/report/images/image.png new file mode 100755 index 0000000000000000000000000000000000000000..fc3c393caa3bc4371d12d0c67ffd6d333ecf1d8e GIT binary patch literal 516 zcmV+f0{i`mP)0oSgT$J*kO*Aq9I~CW*s{G*(t$KS{OS+#aO%?udUme<*TTEO`Fr@r_QT zk=#}u-n~>Vm!+9S1PE{@3<)G~CPb<$Za;W?3+O}|+q)?*Pn355=}S(XIZmEANjZci zf5 zj<%@MX^bD1^BwlS^+AD|$dm-1wial0hwPI;CDM?Y9SXW#@w-UF0SQ8OgplRTleOB2 zUjkDS|0U9pI|lSN*EvXUa~*UIclJdZ#)Npbwh9>YT?Z;=B8|l&^t~P~om?<5Lre$+ z;%`P>SL7`djY#8Y9$wv9dv|3p) sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.report.uisnapshot; + +import com.github.mustachejava.DefaultMustacheFactory; +import com.github.mustachejava.Mustache; +import com.github.mustachejava.MustacheFactory; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Writer; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import org.apache.commons.lang3.StringUtils; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.ingest.IngestManager; +import org.sleuthkit.autopsy.report.ReportBranding; + +/** + * Generate and write the Timeline snapshot report to disk. + */ +public abstract class UiSnapShotReportWriter { + + /** + * mustache.java template factory. + */ + private final static MustacheFactory mf = new DefaultMustacheFactory(); + + private final Case currentCase; + private final Path reportFolderPath; + private final String reportName; + private final ReportBranding reportBranding; + + private Date generationDate; + + /** + * Constructor + * + * @param currentCase The Case to write a report for. + * @param reportFolderPath The Path to the folder that will contain the + * report. + * @param reportName The name of the report. + * @param generationDate The generation Date of the report. + * @param snapshot A snapshot of the view to include in the + * report. + */ + protected UiSnapShotReportWriter(Case currentCase, Path reportFolderPath, String reportName, Date generationDate) { + this.currentCase = currentCase; + this.reportFolderPath = reportFolderPath; + this.reportName = reportName; + this.generationDate = generationDate; + + this.reportBranding = new ReportBranding(); + } + + /** + * Generate and write the report to disk. + * + * @return The Path to the "main file" of the report. This is the file that + * Autopsy shows in the results view when the Reports Node is + * selected in the DirectoryTree. + * + * @throws IOException If there is a problem writing the report. + */ + public Path writeReport() throws IOException { + //ensure directory exists + Files.createDirectories(reportFolderPath); + + copyResources(); + + writeSummaryHTML(); + writeSnapShotHTMLFile(); + return writeIndexHTML(); + } + + protected String getReportName(){ + return reportName; + } + + protected Path getReportFolderPath(){ + return reportFolderPath; + } + + /** + * Generate and write the html page that shows the snapshot and the state of + * any filters. + * + * @throws IOException If there is a problem writing the html file to disk. + */ + protected abstract void writeSnapShotHTMLFile() throws IOException ; + + /** + * Generate and write the main html page with frames for navigation on the + * left and content on the right. + * + * @return The Path of the written html file. + * + * @throws IOException If there is a problem writing the html file to disk. + */ + private Path writeIndexHTML() throws IOException { + //make a map of context objects to resolve template paramaters against + HashMap indexContext = new HashMap<>(); + indexContext.put("reportBranding", reportBranding); //NON-NLS + indexContext.put("reportName", reportName); //NON-NLS + Path reportIndexFile = reportFolderPath.resolve("index.html"); //NON-NLS + + fillTemplateAndWrite("/org/sleuthkit/autopsy/report/uisnapshot/index_template.html", "Index", indexContext, reportIndexFile); //NON-NLS + return reportIndexFile; + } + + /** + * * Generate and write the summary of the current case for this report. + * + * @throws IOException If there is a problem writing the html file to disk. + */ + private void writeSummaryHTML() throws IOException { + //make a map of context objects to resolve template paramaters against + HashMap summaryContext = new HashMap<>(); + summaryContext.put("reportName", reportName); //NON-NLS + summaryContext.put("reportBranding", reportBranding); //NON-NLS + summaryContext.put("generationDateTime", new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(generationDate)); //NON-NLS + summaryContext.put("ingestRunning", IngestManager.getInstance().isIngestRunning()); //NON-NLS + summaryContext.put("currentCase", currentCase); //NON-NLS + String agencyLogo = "agency_logo.png"; //default name for agency logo. + if (StringUtils.isNotBlank(reportBranding.getAgencyLogoPath())){ + agencyLogo = Paths.get(reportBranding.getAgencyLogoPath()).getFileName().toString(); + } + summaryContext.put("agencyLogoFileName", agencyLogo); + fillTemplateAndWrite("/org/sleuthkit/autopsy/report/uisnapshot/summary_template.html", "Summary", summaryContext, reportFolderPath.resolve("summary.html")); //NON-NLS + } + + /** + * Fill in the mustache template at the given location using the values from + * the given context object and save it to the given outPutFile. + * + * @param templateLocation The location of the template. suitible for use + * with Class.getResourceAsStream + * @param templateName The name of the tempalte. (Used by mustache to + * cache templates?) + * @param context The contect to use to fill in the template + * values. + * @param outPutFile The filled in tempalte will be saced at this + * Path. + * + * @throws IOException If there is a problem saving the filled in template + * to disk. + */ + protected void fillTemplateAndWrite(final String templateLocation, final String templateName, Object context, final Path outPutFile) throws IOException { + + Mustache summaryMustache = mf.compile(new InputStreamReader(UiSnapShotReportWriter.class.getResourceAsStream(templateLocation)), templateName); + try (Writer writer = Files.newBufferedWriter(outPutFile, Charset.forName("UTF-8"))) { //NON-NLS + summaryMustache.execute(writer, context); + } + } + + /** + * Copy static resources (static html, css, images, etc) to the reports + * folder. + * + * @throws IOException If there is a problem copying the resources. + */ + private void copyResources() throws IOException { + + //pull generator and agency logos from branding + String generatorLogoPath = reportBranding.getGeneratorLogoPath(); + if (StringUtils.isNotBlank(generatorLogoPath)) { + Files.copy(Files.newInputStream(Paths.get(generatorLogoPath)), reportFolderPath.resolve("generator_logo.png")); //NON-NLS + } + String agencyLogoPath = reportBranding.getAgencyLogoPath(); + if (StringUtils.isNotBlank(agencyLogoPath)) { + Files.copy(Files.newInputStream(Paths.get(agencyLogoPath)), reportFolderPath.resolve(Paths.get(reportBranding.getAgencyLogoPath()).getFileName())); //NON-NLS + } + + //copy navigation html + try (InputStream navStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/uisnapshot/navigation.html")) { //NON-NLS + Files.copy(navStream, reportFolderPath.resolve("nav.html")); //NON-NLS + } + //copy favicon + if (StringUtils.isBlank(agencyLogoPath)) { + // use default Autopsy icon if custom icon is not set + try (InputStream faviconStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/favicon.ico")) { //NON-NLS + Files.copy(faviconStream, reportFolderPath.resolve("favicon.ico")); //NON-NLS + } + } else { + Files.copy(Files.newInputStream(Paths.get(agencyLogoPath)), reportFolderPath.resolve("favicon.ico")); //NON-NLS + } + + //copy report summary icon + try (InputStream summaryStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/summary.png")) { //NON-NLS + Files.copy(summaryStream, reportFolderPath.resolve("summary.png")); //NON-NLS + } + //copy snapshot icon + try (InputStream snapshotIconStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/image.png")) { //NON-NLS + Files.copy(snapshotIconStream, reportFolderPath.resolve("snapshot_icon.png")); //NON-NLS + } + //copy main report css + try (InputStream resource = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/uisnapshot/index.css")) { //NON-NLS + Files.copy(resource, reportFolderPath.resolve("index.css")); //NON-NLS + } + //copy summary css + try (InputStream resource = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/uisnapshot/summary.css")) { //NON-NLS + Files.copy(resource, reportFolderPath.resolve("summary.css")); //NON-NLS + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/index.css b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/index.css new file mode 100755 index 0000000000..cbb4947792 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/index.css @@ -0,0 +1,19 @@ +body {margin: 0px; padding: 0px; background: #FFFFFF; font: 13px/20px Arial, Helvetica, sans-serif; color: #535353;} +#snapshot{max-width:800; max-height:600} +#content {padding: 30px;} +#header {width:100%; padding: 10px; line-height: 25px; background: #07A; color: #FFF; font-size: 20px;} +h1 {font-size: 20px; font-weight: normal; color: #07A; padding: 0 0 7px 0; margin-top: 25px; border-bottom: 1px solid #D6D6D6;} +h2 {font-size: 20px; font-weight: bolder; color: #07A;} +h3 {font-size: 16px; color: #07A;} +h4 {background: #07A; color: #FFF; font-size: 16px; margin: 0 0 0 25px; padding: 0; padding-left: 15px;} +ul.nav {list-style-type: none; line-height: 35px; padding: 0px; margin-left: 15px;} +ul li a {font-size: 14px; color: #444; text-decoration: none; padding-left: 25px;} +ul li a:hover {text-decoration: underline;} +p {margin: 0 0 20px 0;} +table {white-space:nowrap; min-width: 800px; padding: 2; margin: 0; border-collapse: collapse; border-bottom: 2px solid #e5e5e5;} +.keyword_list table {margin: 0 0 25px 25px; border-bottom: 2px solid #dedede;} +table th {white-space:nowrap; display: table-cell; text-align: center; padding: 2px 4px; background: #e5e5e5; color: #777; font-size: 11px; text-shadow: #e9f9fd 0 1px 0; border-top: 1px solid #dedede; border-bottom: 2px solid #e5e5e5;} +table .left_align_cell{display: table-cell; padding: 2px 4px; font: 13px/20px Arial, Helvetica, sans-serif; min-width: 125px; overflow: auto; text-align: left; } +table .right_align_cell{display: table-cell; padding: 2px 4px; font: 13px/20px Arial, Helvetica, sans-serif; min-width: 125px; overflow: auto; text-align: right; } +table td {white-space:nowrap; display: table-cell; padding: 2px 3px; font: 13px/20px Arial, Helvetica, sans-serif; min-width: 125px; overflow: auto; text-align:left; } +table tr:nth-child(even) td {background: #f3f3f3;} \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/index_template.html b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/index_template.html new file mode 100755 index 0000000000..91a9e37698 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/index_template.html @@ -0,0 +1,14 @@ + + + {{reportBranding.getReportTitle}} for {{reportName}} + + + + + + + Your browser is not compatible with our frame setup.<br /> + Please see <a href="nav.html">the navigation page</a> for links,<br /> + and <a href="summary.html">the summary page</a> for a case summary. + + diff --git a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/navigation.html b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/navigation.html new file mode 100755 index 0000000000..bfcf061e34 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/navigation.html @@ -0,0 +1,16 @@ + + + Report Navigation + + + + +
+

Report Navigation

+ +
+ + \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary.css b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary.css new file mode 100755 index 0000000000..489c19079a --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary.css @@ -0,0 +1,14 @@ +body { padding: 0px; margin: 0px; font: 13px/20px Arial, Helvetica, sans-serif; color: #535353; } +#wrapper { width: 90%; margin: 0px auto; margin-top: 35px; } +h1 { color: #07A; font-size: 36px; line-height: 42px; font-weight: normal; margin: 0px; border-bottom: 1px solid #81B9DB; } +h1 span { color: #F00; display: block; font-size: 16px; font-weight: bold; line-height: 22px;} +h2 { padding: 0 0 3px 0; margin: 0px; color: #07A; font-weight: normal; border-bottom: 1px dotted #81B9DB; } +table td { padding-right: 25px; } +p.subheadding { padding: 0px; margin: 0px; font-size: 11px; color: #B5B5B5; } +.title { width: 660px; margin-bottom: 50px; } +.left { float: left; width: 250px; margin-top: 20px; text-align: center; } +.left img { max-width: 250px; max-height: 250px; min-width: 200px; min-height: 200px; } +.right { float: right; width: 385px; margin-top: 25px; font-size: 14px; } +.clear { clear: both; } +.info p { padding: 3px 10px; background: #e5e5e5; color: #777; font-size: 12px; font-weight: bold; text-shadow: #e9f9fd 0 1px 0; border-top: 1px solid #dedede; border-bottom: 2px solid #dedede; } +.info table { margin: 0 25px 20px 25px; } diff --git a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary_template.html b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary_template.html new file mode 100755 index 0000000000..50aa65ff8a --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/summary_template.html @@ -0,0 +1,55 @@ + + + Case Summary + + + + + +
+

{{reportBranding.getReportTitle}}: {{reportName}}{{#ingestRunning}}Warning, this report was run before ingest services completed!{{/ingestRunning}}

+ +

Report generated on {{generationDateTime}}

+
+ {{#reportBranding.getAgencyLogoPath}} +
+ +
+
+ {{/reportBranding.getAgencyLogoPath}} + {{^reportBranding.getAgencyLogoPath}} +
+ {{/reportBranding.getAgencyLogoPath}} + + + + + +
Case:{{currentCase.getName}}
Case Number:{{currentCase.getCaseNumber}}{{^currentCase.getCaseNumber}}No case number{{/currentCase.getCaseNumber}}
Examiner:{{currentCase.getExaminer}}{{^currentCase.getExaminer}}No examiner{{/currentCase.getExaminer}}
Number of Images:{{currentCase.getDataSources.size}}
+
+
+
+

Image Information:

+ {{#currentCase.getDataSources}} +

{{getName}}

+ {{#getTimeZone}} + + + {{#getPaths}} + + {{/getPaths}} +
Timezone:{{getTimeZone}}
Path:{{toString}}
+ {{/getTimeZone}} + {{/currentCase.getDataSources}} +
+ {{#reportBranding.getGeneratorLogoPath}} +
+ +
+ {{/reportBranding.getGeneratorLogoPath}} +
+ {{#reportBranding.getReportFooter}} +

{{toString}}

+ {{/reportBranding.getReportFooter}} +
+ \ No newline at end of file From 07460ea7b4f695a66d4bc14eff44916663b712ec Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Thu, 14 Mar 2019 12:54:27 -0400 Subject: [PATCH 41/80] Modified timeline snapshot report to use common parent class, removed no longer needed snapshot report files --- .../communications/Bundle.properties-MERGED | 10 + .../communications/VisualizationPanel.java | 1 + .../snapshot/SnapShotReportWriter.java | 183 ++---------------- .../autopsy/timeline/snapshot/index.css | 19 -- .../timeline/snapshot/index_template.html | 14 -- .../autopsy/timeline/snapshot/navigation.html | 16 -- .../autopsy/timeline/snapshot/summary.css | 14 -- .../timeline/snapshot/summary_template.html | 55 ------ 8 files changed, 22 insertions(+), 290 deletions(-) delete mode 100644 Core/src/org/sleuthkit/autopsy/timeline/snapshot/index.css delete mode 100644 Core/src/org/sleuthkit/autopsy/timeline/snapshot/index_template.html delete mode 100644 Core/src/org/sleuthkit/autopsy/timeline/snapshot/navigation.html delete mode 100644 Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary.css delete mode 100644 Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary_template.html diff --git a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED index 949d7876e1..f88a5ffd81 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED @@ -32,7 +32,17 @@ ResetAndPinAccountsAction.singularText=Visualize Only Selected Account UnpinAccountsAction.pluralText=Remove Selected Accounts UnpinAccountsAction.singularText=Remove Selected Account VisalizationPanel.paintingError=Problem painting visualization. +VisualizationPane_DisplayName=Open Report VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report: +VisualizationPane_MessageBoxTitle=Open Report Failure +VisualizationPane_MissingReportFileMessage=The report file no longer exists. +VisualizationPane_NoAssociatedEditorMessage=There is no associated editor for reports of this type or the associated application failed to launch. +VisualizationPane_NoOpenInEditorSupportMessage=This platform (operating system) does not support opening a file in an editor this way. +VisualizationPane_Open_Report=Open Report +VisualizationPane_Report_OK_Button=OK +# {0} - report path +VisualizationPane_Report_Success=Report Successfully create at:\n{0} +VisualizationPane_ReportFileOpenPermissionDeniedMessage=Permission to open the report file was denied. VisualizationPane_reportName=Communications Snapshot VisualizationPanel.cancelButton.text=Cancel VisualizationPanel.computingLayout=Computing Layout diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java index a3c0fad868..20f52937ef 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java @@ -779,6 +779,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider "VisualizationPane_NoOpenInEditorSupportMessage=This platform (operating system) does not support opening a file in an editor this way.", "VisualizationPane_MissingReportFileMessage=The report file no longer exists.", "VisualizationPane_ReportFileOpenPermissionDeniedMessage=Permission to open the report file was denied.", + "# {0} - report path", "VisualizationPane_Report_Success=Report Successfully create at:\n{0}", "VisualizationPane_Report_OK_Button=OK", "VisualizationPane_Open_Report=Open Report",}) diff --git a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/SnapShotReportWriter.java b/Core/src/org/sleuthkit/autopsy/timeline/snapshot/SnapShotReportWriter.java index a9bce0acb8..961f357daa 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/SnapShotReportWriter.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/snapshot/SnapShotReportWriter.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2016 Basis Technology Corp. + * Copyright 2016 - 2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,46 +18,23 @@ */ package org.sleuthkit.autopsy.timeline.snapshot; -import com.github.mustachejava.DefaultMustacheFactory; -import com.github.mustachejava.Mustache; -import com.github.mustachejava.MustacheFactory; import java.awt.image.BufferedImage; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Writer; -import java.nio.charset.Charset; -import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; -import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import javax.imageio.ImageIO; -import org.apache.commons.lang3.StringUtils; import org.joda.time.format.DateTimeFormat; import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.ingest.IngestManager; -import org.sleuthkit.autopsy.report.ReportBranding; +import org.sleuthkit.autopsy.report.uisnapshot.UiSnapShotReportWriter; import org.sleuthkit.autopsy.timeline.zooming.ZoomParams; /** * Generate and write the Timeline snapshot report to disk. */ -public class SnapShotReportWriter { - - /** - * mustache.java template factory. - */ - private final static MustacheFactory mf = new DefaultMustacheFactory(); - - private final Case currentCase; - private final Path reportFolderPath; - private final String reportName; - private final ReportBranding reportBranding; +public class SnapShotReportWriter extends UiSnapShotReportWriter{ private final ZoomParams zoomParams; - private final Date generationDate; private final BufferedImage image; /** @@ -74,37 +51,9 @@ public class SnapShotReportWriter { * report. */ public SnapShotReportWriter(Case currentCase, Path reportFolderPath, String reportName, ZoomParams zoomParams, Date generationDate, BufferedImage snapshot) { - this.currentCase = currentCase; - this.reportFolderPath = reportFolderPath; - this.reportName = reportName; + super(currentCase, reportFolderPath, reportName, generationDate); this.zoomParams = zoomParams; - this.generationDate = generationDate; this.image = snapshot; - - this.reportBranding = new ReportBranding(); - } - - /** - * Generate and write the report to disk. - * - * @return The Path to the "main file" of the report. This is the file that - * Autopsy shows in the results view when the Reports Node is - * selected in the DirectoryTree. - * - * @throws IOException If there is a problem writing the report. - */ - public Path writeReport() throws IOException { - //ensure directory exists - Files.createDirectories(reportFolderPath); - - //save the snapshot in the report directory - ImageIO.write(image, "png", reportFolderPath.resolve("snapshot.png").toFile()); //NON-NLS - - copyResources(); - - writeSummaryHTML(); - writeSnapShotHTMLFile(); - return writeIndexHTML(); } /** @@ -113,128 +62,18 @@ public class SnapShotReportWriter { * * @throws IOException If there is a problem writing the html file to disk. */ - private void writeSnapShotHTMLFile() throws IOException { + @Override + protected void writeSnapShotHTMLFile() throws IOException { + //save the snapshot in the report directory + ImageIO.write(image, "png", getReportFolderPath().resolve("snapshot.png").toFile()); //NON-NLS + //make a map of context objects to resolve template paramaters against HashMap snapShotContext = new HashMap<>(); - snapShotContext.put("reportTitle", reportName); //NON-NLS + snapShotContext.put("reportTitle", getReportName()); //NON-NLS snapShotContext.put("startTime", zoomParams.getTimeRange().getStart().toString(DateTimeFormat.fullDateTime())); //NON-NLS snapShotContext.put("endTime", zoomParams.getTimeRange().getEnd().toString(DateTimeFormat.fullDateTime())); //NON-NLS snapShotContext.put("zoomParams", zoomParams); //NON-NLS - fillTemplateAndWrite("/org/sleuthkit/autopsy/timeline/snapshot/snapshot_template.html", "Snapshot", snapShotContext, reportFolderPath.resolve("snapshot.html")); //NON-NLS - } - - /** - * Generate and write the main html page with frames for navigation on the - * left and content on the right. - * - * @return The Path of the written html file. - * - * @throws IOException If there is a problem writing the html file to disk. - */ - private Path writeIndexHTML() throws IOException { - //make a map of context objects to resolve template paramaters against - HashMap indexContext = new HashMap<>(); - indexContext.put("reportBranding", reportBranding); //NON-NLS - indexContext.put("reportName", reportName); //NON-NLS - Path reportIndexFile = reportFolderPath.resolve("index.html"); //NON-NLS - - fillTemplateAndWrite("/org/sleuthkit/autopsy/timeline/snapshot/index_template.html", "Index", indexContext, reportIndexFile); //NON-NLS - return reportIndexFile; - } - - /** - * * Generate and write the summary of the current case for this report. - * - * @throws IOException If there is a problem writing the html file to disk. - */ - private void writeSummaryHTML() throws IOException { - //make a map of context objects to resolve template paramaters against - HashMap summaryContext = new HashMap<>(); - summaryContext.put("reportName", reportName); //NON-NLS - summaryContext.put("reportBranding", reportBranding); //NON-NLS - summaryContext.put("generationDateTime", new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(generationDate)); //NON-NLS - summaryContext.put("ingestRunning", IngestManager.getInstance().isIngestRunning()); //NON-NLS - summaryContext.put("currentCase", currentCase); //NON-NLS - String agencyLogo = "agency_logo.png"; //default name for agency logo. - if (StringUtils.isNotBlank(reportBranding.getAgencyLogoPath())){ - agencyLogo = Paths.get(reportBranding.getAgencyLogoPath()).getFileName().toString(); - } - summaryContext.put("agencyLogoFileName", agencyLogo); - fillTemplateAndWrite("/org/sleuthkit/autopsy/timeline/snapshot/summary_template.html", "Summary", summaryContext, reportFolderPath.resolve("summary.html")); //NON-NLS - } - - /** - * Fill in the mustache template at the given location using the values from - * the given context object and save it to the given outPutFile. - * - * @param templateLocation The location of the template. suitible for use - * with Class.getResourceAsStream - * @param templateName The name of the tempalte. (Used by mustache to - * cache templates?) - * @param context The contect to use to fill in the template - * values. - * @param outPutFile The filled in tempalte will be saced at this - * Path. - * - * @throws IOException If there is a problem saving the filled in template - * to disk. - */ - private void fillTemplateAndWrite(final String templateLocation, final String templateName, Object context, final Path outPutFile) throws IOException { - - Mustache summaryMustache = mf.compile(new InputStreamReader(SnapShotReportWriter.class.getResourceAsStream(templateLocation)), templateName); - try (Writer writer = Files.newBufferedWriter(outPutFile, Charset.forName("UTF-8"))) { //NON-NLS - summaryMustache.execute(writer, context); - } - } - - /** - * Copy static resources (static html, css, images, etc) to the reports - * folder. - * - * @throws IOException If there is a problem copying the resources. - */ - private void copyResources() throws IOException { - - //pull generator and agency logos from branding - String generatorLogoPath = reportBranding.getGeneratorLogoPath(); - if (StringUtils.isNotBlank(generatorLogoPath)) { - Files.copy(Files.newInputStream(Paths.get(generatorLogoPath)), reportFolderPath.resolve("generator_logo.png")); //NON-NLS - } - String agencyLogoPath = reportBranding.getAgencyLogoPath(); - if (StringUtils.isNotBlank(agencyLogoPath)) { - Files.copy(Files.newInputStream(Paths.get(agencyLogoPath)), reportFolderPath.resolve(Paths.get(reportBranding.getAgencyLogoPath()).getFileName())); //NON-NLS - } - - //copy navigation html - try (InputStream navStream = SnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/timeline/snapshot/navigation.html")) { //NON-NLS - Files.copy(navStream, reportFolderPath.resolve("nav.html")); //NON-NLS - } - //copy favicon - if (StringUtils.isBlank(agencyLogoPath)) { - // use default Autopsy icon if custom icon is not set - try (InputStream faviconStream = SnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/favicon.ico")) { //NON-NLS - Files.copy(faviconStream, reportFolderPath.resolve("favicon.ico")); //NON-NLS - } - } else { - Files.copy(Files.newInputStream(Paths.get(agencyLogoPath)), reportFolderPath.resolve("favicon.ico")); //NON-NLS - } - - //copy report summary icon - try (InputStream summaryStream = SnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/summary.png")) { //NON-NLS - Files.copy(summaryStream, reportFolderPath.resolve("summary.png")); //NON-NLS - } - //copy snapshot icon - try (InputStream snapshotIconStream = SnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/timeline/images/image.png")) { //NON-NLS - Files.copy(snapshotIconStream, reportFolderPath.resolve("snapshot_icon.png")); //NON-NLS - } - //copy main report css - try (InputStream resource = SnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/timeline/snapshot/index.css")) { //NON-NLS - Files.copy(resource, reportFolderPath.resolve("index.css")); //NON-NLS - } - //copy summary css - try (InputStream resource = SnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/timeline/snapshot/summary.css")) { //NON-NLS - Files.copy(resource, reportFolderPath.resolve("summary.css")); //NON-NLS - } + fillTemplateAndWrite("/org/sleuthkit/autopsy/timeline/snapshot/snapshot_template.html", "Snapshot", snapShotContext, getReportFolderPath().resolve("snapshot.html")); //NON-NLS } } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/index.css b/Core/src/org/sleuthkit/autopsy/timeline/snapshot/index.css deleted file mode 100644 index cbb4947792..0000000000 --- a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/index.css +++ /dev/null @@ -1,19 +0,0 @@ -body {margin: 0px; padding: 0px; background: #FFFFFF; font: 13px/20px Arial, Helvetica, sans-serif; color: #535353;} -#snapshot{max-width:800; max-height:600} -#content {padding: 30px;} -#header {width:100%; padding: 10px; line-height: 25px; background: #07A; color: #FFF; font-size: 20px;} -h1 {font-size: 20px; font-weight: normal; color: #07A; padding: 0 0 7px 0; margin-top: 25px; border-bottom: 1px solid #D6D6D6;} -h2 {font-size: 20px; font-weight: bolder; color: #07A;} -h3 {font-size: 16px; color: #07A;} -h4 {background: #07A; color: #FFF; font-size: 16px; margin: 0 0 0 25px; padding: 0; padding-left: 15px;} -ul.nav {list-style-type: none; line-height: 35px; padding: 0px; margin-left: 15px;} -ul li a {font-size: 14px; color: #444; text-decoration: none; padding-left: 25px;} -ul li a:hover {text-decoration: underline;} -p {margin: 0 0 20px 0;} -table {white-space:nowrap; min-width: 800px; padding: 2; margin: 0; border-collapse: collapse; border-bottom: 2px solid #e5e5e5;} -.keyword_list table {margin: 0 0 25px 25px; border-bottom: 2px solid #dedede;} -table th {white-space:nowrap; display: table-cell; text-align: center; padding: 2px 4px; background: #e5e5e5; color: #777; font-size: 11px; text-shadow: #e9f9fd 0 1px 0; border-top: 1px solid #dedede; border-bottom: 2px solid #e5e5e5;} -table .left_align_cell{display: table-cell; padding: 2px 4px; font: 13px/20px Arial, Helvetica, sans-serif; min-width: 125px; overflow: auto; text-align: left; } -table .right_align_cell{display: table-cell; padding: 2px 4px; font: 13px/20px Arial, Helvetica, sans-serif; min-width: 125px; overflow: auto; text-align: right; } -table td {white-space:nowrap; display: table-cell; padding: 2px 3px; font: 13px/20px Arial, Helvetica, sans-serif; min-width: 125px; overflow: auto; text-align:left; } -table tr:nth-child(even) td {background: #f3f3f3;} \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/index_template.html b/Core/src/org/sleuthkit/autopsy/timeline/snapshot/index_template.html deleted file mode 100644 index 91a9e37698..0000000000 --- a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/index_template.html +++ /dev/null @@ -1,14 +0,0 @@ - - - {{reportBranding.getReportTitle}} for {{reportName}} - - - - - - - Your browser is not compatible with our frame setup.<br /> - Please see <a href="nav.html">the navigation page</a> for links,<br /> - and <a href="summary.html">the summary page</a> for a case summary. - - diff --git a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/navigation.html b/Core/src/org/sleuthkit/autopsy/timeline/snapshot/navigation.html deleted file mode 100644 index 02b6705cfb..0000000000 --- a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/navigation.html +++ /dev/null @@ -1,16 +0,0 @@ - - - Report Navigation - - - - -
-

Report Navigation

- -
- - \ No newline at end of file diff --git a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary.css b/Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary.css deleted file mode 100644 index 489c19079a..0000000000 --- a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary.css +++ /dev/null @@ -1,14 +0,0 @@ -body { padding: 0px; margin: 0px; font: 13px/20px Arial, Helvetica, sans-serif; color: #535353; } -#wrapper { width: 90%; margin: 0px auto; margin-top: 35px; } -h1 { color: #07A; font-size: 36px; line-height: 42px; font-weight: normal; margin: 0px; border-bottom: 1px solid #81B9DB; } -h1 span { color: #F00; display: block; font-size: 16px; font-weight: bold; line-height: 22px;} -h2 { padding: 0 0 3px 0; margin: 0px; color: #07A; font-weight: normal; border-bottom: 1px dotted #81B9DB; } -table td { padding-right: 25px; } -p.subheadding { padding: 0px; margin: 0px; font-size: 11px; color: #B5B5B5; } -.title { width: 660px; margin-bottom: 50px; } -.left { float: left; width: 250px; margin-top: 20px; text-align: center; } -.left img { max-width: 250px; max-height: 250px; min-width: 200px; min-height: 200px; } -.right { float: right; width: 385px; margin-top: 25px; font-size: 14px; } -.clear { clear: both; } -.info p { padding: 3px 10px; background: #e5e5e5; color: #777; font-size: 12px; font-weight: bold; text-shadow: #e9f9fd 0 1px 0; border-top: 1px solid #dedede; border-bottom: 2px solid #dedede; } -.info table { margin: 0 25px 20px 25px; } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary_template.html b/Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary_template.html deleted file mode 100644 index 2d1e37a2a8..0000000000 --- a/Core/src/org/sleuthkit/autopsy/timeline/snapshot/summary_template.html +++ /dev/null @@ -1,55 +0,0 @@ - - - Case Summary - - - - - -
-

{{reportBranding.getReportTitle}}: {{reportName}}{{#ingestRunning}}Warning, this report was run before ingest services completed!{{/ingestRunning}}

- -

Timeline Report generated on {{generationDateTime}}

-
- {{#reportBranding.getAgencyLogoPath}} -
- -
-
- {{/reportBranding.getAgencyLogoPath}} - {{^reportBranding.getAgencyLogoPath}} -
- {{/reportBranding.getAgencyLogoPath}} - - - - - -
Case:{{currentCase.getName}}
Case Number:{{currentCase.getCaseNumber}}{{^currentCase.getCaseNumber}}No case number{{/currentCase.getCaseNumber}}
Examiner:{{currentCase.getExaminer}}{{^currentCase.getExaminer}}No examiner{{/currentCase.getExaminer}}
Number of Images:{{currentCase.getDataSources.size}}
-
-
-
-

Image Information:

- {{#currentCase.getDataSources}} -

{{getName}}

- {{#getTimeZone}} - - - {{#getPaths}} - - {{/getPaths}} -
Timezone:{{getTimeZone}}
Path:{{toString}}
- {{/getTimeZone}} - {{/currentCase.getDataSources}} -
- {{#reportBranding.getGeneratorLogoPath}} -
- -
- {{/reportBranding.getGeneratorLogoPath}} -
- {{#reportBranding.getReportFooter}} -

{{toString}}

- {{/reportBranding.getReportFooter}} -
- \ No newline at end of file From 7644693f12c6d0469ae9ad4caa504d0fa32e4a04 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Thu, 14 Mar 2019 13:24:51 -0400 Subject: [PATCH 42/80] Fixed the NPE experienced when searching for certain keywords on the Cambridge cluster --- .../autopsy/keywordsearch/multicase/Bundle.properties | 2 +- .../keywordsearch/multicase/Bundle.properties-MERGED | 2 +- .../keywordsearch/multicase/MultiCaseSearcher.java | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties index b94b04069b..9ca1203be4 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties @@ -8,7 +8,7 @@ MultiCaseKeywordSearchPanel.exactRadioButton.text_1=Exact Match MultiCaseKeywordSearchPanel.substringRadioButton.text_1=Substring Match MultiCaseKeywordSearchPanel.regexRadioButton.text_1=Regular Expression MultiCaseKeywordSearchPanel.keywordTextField.text_1= -MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected collections to find cases which contain hits. The cases can be opened to examine the results more closely. +MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected cases. The case can be opened to examine the results more closely. MultiCaseKeywordSearchPanel.casesLabel.text_1=Cases MultiCaseKeywordSearchPanel.resultsLabel.text=Results MultiCaseKeywordSearchPanel.uncheckButton.text=Uncheck All diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index cbb81b3e99..d10f80b39a 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -89,7 +89,7 @@ MultiCaseKeywordSearchPanel.exactRadioButton.text_1=Exact Match MultiCaseKeywordSearchPanel.substringRadioButton.text_1=Substring Match MultiCaseKeywordSearchPanel.regexRadioButton.text_1=Regular Expression MultiCaseKeywordSearchPanel.keywordTextField.text_1= -MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected collections to find cases which contain hits. The cases can be opened to examine the results more closely. +MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected cases. The case can be opened to examine the results more closely. MultiCaseKeywordSearchPanel.casesLabel.text_1=Cases MultiCaseKeywordSearchPanel.resultsLabel.text=Results MultiCaseKeywordSearchPanel.uncheckButton.text=Uncheck All diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java index e391a9de22..b26001a28e 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseSearcher.java @@ -71,6 +71,7 @@ import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.CaseDbConnectionInfo; import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.Report; import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; import org.w3c.dom.Document; @@ -534,7 +535,7 @@ final class MultiCaseSearcher { final String caseDirectoryPath = caseMetadata.getCaseDirectory(); final Content content = caseDatabase.getContentById(objectId); final Content dataSource = content.getDataSource(); - final String dataSourceName = dataSource.getName(); + final String dataSourceName = (dataSource == null) ? "" : dataSource.getName(); SearchHit.SourceType sourceType = SearchHit.SourceType.FILE; String sourceName = ""; String sourcePath = ""; @@ -564,7 +565,13 @@ final class MultiCaseSearcher { } else { sourcePath = source.getUniquePath(); } + } else if (content instanceof Report) { + Report report = (Report) content; + sourceType = SearchHit.SourceType.REPORT; + sourceName = report.getReportName(); + sourcePath = report.getUniquePath(); } + return new SearchHit(caseDisplayName, caseDirectoryPath, dataSourceName, sourceType, sourceName, sourcePath); } catch (SQLException | TskCoreException ex) { throw new MultiCaseSearcherException(Bundle.MultiCaseSearcher_exceptionMessage_hitProcessingError(solrObjectId, caseInfo.getCaseMetadata().getCaseName(), caseInfo.getCaseMetadata().getCaseDirectory()), ex); From 70cf6a39d344fc874e43a30873f4b4040a8e8841 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Thu, 14 Mar 2019 15:25:59 -0400 Subject: [PATCH 43/80] Fixed NPE - slack node missing bundle message --- Core/src/org/sleuthkit/autopsy/datamodel/SlackFileNode.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/SlackFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/SlackFileNode.java index ba377b1e0e..49d1b9da54 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/SlackFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/SlackFileNode.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2017 Basis Technology Corp. + * Copyright 2011-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -78,7 +78,7 @@ public class SlackFileNode extends AbstractFsContentNode { actionsList.add(a); } if (!this.getDirectoryBrowseMode()) { - actionsList.add(new ViewContextAction(NbBundle.getMessage(this.getClass(), "SlackFileNode.viewFileInDir.text"), this.content)); + actionsList.add(new ViewContextAction(NbBundle.getMessage(this.getClass(), "SlackFileNode.getActions.viewFileInDir.text"), this.content)); actionsList.add(null); // creates a menu separator } actionsList.add(new NewWindowViewAction( From b5ade06313a7e222fc4b130ebac6dfbdbe4f4f67 Mon Sep 17 00:00:00 2001 From: Raman Date: Thu, 14 Mar 2019 16:46:28 -0400 Subject: [PATCH 44/80] 4773: Update progress bar in EncryptionDetectionDataSourceIngestModule. --- .../encryptiondetection/Bundle.properties-MERGED | 1 + .../EncryptionDetectionDataSourceIngestModule.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/Bundle.properties-MERGED index cf18d1efb3..905c5b3d84 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/Bundle.properties-MERGED @@ -1,5 +1,6 @@ EncryptionDetectionDataSourceIngestModule.artifactComment.bitlocker=Bitlocker encryption detected. EncryptionDetectionDataSourceIngestModule.artifactComment.suspected=Suspected encryption due to high entropy (%f). +EncryptionDetectionDataSourceIngestModule.processing.message=Checking image for encryption. EncryptionDetectionFileIngestModule.artifactComment.password=Password protection detected. EncryptionDetectionFileIngestModule.artifactComment.suspected=Suspected encryption due to high entropy (%f). EncryptionDetectionFileIngestModule.getDesc.text=Looks for files with the specified minimum entropy. diff --git a/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/EncryptionDetectionDataSourceIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/EncryptionDetectionDataSourceIngestModule.java index 7bf426343d..f7806db5a7 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/EncryptionDetectionDataSourceIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/encryptiondetection/EncryptionDetectionDataSourceIngestModule.java @@ -71,11 +71,14 @@ final class EncryptionDetectionDataSourceIngestModule implements DataSourceInges @Messages({ "EncryptionDetectionDataSourceIngestModule.artifactComment.bitlocker=Bitlocker encryption detected.", - "EncryptionDetectionDataSourceIngestModule.artifactComment.suspected=Suspected encryption due to high entropy (%f)." + "EncryptionDetectionDataSourceIngestModule.artifactComment.suspected=Suspected encryption due to high entropy (%f).", + "EncryptionDetectionDataSourceIngestModule.processing.message=Checking image for encryption." }) @Override public ProcessResult process(Content dataSource, DataSourceIngestModuleProgress progressBar) { + + try { if (dataSource instanceof Image) { @@ -83,8 +86,11 @@ final class EncryptionDetectionDataSourceIngestModule implements DataSourceInges logger.log(Level.SEVERE, String.format("Unable to process data source '%s' - image has no paths", dataSource.getName())); return IngestModule.ProcessResult.ERROR; } - + List volumeSystems = ((Image) dataSource).getVolumeSystems(); + progressBar.switchToDeterminate(volumeSystems.size()); + int numVolSystemsChecked = 0; + progressBar.progress(Bundle.EncryptionDetectionDataSourceIngestModule_processing_message(), 0); for (VolumeSystem volumeSystem : volumeSystems) { for (Volume volume : volumeSystem.getVolumes()) { if (BitlockerDetection.isBitlockerVolume(volume)) { @@ -94,6 +100,9 @@ final class EncryptionDetectionDataSourceIngestModule implements DataSourceInges return flagVolume(volume, BlackboardArtifact.ARTIFACT_TYPE.TSK_ENCRYPTION_SUSPECTED, String.format(Bundle.EncryptionDetectionDataSourceIngestModule_artifactComment_suspected(), calculatedEntropy)); } } + // Update progress bar + numVolSystemsChecked++; + progressBar.progress(Bundle.EncryptionDetectionDataSourceIngestModule_processing_message(), numVolSystemsChecked); } } } catch (ReadContentInputStream.ReadContentInputStreamException ex) { From e52f72aeab5a9de673f2f057c0351d76097810bf Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 14 Mar 2019 18:32:13 -0400 Subject: [PATCH 45/80] 4816 change manifest tool to be more user friendly --- ManifestTool/ManifestGenerationAlgorithms.au3 | 16 ++- ManifestTool/ManifestTool.au3 | 94 +++++++++++------- ManifestTool/ManifestTool.exe | Bin 1038336 -> 1157632 bytes 3 files changed, 70 insertions(+), 40 deletions(-) diff --git a/ManifestTool/ManifestGenerationAlgorithms.au3 b/ManifestTool/ManifestGenerationAlgorithms.au3 index 8cab9ec663..d846909e13 100644 --- a/ManifestTool/ManifestGenerationAlgorithms.au3 +++ b/ManifestTool/ManifestGenerationAlgorithms.au3 @@ -27,9 +27,14 @@ ;Get the list of names of algorithms Global $algorithms[3] ;increase size of array when adding new algorithms -$algorithms[0] = "Single Data Source" -$algorithms[1] = "Folder of Logical Files" -$algorithms[2] = "One Data Source Per Folder" +$algorithms[0] = "Single data source" +$algorithms[1] = "Folder of logical files" +$algorithms[2] = "One data source per folder" + +Global $algorithmDescriptions[3] ;increase size of array when adding new algorithms +$algorithmDescriptions[0] = "Create a single auto ingest manifest file for a single disk image or VM file." +$algorithmDescriptions[1] = "Create a single auto ingest manifest file for a single folder of logical files." +$algorithmDescriptions[2] = "Create a manifest file for the first supported image of each subfolder of a case folder. If no supported images exist in the folder a manifest will be generated for the folders contents as a logical file set. Supported disk image or VM files: .e01, .l01, .001, .ad1" ; $algorithms[2] = "All Files In One Folder" Global $progressArea = Null @@ -42,6 +47,11 @@ Func GetAlgorithmNames() Return $algorithms EndFunc +;Return the description for the specified algorithm index +Func GetAlgorithmDescription($index) + Return $algorithmDescriptions[$index] +EndFunc + ;Return the name of the first algorithm as a default algorithm Func GetDefaultAlgorithmName() Return $algorithms[0] diff --git a/ManifestTool/ManifestTool.au3 b/ManifestTool/ManifestTool.au3 index 015a2d8b58..2ce0a95919 100644 --- a/ManifestTool/ManifestTool.au3 +++ b/ManifestTool/ManifestTool.au3 @@ -30,9 +30,9 @@ Opt("GUIOnEventMode", 1) ; Change to OnEvent mode ;Draw GUI and declare variables ; ;============================================== -local $windowHeight = 500 -local $windowWidth = 400 -local $windowTitle = "Autopsy AutoIngest Manifest File Generator" +local $windowHeight = 560 +local $windowWidth = 460 +local $windowTitle = "Autopsy Auto Ingest Manifest File Generator" Global $hMainGUI = GUICreate($windowTitle, $windowWidth, $windowHeight) ;To make GUI resize add following args -1, -1, $WS_OVERLAPPEDWINDOW) ;GUICtrlSetResizing ($hMainGUI, $GUI_DOCKBORDERS) GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEButton") @@ -48,16 +48,17 @@ local $progressAreaInset = 8 local $distanceFromTop = $topMargin local $distanceFromLeft = $leftMargin Global $defaultDirectory = @MyDocumentsDir & "\" -local $labelWidth = 58 -local $fieldWidth = 235 -local $buttonWidth = 60 +local $labelWidth = 63 +local $fieldWidth = 255 +local $buttonWidth = 95 local $fieldHeight = 20 +local $descriptionHeight = 50 local $progressAreaWidth = $windowWidth - 2*($progressAreaInset+$leftMargin) local $gapBetweenWidth = 10 local $gapBetweenHeight = 10 ;Draw the GUI Code -GUICtrlCreateLabel("Algorithm", $distanceFromLeft, $distanceFromTop+$labelOffset) +GUICtrlCreateLabel("Input", $distanceFromLeft, $distanceFromTop+$labelOffset) $distanceFromLeft = $distanceFromLeft+$labelWidth+$gapBetweenWidth Global $algorithmComboBox = GUICtrlCreateCombo(GetDefaultAlgorithmName(), $distanceFromLeft, $distanceFromTop, $fieldWidth, $fieldHeight, $CBS_DROPDOWNLIST) @@ -67,12 +68,19 @@ for $algorithmName IN $allAlgorithmNames ; Add additional items to the combobox. GUICtrlSetData($algorithmComboBox, $algorithmName) Next - $distanceFromLeft = $leftMargin $distanceFromTop = $distanceFromTop + $fieldHeight + $gapBetweenHeight -Global $rootFolderLabel = GUICtrlCreateLabel("Root Folder", $distanceFromLeft, $distanceFromTop+$labelOffset) +GUICtrlCreateLabel("Description", $distanceFromLeft, $distanceFromTop+$labelOffset) +$distanceFromLeft = $distanceFromLeft+$labelWidth+$gapBetweenWidth +;calculate height of progress area to use remaining space minus space for exit button +Global $descriptionArea = GUICtrlCreateEdit("", $distanceFromLeft, $distanceFromTop, $fieldWidth, $descriptionHeight, BitOr($ES_READONLY,$WS_VSCROLL, $ES_MULTILINE)) + +$distanceFromLeft = $leftMargin +$distanceFromTop = $distanceFromTop + $descriptionHeight + $gapBetweenHeight + +Global $caseDirectoryLabel = GUICtrlCreateLabel("Case Directory", $distanceFromLeft, $distanceFromTop+$labelOffset) $distanceFromLeft = $distanceFromLeft+$labelWidth+$gapBetweenWidth Global $rootFolderField = GUICtrlCreateInput("", $distanceFromLeft, $distanceFromTop, $fieldWidth, $fieldHeight) $distanceFromLeft = $distanceFromLeft +$fieldWidth+$gapBetweenWidth @@ -83,13 +91,14 @@ $distanceFromTop = $distanceFromTop + $fieldHeight + $gapBetweenHeight Global $caseNameLabel = GUICtrlCreateLabel("Case Name", $distanceFromLeft, $distanceFromTop+$labelOffset) $distanceFromLeft = $distanceFromLeft+$labelWidth+$gapBetweenWidth Global $caseNameField = GUICtrlCreateInput("", $distanceFromLeft, $distanceFromTop, $fieldWidth, $fieldHeight) -$distanceFromLeft = $leftMargin +$distanceFromLeft = $distanceFromLeft +$fieldWidth+$gapBetweenWidth $distanceFromTop = $distanceFromTop + $fieldHeight + $gapBetweenHeight -$distanceFromTop = $distanceFromTop + $gapBetweenHeight ;add an extra gap before run button -Global $runButton = GUICtrlCreateButton("Run", $distanceFromLeft, $distanceFromTop+$buttonOffset, $buttonWidth) -GUICtrlSetOnEvent($runButton, "AlgorithmRunAction") +$distanceFromTop = $distanceFromTop + $gapBetweenHeight ;add an extra gap before Generate Manifest button +Global $generateManifestButton = GUICtrlCreateButton("Generate Manifest", $distanceFromLeft, $distanceFromTop+$buttonOffset, $buttonWidth) +GUICtrlSetOnEvent($generateManifestButton, "AlgorithmGenerateManifestAction") $distanceFromTop = $distanceFromTop + $fieldHeight + $gapBetweenHeight +$distanceFromLeft = $leftMargin $distanceFromTop = $distanceFromTop + $fieldHeight + $gapBetweenHeight ;add extra gap before progress area local $ProgressLabel = GUICtrlCreateLabel("Progress", $distanceFromLeft, $distanceFromTop+$labelOffset) @@ -170,46 +179,54 @@ Func Redraw() ;Move controls based on what is hidden or shown using ControlGetPos() and GUICtrlSetPos() If $selectedAlgName == $allAlgorithmNames[2] Then ;"One Data Source Per Folder" ChangeToDefaultGUI() + GUICtrlSetData($descriptionArea, GetAlgorithmDescription(2)) + GUICtrlSetTip($algorithmComboBox, "Creates multiple manifest files for one case") ElseIf $selectedAlgName == $allAlgorithmNames[0] Then ;"Single Data Source" ChangeToSingleDataSourceGUI() + GUICtrlSetData($descriptionArea, GetAlgorithmDescription(0)) ElseIf $selectedAlgName == $allAlgorithmNames[1] Then ;"Folder of Logical Files" ChangeToFolderOfLogicalFilesGUI() + GUICtrlSetData($descriptionArea, GetAlgorithmDescription(1)) + EndIf EndFunc ;==>AlgorithmComboBox ;Change the controls displayed in the GUI to the ones needed for the Single Data Source algorithm Func ChangeToSingleDataSourceGUI() ClearFields() - GUICtrlSetData($rootFolderLabel, "Data Source") + GUICtrlSetData($caseDirectoryLabel, "Data Source") GUICtrlSetState($caseNameField, $GUI_SHOW) GUICtrlSetState($caseNameLabel, $GUI_SHOW) GUICtrlSetOnEvent($browseButton, "BrowseForDataSourceFile") - GUICtrlSetState($runButton, $GUI_DISABLE) + GUICtrlSetState($generateManifestButton, $GUI_DISABLE) + GUICtrlSetTip($algorithmComboBox, "Creates a single manifest file for a single case") EndFunc ;Change the controls displayed in the GUI to the ones needed for the Folder of Logical Files algorithm Func ChangeToFolderOfLogicalFilesGUI() ClearFields() - GUICtrlSetData($rootFolderLabel, "Data Source") - GUICtrlSetData($rootFolderLabel, "Data Source") + GUICtrlSetData($caseDirectoryLabel, "Data Source") + GUICtrlSetData($caseDirectoryLabel, "Data Source") GUICtrlSetState($caseNameField, $GUI_SHOW) GUICtrlSetState($caseNameLabel, $GUI_SHOW) GUICtrlSetOnEvent($browseButton, "Browse") - GUICtrlSetState($runButton, $GUI_DISABLE) + GUICtrlSetState($generateManifestButton, $GUI_DISABLE) + GUICtrlSetTip($algorithmComboBox, "Creates a single manifest file for a single case") EndFunc -;Change the controls displayed in the GUI to the ones needed for One +;Change the controls displayed in the GUI to the ones needed for One Data Source Per Folder Func ChangeToDefaultGUI() ClearFields() - GUICtrlSetData($rootFolderLabel, "Root Folder") + GUICtrlSetData($caseDirectoryLabel, "Case Directory") GUICtrlSetState($rootFolderField, $GUI_SHOW) - GUICtrlSetState($rootFolderLabel, $GUI_SHOW) + GUICtrlSetState($caseDirectoryLabel, $GUI_SHOW) GUICtrlSetState($caseNameField, $GUI_HIDE) GUICtrlSetState($caseNameLabel, $GUI_HIDE) GUICtrlSetOnEvent($browseButton, "Browse") ;rename to RootDirectory to root directory ;hide case name field - GUICtrlSetState($runButton, $GUI_DISABLE) + GUICtrlSetState($generateManifestButton, $GUI_DISABLE) + GUICtrlSetTip($algorithmComboBox, "Creates multiple manifest files for one case") EndFunc ;ensure that all fields for the selected algorithm are valid @@ -231,18 +248,18 @@ EndFunc ;ensure that the settings for the default algorithm are valid before enabling it Func ValidateDefaultFields($rootFolderPath) if ($rootFolderPath <> "" And FileExists($rootFolderPath)) Then - GUICtrlSetState($runButton, $GUI_ENABLE) + GUICtrlSetState($generateManifestButton, $GUI_ENABLE) Else - GUICtrlSetState($runButton, $GUI_DISABLE) + GUICtrlSetState($generateManifestButton, $GUI_DISABLE) EndIf EndFunc ;ensure that the settings for the Single Data Source and Folder of Logical Files algorithms are valid Func ValidateSingleDataSourceFields($dataSourcePath, $caseName) if ($dataSourcePath <> "" And FileExists($dataSourcePath) And $caseName <> "") Then - GUICtrlSetState($runButton, $GUI_ENABLE) + GUICtrlSetState($generateManifestButton, $GUI_ENABLE) Else - GUICtrlSetState($runButton, $GUI_DISABLE) + GUICtrlSetState($generateManifestButton, $GUI_DISABLE) EndIf EndFunc @@ -264,6 +281,12 @@ Func Browse() $defaultDirectory = $caseDrive & $caseDir GUICtrlSetData($rootFolderField, $selectedDirectory) EndIf + If GUICtrlRead($algorithmComboBox) == $allAlgorithmNames[2] Then ;"One Data Source Per Folder" + If ($selectedDirectory == $defaultDirectory) Then ;Don't allow root drives as selected directory for this algorithm + MsgBox(0, "Invalid Case Directory", "The directory is used to determine the case name and can not be the root directory of a disk.") + GUICtrlSetData($rootFolderField, "") + EndIf + EndIf GUICtrlSetState($caseNameField, $GUI_FOCUS) GUICtrlSetState($browseButton, $GUI_ENABLE) EndFunc ;==>BrowseButton @@ -284,13 +307,13 @@ Func BrowseForDataSourceFile() GUICtrlSetState($browseButton, $GUI_ENABLE) EndFunc -;Perform the action associated with the run button which should be defined in ManifestGenerationAlgorithms.au3 -Func AlgorithmRunAction() - ; Note: At this point @GUI_CtrlId would equal $runButton - GUICtrlSetState($runButton, $GUI_DISABLE) +;Perform the action associated with the generate manifest button which should be defined in ManifestGenerationAlgorithms.au3 +Func AlgorithmGenerateManifestAction() + ; Note: At this point @GUI_CtrlId would equal $generateManifestButton + GUICtrlSetState($generateManifestButton, $GUI_DISABLE) RunAlgorithm(GUICtrlRead($algorithmComboBox), GetSettings(), $progressField) - GUICtrlSetState($runButton, $GUI_ENABLE) -EndFunc ;==>RunButton + GUICtrlSetState($generateManifestButton, $GUI_ENABLE) +EndFunc ;==>GenerateManifestButton ;Get an array of settings as they are set on this panel Func GetSettings() @@ -306,11 +329,8 @@ Func CLOSEButton() ; @GUI_WinHandle will be either $hMainGUI or $hDummyGUI GUICtrlSetState($exitButton, $GUI_DISABLE) If @GUI_WinHandle = $hMainGUI Then - Local $msgBoxAnswer = MsgBox(1, "Close Tool Confirmation", "Press OK to confirm closing the tool") - if $msgBoxAnswer == 1 Then - WritePropertiesFile() - Exit - EndIf + WritePropertiesFile() + Exit EndIf GUICtrlSetState($exitButton, $GUI_ENABLE) EndFunc ;==>CLOSEButton \ No newline at end of file diff --git a/ManifestTool/ManifestTool.exe b/ManifestTool/ManifestTool.exe index c71401456bcaf02d6b99745ebcba5517de0b598d..ca5927cce9c0df8d029ea717d5b3c748adee24cd 100644 GIT binary patch literal 1157632 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%0De<$xCy^Sq4)j&_p5G4x&-k~yK{;T1? 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Œ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

-6C4zRx>58_RsSp16-nK@%~yF`E2lFUTR=!Xt!%!; z4!^BBG~Ym~U7h!-naTb92K+N&xY z!NYWIY87f9*9=Vk=MCh^j6>zo#6jC_pJn**y6_79@pdHG4?+hc+1{)qnyjU3 zwKT(N`dCQ~hQ_^_`fU^TEi#usA>FPQ5j}=xp`D@02g9wRgN}OTqK-hRse8#{V)Z1D zr*LQ{eAz;^*{im0iABfx645i^( z8H_ekr;!GsW*}Oer@1_}!^w8YC`?q1*{T6XIvslI5TT>Jhw%_mOw<_|J==bMp~bWJ zUo0pXbnsnu0@yrZNmguqR z#qNnNy;fULtQZL>Zn9I$2LnjS*kxSPM6GP1tw&ka)}~5gJ#Lk7U|W1B;jrEsAor4+ z{_yK(<{+tX4eT)cqxlDF}D(7_K}=;qx;yT{w=ymkC>D|7xnnDem(rEbpTwrXY0 zcAg(zEXM5CnTmE!!L*y)!lRgL@N0}Sl{Pf$M{pGSB#JZP z<&+KDW6A}9r^m?DqrU_hkv*rUXauE!R-pX~B$!F!_;_-`YGzgtngXMs_3IYWV``ep z__NObIlgbM)@*7is~pEqtcOIK@BBp)Lx-krHmz|cx~hhc3ZpZYm>!qe{Mc3_5E6AM z(R%(BR+c>K^z)%8+y)=X;mck98fXsT%V$~biAYDexC0GoEGf^UA))#2_Zmk&ilUb8 zla`UGufR;Zu-)bg2!`ED{x)i~n<@_^k$JvA@H}YlSUvo0A!6-N_K?V@<`3Z7Z!kbT zZV{#J39L=$iHM2JYkqY?mdJpw?5Nsj1?gV%|4m!SK4dP;gs(y_P98PjJi&-9^{}>7 z)r^-qp|Vh$&T+{S*?`~>N#@XqO~w?~Oj_21X`8VZv;#^wrQJ2{`S*5YU_&Z1kX(1IG^4S+dj5r@6Ob?@CP-&5aH^{LpjTQI*a? zVAFDUat17$=Vj8Tx6l|S0d|WHC0gE@g$MJRw5+Req;7-*M+tQ#;IwH7xJ|@rquvAk zTJ7^A{S1GzTx8@zA2lolu7KcPfp%D1D$1-ZOamnjDRWIZC0_!MGC5tCKabxzDKHcd zV4$1_H}&gFf9Boso4Bd9c|Lu~d9sneT&Vqw#>C$jtjIK|fBpD4lhOxq2;LapJSxeG zzkio7rS>P9Q*nzqwOrPXHD)k-0UC}wznDBL^w2UGB}y%BMX5rg(=|U@%~Irj5O&bP ze>z*-(3d5rS_FNXFe88TrHtOLmW#r7$^OuR?LiN#QQ6C(J3F`6UN&f;Q@c>UY~b(f z_kU<9vMlr8=V@hpmKp47$12&RSymaDCvul#m;sk;RP$EeU&yw7PP~4r`?@_Q!&A!u zq{HBokI!!C?UP4ce^&cF`*>mJTXqZi!0Pz{`Il%U97FyNu(XX`yOt>zn-|Wt($GfU zYv#g9&+tPcf!(s{33R&cDk%&IH`BRPHQ1Xhj<^b&dZ~yOkE?m)r}bfqo;B+Eia;Ek z5Yx=8I5@0o(@Q1w2g-iI`aq$+fI-LvgYbWC|7gE4{cHNwr*77!O-i?R)TW zA8J;xl6}K_g%jPle(eoY>YPn^BAOt4|3*BY-tB!UAPr_ZvMr$!m9IiDW8QnHD-P08E*6{dt=aEv5aO?;RE_mo z;;o)rD!5i6(65W6kMFW+QAvIGsu``xuS>jiF_pY2CH!w;t!WI6R5m$w3!=Xqsch5? z0X%E+SJuRC%P9qXA;jfrpf{y$FP>m8b~C2CeGXM3GndUBR(7`Vcb6nPLOj18< zW6lQJY|PFN=Q)`J`FE&n>Ba3m=jn&y!lDK~H!t66vBoKu;{iG1_)3av>i(s=@w&9Fi<};qpbFePf$6h56RoH0EE{3Fw6>JQNlnQ-5yL|$c!1P^SoiA=bNGUU-|0u9!Nga+WXp5X1+ zY>|rlDXdjsWNMPDK{NM0jwJA!SZ_I35wgG%{^mlTRMyU=Td{RHs8+k8OQhbj3 z`bGmvS%}bO7rL}5Xuy$UPb(rp_~4&pJ3Y+~!rR9CgUhK<+aP&(ILsl=e$eO+i-v~0 z2re~Lyk$QCy97BABs2E}Ass^$?$ibY+KB$+BO7eYhm#h zs@2qOp1%j*rHA*nQYASnE3r4O3=QE-6Xxs*YN~E|ymH|U;b>?MckV2izh}_TS!w`7 zOKHVhnWfFgqEcnYQXJGdf;!FrB2!kRVS$!CQ@s?f9)XNC$YZ|@oH~b z7U(+x5N)AJw&8rhkI97RaIOJRk4#=SywF=@r5D&FUn|1Hru2!$M-J*+kCTkhLQW3P zC3b)j4&jQ=1Y9+NQG`|T*0_ZsKFu{47E`d)NXa4ZedL#yqf`6EX}%D9iygU?Eh#IA zNP!S5)$N$lj8;GO zZO-5Pk|_4jZvs&)G+F$3%4hZ6Vq6FI#U{ZO zklq8i%qk0j{Bhn|VCugr@e!%80)lJ;Xcje+JI!f>a)MTGEv7R%2Zj?C$PY*Kl?$<( z=tA`RGir+pc-2TZSuJv!AW%ci+5C;C-CF?<*%lP`WxGpH*F(tinOk|`w;V;dRy_nq z?>`!JnOmVf0ks&)N3-o`K3^WkSgn^d1g7I6hZ1MPUsDA%@PlT$-D}^-A^Da4wvTW3 ze+0`@CGVY3|>6ki4Uf|K`V$~klx@Ji)^8AlfYzS-2xF^ zet_ZcKW6C=W*S(7ox+=EcgfDa33zB}B`8y`vNE^a{;yE?F{7zYDXd)4{m{=13bBI`K1b=~*!5{CRAe8+W#Hg*2+XsgG9*wKRm#i z`ZIkD=*FsAWO)iSj7K3N=VL3W_7V@mPPARS1)YnTDqzOm`cA9|g{Nq7^FO>AKeiUSq z-gEjBPkEYRGNtW^ z?qC;qcJ%0@DLa0Dz$m2>Lm;Drqu!00N!7ryqv}g|&@5Hm{y-S+#l*}LCsJejlbUSR zz;UDML&(*r=jme$GvU|%=3GPBb8pGT+_1C7UIJkp4SCbY3g29wKK{sv*9`Y$(vcaP ztmJac2`ox_WTA)8Ze#Jd9-;Z)7e{7%6KpRiuEiQhP#i-gz{f|DCAb%IRt^xyH*x%V zN8iMeb;URvN0tNyMvk7a73I_vYcuP9ox_d^(yhmD6zz{zYvVRu2EiZm|ER^V3%O5z!>r6jp`LX zt)0YrTodDRqW_qF$XQu3~kuW|DfCa zivt5{J52o`a$e+|!0*xC20_N1f0M+ek>Pm5Zm6vj^F-V|1Lf&_#`jhfe3^>G;#(SI z(?+yEAK`oi-8#{Jmw577!KI-79q(2RZfR^*Hy)?FcGY&tXEn@%>x#YD0HZlq&{(sj_u+Q~1_@%Fw;E5hK{?=6>pa#?To~vERF=T)0L`Uw8Qf-Ea2dzXS#(Ba34W3gNW!8ZE+Dwz zGR|#U9Ylo$m43fdw>kuL=6(OYe_oV6_tvfDRMn|dr%s(Z^?^ssb@TdC4_T$SokN!E z5i4Z(hDI?rlyG~HmDxlL+0u3gtbm;I&E+1=2Jya|E&od_f8vyWl&^KbepLdq>aKwD zg_HM&M~ZM4c`W!Qh8{bjYHAst~dX)HO=9|!6E^PEHxw3bq zDK+<7LqOKJ@A-7mD%7Q^(H_1TXttyp;cqF|Y{@dhAFGEPBmAIx$PNC%Y{@g0&7e)p z7Q%arNf2eSHX;L4|yL?Sb5hGv> z_rEGFm{8n>PHKrpnP9q0l8Ju0B4NNC3JO)z8#OQS8EUk*a$`hnGT9%W1%8du8p(JY z$ybX(8@oWTu*Mc93Qm8*`E(i~YqF@gz2Pd9*L(wsCSQv5KHNvz7!{EqdsdTARHD?v zH?+y;&Y<{2L4TD^s1ub%0~nKA2>n)L>>b!H(WL_LrN^bvw*-+(`EH*G!W{L<^(?9L zMmi2iKe+3}P3EU=v)=7FR99UM`|emPi{MV1JqPQuf|=$fj!&7JGCWM%xzpJ_jAciR z*qs#N%#!NX38kI<8EhgQL6(yE4F0>A0&9meqw>AUw<}8_^ghunUrTHdacZ;ZjF=e5 z>&zCbW<~A$GO;|ajYfDet>dq3k*;0BM;wQ$!tUq0Kk82vi7CZ@=+iR8&FZ1qo;|K5 zQ5$h0;)H~_YPEWUM7J7ZVi=-}8l5c4mn^E!(W1)Q6?MvgD5{GTQB6@F% zW0)y~rs!`iizOi?sW{Lpo(i4r)U@~3m8#dL97jAYNupCkNJ>q7f1oeXVKG59#lB(i zFagCljVFY2Y!=u(s;EYIBhg@NZq=tX2ZG(Kdb}ehnh)(dvCiE4vssrB>3Fa{EtrIyyxCIVXa>!eLSva| z^~{!DbFVd9dK)#Io)I#rlaZAQ^{SqGAI+>#pf(jQ*pqa=vN%o@oJ)*IM{ulJL|{`#VHmO5Jhm0>l$tB0&PtZL ztzD@HFPBnEN=quZKB95Ito}tr|nmbbdW2>yU*jWmK;bxG!&8Lrs}?$k|IuTL|B(>>H~Toci-{EJu;8Z4T4doil>iX9UpTGD`W};ZI;_g; zdRF++oZEg;B2xLRKqR!7{--E8Qnq9~y3QjcFK&*M-;d^g8NQoowr%!QzWAfLqm5OW zeTQWrsim?`z9B79u=8PID*KIfrj(LsbnT!0@P8?(P{?pLnL0xJId&8YbIh!lS*}ku2?US%Fl4z)W7`E*wcp-iQ1GlCZ)3dBN62OP*HHo zocy2n78y25I&rgO=yT+sQb+z#7JWtb`ZHv{-XUWAkUDjP7oy2V;)n!P!S>EnnXHvi zmQ}MOI5Dv~7)Wdm-6=H~sBYp$`X~^Di7O@y10y+NM^jBrcpL1zEq2~YoVWX(w{s&o z@%{m8=>SsG;0^ISd8t+}Xor-FCwZ0(&wb_LjSH0#Z%IOx`>o@EDW!5|PJs-(ApUf?7 zQLx2YEfc2NbP-E=F+~KU$P;ahr+YVYROYM~~0LBp}MjI}G?XE;sutnLp3lBksEcTghFmldsc_AQH zZ?c_s#Z^}yy^~80m9FC!OecV*jcpE+k<3wvoc>I*x8m*#+%Jj1GZ%<%f~xi zU&?-5h2OfsyJVd-n*B-%XW<@^PORB6E7Q&zKu=Gs@E9wb9ODm}8kBCt*(LLZ*%qyl z*mZN4m@OH`vOzQ};#}|&M77}gBKXzZ2~T3ni+!HOl|1^ajS*FXea;|Za+gjaL=Lo% zeTcz!E$RK0z6w~$;`4}I+Xop9_p&;up9G~A33IM0mtjtzk+#Q{`9`SbLJt zRjyLb$1`gO&}ISQinOa*{GUXI@xPj_-Gj@_)}FzkW~=JzF4Fa_C(a!h>nN1yI3qw; zu>!NC->_yg|&t5kxDoS?InYk?&TrQ`h8h1lYh4yzCLoRKv=eMZIbf?%MW z`*ufTx78u&i9hdI`wUdU)Hk?Vpei}clP_BNMZC9X?RfoFjOLxMW1X)D)fqTr<#zKh z>&B1aWJdT^e$B%jjr*P;j(NC)5q%ycgr|rW3Tvxn3^G2X&vl!JGmV-ZgnF$_-X-;7 zj0a2IVn4+V1kyr7W$dJ>K|;@+M><(G)@*}zV&5?Aq!K+;C2-GzwxYgvJz2+|=esBs zMKv^#p7pG`Xrz&%?2%Eo2W=Ia1^61-F{=zlMN~i{r5f=^A9|Vm?F}g9=*6C__vM|2(YT#VqWGJ% zgb`jvWyBPu+@`*{l--R;IkWqHq74R< zqS_I%c8yFdVPBHrtW*gfBl}gqA#theUx`TWNwxVOz$*5b%6p5QcB3+8s!gMxQKi+< zv9X}~HmWF6J{5$~9QtPYBTtCDL~&DVFM;WI_(XL1RPwN8={pHh`J!sja)wH?jWo=N6E5#Wz5+fIohck~FbRInw?nlVLX zbt73hhFKM|N>KMSc{^$9US6Izv`hs=lvhO~)R9B1z9WF>mr% zM}sd6}$W2_o5wvDA1W(kWHm(%0kz#!{7JE`zi}DMOgV9+IAv zg~b(=mS~DUB}4iC00cy5<1}lFZSul8GV=n8B`5F2M~s>@RZHk!W!P3wyPRXGvR07x zoXCSTLiq~XV4ywW66r}@E9;k<7^} zHj=iG*h?p&l*pu5$4tc`Jj70lnn+P6E%oqQ0A<=fu2D!Wa9nRvL-#HT?hx(VR z4L)PgR1~d#kcb%r57?!o z=}G2%3AavAD-sD}!tp@!#9}?pZfGmn0gz1x%!r{jOOLSCV)@%C+Rb7P>h&+BGy*DX{r z9y%P#5))-ILb&Wj4pjR<_5<~75~SgQOC`N`g;dxvJrS|$I_$50Q-V@@sK*#MeSh*8 zG%DBRS|WhYgkRWxPI;7;ErCYMtWBI$FSquhPCl6uxN(jXGesY!6Q} z7M)4xQK9#*3uScN9dxFnGV5J7fsjG+ix~GzVVsXx#IRBpaYlF$qd^O`hoqZCdVM@1 z5BJr{yK{#Bz#J8#`qc^9yF?h%DitU4lzfOiOC9L+p^4B?kSz?I0|KgaU-Z`0_81^k zCkjTlL*iCaf<*i>W;+NPK}dSS?JRth_qE&Ad|D&(jIk`lgk1W>{gfHZ6)Q`(IP&6Z zCwWGMLJOBDaDyN7rsxgY>a~Fh;MjWg`bE96Nav3{CH10us$N^@k)ue-vUw}DDWd&Z zt<;4Dr+FZp#G0+}V`4l>41XzW$T#Ef|EfKCsk90 zJy*oJ)D2tVXkPt58LaQy|AZE$s97>kAXTzznc6m8u)G(fU{$DUcB=NZ)pX&dK*GaSzZ}f(IZ`9Kl6p=4H?d$yNz0!_(KPa5W zLFnDz_R(M8s%2qLZ8}_AupjD=c=!lGja9gib9v1dp)nrtFOme3x1~1Wowl6d2RyOtpSCc}EsyQFg$(Nv6G@eXg(OUE{UpzzFb~to3bbBHoLPkP?~mMPwrC zy4e(M&dE3u>_9%__I{O!aCaC7L|0pXUA}VEr$hno?f5wVZ?71x_sF zUtI&Fo(E|lO}LAAjE!f&D~b}i@K}Pobb&JnrZN$EUMH^<->~mP-K>HIr@^#*Q$5ky z1HOxln;Jhslg`3Z9nyKR56itdQzLVx`YT~fndcK<`rPj@D(GNwHMvRWPxMC1Ql;~c z@A=xh1<$-6RhG&RVE4Bj?jgqK*@#uTrn4nIw*O&xvFw*cTnFxt|Yd z!H%9tjcjQLxK6DNYkp0vksL)WSVf|>)rh9P7RXQ>&bX#?; zFxxJn8~mlyri8A;ZB~)Y;nJhYjVIrVbBMxFc_C5o7e=U6-mHmK=@0#vW5n%qoI$nlFrHdnkz ziSHz2zVt1JHO>NUSmQWysfs)$iDPN1eGo3y2^fwB*pn`DI9WwGt8SKBSDY@h7EUW# z)Yb!>j|QBg3LHR23~5Fs!@U@()kz{OhTtF}w==Ri;G&pjk!=qa^vMhH6#cO<7o~}L z&pxTYc7iN3d7ldz5NHM-S8Nlz0TBz1v8hk$1GG+5>@_N7w|hu`5lFR8^!=V~x)^lU zv~lK#d={a=tw)xzQrSXa29eklypDeX{tYo>MzAZomQW+BQ})7Z@5(^J8p}}vkFlzu zwgYc+=ZKOd)wLt>v&uN+Bt-moRSu%&0f?$*&)k!1Hxd%h=COP2a%utHDWwNdwh=|; z(O%n%j3jDJR7)%_QL>8aA(}U#pCf1c?KG!OqURkzg*xd9m7vpg>cozH{XqKu{C7^rANXRoj_3<*%~BXSF&C^Zk9Ltn$4mQA_OK^=NCthrpf^e+w!IQ6*ML zYp*gF5n|1$2v~gy-z!+4PW6~S;vUrJ`Z3hm!%w!y^_>weCyR3HOb(ma$|2}Kt7UlG z;z=~qnzO&S)$)BMf@-D}`o4I7q?}siaw*Tal8EnI=HCSp+bxDr_^zG{S!Z zT5of)B*xmHDe@6`ryvL;q25-G&$V;*715d8 zSeSVmZ!`(Mbh1Ta8{%PHWR-fdLW3NYe2-93p!C)$Av`!|LmMI$iB(9V;P3OmqF^-1 z6BzN~VdwDNmz@!#%l_)*w#5vlFd}aM+C6BRmgw3fE#(&_X=!Em^jQ z6%oc-8O%gjQkFg-##F&iJoA5)O_@3G`)c<14F7HqZhl4_q3SaYwvir_NF<$2QW;;& zT$z4(R+4rX@6gL{3mKP^r>bI#Jv8@Vd-6=4(GYz;>incX;ONndwXkJ@Cg(8}E<0J! z_uXQ*bQA11X?@)*!jLQH%nMZBaSMfSA(kBL0wto<}D$Ha&QL@ zKI?!{`+2A7F7A=5ZtV%hl%$hX8BCWM-W~E#B=Ka5YR13RT-92akd@AZ3|5xkQk#O* zfPU4uZx(HBgrA^&&DLxq+(|vK2Kf`!G+T3xa5ik)Y{eF2J~7Q!Y(chCBHCc1Mz|He zB#N4RO<8nHlW$M{enKL?ZA%(F{nm@QL;ua`nTc>8# zM8R2z;Kaz8enP;yq)5KkrXfc-ex?%z`FzGC*jMvK5Z%*NA`8F9y;SyxP!;VZcjunn zMVib>>x+)guI)tnM8W&BrTRC|YpZ(z4;=3KpSMtZW7(H7oGdmc4tUnp@f_ZBcXv6a zvz0*nSdrFAcd)@7G(1+@mqNbC(NA-45nl6~O1##O9`j%M>Up)C?K;?y6--NSp-Q>a zflHLS%YAUCyWbnK^Wo0<(Y;tb4NnBSd93K`w6(Fa&Q*^INNXZ=nGfX(_Mu>c|9z=E zPV@#~yEjbPG_yAEQ{mKnh zG&ssYNBwT?gr+Jgz|zZ^)hpSTMpUNpWhzaesyW!ezRf}PQ0<9c%Kk-@;j0&KgXv~- zmUIzj4R*(aJ~Jzrb+93Wiv*gpjx8YKGg*HsDe@Ar!Lbx|OzWpmKwjqy^*`Z|&lDmJ z=1Xd#DPg{xkE##LtaAGI$yrQ!Whww1<@~NMsa^C9{of5VYp}D&s;T1vsZyF5+PV8g z5vAU<`xHs5tG?l*isKA3xv}-;d9n9cG0B7M>mxu$J8#?Bk3t?bd3#v`_Tv zRH!KSBq=bdgYvjI6&>EqjE_XYWyDY@I@F}3lDmm1DSj(Z4cFQ#BC8(kOZ;|G%ZL(x z+HcL3K||!PRn}rZfTqb~{osv^OJG7^p#N5lvtKRuL|^BLj{Ax@aG@*Z5b${ESsAB^ zf@L!(VqFRi@IprL+=C67!LwE?j_@N#dqn+*DSfT8l-Wkp(_>A(MUJI`sXA`|p@x*c zwC?$q&lG`#WtXqsQ}f9hHANY|jgj(2DksY4gl}yz=&FAAk{r*Cjj`LQmKp1TVG9_U zv9#bM1fnw%n?ik@q17?iodK4PRCvbUsY?5vp*vzjAVJkR4d&jC!LQ)~G^6t3Rz@n- zjvqiAZRz5h6$^qZB9jqS**0bCBOfmjGf{9WzkXMT(C;)G{)nj~zR+v+8Qd!)MOBP~ zz0B9H4~(UM1#4DF1x#OAs&oAoelvFjdnFejU4|;>JRwXQM@{jUrUkot66?#%`YfO8 zow*c$^St;COVscUH-z@TkRSZ2ta81a%SWdr2O_hLb@LBPA;!8$iv#D2Kw+$VK%{9R z(62>_g3rNPatlxl)s|LpruE&3=uY)xogfB@qhAl9{%qT8Z?AJqPKVgimsjFyQ{>#S zg)$5Jn`P@!s(;9i(Jp!}yg?WWcAdmY+Fu4L;jqqZoViodT76}Dl;eojnTTq^nZ`;r z`AMG-qR$7KvGm}HJama6NL!yh}R<{I31i z9-I_XyLN-qaMaX6A<~zFB{F-TMun&t1#w!B&gUPUdM8D3>d$RF)MPb@aXC_#9CH5+ z;>2`+@|4{~F)%->>vZf(*)JBk#<|*c4T{d~l;CJN>CHJkq&Lf7Law>gF6!hciT_vl zqLrE2Q+l!d(m-YCCEbBNB*;3OmSK%}!V+asI=s)!&TCS3oHNjPw%%AUpR`JS{|@SV zul>aNEs28@=lQLIKTy(%bxpo)e#$rZrkTxMB0g3Q?4gZ2gouC`kdD84ge2c5)oXtu z5*EkSqd=p^F&BJTFMT%^FxT&g=rBzL%>`r(dOV7{LK29$JKArqeu3wd;0W}J^eZvP zOU!7&-SE?70&|5VkdLmmY_c&9SwWyZ>ou`dS*xm6Cz7se3`|7Qf3VA{zRcY~1>Q)lqYVxl3%-_TUyP7ep&L;r}3S(76 zcydTEYEcuz*)pOcrr;1Spr;fGvK34O7IGbgly%@a$-r-?^EGNo6=bFGk5~1AOzs0! zZIg$dN#a-q9YC0B2=eKIICkvgDNb}2JoAz0HG9`2+%cNZN&o|6*%tsv-E2*tjq|yM&AbMpWk<@)I_%=XNI6OF!_@_{ z=qhj)U425ieshh=A($roA1~C*aocKkgeXh-eiZ7>w5Q;f*l+$xA?D|XK@?&qLi<5g%ZGBr=}j*-k@kPug@&I`t6ciCZ>KO6-+~e}uA8JjZt@ z{1~WrD!n@+Gyz-pEc~ul346R4G3$z~a{4f%EK)&UJAz#KGLq2Dvnhk^E^ZO!q{n)H zB(q2bWcC%{+QqV?j=*lb*}WL0iM)Is^)8dPr^1LybELpH?+*QUv1ui6X&-D<-Ea%&d|$gHga$YI=1e=AMd z4B`VhmhjyjaxCFLtRIzPW3oA7To$w`{zI$-IMptK%3|sK$X(6WJw<+V3lr#BbgU82_gMEYr|Vqrgz~gkqH`!v3|blXlWt}zx9+>22oay#wIy`& z8tg7pu#*Bs^@tS`d}=%U@V8Tk?)Xt5i4OEwizKDa>&KhqgV;bsd~7K{$E(N4A2pEV zd%rX0`E2YjFv!EyfLkCDtK`h_OJuqxUzPYckFv1bAlaZ@As^)w8ME7``2?M?&sr%D z6Sv3DlJ!8h<1)LEXdacDPR}&{J?94`SRq2WNksB%(Ua0<>sg2JJ$_OxQlm(lq0FOS zy6`1YZYRpWk_?kNul|Ih59RRu*TF2)XQ!FIuhOs|P~yQGj%CB5-(VhbNl~qM3B}|- z&$#$otGWMX*Jf5NZ>18Fjeowk(&E{2jBc8Qk%2Q?J66dv?mXTWnsZZNnD86!dT7VK z=2W?>$Uvl3ZZv!}Qx0hY)*S9=+#(x}v@zedp%Zn~K39N~;Oth75gpsr=z=c_-&a+} z+`0skxXrl;qL4&-#z#}@Ohl_nrz+i1XO+np!E%+!kWH#RvD1={QEgO5RAssL)or@d zy4}eBAwsq8cUpXnd~&)tQSd4+qA>O6iSdZs>I7ZhLK^O60+07@fGozjRp{RdRhOF( zBg(VZJU;FmWHOJvTgNXt$Sd0GV$83mShuwsFLJ3l9-bI0`TuRWq=TR)@e&I4Sj&Xy z*&buK40uC^i)ghAXnaeKDfsn~f9~tPm7x9c!bHJ-D&etKO1gG2=!?8HXcHK2PZ2eq zxjJQdkc=_2Cr}v0%cN87xn1T@Kl>fh8n`T0MnLXF!6FqwjX7tdo_m=k$XROTk7n>W zzR_f;s4+)}u~=i?7UTj0CV2T7??t0`rEHI`&ZK0DQmzg}2oA{|^MN-KIJO{*a82V~qWeBk)=Mg}^y%?-00iHWa;+rsBa6;OK#B)T-Jtl#^Av z7Tol9350SbZ?tp|-O}gDM~B33oGg!y_iMGJl=Uy)97-RcA}$?JM~m2h&Jp5Vu1>eA zCTW}`X&s*n_=8bzGARo2zNp^NASMcW@|d*$`i^I^c$xfEv@N_l6l`vo(r#w}i)p|0 zc8q99O%nz<7So(`mns#hl)n{<#Po|^8_51dQSpQU1B{n;S(&-H=xqs@J(}Nv^E_7O zkxnXP!0ht~89eVSSD!BknRlAX=V@qwc^SPeSpVd_Nx_z-*K6>Y5 zp-6U^l^mz+G`}h-s}!?1L3Nh3OT?he46;E;=0M(lQ6P&C^b-&a{FRvpax!ov$nf$K33(;Hv}mHBA2nB|@Ipwuj{!ZJ1)tlQcagcL z^i0X$@cqof;9#|6niV=9k;wmXqOr`}kmWk>CP8YMoZKqo^7xGb*K9nYEgiyp&7N63 zYZ9~4xzQeL`JUtzRL_ladNxt;$So{kgyo3-QDZ{0 zuezuuQRRyazuwOnNkdIv+2l{J^QU$|Hh!p1Bs;hG7G~)Y6j9!>CwA6`N!p~vic||S z16hMvR_MZG;fsp+MN)naHn0VBaLA*@jE_Y zZpUU~z26*$Mu@8}NcbVa&<40^Bm6Xs@a6tZD+3A%L`|7FrHvAGKNjDW7DBh`|)=L9ECVm3%8r z4~d?nKVLnHNZzqOIs8MyG9OK2{97yd^+Y;Y=HooDgla+;g9j6sf>=98vMlR4`Cy(B zBLnis1$|TIXFNle^Z0Du&*wN{#)_rgp9$m&Td7B(-_;GV zE1Gv78;JJGpJ_a9qe>vuoW{xCb}I{RW)_aYwI1!-NRuv1;XpY{lb+-=ntUK*d!1yJ z`7LkK4>4e}AFxxVT{7PwNb6suohYkNNrWfeNM}2DMs103A4q53BOTk=76j9_&^cbl zh8QaR)`;#@k6~o(V<{oGn`l-P78b+Ot8@@+x9D=U9Vh%@s@?FlEP03)-{~*CJ}Y#+ z-@*-`WwVlXq7W>zr0d`vvt@537Axo(%71e^YuK^Y}Y;_+ByW5KKaCpm)M!Vi1LVzVrBl233d@#%w_IVkK?lv znYKKsawC1-<=Gx`cXH1b&M^xLs8F}gsCn$@{Y)O23Jwbm^nwO1&Twd8?Tq~T!>4IfsyEAoxJyqI2ztX|45`|2GckBV%F zC|1G6LmeWEWySU%i1=81z?Ab|`oijOLCF~SZ4#?}7%kg3E36)&Xu;|}U=pia#0K-p zchWQyn$U*b3HP8=7F*0NxhI(zx)$6 zm>5w+%&mNAtAbk^)VaPIqELc_u1A~yCs8djBsukF`zsZ32!lA4ItYV!vQ-*)J8x2r zW}s9pm@aZ32nzCP=gFn79Kk$izf7-=k=77x|Fj18_HZ8JjU`ysZS5I^*RYM z{QT?5iaGRuusxMe8#QO)Q@3=Lt9n6~br`Tmsx3EbF1+kr!}hr_l3_3uId?6?+sBw<1f_ zrkF_YqN>sJFEWEORr;0e=vV5ElInYIr7|$a-Jv_G@3}1{bc@`t#^s;f>m)+64|dTh z;>+izOhWS`KGYEJ(Q1}2Uwznb`MO7Z-*X<_`Ao#0RHT>NMQS0ETS5CeqP4guf2vBhIG6(ogn8ecaD5vnSeZ(e6dAD3KW_ONQZZDt<}`r5fR>B7`R7 zG)ZUqdLs5$6BVg;AtX`ouzE4VWkdtTd7$X%CyG-d$qo%LKWB$i% z0wF`>y1)Tp+pmaB;Kr=fLAi%$p`OOFKdRUC zx#!3k!|(;_Ez=0!p&l?{K1DrX!R%8H96-68huEF`i0)QGX$?JKhr~2gW3XfjK6<+08#1B5=9*_Bo9@&9^~iTnWbb(JQx0oO!?si z2u~MgEc={NT<;k*d!*mm7kbAp3SC5@u~#HsBGssQk%w4V-db{kcPN(_kEpjEbAKy` z5YI4{EmH3%%pJ>F{9qm@5ra5V>K!|T<_fa6-b3!bRyAk*W%^R_D$X@tqcl$4r?WQd zBpX{#lM9M44oUX|^O{85q)E2@g#SBBEaL5{RN85$S^{Y&@gK;3k<(H;?q`eiRX9rC zO;kutHe!*BU7z2IC;f&gwYJ0;469sFpg9Mgrkg+8az%dINErV$-b7fwFA|boI z08y9=Ln+0}eV6IdZ>JN=HK!-;{2@`jPRhc4UE?BoK!XuAx_IUj;gJSi3j380^C6B+4;7NIq4HDW5V~XM zUPS3lnG?tq^#IcIgFID5GVcQrm8H;MuTY~aj~07|Kfj2t0z+3u^8i3(HQmpk&>EFKq8cRiL@NrEU?sa)$nVK}x zn!@G9S)m)3JRl6E`f#V<)i|sXzU*2g`2@RGuM=*a61<3Yv8(!UPVjt|IC5Tg0NrM>7WIS0Wu(p*sO8fW8#?jdqs(U1z`K+Dc zmou}8$2d$oI0=IK_<%nW^4s}^Tq0w=>0a_Nx0TyZ_JsQ2elungX5Y_SS+tyKtl*E0 z2xie-k6jIY@(u0C@`l9|-S+KmadJJxixSVCkc@*|v%wy7Y>ay)#xP=trOof@4PW>R zqvin~!h1qzC#?p3`a(g+Bor%_cIP_0LfGGrqfsJ0zrQr(H)?(Z*RV$CCz{O`j)+X; z4O61Iox*GsRX8tqXR~JY6gN@JDv$X_3+3e_38|9}oOPl~#9mG8Wui?uuj%R2gxX`{6wB)5~RKFH?dxBZoz9{nZk3Qh<_$QCVARg^8C( z)Xrg|VAxfxiEonXuAWA?H#+7CwN~y&xb$8y-MtcyzRkWH+qR_Y3AgvZWY&%!#C-f9 z7L`TD9^L;}#61bu>2>Su{ z9_Cl*C{}8sB44GNt1>O$4i7WJ7b?z?id5-NR4|#~ggoloTU(^+`EHp?T;VG{HN;i& zeM6lr-xs2<@!1hBw9EE!lPf8P?2x8OAx)y-1EB|YJs4(gbR3i!AV$0+=Tkt4pk;Mr zE$lNVQSiE7T1Px{pCs)pJxwnMA}S90eU%p%fjQ1YG4VKR-Z7zV@7h^TSgp>k8Hd%< zaz)Y2&f4TGMteT@6lbLbnd`4cY#*5gwMRy0CE&5LMvjc;ds45);U1Ky2+%0v5uoi% z!PML^G&$GlyP3rj{POS9=_6UJGD+K0|PZ z9=o0viT)qorOR>zrI6saecun*hfr?jjS7ogmIz&77z_53VU?_c4P)JQd(Nl&(0}}7 zReXi9s)^D)SlKIrkiO~E>`7dn?=;@AdMRsz+GmeURl-ZjL9|P0pr8~byMvRO-23TX zw1CP&zsapUG}<%X{y|LqsJ*B+XtHldi44x_8=U}cM94Nmsz(%oxH5Mn?2U3>n@2WdS zY}r&@(s96%;TcAa%wSen6)#S&B`1lbcB}}m=G{puF;{M6ytlz4Roch=EgL?*_0--agjY%Wy|JNhqg>76DQsS z3>=J(Nt@UxM|qHwlodSfv-IC&;J2)9l#Hi$|HXKU=9LqI zcAsJOIZr70>zr9uE;McZoF%1<;R>PV@iK-OO%%llQU`x)Q<){$sm}m7!%6rMVp&hv zv#c@Hc!Gj|&DVxAd4a;_e+yDdkB94@;ozlFsBDh-O2DiP%vkL-6Zc8t3ToGb8bt3c zy<>bZr#6%FW8y@ROJtrSGUo0w1lZVlYosvr?dtbI=AX!%y2wP0?4=fiCB%9d9=*iu;nH z+`5RI$J2}Umwy!>Ipd`udELn?`8_AKeVv%n*qo-cS;Oh&!M-%luy<$nWfoO)Tt6DI z{b3*#_)iH$M1A_}L(%})aNrK|j%M5kZ1+ZP-esSWjVuu@I3JTgzU`GTu3TugJr58+ z8cG8j+Hu@opS9IlSq|PWbWpz6PTVNU>w>{7oFrF!G{%FxXXu>l#QkzM`?%EK{9C84 zCpCgl9VW@&(N71z7RAISXPkFI#ig>mKMN@_az-jmP@6`d;X1Jb0^0&r32~u@gRiOtSu_QzkSStNodUMurkJ~@ls z6EN9K;~dS15d=X#%70x~I?1zoGV=>HQ9|J?C@8i7#EG678qdBm0mwlR#iT^RNM2~5 zNk~mCcAr1f`Ie|Q>@iGEt`?)FjD%V@Va}O{5@#p@;sd1SENKfGp|%S}#viak^E|lv z#JDAg&!HZiR*0Wz9!U-5%4FqoB{TT@_N$Brt0m&QOZk?oClh3{y95^^ z{f0qRID8 zzI0N=#|;=uKC0=<^) zY6|8j8e9|an*F8M^>3r*SrU1zcx2*Bi7m6v#5#JFlmAjfC91Gswk{}`k=Szg zZerd-*6VNz=!s55M7-lJA(u#bM~~~HIp_XrM*l(xWQEk0QO86Bk!SCeye!`&uT_r0 zZTTu34JNGZO3=&@zH~pyq$vBH*ddlrh+KA;ctUiSMUX=y(oGY`+dcJr^A%-)bD&cl zb~|XXWrAvvW|_ZX1)$v=rDZ9&?(N#K8Ovc&>5I&F{XWK}_%qs%PQ%^~O*k^umxSw~ z;CCGgjl})*cAB2He?|&HJB_W%+fuI5o}=oN&!UzolDUBiA~4`eQCnm(I%6_VQ`omL z$@G1@fMP^IyVkGHwLasN1>C&z@lADsy4*Ghs;b0Es-~G!C50|Hmvrd} zo=VabXTGs}McE?V1s7Rci>n9z(6I#o}MWB2k zC?iR+lCodf3)ZfTfRZ^I3BLrrSeaECx&lMWLgIEM%r2E!)a?p?B~6+s@sN-?&Awl5 zbb4tg2Wl?P&&O6%*_DBuK9SIeu8*H&{z>Ua;{{&p;tWoR))p(Q+30xBC+Hu$1=eo= zp}jp-^e+RZiWq}45$O}ozu3AGhwX1Z5&o>y+FK$uHp4ej@cWA;Yr+Ci6=MJWBT`pB zBwrcQdq^$1#X#j=zm>*qViN8#e`1ClDfzP>NDL;gPZ{uziif%HH1+9h^N-t!4g0}+ zfox~^;py54pqRddkuvz%OH`w|FNnyAgZ&KnWlxjL8=WFkOtoi?Fax~+`Eex0yMCT? zCe3?`;1(^oi9L5_U+`nmS6=O~Ck~eL>4zv9di`S}=FOJJ8n7Wvg%^+M3_#ZKrRtlL}DzT8fUmwsV(q)RgU{5cDDr8!s zh;=BKvSY(&catmr#8TCK`uJ-yGeh0U4|4HfiT!j$W>+uEIeJUGG!sTav!>XKZRthQ z*w@b(uUa~XEpAQ8k$LDEZ{@=1IZOg8c%5Ge>!qgs@t}yJH%+1dIZ@GM@1V}+@ z_MTt3id|{S!eadf9h&R|cq4!2Ky4xakfNpx&+>Le-RBU>~g}>};0=%-juDwQKI!x2Pmojg)L$r@10tlAFS98pf8M}^d2Uw;%6YFq@&%8HE7Wqs#{ zT(2B(E~S)k&S%1xCY(#7LPW$fRg*;n?$D-n>g54$>{iU9K@v(rdmTU*k zROPVMC;NEgeqw$jdgjxl^c8RS7H{^X?~L#%!ly`ii!Xfxq&!eYft)!k^0G;oEI~BK zsj_Yn9}7o}1!BDAO$GDR%Bj*uQ>3*fi|>wEvOzdCxgZlaioehqSi9Bki`v87!lIph z%Zr%9YWL<(@3>lML@5QfF-yROlu971>MRSIM8S=2ssC{-SJp5A<)=~KF)2<$lgFr{ zQ&z)uv#3}gdP@4|!gWzsY_(_Yrjx9^2M7sN?pl2(-1!oOBUooT{y;rHr=EAK=kwL`H|qHhRBC?f z2ud}=X)2$azJ0iP(i z%|mjL&Fc9o93IVMo39O-j%9~k`{BKixDxeYqFUot5YfKiGvv#Kybsw^R{GS-;AMno z%IAW=ewLmR9h;7q!KGD_wN)@rLZ;*5;^IQi-=RL@;KHV0cVFo>SvUdEn-qT6=&WE) zI&SmovRs?zzVF&>+;=MJ{gsVYC!8<>X}8Ho}}4T&moOeThWDb#CH`{L0ZY^n6a#yE8qBw{ZHI zX!Ie@U7Z!nRJuuRQ?66?B_%fX@lU)~eSEjNrqwfa725-BtdWLLI|nt^kUiYZ`P4>& zW0z9C6L0Y<6>uQ|L-r(tB&lbpifYvK=aXmgQxfK7YalkG4FlDc>_IZ*o&;Uhmp^n+ zH9NLDkL}B8#Ff6>tfDSjOqKnmqbrQ?8Up6eE0lAkM))thD11t17RJ({xB0DgiUPwD ztMy&=Jd0;@2e=_A^xe-2qAZ)ho=Y9h9@I99m!fDOcAC2&2NZM@0+uUWOa%OQ% z;AMPGe#e;);k6@1DEwvC$iGJoE7gY!ORGEBelaV2klLAOLo=OhFojDvEVyU zsc!8u<0j-!qvoHyiEfjbMqO&FyjgaohC<*&69qRjWRUla@arlfanx;<%4v7R_bQie zQV*zO1o2QGx;t~>0x_*|yJCkhzHgs(h0s!$E>6}JoEspC>XRFiS+^fz$v(*?`zBx5 zIjg&q+EdE-QAT*MlZX+!R*uF?H_PJaHDV}@u4lE-w1thjft@>{vBO}>SX50agKbG% z?!(F0(bl$~x}+@(-L`Q-&uLrldtz&_KO)X_6QNU8mcz-Cc1L+(pVIy_^`{)~l5dzG zUiet1?zeo_m(HZst{cK%gPrPuN}{)KrsI3y^Wmxo=H7)RL+CcuO~2j+wM10y*@YZc zUj$wB13gxOkU51Jwc;aY)E`mbVrEkWep%qh;m8VYdO>1tuq+*47)tkv2lZr2e9HVz z?A@fMHo7WU9u}(Ih-abSG7G!80QcbvCCOgK1Z)E7!JKbSR~ zQFj+HxEwUWX3kcE=eJ^8fP!Q^!9(`Uua)&Ae@CpVQDSp|-RVFa0sIKX;i=__eLi|w zePsC}DUBMdX^z?BJ2|*#l}$+$+9WepiHxQt3-<1jmQ?Yr`GOqx&eY(nJD5XWLyfSo+{oxFW8yGM z&8o2%$qhdjG;+-3(QD1jN>+ngP=#LwQ4l+Kz1~O!y6avF@ly}D1SGcKST!2^>Mm80 z1>$^@X~O<;xA2pKD__9% z!a9iH0M2}rd#S-RHm9H_57|SPiTFR1LBLHOBhm$5p55%n`t3Q`YO#X36JcDfa3oN4 z`$O&fW;-jQp=w3ME$MB`p}Y4uEULmDdx=zrae4J%&I_EUX1o&X>cOJ=-7**?rCj?2 z%80W`)#h5(O+N^tf?s(h`$OAm+2e%5S;!K{U_! zKxDq{>VnJ``wWN>b%6&LA3--#%o@I$KW2sU$BH0g%B1-vE-{!F!hDYhQfz5n|8 ze_2pmwo4T6F|naT8Pos);^9-s*_keP@L5#Mtg-^=l322w;2rv#+k(9#zX?XB&kB_O zxtXCB%=1LcnNl{KtL!bkR%Os@9sSx_A7uO^pS{KV#gD|Yw@Jp~cVn5P=UmCMI)S{4 zj4oDL;g@*utb<9)O^nOH!&n-Ypy;IqB4hFh39;6Kkgwz`D6)}Wiit6s!F;qX&MF<9 zWz@)0FHm|G4lsGZ&%#UJOOD2>N5sbvj@gZuHa_M#^pn+WtXp)DAmgP*-j8rVi+~mt zpd#QTlmIb!Xp7N2qz*%c9Y**PI$<^33g5Uj+k=-;%2Se3EjPU3?V*c22iIqWO0A8+ ztY8;U@dmZE{@9_`k`cG0gMD z>pjKw$=Vdx`FL?sp+j3=)t^Sj7v7tKdvI_SXO@QQ772EtF}%ee_=-RDrGMm2|0tek z37Vebt)BEZ)8ACd&AsR^ed{3}K{9x@$kk5!N%Cf2G5^2iP2cQIe=FXd)~0k{aiceV zy*Irvo=!3g%Qizc4={gY)7U4v-#yUz5_K~mj2?SU!?Pxl5S3D0?MO8cHbY|Zk;8k0 zF4XrAgw6|Cqggl$Ia zFZ_xiZX#fLg*ji+Lv`yAx!_XN2&r+|ZGOvGwGl&RwXj4QgEKhl$Lw<;Lks}i|JBEX z!(ZBL(Hw>C8Gn6O#weTgyZqLhqO2Cyl5Bm(b)|IC-K?MZy-+J-6a_=KOXcXls79Z<5d}YnjOt@wbot_>(=F zkM@!+C^a+tgIH>)IG*KctX54x1F+k#G_Vb-31t5yse$cqw!@^{qJj0x!oEV(uyPit zt=?pSHO6+Xeq&@I2?%?`a`0ZZv$0%iof^tER(aB5Ur`%*pB?Hd190(=ywg<~G1<7T zt>Fh6tgk9wUuALu+QPp`=#t|@A9e!Xo`3iup5~nw9BUpPH~SLv@U?Rb%)=As=9q^k z&+TL$z9BS>LNnqSQgoGR8DCk5hfO%`Sv4Z5X|*(jU}!^F~bUFNnEiR6FiKS z83W}RUuVJ6=*Z8_mJ4Q{O@t%0DF{GS{nyu~>;iHP#ffB^7B7(EJg)V@)7qz&rcsSj zbAWY}2m~@2(UkefQuXouZF{ZEP*d9WTeX)Er8ZOMCo!KoX&bOUWdmt6s#h211F<-a zj?M6JRVlXeb^d5s2D+Hi)Zlkk#@c}OChJ%P*MZJ5L8))-@=b>l>HGcB-fR74Lx$Jt z=HVWYX)g;>NJq+4Z#Kpcjnd7IwtbQq(6{evnMezdDpEL0$Ho!6reFK4Ps=LVRz()W z?1By6TPM%GI+}5Q0M{VVE7I`p!Ypl{_U}Up%#reNDtG&I6u)fRBZ6TMKl_@liq zcHK33_O|#**67J-a`sH^&Yo$d;;eW?XI;#r0f&`%*$x4R|Bt zgd|s$I^Oi~zt)9m>G1*8kOedAkb_ow{l7cmpT+zaCIXlreipD|i1u9)&C;&4Ly`Rx zE*3fZlrF{x9#`G;+X9t`sBH#UvX$n947TeL-7?U_)!}C7TYvQ447i`GIn=F;MwZ)- z=6{MO)D%y8b384v$x4S?;qq}?qRwk=#F&BoVp)6G4^fO1;kQ0X-*2&w`5?%|P_LQx~vnZy^VI<{xSeRBrcI zt{-izTzbxmhjUZP>ObumNN>K_SQWlx#Vegq=C_~#U~seNYJ?Z7hjb$xR1esnU!xwd zKOe}0vG64I+HuA-Gm#Y>ZYHvgnob0v1qwHs3p=HhMVF;K(FsnGJ3pQ$%&U#C$VGh4o>t6np0Q9W&QnqF9{d>!*9rcXhZXWLg@@`MJWNtZ>JrV@Rf!#} z&BpS2*Ou4@$pBY~MJXxMcJh$J!;CX{I87cl@-RpqPUPV%9&j%;|Hn!4kj+C%2`v3- z?%*?1SR&QM=e3n2mVOYPQ#}||TLqWbxfV^&ZFFi;-I^KfR2|Fm3~Qc&>B@SqtHD^lUQEptLy{AiXlV<@Np}%rBuP8%c#`Zy z7FqiO7IZw~sc~sc;Co)q^heM8@v1buwe51nLtP_9^l;F3Z<~&|{k&Ratom)5*mOs)$%tPAN1p&E zG4D;A80r8+ON);rXkyS`>8%fh9wA!@%hQCp|Ov$ zB)OJZoq|m$#aLyxM|)>8dM@4NYMyhm)lgh-w%jy(LNwzBC8+CLH2=^RKq3B$T>-}%H%%69AifCk`8KW>$bkD_TcDZB{nOPK> zbUVmouJ+Ref-3FPc0^Rk1j>-n3*#zevy&Ean{OpJ9ZH`KNqE-E?CE$rWA*sLoFC-! zmJv^rm$4`xfehx5wjrF8Vl7>;7~oIeocMG|-5MFE)_YZ@oj5S&e^e%dc`unAM+#H{s2ElO;3rYHVoNPDG>pc(_Qsx)_YD()*vTHO=KOL-V(bA zM2@Wv?L{Nyzx)qjoxLxPy)Ft`30tbdByxJa|Izqop7g^~8#(_k_RxGdvPQ`)p8gG0 zocF9*K&a4r>~80CS~^z64IScdIt7l+kd{nU!V`jx-x&2loH5#vLB{bWnrvz)Cy5${ zt!6_%&@fwWoITiVxn(Yw+un*a)^hvYL1xPxp+bpS<+?Z{)XP{^=M)r6rCc(LwZh1) z#&{uoA>M7ZaP@fZYQ7~PGv)Y1&2?Dxsl%`fa#9wXIVm}i$6fsEz`siV{hhE+_!sA& z!TYzwyNBm{fR6)b5SEfEe`)$JJtHGi9y3*FY6t!@^LT3kDfMUBvz=M6<| z(KD{UN9OVMvI>?(1`Z1$l0nWazL#0NZltklsZVBc!rzqX7lNFP0qC1yo_*Vca!m>KvX*X?JU!`~J+4imPUMly))Vz$ zM%FFT0S4096CIQ4jr5Fk;$mG9ZNy?0rdKHJq)6t2fgFB6x>wjX59o6~=xMr$@$9!{ z=6a+{B+m~JywhOZK~DsR-*Rv0PF5TDq+K7%X%fvFCVA^+lp$I1K-`=vwx$ZI%+@(U zS5+j}>rd1rxN@=OI_F8mW{p{zCB6}7E#x5b6 zzjCuPl|;LjQBvUQG*5)>Hy$z~onvPcW9wEK+O;Jq&U!0*M)r`p23oCjCR1QNQ(!7f zo9W-E@!v8h)Int@5eA3eca~HwbAtPH;+YLy~odIz013b3>>nnjyYHM=r@IJh(jzL8hJsQ_(b=bFRmKKl*iFd)d4F81`JvB$Cf2XTaJW zsO-MD%$olw1^TUhmqfc)Fx%Xn#XyL?00rY_@-#OUym0oP8$ z49mOq_Z4K|d4ofzLTJ~{K#l48*f2jP)CWnGK}8;`{uG&WM+oZ=^`+9CeEr`d)YJd1 z`n@@F7aV5w^Xp+gj1b}*t9q%C($FqhA3}3H{Xa(2sZv=VblNq)!AZiPYEY{QG-D3y z83l_eZO3|8KrA0EtjFux61)Hrcc<`&^etZ3rrP^V-aenW`~&UXwq(T?+Fy|SO?9dcoNO!uE$pJH2ot=?cEE!ySYA@3AK3q z#>(F5uARx}?rF@~H5Nrkt;uEH`uI7L*%@Wl1Cj%I1zfwQKcuS8%qG#KVX8o_<_gkD zn%#lokILTu5s_7h63VKqZtzsh(xE$xs209f>TF%GNYpp$Ipu9o*1aC_gCirtt{I86682Lup1$+ za*Nf#5_tHf;!St5KT^sJ+A0hI?A*u5ltrQ>SLZj1HxH>pPm$3DMFj$46-(7Z-g8*G zrd7dVf}b7bKhXA&I-&&!`HMFbDYpwhj1f$eFPF%hLmecOe>NPGBq=A)9)Lx_+n%*j zEo*mq@jK8tJ}7)NaoRc|(lsd`if*L|@g$VacRqBr*7t8ZO1xvzRtvTFZ|=Vy>b2hP zw0-`1p~E;=vxA6hPpCIe41*W0&Z7+1_Mo_;DOZ69rNPUYbUa#f_9orE z<4boqn9qoOsLo^6#eSyV#10N1W*Ntf-`DZp`D|qP%6yzNqEUsGIKo&L-xf%Jk5_lU zkMJ64u9pLPy{g0u1iBla_qU^M^`V!J1m*-FWAyMV}I3&|lSIG(= zAg8h>?ceD1gp8}4{yXWKZO8NiQN0YSa7f1K2y(A-eH5DAE|bguZHmq<;FQ?Le^kFqTq$?KW+)40ZY=zs@fnj-w6K?@1;UF~gAEq6`~4_2%F?%1v07U7 z`WU6w5Z)&KELyonQ+5T+R<6-}mFS|(d=iKY;&iRE>%Q*;bjvN+$L&| z8M~Fr<6R~{MeSR7SV7H#C_hr93E= zhRK7dG@Px|WP6yetM=#+%YhEe7*?h~P*(AqXpexj;2i!9lU5uB#>rH=73G54@V|&B zS@U^%w%JPM-;)qVft+qyvQ#yD)bmdoV@3@33f|JND$=O=E8pG2-U_`#^4=Y&;bu?N z{5>PvY)PN-Mr;|MAql73!b_x$&6WR@;$~2kR-rV^ zp5?}okt}o=sTpceI%85sfehN3TlmI|Eu4pm<@V%~8y@6NZgn=m=RVmwA70OO9EhSh zj=(1KI%!wSb-OR96*om}pi1=GBVfc4}6;UR9AXX2!82huk~&nJWq1&TM7z1 zv5p4`_zclRru6i$<6W3N%1r!^vHqypG;ftwkT7@OBO7YPdwh2Q_>_ z!#6Z+)^L}G`!qbPVb&j<{0lWaUBh7-R%lqI;WQ2BYWSdrf6?%D4L57}p@s)E?C`i# zUUv-#YB*FwuZ9&G-lX9y4VP>9yoReaY}D{W4ZqRwu!fzVaLPUKm;+1nyIaFcG`v>B zJ2hOO;iDS9s^JC=-_`I74G(IV`=nD&KMl{(aFmAQHJqa1Fx?*y>h~8ltktkt!`&Kw zrQs0`bDna_E7b6G4c!_}(C{7&AJ*_y4d2&rzlK>WocxM39H!wI4JT_D)NrYWPipwG zhK(A&uinh@OlkrXgF8H6F`5!;>^TUBh7-UZUX?4QFfksD>*wT(9AF z4L{b<*6^@~xvQLVduw>QhQl-rXgEQ`85%Cu@b?`K!*>ut>uPHO$ozAzuEfduqsb znEX|%Uw+O#ZeAJniqlT#YS>T1Tn)e1^3ul|Zr1Qs4IkEUfrfW#I6*_dhC?+Ruk%gf z)9*!HzJ{YToUGwg4Hs(ou!hfTxLU(T4d2ypuZ9OS?C@u&oI(vx*U+!wRT|!=;Q|dG z*6=wE|DoY}4d2pmw}#(ncv!;@e{sq!(r}oDqcpry!zmih)^M4Izt`}24OeQoLBkyy zeyHL18m4JErclFEH5{tp7!8|WaPV8H;d2^3tl>Qx-mc*U4aaCWOv6((%-8V9pPYQZ z*RZSZhwb`(y@r3$@No?nYZ%mUvW8Ers0(udNn*>!+{!h*Kn`y{}lcHg2v;1 z4HsxQRl^%Kyh=l_hC?+xRl{5jQ#3rF<$}E$Zq=|(!+&V_q=t(%yhp>^H7wEieyHhq zpKi}2U)-(vbfboU(eTmZ_;-qyE0XEXe8_32n@&;uUFFqTwhFuhsB& z4IkC;FB;ZqxLw1~G(4zbSi@wwH)=ci1F&Wz&tnYW2&{ zG(E3{HC(RY^BS(!aI=P=Y1pD+{;Lj#12jBW!%-Suui>2{_hRcde$8=| zV2st6DIOzu)4VdMESq8)%?n~=Py(1pzJ%P3n(k4iOv`wJJxAU`(XW2Wv z2H{j&IZ`SuCx+J2oBmH=`V&1CMvsNkR%)qcAT(Q4mFd~C*4!?5e)F|lo|=%Ik&xE2 zN7wkYG>~M|5+GFU;PNOB*<L?ml^Ji=gkuEl zooH%_zO-K6RBOQ$Ln#K*Z=O`fbCaZXKGj${+w_+8hk{RR=5`cD?JJS$6s!+)G0Lic zcuTF1v1&^dnBEmlvkmQ=OevlIB`|x>k=&@B!8Wt$C%v^vit zK!eM${p%155xr?W1L>a#e2jWCtprld_)=XBq81oVzlG9x{QGcP{|xzn_w$$hSPg<`EbtbC=$|J&0;xur7T$r}=u(GAymnHhvh@ML6@`el+e7S}X7jVB;b{%?D8q*6l;<4LuZ2k3cn8x#=`3KTG_$c(E2tEFG>)xN=Fsfr8np*_R@BQ(@XgPye+n_a; z{lH6ukpMQ~OFsiyJ-`=+P(2K$b>b}s-GK%GLuvm(ZMny^E*JC?Ov{2+`q1_U(Ldg& zel&d`m0IQ)Ms0-q5k6niV*i8wpnNUUA;bd@1Y?)?ML5-hC-oTMHK6C9WM02_l?(0g zqd94`&v^va_*M9_L-2w8x_c$;n8VVfWC-?#JQdgfAS z1FS>Ar*Qu#tl&TO8_W;lER;S!Nz;Z?9q?L#7P+s75`?b;9lqaQv@|zmeZ$8Gv<61V z`>a&tC)%O(KUgj3TLhsOUOz3>F0Z5Y=#|XY4gCjp5B?VVU-YNQ52SqkqO4Xd*DxX; zAHQ$gpRJx@?gm>2Yqvb(g?Sh}r3lvZn~*{ehA^Frc<b>4lXj-syez zBUYeqx6jh|OSH}~!o_;cI)7LpTI-+7VO&H0Am{npuKVGP2>Qvk{=A2vWh1C|KrZUf z*X4YrZF%-2{08(dczK?KGAmfuPt3LAT>EYR&Rd|Q7v=Ng;42|VShs=2EA``Yuo^h7 zjLx_F7rYkKQ>~BGqCKU2uxg$YoLxdac>dPq^I37YMfukH z0S4zVe6>NFN9)N)H6P#LBcSEb1AHzO>j6Gat=Fx#>EW76B-0&SYvDdq^q&};w(Do1 z|1er6=ma!x**;}e4&w`S2sQ#|7d(IK_SyC>eStM?F`sGpEDL9)pmXp)5UlmbYYFx( z=1e6$&)as5V?BOBZ*b^}%zpMS0YZ~6~Vst|8mfl&Sy7i&0Rpvif{eh051rV&;54{UL?S-RX zX}_gcvRskE)y@BuzqS7XZw(qzt^^7D;@SZVgB7Zn9Yp&fh2`}@W&B#(FK7_v4j94w zJWR+f>o0s2wBNRW6b@4B{^hz6*O1?oTm?@HG}gB9<2R4tZg6`%$0Aa zhg^k*-j%_hvc=FUozG(2uY`WrYKC6nH@% zVAT!lO}KU@u9Jq*Q6;V`EA`_o{Ll5{ZLri2*FQi0uJd`Ne4anpm{=P@4Mm?r%fNDA z1S{VCZMh#y4gJ7_^}6-#6{~Ij;J4uFvS`1p9O@Q9^(FLcD_2%wynM^{gH>8zy|J!8 zScv5{L&(80fAL*QYaqstwSR*d+S0pOrw9GP^&6PSMEx!259_hY>o4qw_u$+1ZC$?Q z%FH@Fv`vf!#rka5e~KUHsfGRX(rxEHh+{ea#i~jf{nqV=+J&;!hp-OC|ML<+!`A2B zLg!$Ad<26JlFGcKpK17y4fW z%l?1+Dv)U3+t;Z?dT!r*?1HYuy4qSVpj}vnLVIC81+Bn&lXAV?QqR0k`3g?hALw4W z-XiJ+z83riKW~LQz}&Zqt31kCHg6~IWj<%Z)i-PVvaG+NH(0I0oChyTwJ=VEpN2NTTm}Bx+P-0YLkh5Np*P+$Fyrwn z_?G^N*PpNSczw8yD_71f*AH9|d`by{4IT@t$spii~KCwC351|)uCVb z8XB%0aodM^S(MAAe3cJpR@TQY`-R&o+(Ur;l&e*i{RnLb&t{uH#244tE!$-|hw(WT zY?#O3*GR4H3fA-DdJ9-l5M@vsQBP$YiFJx%4}5+8_IOwNUF5>g=Pmuw`|2;o9?W4H zS`&Wf8EO_z#{`@`gS{zNBQ3q6utVFG)NnSYc)Kipr0`c_eJJjKhkD_(VpwFD7(I<=I+4C=ORJ6U(3>(Ji5VX>0OQ2k3ZcKaM+Pr42z?urAo?BF)i6R~&Vdk08F=|HYCo1&sD*xD z978E0KDW=e>u)*U6|3Uc4M1c3N~X9Pq0~n?pW*cZJLIDwf~MiV5G1@lw!LWW-{7he zx7v5zr|0=AcB0HhAmRQ&%quWXdEn*RdKv5MA(rKGJ-pqIFvIfuv;53J++kAcqpYEz zWNr^&Y1Z`={b<|ome<>0T!{L^x8by8cqT&3jgUX@$G7uW{4k7pKKDX=i0RL`WX4z~#ILwP=mo%0;U znSkYagqYhQ1@9NIetwOC=c3r5wU(ituzFH_jfl_he%PM&zm5#cn|&te@)#{FtRrg*0Nmw7!e3+U-&zo9@gRD%fNT=SyW4P z3B9BAliIziE%FcF<5~(-{hKuaStmQ zU`lRKU$~wxv}^5`Xmq9@7zuEe34!}X(HfyY@X-9;HNSrb>t*gqZO1Afr;#*2K2|{g z0o3Zm3V^RPl(82tb*E3Ps--Sc4^}=;uiQW3enqJdub<-aY{%v>x&jk33S`LhZ)ih&(HGCFq99LBs`e1&fxi5 z>I#m4=NI=nIOpkkZ0Ij#%?rmA%iuA>q@lDYL}~myn|lH-hZRgH?H>`q%PFme^5J^9 zB8RyWdPfAoU`7NB5p9EU2s#7HhjGBm5$h_EFVqLD6Xr8W0ppv`aWG$izY?vtYBk+N z33da|E4QKXGH8vIXWZc_c>WZ0D4k`Ks9%TYq7$fLoZ44s4dQ`A{B zRvL{1a(F6x9L+C~WoaG7q4m(3KXy4{w zZc6=lecx9*7)MHezBG^VROj!?Pt?zwmYGG%38bwAU0b(S^q()y2ilWMtrT{wq|n%W zcS#VnFtAI|FswR2D+$;VsQtV9Q|ZTW8XtNTtY0ZbsfA_wOj>F-)srHHam7o_rQhBq z7wz<e}m7X;8%LkeN;T~`L(-weg&?! z@I0{ZgQw#uTtT!DkfRv(lORU`R1qB2ou>L`{$NqpTB+F^Yb6WXDI*TG`6Fn&nZ{lcdp+ z2zf-&8o(&aqt+QoHRMZo+aytI$)QpRxKB}3k6~3^)<_|%OuxAQTvKx2S(C}0HLz!B zWS?{?i9v8X8!lD0j^E8zj$8n|%N~M}eM)}tnqLS;_9^+*vEd(YU$SlIUKgkDS4f+r zUd~`)U0&{#nOuxSdUZ ztQgts`rLcJ1%16nSJ6rJ-BZKQHQ9cwWeI%$qVp?`u`%(gn6$LaxR~6OOgh=5Q;Pu4 z0$w+PT30-^AUGHI&dm0mn3Ai_&WuaQp^i8@IX^3t4zbY8K^ZBzDKTj&lbDl$wCU6% z!R|K8^r4x3iW9c-bR_*NDA2 z#r#FSPW-3|xyX(mt$;evuL9wy9zJN$v(L%~jTN3S7#SBRiFUK2^h2~?@Cs~)Xt$^r zN_VAvz&Sh$YW3e?%i<0ipp>kC=t1Mbsdw5mks1qN#%CUxHYSScq7FXh75>W+Cbj zHHd0N6`~WOglKw-WoHs76%Tpc8Tl(Nu=@vcY2HM#MrJEI@8R)Z1Vd zavh@91~tglh$5P7np@yXMxE zc2kWl$);v&S{D4&ov13NwXB#%$og+@R85!>Ky*i|cg$Zhl=S?y(|o5Z5u{qnDW<~? z(d0&@X7fyo;>Z*Il}d?ql1cG}O1b4yIw{B=U*nKVPx9qr@6k)fYRUF9pF6a@KZ;Df z)2pbgbpjc{LKzDr3fU9^1^NxY}O(IPd4Tv5Mvy_xMz);8?pP;ZNl z>^Qx&QkQFK#KC9gT=v!(PL@2Z)uDdGSn}6{XR0OTVWiFKypK9QN+F{byo}pC zF`Nu#$hD<*`+$s9vP(4)h>VC4v8Wz1$OkG2l3dRr0Uc>h1}j* zux0d=G31Y$)m$gc^&^Iztv3BSD2?=FA&&g=vQqy(`@_k!klIV_R(Bz;QU4xmJU)f| zWIVs+SxgM6x@n34jhl_7BkCblY<~OY>wOuuqd{oxmz2!%7q}j{sNA3?AL252L zrcbFEKq}?FJ}RxuB>rJ{FSW={AuZkOS9&llj)b*4{M`>rqsZPr2iupe(h}#HG4!81 z(YLQ@`q(amgzo(yp}cDfQELWOsq|SqQL~^URh@NuyQ-07s@rje8T%&F$n# z9#{FmGrG7jx%kw6RNJI<^3BXEhwJ)`CBHYyNxKxDM7kLUmD+z1Pm*2c_ip19OR64O zf6kB-O}1^nP^DVuDB{<6bnaQ-2y&#ybBBgMhLOgmNljm^(Gm~el0Vaa973|D)fiP` z?@vD6Ezy78WLw&lo;$}AQdnnZv*cJ0(m3sKqqM_)$njsk>b}X)i^!Eb_HB5&C+YgC z#)6GGy-4HaX^oPn^&x#$k87kW>qi)+k$iVY)3=E?}opBbY`%HX3{X8ocg zf#0dxML5NgwXMq+&CgFDTlBl^FFGcZ%9lcOzEV({+ zPMaTmGe|?N9sSpvwEi{z??#gY$se~H>|ZfGf~b~87JV>FNB+J(W=QRE3FO4#mO=YI z7)vVc`tWPbmQ11<>R6ci%A0)irRS-Icf-j#X|cVJqmKMo-eJ_D9}>vmpN-p-SEQ0@ z-er4UPwYq>wcqz|^h+?=b3bX`=YK?z{>!gN#01Ba-)oUgLw+7hCb#W$>eRY+M9Twd zvh4GIJ~hS=`zP&nQ|%MU&RS!J%xIBLZq^TQy_?`k{%v&W8^6Q|GW$%#(}2!#r0O@J ze%lX^B@Oy-tKWZHPxA2`)%`yV;UweOYjvc1Ecvi$-JjR{Qn~xI`tH+ul4`pfyZUDi zBb^r2-ha1g9Pu#?lMm7QepCHe)Rns$a<@s4e#e~=2$WAoh>@|9W*#2I>1^ zM&wYJ5MrNp>HM~bI?_({Rg8U)vBXfRoo4g&0i@fS10O%BH?aZ5KhLD5%ym`i6hTjW$bKLmQFg`ZK=Goo|a5?oPO7}Uo4qE!1YAf^fYq2 zovZQ2CqqbGR~`KqLw;Yr!h77~R5EH~zv@S33?_|&>^DD4j3MoBy4wBWL*p9`%zJ!4 zkkFG$`Y)E`d~fX9H8Y)5nNl|P=7^!hKD@2Q*FK)KH9hgR&&(uMmPNF(yEBZ`**5JL z=Y@%+p308?>p@x`{-E;Hx}(ULWm#_~-b*1(*8ceFO1?jF$p3uQnZIMmAN}loqiSW4 zq_}B0rg`DSKJ@AW{bz}!Rp;+IPd(O`_(wiW`S>>Nw*hU8J?+y-y{x%C?1P7roLvzr zhnNIX&v{y1=V{%E&S_+3e1|dQQt6$K>(xplBPyRTdG`(_)m?)BJ~$we6wM!XgDme) z&W&H*u-QQ!aSvFS?9x1gT=G%Te-UJI#I$Sm8>bNMm(%|8I6jy>2{Z)v)Wws!EOaNP z*PfLt9!8Vbtx8_CDxve%%q2hny*q;JZ`tqkrN2{%!CPN_coQw@(Ro3Op`M9k$(hp4 z+gf{(>3KWzSKo{!r|Wi2K5J@Af?7;iQut*wxjFXA=v!klNaf{T1syAoB(029ql0#* zk~1N$m2bVIdN^|G@5G1{^0AXwwN@W%iTjTi#)ZjAB)R875~?0Vjy!RFfw_I*^I{1&aIyit951t@A5EfBLl%}yc$2Yy>vMO)p$5Cm z@?VebrPl}NnEC3Vr4DVVzZNYqy%~L?mwtem)8qf~`lhA5$K=L{+p^OBQ>IC?9kK?L zBy?*%wezF_RYx`G*>3$b#Ki+sJ zl%*_oJk|Lud2{etRAHBEWI+Ef0uQdgPD1v@R7u)=gE+hSguiI@7kSX)>Y~EKe~~Yr zOgmR2=U>uw!4aQhUpztiGg44~x^btzcs=iWu{TdwUBmI2Ii3Tn-{Ju=ahY&CRWfs@ z9-|Y7Rwun%t)EqKdnhq1`N43$!)7x6%=C_4F8fHYW%hc{7N^OGe|H}~xb`gBysF)Y z9VcHW3!Xaf9Ngm}>F~%-we4a#dHHkmh*qkqSZ;OA-=`}*^Ye4mh;l@GM7?5iQkX80 z9}@k8s23>uTc8-P0zW!&GF=^giwG32^P?B^EbFwORo!jKA{xlzkhX<)#mwz<5ALL8Zpnp=K9SeU{ zg6qTE0&Vmv{DMgw*FbLik6U;G7T3$6$m;_ff>JNeMg0V`sHZqY(OeGJ&wM}QE%(Cj z4k}4SKk_5O&y-+&m39lgLOjd*3p?TIK`;N`w#Vl7ie%e9Zl_|t{qOA)?Mh6~jECl>aP7Zvb@iO=~o*_+>%>{=f-}cUJ_&IwW11!}COaR}WwS5zC`})iOp)fnI*sPR z?xoUv;L#+=D=&vX&H#DlCZxxT+oq6zCNNrt=_8WhwmKE7K%%NO#F zr=g1~hz1pW$)^DhO925M>FFMDrb&{W`p@>+Z+|;iPWOpJX#Co7^ELe^M`u- z(VSx`!V^z0PCV(@00a&-9E|M*gaHK4$-pxo@Z3oj#SnUT9NHC3^)Q|ye@;o{pT}~A ze0Vw8G&PjN+fEN-x$x8w54?PM-irrbKI?vVfY(Dw&+EgVk%9=kUhpg$+;taE^ND(9 znve1N+Qt&~w>}O}XhYBnd|c>0-d(H=Mge_bRMiv#gg<|7c3#}1&+$$8K^ zrqjTB?c+wDN)8hT5bf+MRjyLip;~pv8Z~RxuH#g)Nh;hmM^(cX8|5P2Igm&tARz^mXs&(SN`|nP@z{ynTHA`~wCJ9ugQ79HJc> z8Wv7}FgojG(4HcjStI>iA(jT zt|TTSmzK}tb5T}iW?FbkI`b9g_?8E0J`ph~xqg}1HVM4xBO$Rg-yF$1Ei)&9Ltf`5&f5$o)wdw5SE*r zl95D@(eiz0hf)>O5;^Aypcb4%7g@@OFuw zV|dORY5>oT!TzmmD$S$59^&TGI8aCHAoB0`f5;zl9Zy>Z@3PM@mttK8&mW%Y6#9vw zb0O3(mp)I~k=7EP6VIUtvnJ#S&%E=UXSTY4nv4AUnDhJJ^^r@VMTMO$F=ws_#q3_{&YZZ+r-g|GU5s|;rpYP5;nWl#) zxZjtL=tYsA(tnU2=ot13sA%mn>1QUZJ=ZPtRSrGE1~n74v@Dmm2lgU}^5C}spx5Bt^I&Val!JYMokLrpPxy1|isdLd ziv0dB_5#np^QU!Hw1f;+?-W)xJkiZZIJ8hHP1t7-NwJ^*U0+~36IfgRe=pD4o`hya z|G!;((5JAmx9i{2V!Xnh;cyyTwBucQDL#wqyC;3ZTJ)bM)goUP^WVha7WuARpteva z6+OS?Wu{Y&@V*BLoH>9kL!ZMlt&Z$$1oqExeL-J=?|{w>1U+G?%8%qq*?iPf!=IG9{%C%|DIy7VOu^ptdW< zoER^Pe+4=8CFCmhhQaL3Eno4UFkiy%F*t7nTZER3r};ylit(?^_u8XqiCGhA zs77PZJq6XOQK&}$fJzAysZY+FAf;s{!T;`RdW_zdNQUz1Z4!p`mJdU?_tS&RK_^@sbpM-6|RZqgU0~#)Q?f@*j-gPI7=g^eh zZ!3tb`aN*{ITJ(O_^Z2t7yJHL1gP=)b`Oi6{>ffI)rpDw0QKQx_5&8z_dWoqb7+4M zkk;c6pnCBGhE5HWjKH%#yu?sH!~Zbw;!e96I%T$F&-t4|KWFH4snU-iSG^p^u<(c9 z8R|L*9f9MfK6@FK+-}FNw->vA$}mg)hN0&4*kcf{q|QZ#rV7n*;L@CL85S5Do&c^Z zn98uY!(R*yBSYDK1XZ7X44wA3`H7YHU>-xw$ufq9p;4#cc-G7x7;2L{{tVpsbP+>M z?;yx@n+k>|&yMFHzLRbQ$B}aws?~cK7T&za z&^XTdJS+c(KSN!+2@JJ?>lqe=TwthISN;{^ss8Q3&^RxKp}wktp&|MpL-o=J{P-3Z zc7NHpHh`higz*duJFVk*;4DMhj|@%IyIh3)vv!SO=yYNxL)E?=3=0;PFf8$^bqV5` zF7;#R6r9LV`}HRbrQZ%RR9F1X<&PU(hWN#2y%-u6XE4R}2fE*Jbwy3qoBPmaKATX!v~y!@>s9 z47GALL;a{33^kd{xP1J#3`?>PGBn1WWvCx?i=k87rwk2c)&GF{ITbZyXc*Uxp-Sb& zu=vMthIAY;Ec`p4p_DP7^E<0JhHqo&RP-Z5lhZ|p+UR=>HD5hvSbV+aO(@S)qb0*) zb$5okA>Is)QNtKYu}KV_#^iIZoyXABcO}P$TN#%8W#sam=NPJUZ!t7iV4-7Oow@(9j{6Vad8^e!THGh9>=VhQ%eHGF12dnxW?7@45W=afUkkD+~=i z|7NIa`c9uQ)K;uxs5`KW zVL|>ehHAG<44p3D<$O{FLu38wx1n6)x+V-&Zk-rPTRa%*+74l;{WOYU@v~HhridvF z3%AT?sCu!2p+>WXq56XZ42!p&W~lw`2EzjThx~Yp*9=WPYP0=xCb&6}#{$}8k zq5nqv9eh2oqVx+X(Nt3&{n?B++x_dw-`j^Cn)Ir^+~R`sHzyajlz%$!T$*#Lnw(qw z{NnM&&E>$e9Ue4Y`p3Yz$J?xH^nF8l+{r01>tojp?3ivmvN*1hTy&)PaJiqGeEvzP zTZaZ+FcXRqDnxU!X8*Lj_O z)q%G1?_WJ%va3N4xv0i6zrTrEKHlNg*KbaAmya$v-9LBHnSsX|hV?tT?A5^S8-5w^ zd`UmKulj7Kt>>D_wN;G|tf|#p&YQQshNrrx>^Y@&{-j5b2R424Waik<>&sV$_RbDS z>LR~9-R{%hBv*Mv)87M5%yg39^hw_GVeiUvTfN4s?MH3pf!o5TU3D5L>!v?Q-g2*> z?7a2cs!v}GklSSRI5zeukz4&Tqx%@AezI}Jw%b$f2FkDN-v~%;IZ*bvyCJgY_bRzr ztNHeE>UOejY2nP|v0dd#rxzE^t3N{yZ*qfqdb3;%djc?J>((1U2-(L`pEyzNv-60zK2|=tB1?>tz-9|Mm+tRXL3SMJjLaaUP8xc?xJalY~=Biv&= ze(;sQ$S$w`(MB)%%-qf2JXib5ksCg_^uudc`O^Mo8ybJzTmI@wGx@qhUwM%F@xs+E z9&&D<)b_>IedH@q_v$~nsgk2xNIi4yO#>5pqV7@pVevE zL7p;W_UMj%g5-APgCDHf+)8fO-ubw9gpd4T&n@3AKGH_+J}1XT^RI{8u~YT&zny6% z@9bRRvuJOK>>>}C8lCAQ4@o*XGrEeu?2?h%`5Vt6a)NHH*rja*{u4q2*$^d!eqB@hc^Zew!U*wj%c?HP1_Dg3r>|IxW_{rYQ z)jq5%ceKCJz`LZK?2>+ase0-ld1gJsusg$h$`?PI>Kn7Wro4IO$c;%``^l>fE}uH} z@|DXYb*foMTg$Ci%!&N5e{19^Oq_3-zXTY0T~{z;z^@|EK++`bq&N}l9y|3}Z3!Sejdfu#pS{N(;) zeyU$?@R3*M2L^3j-xtSGgxqZYRL`EjcqCNBB6`)FCa<=o3!-fiS(hodgd4(cVptURVlod;3!mOX}s zF*8QX9eYGB9Ih%G=w6=PxcQusa?pl-S5N-aTAr!3TT|UIL~h~|HNVrEP}+t9IoLb&XD$!-0Q{i5Wdt1D}6tdEkb=Qh67qPef! zD0J$pM}?#0`mKXcYqxpGKJHD*CchdbA7~!!Tk$4LJ{fJO5&tk+4y+bXzU5}PeC~9M z>yt+Gm-9T*s~_<7mgf!dJ-5ehsGNWD#Hiczweq;=5g*zeijuE?dcJ?onZELxib`J> z_HTp!K`jr6iW@mBX^cE?%)qA$Hg=UaI$!Ny(s-c!VMyiiALydwmp?SUdt^(feC2Fx z&h;;%<*{QIO3!n`C(6#@V2PF>>ybr5B6sBjwKwSAL%D*H~`-`<`zb zWe$=<`fhrZe#cLC9JX#uXkxH@pys1q-HN^B+2blFocYC1E{b&fc>eBw^2s4Tw7t{Y zU;f?Y#?v+T{pDd{Pe#b8k#bPesc{ScY$hN7r^(5#mm}rA&#y0t4-J&-ZT{o$E&-u( z$X=K3^}ZS=yFTg|*QSN1oYuD6=@S7_^1Jufn_#`7UfzXaap4GtPQJ4k>LPb>`GY^X z+^&8p#4lLx#ZX<8&9EfuE6!*A%240G>LZA!o8->XHW@X)!Tn(Sd!QBDaf_=qZwv3Si?|Vc9WrDj%x+T4OfyGYHn}l z{JTk>BN<9}zG0|d`jTNuSH91`VC%Zq5U-@^bB5aS+Bd-U zhc_^!UnS|;Z`Th?|E9^E8vAv zr^ze+`aHL6PK4~cwD9A}Q^V!Fwvt;-LzMjO*{Dt#aq+VHR{ZnbDsMS_=!#Ao{vIW_ z&D?lx>XIjExZ)Ov@_}UT8kXUDVVbu^#S>*_MOzpfC8!v~;vA^tG zzCCxOT&L3%2RUz~Y~223%IaT7%DPXsg>E#Al|Rkg+iJ$n;c}%9Dk6XAR7?Ivp3}DO zH(v6=E?zzUeK|rt>UnE)ub-0TKm7LIJ$N}r9=rEd>($jq$kR3+>{Bx`M0U*eoZW9= zlw5apL)R5w#LE3o*j;g*lSuV-<7(Amo^r4{BJE+PSb0{ZxvTaUb(Gr| z%|G=YxAc{F^-ehX)4oKxZM~7VI+c3LhRtd8wyecZoxOqDaeK3lSOYnr^&q0>3l?cq=6b`GgM z=xK^vOZRc-&#nZ^!~IT`U%fs=4t%`g@|!MWt4Bq)enp}PL8U5Vr ziSmbze@(CTS3fz9UQLFJjPU+OKYHceomqpzyVLvi@J2on;LU{mJ;lm9S*gjA82tnp z{73GLhUdY5ocJ=&8T?0`InUC-f2=)wz6bb^p;7gU!GDyvee)gokI6$n7y$kw?^Nb} z@E@D@BzFh@adCd^Z15lMv3VKbKWe>DGGi9}RbRcLe|OrcwNM z@E@nX@#qWwWn3_jAC1#0LM;2mD9M4E)EI^CQ0i|M8+>ND=rC z|1mEff&VyncnI?!D?(@70RJ)MY(!V^A1Q`^uY>=XGRI*s_>WoZUR($NF{8(|O5i`D zznt6?{KpeA?=JX{tA=%J!GE+L8S@bQhsHM}3jD`q!>VZ({zHTNl?mUk{D#zfZb!E) zzrp>=Z^*7|1)H7X-jH!#gI6W^Q0~~q=ZWhZ+^_tG*e~?0IR4jbVtin?!{O)GSwIe(jR`n&jTLJLwVen&h}#&tL5EnzUenBHOS0n#`S9@#n?c zugFi$3$EM!^om@Ywr9NVyH{lH)D~?Xee#O*>QWT`{e)L!dv>0F^Qc$2U-=briF)}} zm-eqnt}$cLu9~mNu|qziG9JAoHNLDgXZYopvE^eei-*d3f;8n+Y#SNYi^erv<+tXR2Nv z9MJa#?pJ<6*0sLUeMt2eq{G%V`)59SPR1BMn|klsbJ8^Hs7uz-=j7G>S>2j%eNGO> zjn)0T>^T|nhkEFp>CZ{JOYwTU^yg&o+++vOi08Op`8g?Qc63&!F3*YmkV((ZH=@Vc ze&y%nN>8WH7e07K+>%opufFt**sr-2eD;TD_m_M(;m;cTMm-}Xe_ec881RhT>GI{&W4)e{jyH=3y`b+exnQuX7gFmPdG5So z(cxzmg!C<)6ndwEoOf0)usdHtJl@3W&m5{Co61t_?4jdh#T>gQ#xE+!;KFZBw`W$6 zJ)ao&x6iG>{mK=jLDh*rNFf#E#=-5AmJX;O1?#5U4emtcEL7lrNfL))jM`ji#v6YD?4{mM^CW8I@h zx<^mQ@xI=vPycvAVopqJxBl!C+^_tE40QR*anQCW#E>0!cEFk^#8^Dr!+$ZAv;E3X zh)a?k-Lm|IJZn94?1PvmS$3Ehom2cBxf1 zmy=CDw<(QTSx)|moTfgvupIX*mlKav?SOyAm6MyHQ}!;6E606x<>dABeRo{_%gOyZ zj{~arD{IO{L4f()h5_KrF;NsTDWU$@%EmPM%CP~HH|LphqW1


8?uggf>ROc?uz9=ILt0kUq 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

;`l|gpW!} zmXBZf9`xH?R#sr`B>y)?C2ysz_CRL=I3Ce~RSVi-xSWD7-dJwuKj5zJvguvgN}GNZ zas%3-sc8qV8qi*={6c*VSZ_M<<$xMJgKC;;bZ`c#&;ghW$TKx_D10^qWDa4)Rt?*n z#WroGjk)aF47(wnqpgcxx9LwKm=6llwzeY)UZ|vgewRSd%F6_T4*h9pyd6SyC5?oC z2O^W|Itj0#x~kLCZ^zVE#``vBBC(yGST-Mrg$NX~m0|cTNXLr>KQ)zI>`4St*(bbi zKhTaeopW zE}(aiQg$@9rh6~sNaHjT4dk+sLm#8f8Y{6loSJ<4b@Y}b1!Un98xtXYpdDvX1ZSF8 zl=uK5sc{;K5vqY;h6qZj4U6G2AkSD0>BQWDLN%{LCy9izG65S}1K;qSMG^`!s$~h6 zD%6VJ&QMkw3T#1Hj~2>GM_PMb)TwC%IJ_Q@ERucv4qPitL_%4Uk?ZB70JEY3jSvjl ze104I6oeLEk_H-(Q4#Sh^ztVli=uacAc7r(6d-R?rvv5Tg#2YvRY$S}>)Zy}yb1a) z6lFE#c}i@55m)Rpy$uc#s&Hr0M&!U(WT|d`9I1|^C+WE}=_%Z>;{|;I3BD7Op=J{* zZGW2{U&G_}y_C9Y3Q~tDHI7o21WH4ECA5xpQ;?gYPar5hxvQnyrQZ}Rl z!>SBvGeK^)(~DM0IViP@QmK^cqEs4E2F9?NxVM@3xH$`#=dy7D13xzz4BX+EjUyK+ zOTbj(6JY9&no+CDEo=g{FuIGr&nq71uHf$mD00y9+`>yn)NdjmweQ4o->ybok?xAJgi8tG+oBYp|5=3~7Qi3qQr<5Spvy`H4^4}m;B?hB1 zsv+Ia&2NKmXdjSx4I8v@mJ=rtldxmuUOu{;WRX4hna9B&!J)#aGY^8~KJz?f4c|=4 zm$sH3G;zcu_nEC`SyIQewe%2qW)rUE5fMb@=Pl@|U}T6eG>Art`y|}c(Kg*PEnrn_ z5@h9;y5#V|U%@&Pr%zBkOB-a)J`0d^cojs>38w8xqA5w1PdOrsF?hass!94q#Ramtnw$=+m37pnY&T+z9{yS7qRzIC)e6 z(>Ppbm&5m9q~cA9V>_mQjY14YMm&ahj-NjUTM$r%RIED1-rbN# zrh5$JJIRWyUbfWAzd*JjYjxHN9AiklsLo~@5x#(p9pkg`5<3kQ@Ti`r-fWe$;j{(@ zQ?yd6k*vY-BGxl_5R0w)cjzB{XzuZAmEHS3rCe+*6eq&y0>3#nsAEQ8B?VeAb zBZNajS3k&GU;;!+w(zau-o>|wdkf!$J4=p~z)!--SBWDgXbGo9JocJaSVN>QOZ>}g zASd=1Fun8Iu`>oLMV4C1VGDCFpD~GMARzDyu*lUk{zM9I7k?R5SWn)MN*a~xg6Y}9 z&yN@F;@{ERMcvL`^(V{n98vooCwOXMRdsHT9GZ(30v3YFkPFrFy5I<$P4kNusXKqU z8ud>EjCjTt{x)T}V_5Hp;(Zysu)o8hKIlGhOAd~>w|M!Z;@OTx^cq&;!0kGMKkYoC zOADVO?p^!}ao@tniTgpGfqQ&1QZKj{Q1o{q?iMe1Q}QhgNJ}a_1^mJfU>6DFClc;~ zA%qwMa*=F7*p-<967=vtP{%)_6g(wpxre_sJibs7B#J8Fe|;a2u&p1)JT%x3af|9| z)1YDd(8mn(otJwcz{NOW3U0hA4v6<)JrN=UDw6|zIE{>A?2^jii9}e~l$Aa>KLWR4 zc9A_fVBtYQ5C*8)ok=#R&o75w1)5O2Xiaq*%>)Q@N!TqOZQ4>2k*l(7_&GEsD;4)N z{4$Zw;?H=|LC8kP!&E3r5`-T%5tg96nzz@urRJ@u%#$FXD}20~ZY*UY9dg`^vhXPJ z_1MtcOgWHHORfGIOD5Ts6cxdyklh57(s(X4LhF4t5;&$8KNAN(zy71B3~CMX^2!dt zZ}$c4{PX|8Z0o^1RLb`kANv*diOa_;WdYHRJ`LntO8b z!#937xZHi^-trm=xUrLniHRfV?h7Q8mkX4&BE(t{)>R@dX7duDzQqz8p>|nnT5!O# znKJl$M}c6=CSU=9GKHJ~z)+5q+WBwcDE0BDfi{#cAQ+W}#j&ydS~3g2 zjzXHp%EB!oVT*)Yk?`^lFw>l^xrlgOmxPK4%wqcmZ=D7XV0nHXrff|&WCz-lt^i$< z$@g07#KyB$nyHm$X*gb5IuTjfO{J3pmIc_4kVBt=zVKeA;s!a?RGHCKc_Ep7HzI?C zP9^SY41vsRkZ7vBtf_KbQ{_cXm6zu%>X5@Xi_Gz)N0;=$W4jn;H*OE3Pq~Zwf{9I) zlhs?hq)7eV08aQ-{P^EFp2^DX7rA>d121yN_-(+QwjXIiE)Z!56J-hnS($MF$Lb_y zFwTA%BOeDqL?U-pYo2R}+r$nnY%DpN`B0+djs6QHYMFyk)pwD&K#Vym=sV6zw_z~U z287gS)}%sI8Y7=V2|9hC$Tbo&P-he6cz`E1Co1LNw2~2ykk9_JnzZ1Q9Oti@D374@ zf5lPmQ_`@H41|wMm4xwe6JuK1O|1TAf&vIKMUO+e!#$-Xa|{{v|2zVA*#NK$d?u{3 zL3IeF+JtuGKlNqljsIs~{zH|_e^X_^U=_%VurHF6u(F2lq}A9ODd~or6K0e1eff{2)O@$*5BIz=dM`oy}Y^#n2tXQyWwoIcV**A-tb~?q0xEJ&oC)4)uAHdM82QJ;n zZ;>T6u1v+-zah1q8Z?~nisIxX3Z_7ZK-h{JOIvkIWJS00{jkxH&4S%(M*^napvd!C zRDb=fq=VPZNDTx9xzwg~g(q{}y_sI5J^+k{YpB!uBXR{3pDR=0X^t+Namqla(a3H9^<# zbO=B!!CxSC7^wtADMT=lTCHNgm9L(aEJZD-w;kq^Bu)^it%=bR(^68q(*(2O)a5Sd zyfsBRmofD0s0Fc^gUD&g(w!|oU_MgZj79bE5`bvNcKP$1%`+kjX)5m4zUtW1rqUvoobgg z-bZ7tBA0qNXBbd0X?)h(M)B4`k>DsZW=Miie&N%zlP+3D2dPak_lbfOmJlx+8boCs z1W{;bKsIQH_XP?ZOs7h46Lz#xuvG8iofv*vw16BLqwM4+W&ehJs3w@S z!6aJj-gCC*B!bd<7cg<|&MmPocR;CJZylbGc|A0*#9sU3q*emB)gr>Q5Oa^93J4j2 z$pJ))gP$P`{B$T&8IfZhEr)1cs5=w#KB~n*=sxG}{Jdk!QyZsV0O#~3dexSYx3Bhl zsu#2$a@)hb_az@r>U#4=>9a-MpSimaA<)u&9Q`mKKTERBnkgOL{mJfwKOAz$%*@Z< z{bcv&KOAyd`^!jF=Hwxl4H<{)yAQtq#gX1!`N83z>^b97De6QU{~}eT(M`XM?d@Ivx9<7u+5~NOsFj&t3jI2df0&*lq)a_ z>!)6~e&KZ%^fm+z<&6A<2;{*X#J(W!z1q)lKOfrrXqd?6$Y7#_RKf4{zXg(`pQB{J z7X28v0dYm~`oxw&+C3@hd(GkpWz(p!)ErmnedYSbQ>*Jn<#p7455JzTh0G$8BhiD% z%0r@uX zQ(I;ANRJm!Jn1b`Y{^TTh&Q9qLO#CQz*ivKaPmdCK>%sa=rU>$9>?k=j0?FvTS|Ykg0g>T*@f_z*tJFdor@mHDI8}&VtWM8^yb)NC`@DP& zPz~8to^@$l(GDY zYRno;A?f@}U|S(}TVhGdST&ZcTz~`1N-CX?l+{?G@+p;CgHrlIO1=DflBDkgD&nxq zNm!1&8?%Te@1dqeM()_<<7k+mM0@!zpa>dY1mTWyH2nMyXdeZ6V`~p-W9d*xe2NOn z1-pgWPMkCmk|0o zNI|fsO&LX9N}}E;FN$se#6{8Hp+}3NYd%YoL={_|6Crc6{4Q*dV#c)xGNZNYARx%M z+8%I4Zxs(TiCQqRa3w!Ud%zK$g%`{yK*eeJ(fwNd&c`nUzbyQIf#22m(LhpMZ5DOZ zf5IcCs2nP2LR_S0JR+@+0x&>;a{ zl=Kgfz}}>!zl#I_NqQR+U?0T)Vl2c=$1VUr@&?F=bKD*)e+f-TO4Il=2tWg&p2Z_1 zFuAk%uj8*W(HdTb@JRCff^Dd5ZgWtnyQl`j8$IK zC@3NV+K|ag`^EP-;Kq{GYO7S)fq8(|v3QYeHbpK;mVjfveu65U*(}4tcMU)GCx~2Z zghg?WFML>k>f!6dNo?43%f@;6i)b97zcBL<$A1mqK}C(_Ha;B*sMa0U9Eg5u1PxPV z2Rnwnr0eOUKDiVjr8v)^`gj;|Bp|^?z@$%bVCM`VR|66{u*=?I9VB4caqOQTI|wm% zjA%*QX+YiuglY%Hcc$Y@%pCxj*y=~Dy^SXVs7So9F|P6R(P#v1 z8T1aT%k@?Ip8(rbEd5?DTWR%rix7e7g<1O|nYDt3*ZRENhbk4U$JvTkL9EYb$`pIc zpr!eEf*7CYsT_6~i3O0&{a6!(Z-d;cSfkCw_Htm1<(lnxdHIE?$NW|%uXo#MwMF(I zHrq<8EesB#DY}iZ^U~l_7x%nIG!IxY&ioyu$*@sU`t=e!%?c3|`Q?m3{< z(cv@FAe7~BVk-CoLhvqlTiLsKl0)x@2q8PG!tw2ctSA+(A=DbP6Bc(~*Qyn(lk$Rn zwfC|j+Y=gM+!0~qc8tI$f9`Tv)K8_ncUSvXp@gGuHs)%bV?x(fi-x|I#I)I|@x{e1 zskdRf>Neb|y&&2v4@h%-w3r_RrP+Sg!znsA+^ZEiG=D0lk=_oh(Fc8(sVC7;ffj!9 zM<}<_Cy)#X#tXsEdEm>-Fv>_m1;QfNWR;5y9GWjxZxl>PYb+xDNM^&~DLMjM z8PWf6VGyd=uD(7fYYkv>@olmO(4$?w-cY)!;f09!KqT#vc*mTF)M3U6x1B_j9J)sZ ziE5C<0lV_RAjm|i5p#e7kUu2WOeQdi*ufy}q+j9)ZQvLgxQOrZI2gW#79=x?e@DU$ zl)(3amgCSAf)D%nr0T&srQTD2O=tE(NM49W>SW-IW(kW@jZ z*YWacl^_0Mq6mer?0 zAEc_3Pf+Rsz%oolcopI+{d@uTjBvsZ9t47w8N3RkkMqI%_*=k>7CmvO)PXqqjkIlg zEwdP2t62daP5lE@nyBo-^>XEZa2>3?gX=V9JFerE*Kl2={IMF=;Fjp#H4qdfj=*HT zm_U~}{QMiRk^U?S<;rVwAk0J*yqF#6Duxf+*MaN>EIE*SQ{YN$m`u%=L*LU2 z5Q(eg4bP#P8q1X*T1SbmzE}5Tu6Li`+n$L-=Ky2Rca<@CiuvdZ&>+r_fAs~4mZy8$ zq3GQUuw*k_fxB@n_k0A-z&D3ti1tmJ$v$mCuU6w=4FKnTB0qE|O0BZt6Bp}#iBurT zB()c0(5?sj3@Ft2d`ZkLhjup-s<$HQlM+Y1P-FS{8i!inS0#sUB6{r*1#VicM_)%u z-d0$apvG1xgVor4Is5~Wc~NR)MuL`%FRP5AX<#j**rD2Sfn2)RWq1)y!}g$W*TXG_ zz7^>oV{1lgjFtkt8oOCmF9+a2K9!c$2}rY{k$Evp+0YZ{DfEzKq7Nz^?`uTOKoVbr z{ZCj{aIM4R>amJ1_w=?WD2ah_3$|LC+~-F(1G6`2{|uv8^9Kt}-%B8-#2= zY>_@2TM><-DACdx9FFegCtzwWA3muy`T_E3tNj?U(AU*@?X`c8evLHL_>}-4I9LA| zPfwsAu@sJ1!4<-Hj6pwx4h#{t635EhQmY~b7HytGORmnf7s;VVSEGx=K&aVhNg0b; zUVicU7~5pw-4|tQsmwfw{&98g+}Q~@43R8cCD6GrPpHDNQQ)KGgfjt1KtLQp!yW=Q z?V!`Sdz=VCz~QX`J}Tn=fxm(#FeUg1xVo@BRp;i(p<`f?xPKM+tfY@mg?<2u)!1M; z6h(q^0Roa%4(&o=hA*Ym|A0xq>@M~6l?pETvWm4HC)qHNpP&T9fE=O(>ri7^a%h_X zH%$&%psA~Tv>Gdv*X=|1aP(;I?JhccWWy~mn|2U?4|NteioMWN*vl(I+tGXhHMed9 zG`AKPz(F>!+4!2=aqLG9BTWSdVB~EsY_-}EPkRtQj$aJHvLi6kQ}IocR_MPNVmm%e zMXE3gkm>n2TEHj%qDKI;DEbpd5n@kXcQvs+h5gXR*$co3oo_NwO+B3@hqt2}E#%_I z79{5}oR}>Fy@4n1z}$uKTnS-w)AH+ay}8zf>-}}tv67>4-Rj;3j4RGCl^ld}wNQ-6 zK|DL(uhu5#yKuUxs9H)F z47ULzkyO}J%^+3`+D>(K6ujr4W!kZfOam9HxNmCQ5Ur0#81Em zEK!acfqecNa1|eG3Y1d2&!2_*KVg0dCYTBc0jkZzXTAQY|8)kvE~eMjXT9Fm|N1m_ z+eNR7&U*cL|LZRXdIhE-d+AE>4NB9%PbM6%;WFy=)AkWMof+@wT)-e6dWu>op%%Wz zTSD3FW0<}JMtBENmJ8C^nUZ=kZ<&nIq06~nlz_5@%+5bEVP(fvg967API0b%U%9TS3l8Ay9bkp)Q zTyL%&jqCk&shFJy`Cbws`sc{WU-q4T1o!M^<8iH0D80Jw)A)2!#ssiE$@wp+2X7KC z9{mB7$X(u|ABYqg-e>`c;*U?y;} zWc)lOpXV43!7nUgXD`f^$$x4rohk7{e~DXOLp|#0D^`7jML|!XJ=VAttajIs?t>5` z94er__UDajA|;P&i?%c^dXblYEo5Hkmix&WE#C0!;(4=?hd>B52S;<4AYCrvVd*QD zY=0*?W3a#eXUNX=2dnxWlVU?h?VgCWF}}CYUw8rdVTfYfNuQSpLS?`H5@lQ6OSi}EASyd5wov;>~E=aPtgvvC~&`fxu0 z<(C6MR}JKq0@;b8p_+lbRFo?gd2{>of)SVo#ll}8Z+H??B6=U>C6I|m@PK>Mg;5+u zHw?EeT7?_w5)|Hg6ew?g9zhW0J{Q8D;P7jvC!BB3mLrpZxAPF(ej_Zb9k+`ukq5I# z3x(@2wP_)OR`%lzF>8;N-X%T+XTho4DX5M&kD~&=Z73GAc>1bmEtGDe{MnSh zQKX^9jXw-Y_JeBu~Z_mQ- z2?vZgi$GP2(H{Y9Iue4vdFOM2yJuw;^SR#uX9dW@rP{a(G?K%o0J+SECbm)&wLp}} zL8PY76S#cB^9oNaFTxU!?HbG}AC-6jsso31Ecrm(%lMX7I9dv`rdGgz+K^Gr3O#*+ z)fLs3w80wj@;&bY1t}q?(^clD&ryD{x$7n9&~9XhhalT>MYp%ML>JW5wzf_I`J*e6Rp5B zjtBH3h#Fr*c%=2j!J%zlek&TK;SD_q0z_afXR~+VRvX@Fp( ze$)@+VKPNN$@-_*I8?gv+~v{#CoYry{C32BinTy_GLWdhtDa6&UI9KYQ=(IUS|H@? z6^`T2p)k~W>8PQK@BmOzL12N6KM{XO^ys1lIhWwVu~rp$^zSJ|)mjBtRDAs;Kz=?B z3mw(Z@I{v5Sjvi&YG$wF4}M8x45pZ2tqJrc8LL!!-&bb5X$lQJ?3VK(k@J#>ZB}Ci zYp}7xHGNc&Ho{5#cBg`XCuxswW-m7NhGZBv10%E3_}72I z#Bkd>-8Kv@?2_5zxuYF3wk{L;bT|JUH}!bh&KF*vGffXi(@Hn9V+0omlP}?YV zROlT5bpamWsRS6op)K=i*q`~Y1ZfkUY>WHmn~D-BkXjD8NdNl?SU>q8kf%h;ZvZT4 zFCz~j>FpI>NZA_cLW1N(j0UZ}Fc9X{HJ(6D88J_c=;^O3l+&#^<$8|0O2_AKWi zOpKIBeqU~yQphZUM8jd!rSk87i@t)-wJMudW!I`4T2-o6HLF^?kgt0eln1-N)-6f7 zRrBR_mjb=WY;VKe9n1UC{HifD5ez3Qu;qH}%O(eGH|6b= z)ekXFn$Hf`&CYYB{P8CtU-~~v@Hqw^`$DMeJVcaR)CVE3C}8LNP)ZzBl0&}*B+wt{ zt5`ZdzIr1>$!xe*i)=^_L7Lpy(;J)thj4p^o&ZSXWGV|;qBe+Og9Gv7Qy+)6*q2vn zt8E^z!>v>-dsQdxx$sJAPx!Pau*84s(mr2*nH`AYo503riJx7lKSwTY9EE!Nf5mrz zM4#Z(EV;{U%UAjlZo#H*h43CBuqJFT^YdR49pZ=ANPm$$dCP3IAH)x@#eMYx!w;B@ zI2{b=yDZ-h=XO4wf5TU!ujXS3YpD54?R*3!OZsrat&9&cLF-Ry%WV1^#QVfH@QG6t z2`SGY@Lli-ihyG|bO<>#q$X`kL0fp+1#L@B+D-r(_yT_E3X`&O=qc0yb(0ssc?1ho zo7`j+;qU-SJ%RClOa?nOASinOf1v0n{jL7PceM$u4eNf9{ak+8g)=hhY6P?PRA3LN zh&DUZ#M!wztB+reM&KdmBXOslzB+3((;S_#(JCY`Ku_T~_B}~@4o^@t$7)qiu*uJaQY+Ryxw7&hH+jkU#!P@Xa?OxJb@VV~#o`~N7zuW+} z$2n8zG|odFTM;-F7xVK_i^Q-0_0VpP_PH5`Vpcyg6)iN%0Uf) z)%rs|zHRI7o9W3rQTwvc(&(==V8@v(82ot{c#!e;CS3Sr6-2)1VL;M<0QZo6>i`E~ zV_+F<8|7~B3M9~N{rjA&uOu<`M<_Am$gQ&`_WB~$0(?4;Kk^uOU=Xwk@tF&3PGHry zOT`eW`#H8KrHIF3Mo7`P+X4w^pSs-pC}^e)(*HYvxF9|kIO*>YGGedY+{C3VT%450 zSM>+>a0`7HlXKvN2o80$hjw$#Fia{BF<*=wJs%%U%)vjPVrOmW7Epr}tbSJS7eRS| zzc;VKx@-;+!V|GN^YX2A*Y{IGerQgR!p-*cXGzt-q9Lfkq=~go4;xMCd3OLsnZ)Lp@5B zY6esNZ=w7U@<4%VEVW`g@m?z=#`Eaxz$T&)3j>?g)DR{!6vf02NQ&BVVz(M$<)pin zVZYk>zSyybTeY}9MAjr%mv5vy14#jN8OenBI45h|Yf z6cOdmLDy+_c%F?V=e37>!qAoD%UlGm}?O^&(!bda`w37te^KopMN1ttK4yh<^s^!+MT1XSarQwS|x1~&{C zk@WZ^6pKe-pwNGc%=iMe5d0?&HW!;%iG$QXo6=hz0S0EQMh3=d069c#)Bs~dZ2Ssw z4)KVMrwKb!Hz=+I!=~ItIQ7wHE@^8B%p8sney<+q#aLYpTOP}N#OfxtqR0)v8VQh~ ztH}W~3<#Zld62 za$qf}FAN@{{lNOrhxNf+9Hu}J%G(mnb>U(N_WnhIa{>uLQX-UuM+alHcdBlhW9GEvvd zPvS9PPp*+#Fra{8YPDEsfiTf`IC)Ay;WtX!md{)g~ zpj;a%_&0O%zaJtD#;_hC^;U?MF&P)=FQbunsI_;|FV==N#)re1kboGG8xVX@$_7IU zUdpnO9$w9otMe?u6rAWlocqim>}frDOsjh2v`a8Lqpwrx)eKv&mf*LD8%HU80$D$Z z%1Jc%G|n$kX#N2~MN%f>@n5wfc)$vyW)H^ttSGP+V2H>}Lym4iOg3MArTwIT{>N-iY2Od;u$1=oW&8VH`TZ0wS>LgxMcRMf#+z zjb~s!p0gg{kir=?#9I^n7cIwUG?AkJrHP!1pdp&vrY0htRb@aKiD2Kv$32A7S<1*8 za3PBI9AREWV|)Q4mRz4C&OBjM&iPu!Mzq34(YSbQxuy07nNH58Hs!N9S$U=QRmWgL zdhC-9IgMg?EPjEP44-y?j}^99u?J!o4~rn3;V4*CoEKa5DLxYNZq)+(At8_L zHPAYyp$aPEaK@|_tA6lY^QZrO0R?d3Q~ALNVwPLb0aJA`_f}a0zN#Cn6d^lvS)CPs zTQKORg>?|v6HJb1pCQ4?2vP?JgMD#k8g>s3PQ&gQL4z?4orFTfGjNB=L+Xfd6JSe! zbrvAM2&?Q}_z0bcN>?0@SjRpAB4>ne2r;)Bg%Ps1%?S{5a~=I zmS)NH<J<{LRY4`sz$ zvx5GqXpLw54VG({z8BxRAS{~|x)A=&tLQ>do2hrz%}uzrP#H6*H&x}5GNCw_pPNL5 zl&LvM8t(YRfPxxl&Tx@enOsBaG%5#t=#PNZnVxwHGxhUM z(vKF|A?WzyWt*I zkggS_vrerlt+N18lHwSah&P6V+9fhNU9?As;YSeijcHUgU7MX&RoPh}@`Z}Yu7&5w z)Eg3lPmtcQGvNlIH$09h)dl(TXmlZHfH8P>ApRCE3DOFo1b|sENjAH%C)DAVaYP*Z zjhL?Gok@$4MgKaJ7WSvy#|x3f-*%y!pUj<66gfGQ{tjCxD}YmLAPC(NUiUyYO}-)Q zC#Wn2At+Rq6jNoHeYRr5Mu8xu4aEd+PI~x#IZT^X>leu^nc`gM9j{`pG%Y`UeLEYr zfZdR;%}hhPDTH4v+PkS^$>^t5TZ!x2U^<%1dB(4eMnATeSF&g|=F4MQa6ofgnmy z6ev;!0j0`c?`>j>N+Bq9pYLz(O$fGqp3k$N&)u0jcV5q&IdkUBnKP!9v1{?V{rS7J z-Yn}voEcZb+kdV$34*5nYEuu|^e`D21K(clD0WEn-lBThTrA66Zh@ySE+I3=BBGSgF}L=x#%nZ3guhhEhDjD@ugzIW;FjZ)Z1(*J2s6+h`2U z_CDWMbQs*6&XOdzrsurRWb)Wq6K|PGZeqf{n}Woib?~O)S;)z2a=97WxlhrIm8$_z z;}{C*jPpUL7saOb;K@hioR=;d=M=#PB(o-S-p3P6*+q>DNnj7pa}J@}*Z3*3&tq^B zI=m_pS4>-xuLaF`t3t^-XWqxEmmSVac4>4)7n;gM6pq?oCZosf@j3QutbVjBw80K0 zibq@%sKAcBRcC_?XzMLo7*@>|NW+U`Kn}BV;KE%;_M9#<>Cv5yd_T*4zjwRS9Z%7l zS8lhKZn$?tk$0jxeZCqPsKEUR&wc(giLfVlF5>-G+`~Nj7Q_A1p@E{; z+{J{zd%XR%JvH%{8%+LR@w#N-P7_QLX1}D*YoLXhVH?M_9^zLP;y*|MYd%p za~RUeMf%5dc8{8zi88F*et;d!NCtn9wWZ_%eVX;T_6M{qugz6{_vjzC_{^H%+FZV$ zm_i?0Qi$o6sI~|`xQ*EN6lyck?uaCp-J-0%(?fGEj`dp|h+Kw1{F`}vV-`Fw-A7jl zZBQ#WBO2#+r<_%G)}WH1>KOr-tn8bjS#Kp_I}; zh&nf$$J}d539)a{QDRZR3>QKc%rusG9<@okB#B<`_z)yHKAGI?)ylJEwQ6N0D)AS+ ziTTySRGom?YJUKNzr$K^v7#=KLV=Y!2Y)H2|4X)V>+*Q^f=E?idO+u2Q+0~P)y(C& z^NJUA9* z)^AxLQmOev%S1c43@}%3)bXX)9z1fjl#91FzNWTy^duFx*jZ|O;a7snqg00u{eG>e5d;o4Wis!l@vgV}NTpHbqLW9Vn*m$Pxe_`|0^!NjfE%a!JZOim z^QuBcM3d)6Y^`IrjCS&&e|DB%l#azRlwXDtZGiTc@!GP!5{J~;SB4!KQO0PYHaQj`>NEap#8XdDfUfxb{8h4_~Ys!aK=O(65UJA6A|)T z@uRBuTGOv5g48^vTEeQ#T4?6C!je_$DtIU>RZp}5>eKgUeOR;urEQcr zhOJQo6b9P0^ysm9#eYK*7rlE;>ApYqJkq$~>-P2s8ye5b`ar!kHrEb@tYDPYGt z1O=I32kI8=U_C3PlaSqc-kqv_#@sQ3W3L5EOgGGWS7Nl63_gY1(w>KB)Ar7^9omEP zNawz#p*h{n`SBsx$DBt#fw0}Vq%<_^?@|w`-U!*3f`r{=oc+8(hHt~OPX*A)`11xE zGCXYHD5Qu6v5$BpLNm3qmh9s7c9s?Y=Z|z223j|lgZXSVI18u<)v&X!YY3~FY!&(# znMM1(fNL8JHPXw*@rKTsEz)R5pAa@pZhW38VguS_!b8wi16J?8#^umg^`z znT@GU@0k8LGciCcQ?qn>ZlbPyfKX0>1!x%-oSTCfBE1QhY~~=+JhZMEeMdO=gvh8O zayIkTax%q9%HcG#lNC9c`v?+0=KbD`jj_G~nZLmhPKNsxKCLh?*Z#67|KFheH9@}M2At=~%m}O? zFgaA7!>Bq5*i1|$F6|;`J1?COe}0?zdl{Z5#t%jYj%ValtA>VWx*QBXsQHE3bVyq8 zuUwF44+yd4U=QGSEZH^P>Wrrd&b#@wMJCF~aa7kS>;uBxok3NyBBv0uD~N4xy$;2@ zghs2&aKIE4ppg)RSQ(M)_|J??;I5SOK@aq=_7D){_KC`4AOzLOM8m2u(vM55W{sR1 zng`1jsJ(4)$(C6i=9cQLe0uJTzLd0)S|_iP0rD=_V}N{+h8Xs(jF^m54d%2BhtVfQ zUyR)qJbA_{{yQ|j!E(UV#;;CR$_iiG)v#9KvUykMH?4ApLoVNon44EE$Qddv(awT zX0cH{&RN(J5QJsl$Urn0h3JP>F8J7g3dlD*G&(jnhvmsi-fA+h?K_#vi#FqT&Id4z zp#=MJdpqwt^I9Mjpbb)h(12DCc+4s$B)Bwv@lb$f#n0ovBHAB+mr#B2VeW>Na7UvE@XQ-}ZPLxwQ1X?Y|AK=kD%s9ZInhDFo zV$;JoqW_Y*W<)EX&{?TIIw2c^-<7=n!K}^prmkNl$D8~1HEX9u_K}tiAGzrPfdqZ;%2hs3T~(GqbfWHx_RCm9x={M zrSwrI9;;FChj`5iHP(aqmIi{A=s>0SWqUb{9J#MY!L+9D4?!B)@R)MSZG7Q)r>J~S zK%Q@KuHEd*Ci}#!fgvaA*#;gFbcwoC3BkfU#q1@TwI$|2>^jWY2nsKJ2u!}h`Fj*$ z*o++KQ(W1?eq%}huLlN-_^9Vp-+wXgD4w74-0wfNxGgmla%ra!I3m^dMnwm^y?6MO z!5?exJmV0BPI)*S*w=pYzB3KE0aiyNngyvSqL)fkdH&lxIGKsiq`9~KY(#7 zsg<@q(v6d?o1K4v9+R2NM9Y{c(b_e`%1-}xw$)cw-`*Box@Br-ERe9tcojx&(2%l^-)1w<4?pvA@2{DIcMlkK> zaV{klk&8jN4@q1R$rsnsQCv$s?{F<*SH!k>Q&qryo?ttpBW#Pt6FiN(99NS925YY89pF6T|1?koni zUC{XEC}%giXcHUjsr4)5t(=>3D zA)}n|uawXBk1p`z%5b>Z1_9eEB3D#IswyI9lHOMOR+fR23D>IvW*G0wrtE!_u*x}{ z3Tn_fcJ_l@RI|DwGj?>Q6@QAfv7-~BZ@G^vmu!1nu<;Gb0n8mD92*s;0g6CLc__*` z`LNOQ^pvQ~^+=x}Px5=IWvs|;9nXXM1WYZsGa>53CWY0+FeO8;_jfz}nBvCH)pF93F(D-fKhj{+Tv(JAvu8@^IXjq2jJ~BH$IKjz z{xN;K85NJC+Re_+HfQw9+GiTe$!vjeV&g+*PjF3YM9AH79i5=2{cfalj3YjczoK>? zKmF`B=1$fq?`j6+YvSj@Yb7bMJi z((pdYt{%&p@?7iw4Mm3+a5YeqbF=0_V_=f~9&%)#a^8kMWHAnWvJbI*&PKwj&1aZo zwnbr**@OrZn3V+zJ-XSFkl zs>~EwR*=ha*#LFsHbZNDxC1#%YP@|@S-~k8oG&>=m_MvwiYHVz{(h1`Bl7P2gb}J6 zpJeKYj5(o9F?P22uWj;$+37)}8!yLuhDo)A+dZ*?k4{dubM^%SwY5MyYpPUv9xKw# zkTLC!>l?Yu?S>H!>KYn~gqdReTw$cjHrO=Ha?B89PL%(1=-{|f&+;~coNXI6XM z8IBEWAG8(@K?cfU2rCuFvrb?j)7&NZ4l9_5VgDX+SiPIX6~6YV(#Nai74zNBO5KKRbeiHxWMLLA4U`EN zvqEYgMCd8l{-*DBZDQ|t-2gwqim^R*vlAw5Y9v?1)cZ<+zL*S z6??lMk^&OonOlufXeRp|)Gw?g(f5^zOy{qlFI=%#`tZ?Y{?@(IY4_krTNN3dpYNMc}!8DzR;0oQ_19U5qY3bGUH07lhB%Q zK;z^p+ENp82LBWavsu)Irk1cLk`(ly1wnfQnds!#m^5@H_HBDBUO`{Qz727QuC^K& z_?X-#cCX~@T;he?j;h3W#>dCdi4(`iSP>C#d`yzpA0Lk(QTdPK;}*7k%=j2nzzE1O zL!`}EFr#I&GCHE$Skx)QXiVbd8yF7aT^W1%@)Pb)Taa@mhHUp*ErisQM$3Sq*GK!e zwG7nn4xC33zy6njQ`~moc>9TV6(>nFekvq5UrJg*S8mClt@%r!(R6no`%4=!J)-4q z-q3-O1Jt>>CrSgc5HHHlBC; zxx_8Bf1vhdnA#@snSPRnfE718uK*xC~Qkh`dRUJ=?{WbNw$vto!QZp z=6k~$w!`yNRGJnkuOSL4HS}u-LQhkos8*q&Vy&g_hk+=F2zpOCXG~D72@gTUIb|Uyxxao5H`%c z&;xe}5@2H>tgK+BX39?`z4s}>fR4z7Pn;vWs|sZWvos;2?Gt^?fR8EPHAX77yPuP5 ztp8HxE+k006vRDC%;j-i5i5Q+0ppyvr7C4Q6D&=WmogM52Hbt5^BcL%1K5{0wE@^>#Q)y`*dqr$fZ6W} zWC9qZji;B}gX;Ks{gQO{mu@dYpx1GobZ5xLicgN*CHg&yqGDI(A<8CR8x-FU%OMm$ zGLh!P8HzU|>mH3SG5In)78&y|FksA0A>!a0!7cFe;5XnHjHs41` z{LRQ|hC52AiSMa9V8E0=&lqYx0X$oSKt!O)fP_@JuhBEghymkgR6#~!#$@`^@KIRX zM=b2Oy8$mq_lFzXz;GNG@f{dWU@6p!baatQXvLfjk`U(tM<-L(9X3$upz7^3bxrhN#bE8eoxpYG`j3e*lV`5A&0dy6?qUK zw5PLf?j_D;pxy@cHicEnPrQafy;V%Zpq?g2QgIEsmAHW%P1EjG(>8?*1CB)#2+Ft7 zU#ZBmr^_V6v?}t*W4g-8$a*Uah^F5&(_pnW_F53XZ=~SnJ1#f-iKMV|R%ynDXmoRW zFxJR2>@2>X{sm7M_YJ{Ss>vV@rQdwpR=!RnA2U##pAbuwfyHcWO*4@gBjZJlqdBhQ z%@w(^=I&Nvf~MC}S;Ea_5Q;h&YLekzNI&zT=&(n5PT`f@LjC<^)=Vw4WUm>`MgeT9 zykU>kd;Nz7V2ITW!DtA3OD)wk;GByo1Sr!*0e7*oe9iqmw3{+dSkYmEzlCEx!&}kK zQU2SUa*QWim2k&PzKaC2yk7%lHh5K1C1NVou;Z|Z zHJqH>VkR!xFLy7&gS!sK!JhyIlfTDg0+(Xu*+#I!-Ns+*6#lYmdor`q2~&6;0ppyL zjBqd5;BEZ74--}SGh+SxKLcN5&0SH^gqPuy8i@gqHVF0>F%V;4VAZ{d4_QMQ%OX}s z1vtt}D{~JP5A)rdnc_PbfycpdPD@?mo3zs2?0gT~0mmV-hBpr)e>u)jamrP5x-8=f z>$KYVlZV^AU}$;*jSy=ov!eN>=I@58)WU)$>HzvWsp_2sf|8%w4p_ZsDX1af>U$M8Wr!H%m4Y3M{Xv4@qokr=#c zK9As~Dc*eEQgSf~g?Ht7OmFTfNbfi}eLhPy19;tG>vpU1m~q-O~`XsB?jnU!QeMM(`Q~5W}@HxI6jmrEg_$n`D`WzR_$K783j$-}X-* z$LU``>l?gz&L1E5KrTFNm`H6*_E=63*~yb2$r(PFvqLg6elZ?yhuG@u(jJq)zCPYT zK-^z!vwVF7^+>j=zP{E#Pdd>5@VxF*@U5N**{XY<0Vy#unEmhNzBec%uqj@!k~(Cl ze9X+q@BEfu-aWkIo2 zh&3LzZlqKFhKCEjqKg~n)4#)Yj!HQ}WT(pP3$Qs6cCOJ!_3DGhw z@B;m6rn`}`kQihH*W(g2spfy&u7KEhf9h@==X-B<*R*(Valgb1zdGs(Y{oqu4m^_{ z7&!Q+aNri6k(p(IvDsyTKRg=_bo^sD(1q{i_z&a%^o4NXVcZ9P7Y=OZIg9YeR)qs6 zKNk+{d@3Bc4fmp~vOrO=EKtrfp67~oWr3-b6UaF2gkROD>^_};30F--?mbSsQ2gC=ysHhSLzKJ#(P! zn6pwNt~&SLaPETgj;IMFI;pFaaP| zI9ghk!NGPa=+*4;{ZL}`DKekLsoP66rNk2d7#xvG$w@|^So=<>I{D!0wmX03s9Cp4dVen}hP)gy4AlO1sa?*7`xA zSo7e>4_IwSF43OH-i_U+o2?O*8x z>j>UcH*|!5t`!B>9+;)ZGbyxmH;YF~yLED;+GE}?a%!R=cc90l-RgWnQ5v^02UC$bon!wp@gz!!v^e&KaYq~JkzD;^vmz{7(*wAssZ zqX5HJ@*JIazQ~9EJ49@O{=4|c0d+F=d%-z4%5VkT{|>MNZfy$yZ>9}it{Z6Ni8aNp z%!xITGY#iM6;yv5MTk!Bj}^ z%&JS{W5u!ejj#sSW*h?;AbOX&KuTj%RT}qPok6C*{gCuVRq>5IunTQe6{+RDd~|*d_JxZZO5ls)NFG~$!PCYEzONjB}+G^T425~F-E;P zB8Q<9KT}oIsDBD62t8}67;LTLIsab8&-RgXwrhQxPCIk)n}Z*B;NjRu$_6+d()IBM zFJ?JDfK|@UaG$0Mt<@GKr`qlqav2gkdXiP=LQK*HDF^WF(NK29wHYWp%@+>}+T&^& zE*}eZgpo$a@DhF5=KO6p^|=GZZ*-NYPTV1q>_SvIe|y-NUs!l`dGBeLxRZYZw*=Rud57XcWX((pO#>wCz%NJ~2QO z8u%VS2S0K*se$e$2`cUmxeu!jxcyrJ_Yu8B!?rrVAuj>$Hr67hDt}S2M=7=kP$NQh zYq58Kx7e>$F&(#SKH^%>9+lPbx9o-oOUiTDiKeI7w@SQmQxmU-TFp|!VrnQ_ zLM@-AXf{wfr}DT3Knj#OEeezwcsEFcQaMg!VOa9Ml^BVe?Cc&^DnmZpp{fV$M zspj6NB}e`K-2qs={uNy9(H_Mq6%Fd>Onl2*YlJ}<53#ONB*EvNU4joBg-@!ToBLwI zss1=Qrrc5r@sTdV!JS;;+~uks7qHyLM78h<^{FP$Ma)hznw7W^c(}v#CZc#(YvrC1 z-vD*k;*?SjXIHj5FHkvqitglnqe0Gq9k?YV8!{g!~; ze|L}I@OhFTRpMSNH0kR0QGwyy#`y$YNQ#dx5nZ2vZ+E?X!<9>k`>hgizdz7O0I z6{r;`ui)B3GQkXr`v9@7c_kc}^fGJ24XnXl=Xot0n27(Ayt2TrcptGb9Jq5m>oVf~ zmB)USb=phe!0qe8f%^QiKq2myu4REd;_bpco4f)U!OS4PtYFrXpOJPj6VOPWo4b`6 zSAK=dT}Rk+JXQ7Rqw;QT7ds|f3c`z7y#D7OZG$am#exZKHvjpX?q?YMw^ zH&dT1+96lZ1V2pQv#IY<+(O*0Ja5ysKrkan?Xxnn?DPw{Wq}I_E1_+2^-SpEg>B%Q zo)3BQY0K58lm*rTpI;JJuAZCyFn#}=IxM0M4fy$GW@c*RJcDJ*yrw=7L{=)v$^%99 z({u!i3kIhq6Wi$~=b9JjGL}tgM3KegG02`f7K7~9Oh@&PLlTi}46$93bGP)C= z9X-Hx8N)@+%Xh|_r_AUM)mgk5f$crJC>3#Sm2)P8UpE+j_;Ye@u^AEyOj~myyI|bn z^+UcleweyvGYJ~sk!WkHbIT6ogID>SWaEZuvwlA`(70pT^p!YUrq$~0^_uUwmoU%P zT9Lo(XnO+e=;C%kVwX3qe?{KF4j(3-{x?+YpR% zC2E75pj(fVx@Q=`c0Ywad~sS?;LOv@0$1^@;W@cSS)i0>I?u0ocJhoN`~c66hHzjv z&wifIc>d1wPo85uS-`pjPZyqip0jwq$8!-+AD$AP>@&&&=kkPkCi6T=x?kb0=6Rdv zuRMo&9y+ru@GOtQJL2}_xs2x;o&n_ZI__?sTY2u{Sx!E~2>%)G-+2$5g&2qTg}9S? zmIbcIe;4&Xg?Bv@d45m$8$4Yp;}*UTIJ+!x2kva1SIOr-p4WNC5`GI$9nZr&mFJWN zKEmC?w?h1#d49q(i|6M&Px7qe*~#-I@#YXuPdmzwllR{UR~yuJxj&%}CuoS8fx&u@ zfk8*>G&u*}x+6}pd)$|-Zn9Pnl!oN+$eoB(@La}fltmXl_JLR9v!i(^?_TaHn!hDo z7H@I7TV8*0`Vs!oHX`h{3#4tu!R>w%dwpE9k9w= zO%c{AxBQ@@p;zlU$EZ8|1os_lVD9B-w#CbL>QlvhZ}UQ$xN6jBhB__-Pn!|j z#paJahG91=VUdenebC;h57H0Nq}$okaMb4b2rjT7I&$V@wn@;<#K}oMl2`>=W2UV< zgw@v^?Yw4Fs?rR%;&*5w;M#?mIn;iflH}T%MQW*!Rpjl z-@?eik5)adku zTbRerWgxvB4s7)wg|+x6^6f^RNrbJ!ttHNf{-ZGY*AxC8?mM`ibPX(7{2K`$5GF=1 zj?KnGOrO|nuCl*E)-$91W3#awGcY#0XCOKxHoE`}{}HjJ)Zddu-L#(rQg;j?EbwNy zLyc$JFBN#T=U*;=k>`Iw{`0-ax4UQJF)}yZStZ_4Cseu1ZtlQzdyEq3sPU2?PVHL- zHy9>r@{H+NgI@3$;>gtE@r5PBFG(Wl+t^Ue+;kQq9kcH>acbX+ zP-JxMrh{mC^Gn!dl-h@~-kKiFI#N5Q6Lz1#Ee$!Ry9PQT z7%zxox&Gj$aBhZ^kmQwpHI+~^7Y!6sMzm*Z?KE>vAyVV#GX7Oj-1tW}02=Exmbvwy z<~BFj0*FEem?2)=iju5sPF6GaHQ?;-$?Clg<&us9e_b^qdE_DFlqKUsR;&{NoaY+O z*M@Ru1P;67=A1BBaM|VgCFKXL#a~Fs#evkE`>fSNuoG6<1oOZEv*L^Sq9_a3D+-2q zf)7AHJyJt*2cw7w7;Sv4!N~j0DlQni6+no*{DQKCCNgPOeE@agWg75YIuOmrKuvXC zy3fnbpBdGIOTL};6`5jlnO@^!mu%nDW>0ueDo&Bj#JWYfCA(L}Vu% zJ(KElS4p~T-mwAtSbiwkU2UF!8e^pK6h)owD0bhOq3C(+NMR2` zjbS4P@Z7f;T54ET%}?FWAq;7Z{#G_K()RNL78zrmo;@ROFhrM~P8fTvczjj}?cl#ec-lypiI*h-~L1P+AEe^CA#v7dnTu7O!OU zIzJhF4l~8n+%%zO0y0g`tHZDAtlgLzF7Az(j&Q?>wk-1x(sOd#mO9$y;Ml&ZhFOjQOXVVcAU@UrDXVN_<6E zw3#pSlhxZB%8f>XnV4x2 zyz^vdCmB7Ye&EVEXa)u)>b-0C7}`$-XfBdS>hV;7R$7Tna;C-^hhNKxoHa`K*o}71 z`=bhobUH$V$k|G~uj0q%9)1m(bQjfYHozHs$VzCU@*(5563(HUsh6xG2k+IWF0~RY zyGp)3`;&FQ`gmR;fae}~^=^2}u6 zb1IjpJZuZ>fh2Lg2|~8m@8}1yK@8$POIqwx*;n~?<%=R$7{>5o{zpV~eb?Z~IsBs- z$bUF8jsLlksg1#*?*6J&LcCQKy*CPRRF$&>sfNf-4HiFLA)Rz3vKa{>uO(6|jc*;k?+UIptU)0p8SeAQ!qU;VYi@DV zlu3cEgWE!g+U`g89*wd=W%IbybJ|g6G8&&8yDK?%KL@r2yW(*tS&0VaF((+C+dE`) zJ;m%pR(!pJ26M$tJ1hPHer-I)uNB)lFef#mXENGkWZ8dKh`43e4X=O~FfrLi%G`vM z`50$au+3I^=)ny9Hu+k# zM356m|D#>cVzE>|$K;*6s~W%md+!Vy7C`!Y|3wBB!;_5-V10vF)$u)yIemMJ|=;N)@qXyz^tffcF7Z zs&bVx!^@DH1y?y8m7_sDe;G|ZKc=3k%6ex6@m}_T`*yOrUT~?%G1&h#G3@eJK;g)F z+6wF`LmsCqzl@h9hFc{f(~kN$2iKB+_1n5JKGCdHZOfW#B~F#}A${o%e?iXBuEeSf%009IA3$SXp-#N%M zq;@G6`&~8mLqFsjliM-7dS&ezPDcm_bBR<_?0j4V4fl*zanyn@cIEO^`6_H>R6Z#y z8I{i@N8~W}l9Pi~4W%I>1e}=^pDM3!7~D&*jAd>zBM4-%=S?B^1~)%^d6eo`GbOP*Pq-gZrqYy?3r5 z;$dZ#HbP9A;tmI9W;J7USyJU`T}JF5-)6e{!s!9m&D?ge!I)+rJHeO>NLV{N9Y`%w z>!aPBL_V2eP$Di&H7 zK#b_}?&@B9Tco@52JubThL{+=t_=p9sf7Ani%Cv7w7N$#@z@-D_GbIi;oLb0i@Oso>Mlu>o zUh4eseLh<3F=zq8aMu`!u}6q;Qe=2V^v@th8S~t?8%H$0VcJ1P)ra63BSow=lbI=7 zuwZ;wIsZHZ)nCTrXV6Fu;E!-y;XI`Ap3=scrziG7>y&C>I>y784daZZh#^gj#HX47 z$05ErXa~7udnPN$L_daKtQbzTNJOvfrQl$FfW(?1}%D4;UDK0$Y-;3fk+b zkF|PeXll~C$qGNWg!wmFm9oBIaj=`p zQE^EEZOV_4tZ>#^4m0&up)IE{t~A;F*E1O18y`;vFF)bvRC&`&tWyJRPEPH)$ZrK4 z9dPJLHBclub;DmXM{7b&o0Dl3(D+45J~}@j zjV5dLh&IsRzBC^i)}p>19Dv9ztq{3~6f)-HL4>6W5MdI4eNM9!aw;$57;;qRwsa(g0tc;7lO~pIfonfOeC87S`+Q;eE0A z4+C5budyG-d9?EbFM8uj(dHeOvaj6{#;zV9;utp1ZtpXC4dvUt;9Z`xSED;sk>=LT z4WPKRLZ%SH2<>BIRo^A;QQ{4$nyq_YeNG&ieCNnx@LPHw^M-{o%~|KO@MFO(Bou zpu*%IaG+V5~%!5njf7*%sJqv5{Nw$X*|wX-|I`TP(t1Jn!w#~~DG zx%=goH@jN)#Ws8sJIW@1XQpd6z>2GaGwFo8Kh*l@j?hb#9Vq$Iy60&E?cjX|V37_3 zO5VHe3-_1GptxQ13-*P~smr<1Pt)Z&?p(szE7(n*+^Kh_dpjN!$8Xkqd)}ks2oAfq z;8eIH6#1~5lcrfi0;m6#d%&+O3;c{H$@9wouz3{T;+Ojv-&%2XR{Vv|bSIYmef+C~#}bV#^0tfj3xI4#o}Sd-ZjJh-t>OreV+o<5dqf8w2SCs`8eTtp|&sjX@&_~;FKjwLvXBTl^_v0z9o)!JsJm%XU zaX0ep;c4{UZ*VUskIRS`B2GvA=ism4iSRU&R};@+zA3NAc~(X z|8qNgEg3N39@9O%zQ$O{C|@SWo8QkwGANnn*!}37%SJ{A5=$N|S2i;K)}9)5 zMA>R=6V_$^%k2R<)@ofT&|){n+vKqp9Z+k?d3KXM)L4%BX*L0fK0mPPbU>dSyS~Zl zB}_u6`Rh$%|35Q&vaIUAhE@F~(a%e&_hW{l$L*)tV-MJvSs8Gmxs`n7Q@M-cY}j4>zkVLMWKW*~-;No@B1fc=5p#lHHEvs>+F zd-cK888G(hG&I^sqQ2$(t@$$vbW{92pTVv-bud>W$h*e3{?WPB@<-<~xFLf_}Mxo~unvAZI_e;RX{&I8YP8hVTfdOEUmL3XR+oScE<@c>*_D`wVEm4OH>hJzlVfJOWC$C&^(wbe*~EY z_qYtG8jU>9`4j3vECg<=o!tn5KTg6)(9{bjLJbpU60X~N#5?t#bz{Zgy!^>1=JtIDY^>9ivNZ>`}R_b z_}Ys9eitPo!oAmE`ILw|-sKeSX(-=i$XEF)X`m#d3zF6B9b)7RF0}>7Vp8KoEcC+m#dYZR{x|FTgbaS<&&$HQw-W42rJBBU8-CwcS?>u-&ALpLD&WI&*r9c11%qj z5d4hq4CTaSbdoC-6=*SQ*|DpTunN)*<*$3rW`Wy-^?nbGOIll(NP6E|0sV~M6{+%9 z0Q56#t^6JNnDDfn>KWZ^&L8g=o>#x(0s3sc2++@*0BEVv0q9jG!DyjEbbs=ZKM6R4 zw2ng%GZb24xKJq448UxcFYwfUelC>!uG-JxIb2V*AAaJy`aT}KzoYN7zeV3CbCk2? zF(2d_8n&uZ`MTi!b9u`*3*HN-uv6mxf`EI+e&hZ~8m+hIrx=B-^+Ty!;2r^?z8D+%<2)Bgc9BcSPEFHA!F5nX~h+bcXH9NqvJL7&$l#>aL z&3+O&=57HI17gvY5AgVxs&5uYao&QZV&$Ty@4wItGl)P2HHQbs}C(WPJB0 zo_D-6#jl;O+&y0?1M_cU5M+CVa5i-(Q^KdJRjWteV9N4PM_aaYIWV7eq-o#xtNdhWjrqx+^bmkb~At!Efihn`+or+z(->oA{)_CUt9Ioa= ziJ^3aR8|h4uW|*xROQ?5FkGU@)*V}*Zhu~vJpKjBk>zE9J9&~k5AyuT=^ znektRJDlfwo|OO0z+Fb%r-*AF(#lT6Z%R^h*{IwXdQP?=K35( z@IJ_v4DCdEw;0*^5UMmF*}d@-Smr#;93*qiF><38Gg0@kjcD9IxN)EOej|_TVUI;U z42=a`P@5vf?RD-&UfW%vD5rkQE`cDW>5xuoNh<*9YMM7 zFBm|B-RCvvN{_kc@);e*u6!Lm&bew;cA)XTwyU=m`>nC2Vj6MwWEo1*@RNDz z3E*Tnr9duI7G5K+8IKjDd^lpe*vx^X^2|idD#+CW=>dA9q`zk(>KuXL9@*>}4;Em3 z%9-#Gd2PMd*ol(K9$75HNI^6ge{Yt{ctg%F;KDSO_9XfE)FP#K&Qd~IpQ^y5Q4z)zVt`Z#0^cUnML!5-ZS_nS^&<4Uri*$IW=t1lb172R zx3zP13ix(qIwO=C-qX22xt?gFh$tMZkGoF;mo2y@08YUUyuCIgSEPCaE^v4dRY>zQ_j;=nG8<$E_3f zLL})~`01_wa<+J}q*3ARC2+IiW*NUIoEAP~NMOZ{(!aR74qWN9lsT3QEW3cr>FtWK zLcQnA`w<^2bKFaWP*_ONg=}*7`mP0LiQI7c0%KK57m`0^Ylh|kE>yv&45IQfhX%%O z3NawKwQD4&&Z|@8#IBpsE3V*l+?oJzPw1FYk~efL@0N}wigb_}FDJA_K`lP=iQUU5 zeP7LGSQ-B-FAVEzAobd^JfK(Ug0UIxE9D^I`&gl5x7E4n3H70jt4eIzaxY>JZwsg2 zIK&t2a&H(GIB?#O!1%R~{Fv3x*kjJ5>3tLD6>*wPwMX(^I=uXhZhvKMt`rE5A`h{URT&= z{k?5IZ0EnJ2U+b@*e?C;)!%;oIs7I2H}UWMWHulP+=OrLR0e6ggLoHc7iGuVoT zc8Gvvw`TKyO!40QaUig^AD!h~L|TAYi@$2cB>q=S(cg{wyIFtJ^%vpK*>XQqL*?tv z^X)PMRV}?ZZ$qB?;$K1SR~>M!cw962>&_*(n6p0os~pueq`zatTM>}2S-zlr6Zo6D zVj8*sYN`Ilnm~N%Za04kZ9S+3_cF{=vB%kMCgC+5Cae_$nCzcR)KSU)c{s`b`O2rE zT_>DCU_mzvcR{ya{5Q0lMXDPK<#Q8FSJDFlM1M#Boq_;pMGs=G=*eHQQvv_!ZWEd- z0+ZJWW6hp%&@c*;93M?RF08dV1{!RL7t1f4=DjMInr{#~e&uw)^IZ>1TTwcWkI9wzWKlf3Wh-sY{4x76w~ z{0z;v9tFs6`m%~7_mfbmtcJb|W>S9SGRO;?e>@9REoTX4|Lm;PVtrJ+%}&=Wg_tz4 zH3|+yx2C&IqUrXCy;{h$qcD5Kc6mFi7JHJDS;*GweJmAEjaZ(XyxC!AFr8XF{aea7 zo~Tv7?`IP-$+HB`))9y@=h{wReh(^qe|9C-n%)Cl3H9K@8zB4&6D>+;|C2u$?LXb^5O+f#|A^HHofUtJ!!CnLJY0w!qNR=N?OTH*okszPy;Up3Wx%qr z(J&(7CuKigrx45>0>g?`+E`O=a#BGrxEyB1Lh*lyGGRA%TI(x} zg0TTyhL@AF`_O~Q0Ww%WFium;3d%s%_+!HWVXQ)E`DQX+5GOmR{;+}@ZHp+=OZl70 zQ_M4gX9`aR&or<2S)|kCJj^$lS;cFBd4-@c^5RaahoB`9KpWn7FvY>jPRnP^x+nO&Oess31tKMWZQO^e>cZB+r%wTxuIrLANgh@KQHzK|O= zhGqp`5=_wC|FZAIJTl6|KwkkonV{C2r_fsbBgu4T=iFNz(jM3ffj~UlEDD9qDj5t5 z<*+g-8JuS={zx9Q2j9mJQ3zPvryh}V^AZfaQ3)JETO9>KKG03${UkNh%1bD@CeM9(iKm19#{D`v3 z^T{iGQ3m49h%BZbF6|ZubWPZ)1_N97(BD8>n)2%7A2gQcMerfeKVG2BHx0@Sz}Gbl z%2Otr2IU7@_b5Mnke#kUg<|fKgNl=!rUs)trIa+h#mk3CAYM<$=g$mtCbI*4@0r&8 zG*B_H$Vz%~#C4t;%G%;_oqefN?Mxj#%g3ZDOo)OvaX=>Vo)X^4$~>>+NaR#csQZq> zwmQ!*^G=&zL!BUS*yt%cGnDm}j=orle<+ig`S{in+dmFtCH9-(LOQ? zgd03}9{wdAxzM1SvsnIN1=F2-@PO$za*q?s$s1TZz!y((UhV{5Fve*PU+TdZ?@N{Q z1YZbkyiB?@h; z2C}oGhdW&II5ion2|63S01@SUQhQe^CI{t!?IqGa&XC&T;&+Bnt;tf}Mb}S@`uTel zg3YR6xk{)?Ux6$sLsgno&=2u2P3Fc-EKEB;qJUQY!;Qd!IoYeqeaz!@j|DGk2^Q=X()ZunvjzqqygA5NK zBirz4=0GC$zH|@W9agS(kOK_TAc~J4MCCb3=dEH0D~e=Zx<_?}iry$=ENFvp*wXnm zD+7TT=)6xm7vzJ4Q#i9TNJvdL-01v%Db=K26w)#+O;=%9G#+EcB{xCzaUI#T_SOAl z1nr*QhW3T-CzD~^q%y{!c%C;$^|`k+z6ac%004S$VwFm#BljMYF1^zoYN?4}yShP$ z&P=1r2{5}Gw1dy7ou%9cPw|?E$U6_X#C03x@kWEo?Z^|!5(cv3Uzd~9cI5?b7C`gu z;A&+Pj<)kMX1bvwWnrLRSTZorN);+MAZ+CKS@nd=>c#CR8T`|mvEe-JyAqR;C;7mj ztSK7vr~t@@^Ay3}>{*(;iciR^*yJ_gyLq)!UKsxtr8p?XvBQ9#ysF%LKnW^0Wl6fv zADuBoYY6IGmU?qg$&uS!z7@KLNflY?_nas#6!s6G<9Me)*?MG2RHq^MoRSVIIe6P& z-0MKI5!QlCn6rV}YJHn`W(RxgCf4_lqgCiL%HEEi`w2iA#Qj{y&-(_SJ5FCT5sSV= zrt=?;WDRQEpV$#Ss*ZFAss*q_@S^d3_iPvoRsStjBw(o9su59@vRB;f?_68thVWw_V-0k`^Yt?x=k?y;J&reO#|S$Sck zk{vT_*fEiairyMJn}N>LN5ZY#qBOTF;Su@k#Ut*j2am2?;QpR&+zQr=yvk{kMVNF${pR&Nzw4hxz8DmfLYYV zOOnM$q_8a?FXtmW6v}OAX2}LG9XjDT3!KxvbOqi=#?>8N{dB_~3_AY;JIJ*cyfg$L zY`iG3){p`>gk@lmV8xV|4EIKT)k<*d*=9(;SS>uYSn)Z`jhknIH5GhS8h3vvz(y6K} z(19n9=j4-01KoJqvGM(>Ejd=fdMn4Z{Rztj0SI)8YkqkzLPre>55b&P3RdM@)oVY=It zuPOpwuo28uIfHKlAEU=Sfz6e?aOhpLS;eyrwBoA+5Zz)>~%RHBrU>yE?~z$2U&d8t~Wtu-n9~cgx1&gpU2XSNRNN^Mo6ko|C`z=P$sDjXALffmT1jTL^T=kA!C2NJ;C{+%TvA3vR^3?^BK#M?KC%4 zm08>W71N5i_G)X_Patcm_pDw_`*`^kFK{HsR}mgp;;kaYnY7VOy_$tBbeV;qmL4sf z$pv1hP`iKve9puJRpUwiZoZ9m+Pxk`_Ze9D6}yX3ZF}~F)19OFm=;#n&QLGUan1nG z6I&nmI`DSl*Y+>`iGivSkkkq2#^~o)tYM60yg2~GD44t?*(p}2;?EfmR?coPpMt14 z8V_eWMjB5xHr()_44&rb&T1`BJWWt*u|%u@e^D5>RU_1j|A1E*D}-vQ8HBKkX9C1= zk{wWo@s`KaQ#&{6rJck|m1F4%HQw6y84Zzw3F^};NN)HEQYuaCD0dO*!~wlONm=7o z;h=Zn;jO`F?qOmI@bKTqZiDonkfOpH1lk?Z2-4NpwKKZ}qJ8a|dFgIzkT=sh+sT;#i4{Du3cb3Wv)!x|!bUuj`2#Vah z2;+XXXs2<|y9;;2+IVWT63ls%r69hB&SLE&8 zw-kHDpw`Loj032Br(IwpS4nd@8&=^`-okqADgvvVOW0XOT+`z}j{A6s8MW~_KSfo# zTNBje_?yF929;Ws9=~M1bhLmu3g-W$LVCyoz(IRQ; zhu^+zzgNj&CW2_0N5mGrPY=3ZA-wR2S7!959yVn(nEFt$fEyzY7iqNM4#Jn@;5?QQ zM;1|NXEMv!RGOQil{^=Vu$EuKursIN&VA6$>>4n z@`jx4i zE=)c;3rtE@*YXliR==LC-i(iPhf9;y%kVvttX`h1UWxC?WHpLk3-K-CcxAGB6}}f5 zi&CS4rQ9YjBO8Y}QXktUttPvCm)(U?AFN2?D?d0jQO{BF$SBO`U{s^Z$-557o4DnN z!cXc;*I3-qv{?sumzL0*{p*f;m)tGZOiU?|Ao1)(&k96fuj1J>zM5ALT zeTacLWG27Sr|4d|({$9qhzTkwFt*K7U>WE9X0@54lIN4LtJP)OOe3mTxl=Jb_NuDE zcz3M$zbM(OmUH-TEnXUSgcl;iL5F1S={;aGz9#DSClBuHVpkq$#)`XIi*)ugR-A7w z`oM&o2{f!lG65YcKHFOKh6y~^T6Djly=YHs)klq_-ssc4sCv)Lw7*GJKI8mB z6{%d{{KmM;oyUy3)OoXLYyIKrSP@mgk?m55nCb#me?HelrDhIqcA%b zfJ*^b%KX@tw3gk-gm7{VgPAAB^1=;~@6#u7DiU)pMb?S*QHE6?-$p%1=e!7$=W8VU z=Qgmv@eV-TGxH<&$0Re;7VEfi@N;&^xehU=xtQJ=R*Y-~6EUx2`B+wnZzd;>rZ$Okon^IjD2o?vW@0ajT@U&K zr%>Bby0DA=s9|izAg$wYry}(5BJ}hk6cB;HUVJ3CCo>~?vHkz@Q{+0KQj@u~X%d?N z2OoMkS4{=M5J{M)+bl6d%5__nb155uVy&Jcsn+z1Y2=BCU*Z+i&-uI>z?1b$j5cojT?m3W4< z&Vhdh0uz~iI+LWI>_=@o2+HkBKCb0px=xEleMy=$PC?joZx82mJZ(((ey20@M)Z@(&4r_BRi zw0KR`<#{ig&5L%hk_*kI$=a3QV+S!_VAfZ4(n#dP3!YPtV@l@xe*CGrAPHLpfAH1E zdXbjfQyFW+^6=wMc>8?g-Z<+5<4)6>fbg4}s4njGg6|tQ@&e(cok`fNSEvJP=vvBn zUD3T=muAKEHqa(1bMGF#dM|=RihI2XOYu%pY2LzGOJlst34Or}U5R&%7y2aLC%t6P z;C;l)cMV?0tHbMfbJc`+!P|J3dZF9#?p0%#7VN^y$GteS6tb}3fEVK6^rJw4)r6O* z;Gm)&!s)?>RNZ|FUs#|eD6zyyu3bd|sXDcW4}K>J$}b6Csk#N;ho0)NxY-W!QDLF? zL0l*ww9rY_p>?H~UgqUyaGsYw=0$gP@FLND%3RgK%L4PV%lop_yd3ggp5XI z;Y2*A)^iO1!v(ZU3k-TLEhr-#&82vO@TwS~*crSC7yl1qX9FKqaqj<3vI{|iCu-2B z5u!wmCfaCHO-z7!z7*wPQ zq1gyr2}o_!sI;Z+*(UYI%7x{n?Em}B*(})J`}zFgvzgzSne&{PXWpKfdFGi}HmfCJ z+ij*wpS%oTxdwVWvn!pXoGEpQ&N6q*Fiw*wd8q}qWCfqU%=um~utBD}H;SZJr!5A@q`Be2hgn}K`n zbZ!C8!x!>ffxNv9$7z$_4otS=?F33qqM>qFbUjZjS!8(ctgA0V1^Ydoxi>SDiKx)V zMydA>>mYrEY>0hNe0U9CYg?o0Jk!<7!}3qhmHw0dB`fH>|7e6BAnlPBR?MBHldK!A zW@R+cBE!UVZLMtcXd68IEj}af(96hctc8_m8-#)S{H#>RBONJ{K(iu6ln^qsX3Ve6 z*8<;V!HKRajfR>^RL8_1%Pe%U|4l8QE`6A_@w;lwkQfCLgSWF)nx&(kl2XO&H&ttP zj?p9E(l$I-m4vW7hQGQsLi2x9R`aYplneNbZed+zEr2vsutpA{6z%mq>nrjBcM4W` zjj9wQuZXdH$t~1S?;Wy`4QIB%8BW$OfsNQ76fQs0vNl1+Hy$#AX=NN^qqE82THCoQ z$sa#K&!68C8-pjA1HB25N;+bV9mo8tJGe}49?U2{qpjbHEE4`Lf7qHqBnaz3*p==G zH-Io$(DOS*aUe2mprvPx9=TKV&mqX`=-JMQBErG6i6S24SsQ8?N8S%sWm-c-PN%Pr zOsBi|kQieW3r?}FmFsSj|5dVZLf#&X?v;ChE*p%l=I#GevglRjG(UisYNWB=7EWRW zg8^DKK{R83+QVB2iaqKx~X{vd|Xt-ca|7tY49V`Abh!CvlwUVd8H;$pQmgVmCSWbe4 z*o*RhO^Wh+lRTM8ti?23kYYJxJ^C>{7w>+nkN}neVW&!e!!>;JH^s0%>PwyozDUw8 z8`9ar;f?qfjFJyOU}-$Y4{0;j%kr_tWPN3FV#6)6Z;0qpBz)?lt#DHyEA5g|S;Wki zG!i4my8<5JUH#v`%)9#gcp2eaB~u3czp&MG8T)=nxa9c1S&d!bpr57!WmsG5c#99- z+rl-rnt6op`A6^pt2a;8xKvWG;tr%EHt;-_b+1k1BUu5ao|lr9)Z+H#pFYjYG=(9; zO5%E~M=861W7)a~F0t$o$sq;lR?7d$yWVtLutty;Wm>T#G5Z2)$yfowc#T?Q=#%T~ zo1P^(`o#fDlnQKBy7f69XB|hs=vp#Fu{O>6MAFlxUvv_Q6ORw3T8C962qeY4Qmi+W zSFe6CG3J$Q{Y-g9II0x$a#}x7UZ;f2J+OIY14T{co{&tvVM8f`u^o(hGNX&$V{J>4 zLP4X!e}%A2$yvYW1!I&nI}~GBOX)wMO|wNE98%sJtx+eV(O7#_P1zRoujk7iwccqx zJrKgulu5x;ir~MuWVXVTct1@ROFk8YoRv;Yvth8)Xp|amy|Yxw(d$2z?r=pioHT4S zKx_KGja+coMjW--W}_syDzbKpwH5+!mFu)(UddL2c)^1USQfFFVU7dznfFefX4MfW z`bZvet@0}_mLJqB1GVd zm1|_M?Lg_&8mma@(Nt}N2+1^*wc@Jp=ue~!)cg)Rg$e8gtBcxx#BO73#4?7-pi*;6 zmP@Cq1xKsj8qQGkkywsk^XPZ7?V*w#kZ=8iL=?_u2jL_9WpVaFwR>s%oy2dd$NYV; zX0x^CcXY4Q)zGlnW1WW`b7#hfZg1+`a2?IwJRhETSw~-?BpRh-EXN+d!@Y5g-gM^b z6oR%XWUYCKUiBiE&x!0!MeyD!En8)50?B(ivUYh^3U*6;D8pT8a$Ic=SwZJ-0;!d|E`qWLC`k(%3{rn#BV0K+0*_LTL zy?GB6OX}Sy{GR5!q(?~%G|*ox;&W=Un91pd%Bl3#^zgEmbG7_YN;KEoyFxq`c&wW~ za5$ds;^Ud8Kf2)~>wdm>u}uqH0cm8KG%l-8K@>{Y&t1b+Q+RR%t!VPyF5!$Ja<83W zysyMN+lCtO4vDd$gI*#3bn72e2X`uois%^x_$kPJ<)YRs3rz+--t6KJw7_#9%l((w z0J&Ru-C>n7WrAOF={V`%&;m*8@6rV|9RP~RW;!=BD^8Djs0YqCz%9=uuVlS7*?M*w zuTjFWsrB;5`l*Pd!h1wYx0XmGMVl22QEp0`s6KE>p}6~0l|u?(D9MF&d6t7g_cA$x z>XhaPSI25tZ>m~m!YuJhX}Wjwk}P9L>B%5hlR`y&r%{{7t& z^=<|47FwzCceAaNY!8w1oxDp}Dp^jovkaLkvhCsK5u0&!WPiSO{OkQ$ud=q=@9vTB z4v_CI`uFcHSDE(Pe0Nm& zZewloPT6gx(^PfpC(`v$BR*hF>{6W)LoY|BT3=`Jv?r`a0#4LHR*fruDTo;1`4Ilt zWl_FrCP722JE8)oPiKje;p7D(bllL3P$z;0QasmS2Lf9yhVu)kpZp8Clj@ zrs>_>KiZf=?|eiSIh)uyldIN-hsLI`B_l&9liD4;e<`(WULrf$hqvhFVhg9YLf)R< z=ns5(dXsO{{9hMNV~f4g=8~}Az+aU`H@uJFXJS7{(p{Hcw1;A!n zx6MZxQ2U!=&u9H@R5&NrWvKRPQ>Q6GoonH&2))2QA%ND|AL!SlpPyx&%aX&)v-&+s zE!iHDog*dx(+8MygiwWb#e+)Po@d>E7gsQ6vsQq2p7m`H3{X{>#|72~0s*Yzd{-2=v${0Ep}?_Z=pN2sZNE)LTgGc zBReayC~8V)pC?@**8}7+*ziue*`CwtnJAy5!I4dZ)05tXVw!nqs`c`C*mx_OQOOP0 zi8Xi3r2a7OrTM=CO*v|?M*L<;G|m6F(e|KHtkguCV5oG!rF@`j>SVr{VSNfaNJ$l5 z6;&Q^6;xsU5kRU-qsa|dd93bFsRn$g#5yL3fLR1w>9N}6ahkPP96p_4 z{et%{>jEZ*-x|e08J%jg{DW~UH6Svp=_)e@>K-*bR)=0%z$dxumI(wx3ZBdwejrJ$ z6EPMIRuTNkd{wfw9B-5Dpg!xlN^Dg^w%sJol)|U?S_BWbs(rBhil_A6Prdbp3q^7YW zLlc#j&@HR^V3himsC8JLCnWEo?oheqHHOqAYDVhgw@Ey5^Qtr+Il8v?jBN8>bZQ$u z1E{J?JmNbw{SNpj+mY)&BxqvQL_WSyYP3};-MZNG~K>lFO_I z(bLlpq_cD@e$tE|fq=O#OGcYm3a~oHDx`?C^3NaFD zG&mfPAH^1qPQ#N{krhl)cNY<}8cQ0%n|YTCJ)fMG%A8=me9~T@=VIz1)zikw!txgR z*dk|6UeGCb+&Vm~&ptE144E+kL#-{h(xuC{tI;iz&yN-&91XypqX%MJ5 z+Qz~<-R!r#7purSVQC{DdRVf$0m9Zfj#I)#IUh|fO0bYL-J5E;ZJP4=MZ}_RaAfImm_A> z#(z~EKS(DAtF!DZl?IOaZo}5mEx{BK#T^qTv4y7+Cz{ro*44s3_M7b3nPK+FqRK3P z_yazU4w$N0THs)bsufw1qq33U{?7A%zNUJ}3~SXD3glYNjDs|?`PQ=AR4+Q;`YAq_ zb%HW757QKZb+IA&P8v7p3>kQqw~FtGAM0+hCUTPNR_4=wsnys`Rj`hq^QFm#+NS z&$X@^_h5Qu+)^-b6iUF-yBS--4+ zHzN8<6_dAcv#dYd%$wLj=u<(~tMf_JKrdsfTA-faq1c#d&4DkxlV=U*OA1uua~Wg% z^E+P+B-EqA_+U~?F_CV2C%k`zDUEru_R^pEyDp2D8TY-;_T`(U(`?Bh!}?=66wz=0 zh!aWgJ$;Dorl4|db=EZuOi7R55gVBPBw3MZV}aZj;@70}X(@fWV??J!6@Q99T`JWh zQo#=99Mb%0Fz!KAW@tAw;fz3Z#atP@iI{1=JFVVKMI{P;3DuJ6V(0E9X<;JF9L#z5 z=-H%>oU`;=_z9D6ve+A(wr`B*?|5qlIF!GZ~a=*pj7HeB8H@a24pjbZ6A zPfD6~DhhY~X1fW<0g^&%<4lf}Ezi2fq4~E$cq+phl2+wZj}>7pKzcQ@A-u!Q=9gz> zFiNv?!8xk+M`@HKz96TKVS=|Y9w1W{ywadjA{_*Iz6#O(^WVmDovm^$r#@o2W)SVq zH*#u!zP}xnel11vI|;(lCqS*l+@I5WG~$^oBWATVd92}ymXKb|V= zE3|&g`U8R#!5-n5^~^jNB+Q1Rcw`4L`Ab^y%0}iZ)Yg3k5|UZ#wahP7PS$HS(k3Ni z!L(%*URIdtQS|9U;j_}yAS^}0Wu!AH6ige_^C@*%q?}%n@1*%kYuz~4E*w^#>S%>Z zB2soE819#iEk3_;Y|f_$Fq5rH(P9CBci+@$9`kH;=w4>+Qc*VuFWt$Xe!EZVcrvpfnE){tnoJ|<{83oJwMsnF@o;5Gv&5ge`T`Ann~FN zE7MteIzcL}X^4MjWp+@d*=Ulb4YM-WQ0m3eC3)6gZxN4z;D%f$oluiZEQ6JW9&5OW zjrOSpvl6xO5`xXjYNM%C0gusC1@H|rE2r?5P#u6pSEET30<6`YV(d`#%T=KlvKUkc zb8mQ$+)8Q7Dg({@2+=qXquvQlNag~9rcUY1tpAYu+9c`s1Sh0hKVT>^RnmhK3XRHa zQ>EUh%momKp1v{aE@teC5fZQ zSkoekh)39DVpYFev|uqK#r_Iv{O%Lhb3~W%y&=V0H6458<^U|AuN2O5&6M1kBu4_} zU>>X0rFhH5UTCgj9JYuGJ%CtpHV`v1pYa^c6Eo0vs)4R6U-EE^*>D_dgem)iwJp}< zOsVD#E_$BFd!;e)U3V8Ubl|tV9K;U2n4a%&z!F~9nOAHEpwGgxP!l1yN z1Spl(2bZ-g!$D*0Q->@rILgd{TP~w18h& zMD00g^_J3QFp3=(8}v_%!qSYeL@^HCgef9oRqVlJEA|{3P(@{5Dx!yy*nc|7b|KCw zj6L=s{?Z*@YhqfQRihY*5e#x{Z1>4m%CEQEqV(QvQy0kR!;9}n7V&;7{0OdXPi=K? z2K7V%VK;rlI$U$$NcW_24|XMpe0ppOvgWHqGv_9sX>%lt zvi8e7s>uYKP)0zwc&3#EG9>*7a`@5Jj><#kxR zBxl-dosxN@VRKSvkP9ellZ}8ZTA`q0JR?iHOyrHga><}O^>kY%cLlkGjYfbGA}T~3 z_|?Sx5Q%L+vRNMUn}S~`kjr2BCL2;~^J5__Pf0oMwMqobPp}+$E3gM7@m+gpz&C_;q&a^vHg;E%LlIBH3mToLi0tjxDPrFzW zau@-|&M23nJwuC*-s*6yVoPu1SK&Mv6#Ozc6kr)L$}3W%9E%{k1+uIEWaA&J80o}d zRHl&D5q>?q-ZQnfw)V`oGtB+1*6^hL!HiPn6HK}BOgQGpUN>csDMMA@0%W*i)!3Z^ zB_bKmr2^C|A@?Sgr}%4uG=iA_-_P5_f+^3po=7y0=5z)tlZ!jGHDdBX4?BwwYWhti z2|EkKj+y}>9C8R2Q`%a}J7YT$Ik-9-)S8tyQ~aIA0W=`v@cPcz$c_8*NDmt|{fM)G0(ZPj(L z=`0Dt%wjF;L9CCVFEhxjU%^R`GB~N<}s~HgW?7&t|(wy&Xr-YRxN$neAA4 zt0ptU6m7%7KXB4lIixx9~d>PeUM~^61{Zsl} zt@-NJ=Oo!$(``cPpz8hfKMZXBTheHtdB9Kt>4>V@viJ*A)xGc`W^QIsMg%CyrNT^JshpC8S$NhLp>Qzy68X-@ z{~oU3QEOhBt~GzcfJ2#J9=+FiPH1c=E05)qmHt{3ehd0UzCj|ZA;^wz8PCa}!xY2V zMvU;!KDlvN?U@i<*KTUK_zA50lj9F$|>+Ef1{$=)p_kU8oxixK#o zI#_&Yu~v^=kXG#9xBJEvAA0LD^{ZMIx%N1o`coWf=i$Hy;o0JJhQGj37HY$t!XIuy7xP^t zWj`s3ssfJ=l_gNt3d5h_r(Zm!`NfW|*&bfWEBWt)>m`$xWJ9hV*&{E81#d;JaiRo4krFK7m{Ix{E7W?5}GkMs1`NNtyesG1H>|VGvDw zpR7VN)L#Vwt$DC{_RChyS4UqYTx)uTxZ3MY)wSwmtz!ynx6S38^hs)YV=WPK5Gqe- z%~(fn)$|z^Nsc#GOZVxFnz-Hp#ILPvZPjYh~1@i<0w7nZzp|)jR%bK7mc{%fFJMzM?qx-id(o8Hap3fYB8C@=om88*F}K)e{kYpDfA~_9~yz+Y)Wo zC^IA6oOMgEJW+4EMHJPJO2~da@@;MXKN)Pz+T-f@I}Ly%fYd7)N&R}IoC(V~CV%v- zQN71m)R?kzKyYlL+;-K-ka;pZmk;-6_s$>o7mTXqHNF2!MZZ!`JjN;5qCR=cuS=^d*|lRBj7Y0W7$QsH5-*kK5q=FA`d>~IG<-84d{a^y0XPvrPR1-4ZkJM8Tixlq1HUv z$vwqE=hZaW;z~HL%MgRrEll9UX!ilRMFIhX5`g`|l+~i)dDt#CX*ExYfR4xut8*%s zA^aqm(f+>c>@Q&{SH;&vN;z_xMt3quolaxtO=GLJv=*4E$rhE`@>Z;5-5EL=A+5W7>vsJaKn@ajnJfFg&5g`u8j& zJ@05n;8{Ck?_otuawgf5<`!DZ`Zo#u(N-hQeo0NP4DOn3RNr=o>FngyylulL~ z?fQ2q%Qv1;N|l0BFB$jV6S`v-XqKgbKzWOCkLna%h5`S;l!_@2-oYyOS$1$ z^>AHwuNgi>5>c2g<*2xbwd!)qNKlUav%1$;${;4|k?Uk*CoI;t$V+%1(wLORFN<*- zyTiXi8%&J>;d_Yj8zs~Jm~ui~Jd7NGfGOr=_gv4P@D#qchp=dPoS+^-r6A^uL&ldm zemS|!k+QMEk;AX+d)yE9Oob!=huD|km+&7Ijs^UV@H@1r!m*pUy9qZYlsWF(T;aI( zN8D4!ujR)Tj`7b{IG%^zY-l{hZ#2IWXnHnOIF|4$d8o|swXy9Y3pZEaNwW z-%)73fcr~+-{BYdCB~xox%idw8^>=3zi;vTrl-s?_tzDUa(*lLJ;U!ce*eX9dv%%P zxtFkq@jP}g_$_^!dm0SVHmS@}J+90#47{j`bgr#%RFKXm*KkjRjtvdcRf`+t_daoR z)>SzC{0?8_4u@!kqn%&A!|j+zd>`&x{HEYHhqUxPRpIz4=@0XBVAsltT`MtYH8^F+ zl~-!1S6zKg+R$sSOTYex8#8XYX_)#qe0b)~w~Wa8(!;Il-)*+Y}Q-E;4x%l_r(7ku@r_uY4YVbKHpD=ryXGIG@DQKe;L%GDngv%+0Dw(7xgBOuh+k9+rNe+I-J0H7J9~;l#WcAmnjdHr9qqqyhdGb^nVdx9| z85kYZkT%U4ZhwoTLROj$&Dni{j~ZNWNl9Q;i`y)_th3E3MN_Rl8(enAgZ=%6UNv{; zoT0j+Q`~KIZfu5!n{j2%cq+`!dDJ`?o`+-4e>t(irt0U@cwJwShT#7zk!)A6dT_?~V|$cFFh z)lweK#p4WB=E5SbH7v$jG!k(mlFt2nkyJMJeiUj5rw z%-TNl!zgE7xgkiFf8c`2mEcbb=hap9iz#vQhJO8T5 zc7)|^!W3ufXlkl1VzaB^3VlT`!pnB)O)A;^I-Jwy;bg%SsZ7Y-oJYyM*{)aTE?%U5 z?X~`aduc;11)iTWKgj6{k0+sYihotTp&W7hoSQg{R;2l+tFCx5(<|%4SJ}YimR3{) zJl2BRbMzXW9SX+q^-ZZ0cIhn?sbYo7MF(=EIlWok&wSII*w!ZJ zxTfa8nu%=fU0|3SY<+XE6q@9Q0xpsp2T%e?7(fbWi+p05HxXT@%53-JD zljhE8lWxM7sjoID2 zwK)i`UB#j_x3x74VP%?G_k@Q3-kC6`?cNrt+gutGr+!dZt;Mfa-T9ZdLmMYG?h^fUos}@k}%mc9qZYmgN9Oy?@F;} zf({B_6kbVFl#HH?=)EQKb?lv_TGFKlHynqt)+@lL-I>9qjG@VEQJ;JFX?Moju`cV+ z^e;>egAZj{A4*rVVH?ry6Y3A$Bn2N(45Qf}JZIpIc--J=F4q#2{EPBa~Y z6SAxhu=W}{{>1zik4Fa2=ujVagU)o_&~i~(rd4`R5TTkK zKw+PHsaGk)R0v}3-;|qBtNn(0uLbCM)Pr>ynO6^c#v3hZw zf{NT|1=U9i6zmmpb6Mb^%}o5I&FAa%Ovi$CQWgWEL(`~nazTCjoHiPdCD{-Q{%1sr z56qw=sMIf}F8>V9dsBmD&KbNLEKMHQaK>yEzG7I2FT{)=qNd7V_W8}jW$sYJyQ@dp zN)Kh=)0Lw1a63qAuFTS!C$MeLl49j8NgbyvlT(Av37mn}0?$D1Ol3+cEeyjOJeU*m zFyIw~-HIA-b#$nlMKGCROh+PH5L}#D${Z@mSnLc9 z$mJblh0~kKO@6*RDFD*uVbj}VeU*abbI^xMu|C0>i0sg>SJ+0BX&&o84>6*Cc=POt z9^pX9TrwIOn8#_$@FzQ1s2}JD_Aq8;_k<{-+2L1DIc$}_Y{oCWrWcC|5r>^?M4ZVi zlH`AcIg&SIYX~a}Q-hB?r?J-R8>Y9q#J%a#EMs@5cjyR_F=f4^RBWZjEXPF#uF*yr#at2Zkzs)b!vb^8}|8}{}zE1Pal)S7Lq z8+n&buV>A8VrFf?e7E>45K9}3w&d~snU6$IP97r?Y$pc9efulQk8(V zmP51Aq%QAL-kW*p8x31}{vl7^)EV`~`+dW`nsTor_i8h$pfY?yMCPS4!%y;YKHYPY zt=KU0rKtCx;VPPe8GYazWsaX+<#xDW)ZaOra`V-0$KP;=;y)?P?f8JO&%wKK^9cJZ zZY|HZU*mR69b`3XD#Ieu`Jn~lz%L?h8|2Qw-SfbO8Te~ zBXwTW{4&;z^eZUS?UB-RX#VvA4Fx6INU7lH@6$|2N{wdbDNr^*G2c%m8)+)|h19o5 zqi@p4CZ2ucN3IsiWtl9Xjz2<1$-v8N>HJo z2L+XYJmbcpBeW{u=+Xku@|NfeCD8i{_GZs8YBtpuUB^Lml1&gxCFqzFB*q|PHfpii zW51Uvfxn<~BXO@vFxy77(uw-NMWET{O`LwKt!DI7A{aG0^N$4srJvDlKeL=vmpYW!?6WBKGNlapjOd7oJ|wnjaSnK7*^nU%OwV4+T1gUIXkg4Lkh#aN5Fb{v zVlSNDP%S}97fgFCAh}9%9}X6{W!5mYe-vR1VS$8*j2|4jO_Gt-bZ<1uDez53IR+ZK zjdHerPZ;HCsEL)Qdo$|ljq+RSZNk7Tpb!V%CNZ*&@?2wap0T*VR7z#G(wtna-muQt ztysK!8S$yBx3FntJR>~jfx&yc4BnJV_M-W&$P6zzq1JcO=3Zy>ScGxsUqGs)XnUpu6hsq%64mq9MX;6XtbMA+$iZ ziestuP*xRL;>ro3_vAjTZ8$7JN{ldrQa5FVs13i>Z;M8qY8D%ACu^djC*hF2lFiJ_ z`r`6oTGI`LoDqf8MC!nWhO6xCn(vFSKk-Hc4!v<3X_QWgbV&sR~zPi1i-gr5r|JQ%5oORG{UFC#D9uzy63d>=x=(CrcxQKk-fb zwftjPF*#x#BFKJiKCh{-K%YuP%xPwWg?{4uo>(enx9@`W+;vLokuR|(MGrPMF<3IT zULU>GcPuWSn6(G$jmha^t26yFy88H()Sj14mnWw-eABG$B+3oj6MQ%8jTaogdG(w; z)gP9`t1e1wKFG#8Gs^u9)x1|4=B#|wn;PEmbLOa5^(1fDu#X_l zYlNR-=He~v`P7@%^U-#sP3iG^HXu(deZA+UL5ov*URymr#Q{gda<-I>9gaE058*9D z>f&qw2Y;%kasvHc=3ZGZW;U=8z|kMhQOTM1LQY3j@vELDY!JD`bmy6k1!iqJ(HD6y z*5RZD$2oBd&9Rv|V^ftGym@jGwcbb%I&0}J zW#(6x)Mt(@^)3fi@S8V7Z%h*!8K?x)1Y|a^1y)NMW*0ISGEoiHA!e4$ReFNsg6ym(Qp#!oJHd$eZ3+ z=)kTSmhsH@bAEsH9GVhr>DC+563=v*N2yeScUJZYS2+#lT}Cg)tWeH`)f<(GNKzb3 z^U!HZB_xL2P*qAg3yiU)z$r!^<%pdYcP5|Z{%+HqMQEV_IT)QKAeZpjg$U(C&1+;2 zZ)MJYn)AAR(wcP87|dAQFMg6z`37fviZUl)zZXVU?y*-hZjS} zyEMi|JZwf%k>mm&9}EpkJ1K&N4ObU;G;m$~vLDGOAduJdQz0Gr=!q2E0x}_|f73)? zfOPfzj+e3;zBl*-IW0$ETF=vzLilT>Ld^~RQcd<7K@o+`K}Mhjce0skw%U^q^uLKf z?{+|Z2Fa-$CSpc_rNOA)m%zfU5l9z)+-H6&P0PLAV5oENV7Xb_*E)iswsEJ?*kaTi zHr`fJfU??+%7^icNDRg^9{JnYX((M-5tSOTBj0Bh9@WZYKlpXk`DkN&3bhY^H0%a;B+7CA=bQm;Dp;I8FVB#GBJ*tpsJ3Xe*PS7HS zxD#@or{*Oz97)I@hg zYfKHU`8Tq_I!8rB4UsDZ+=qP={QG_5wB{pkN;NZEN9=!7w4Asb%m3~X650C3DvF48 zW#&CG^~0q7munnOM&nS%p)aoBb+$=rPWf9=`|vvIFgEJFX?hZU>cFIn*z}_)Za~1@ zEr~lC{^Fc(^tQr%k& zH%s~35Zz1~VlB;ad-3d3T0kcjm5LS+dFwT;F${c+aj&9wg`G4|jb=Y_-Rh21?S+m8QEj9|=X=crFanZ2aCT@mV zvjbOkF4DOt8+l}RSdQug-jLqiOv>pvdX7T`>!x>7JyTMR!N^3hE?!i)+EC2qz_B$Q z{pp930`|s|ai`5#hdq&b3 z7^gK4<1!6elE0D~$I+}o`gx|E65Bg_y7&vEO!JRd8x3PKO zYcz78;Dnkeby!|zX=G6rI+$C0<1mb;BKxj2+hUbBULV6kx;7VE4TH^^Rj6(?T}g`V zmU@$*^Au;XWMWpG+SisES<4ovch=ncq7{f@uaao*5Uc}9@Rozbyh6qN9?)#;L{)8w z_b#jtR}y!nG)MP#CX6yF%X+bVsbMfpOd5xry_k$K&1~5tt?dm4b15)ujkLo9sR?N3 zHFDUIz8>v7^ntsukeBpDoPm8C1n6tc zEyW*F84dRqGuEs)cOoIuvZ#(PLP!>`+*`xfApj#uHf%H-vV+ga!~{MaX3s9Vq!fYA z%796f3w$yoMK@>xH{~RH*go=UPh{jEiPm)ATcU}nW;UcG)~lHxGFF7|6B%1r>KzSJ z>$K);>lqUK^C%QCA1&DTQ{hTBU6N6A!aLd=pP4g06^&JF7?Zqr<{Iu@9C}p}aZN`( zJ5K%r-hSCW=5(tJM75Dw(-36}|=i$Vu)U;ivKN&bC{s zy1pa)K!+se6!o5wBt>Mh+LqXvljA}q+JH3fm+C9h8=3-LGDwIpw}VBUn!P#uWzM3X zpvPOs?Ad*SrV_~J&ENzUm=nA?c7OSER*k%)ZM;!3{hY{&a=DPZ&)Z*g4~~8; zkwHmRRRRYQXM*Klli@aTrZn*L6c6hOjS>4q+AXicl$vaq!a%u>QDacqg7B#b%ye&+ zy0GyynuGuKf?{^yCs3D8+wQHoWj1e~xBQ!Sll@3PLp(pQ%7~6k9ix0o?BK%04 zk@OGMw~b;OFW5!`trCW7nr3d-Un#f5#Q}vb4YzqnM3=^8*n@D$348~J~b!-VbXht zL~A%|*6v~{VQ}r?Go2$k@f2!Ib^~9Naw|{sI+0C^(6IO4014^4I9NDnM5`_O=i{bJ zwcNK~ynH}2AX5ldJPkCExJ83rZ#!C-6q882WR|}?h|o($><5v1G3>-&{p{nEzU?bA zFr}}2eVRWL;BA~+UwlMc^U8n1qtF$Cn_d8$&q;qp3A5^&6UqPRD3y&{t9HF5O|!oE z5WS(Cp!5H9NB=>X;ttcj6GC{9DT+C8t1N4{BT==GriQEoqTTeS#GuK@UC=ZYi`z(f zqc7+jO{oXJljxZ^)jG^#xLMnR2eMOwTa?87k1NW3LH+wA!Km3)ZzOO}(>SUgZH@?Q zUwRF~G9YPztLamNGq@N=GjeGb`SzKdZVAejSV~ezoEfgBK^LQ09r$3UXgJk}v!#VQ z5!V>Zsaq5rPh29kU)t6HWsJarHtjmaI~&%8G=CS*O15QWvwUeW@j>nJh$MMu8=RFP zJWb>SihY!LM3EU90dnHuytZa`2>N~}O@#b2h|%_B)vaf{jE0=lirt(jP8)tJR*f(I>4v6ZD;oJ@V)Yqnj_j`;ng_@gJUmn zJYZcJq6>2to?wfN*+#ATCc!vIvskcwZrM0yqfaLVsgfa7R)s<^WVo78NE2md0eePy|Z`9H2+Mn+KW6$m)NJ2#u+|Z zj9OM8HGeAv5*j&vw38lYp+t?)>53|!X!^I@3|;De@QFn9>yQ(b+?paA7jnLOH5Iwu z7@l-iWBZulQsZ60_^Su5q(tRGKe`J8EFS?4V&3oRYH(LrO_;5NLxvjT!)ql-)sJWUqS3cxDIz@f$E3gURQMG8_^S5}|KKM{j<<9P z`$8&Ddt&(2pCR?2)V`KDcF1$YQGHCfn68q759i}Xt7e6_;-2|5{4F|e?=184>EUNZ zM!D$H0*#FR-emd&B6{63!|yQ}vrBX#N%v;5l^vc%Kj0k{UauNsicuKeEeQ7h5|?Ek z-M-Q||9_2yI%hyDTBTFA+ZibMB8G@P%vOsJQ|5jNzmyLh_0@`Wu7fW-@wz8ad z^I{UGytt6T{Jni3cxS?~6V#Dp=M@+;S@Ku2F%4p?FUl8|y7q|*K=DOQFNOx!zV*-S zx_W}7M_Hal<7l|nTr@#@Ju&!T;utzDU+;}AXE*{Rd%-BqpxtCE8|l579Db|iYuwbw z##`Q)*6?7iN*r-e9dTbFE09KQuTuF%jVg4x8da9`HJ>HYC8Ogt%bUlN)rI27;*2wH zS=z~LKu$a<>ysyp!uX209{ujpPlMAsIjAG+N!o9mwVS8PA)bh|gD>FG3MU5D_nKX2 zKGM&pH2gYTE>k9^xv4!r4~{>_^|DL1>uuNd{6z6SmA1ydX>6<1JSQT_g)zaDGV6%c z(>^W`(PfvFooU8v=8CD)^=Ko9?;xs28#I45V2=zh4CHJ$9p(;Zg-#=K?s>7_-;ya* z%NHu78yqZKrtojTcKqGS_q)pX<+$$)%6GByy)W*Yt9%=jZ)V*0TIKs4<$Fck*P(ou zD&JG2l}>7;D2-@Mj}t<^KMtr}{oOe64cOoWvM2ET?om*+G5{_Wo&^-sKon{2epuC;8p|9?FsF5|Oy;*iqEtA#9R>@?0=mVDFdyZ?(Wr@`9oV%Ya9JBQeBp# zk)Y>!{VYsY`s`;P)&fhQ9RA%qG7lmfEr8$(8pA+kIOloTxO6r<)aHBiO(?oX7dfp0 zRwLNor|Qi}_-$lutCV@2_vY#KIUV)LRC+XveFG)c9W_MEJ z6`%F3AleAuGXCD`dz`7J97vTe^hser6LVDW!tf(t z{p<{F!#vV*nf^{nOezUf$;5yiky2dt2fs^vG{Jhl=Y1qBb_2cN4$FL>(_UARLHT_g z`@M)Ozmu__s(+>WH~Q2FSerH(StwDGBQ_JJd6!mku3iT4=|&=JA*(^0(OIJ$D}XZ< zBj)O){SxMIyrNcQ7XY;8zCH3HRv|Y05f|%6z~C1Yg{a*nyi2{jxQvZ9DVvK=a;MLK z(Hqoq5k`wD;zLrza!0yMqathpvo0kEFwE=pbF8`!g;8cri+&c2+89muQ7!Nm70w)+ z9BgPYYg3b2@}oJO<^b-t)t>qbdCpwbAk^L|MEn|&f?`yi zOK!R3;C3mA@v=mKbuA0&kO_o$DZ-}e4-o871glNcTb+|cyQ}t;(!`!G1#DN0Yapk+ z{*>x|IA&Oz#_nc#E#Vx_F^312CUe~-mHPanT2p{#qXnFNAa)8ok3}0Y$CNlp4&0AT zHjgH?V7Mfw6M2QCzsI>uuJ7DQMud>G4JX97{DIRBJ5(O1kKu zi?IupYv0Xk-+r#s&aQ0W7iqp@A$K3laDP zlEd?OL_`YT&U4Pe@Yfl8sq)g_%HYzN;vGguM|XrQ1wV|jPI}rIc2~P!<+8PS|B5+! zWH>7kJj<=c{zs)UwR|51Dy?Y@>8aPxE@I-2Z*XcR3W~AuJDox8<@IWie-0-!)+uR6 zkK8=SF)J*r8lpOjzB&s#s(KF4)_tMAF=T~Xk6fv(|1(caOPG?ZUrfUF$PFuU^~g4lqpHG1T3Uzr{$_T8gLs(d$lhs{9CtRY!6 z9@`V857oj4h4FOnJCRe{LjyBOY4}yzWoY1VfjO`8_{fWEqiC;%at!ujrTUXH=I?Q#M^OX!kC5SByN${Y_Dn!_u7Sfi92fgZdaX ze2)dkDdo^_=C`0vg)Uc0`55aFnQ5TadzIwto|P~)uWKFQM5+TMvAFq+C`1p!NqbMc`WHD=Von%|T&+(j4?H zP+Eh&hn2>lZ-&wq^i3wUzHitnf+KAe!TXeoU_HswBd7?@R)D>lDGJ<(4M$KL1znA8a6ts9dcko???!_w(!uDUgr3TL=U;P@+kj8 zu5EF&9VD$R`W#xnn^GBuGW?h@-}wY!c>Xvo!t zQ*g78I0<@(q=a0S1St}|anuL0Nt^=F{pVe5@PMH4Dk!OGI5TpjO2p0sEp)E5dT81f;cJ!*{LXrp>|iPgoa!dINKBn59qWa zF-3wDiMlwN1+q!Zi=lScd{P6Z zp>~&FLPM^#I9o>uFE)X$yS@svS%MUaEpfCJWRutyL+!5Z5=zs>S*J+s0eKXOy%MBI zw8YT?kXsX0fwn3V*%HLRkSjNi@<4Vf3Sy|; zRVbk$R|(E6MWPCHRFSBbAVtCxM^iv{D(XOXDrQM&$TbgVnPTTc(1^RGP!~y%BH@dp zWgt5h%Rx3fS4n8d<;O`^^^RB=*(CBn zc18*$G~_D8X;JK~0KNUwO8lxMNRgt#grIochyN~$TbV6RFPN!TBz8$P=XYR zMRDW<*{N6-L+!5R5*l)?!a1yXu@3Z}BC%0|6p2l7v>9ZR*b+nSuB{Tvz>Bj^k=O}p zx<}Z#OM(=MJ#n-bWRqx#p?22+2@SbAa5k!p90$!%CDJ89ibQuDort58G1Ts|1ch9^ zI6D=I2&k??QgI;`iQ*m9Ps|CjQ;{4)?XDCF4Y^WrHr^urMF!~BH0iZ6B}kJDU)9%U>KL%c$G)1Bm^s`JEiYg>Xk*JEJYLJ}@PYkuYrbuYWRfls@Rjv7;Dz{{0 zfdnZM3*%@J$R^>7p?23Y2@ScH<8&(#Wi4pH{gRP&5~N6MjH68;Y2tLwAQn5w$QB7j zuEM#XM3fz%FBFNL5~QNBo@TcLXe$`MKRRw@=0jOwG1a+WyB9!s7S1pAVp$b9Bl;IBsRrRyKA$A zB3I#*s1n%@`pIZX#SRHlBzDHpE|5)PPYkuY_DU#n6;79`;D^SFy7X^esi=lmsafkvO^lva6P3FtwP_c9#m5MY_Z@Hu* zU4j&ej5x{!Nu8u~2H6!nTS6Ilaq<+2LeTFjghYu1spzF~Q~|P6Q3bLqc(sIvTppZR zik-7S3*16to&+fp^W$g%$R@E6WRqAVp~zJ@RVo#$Kp!d+ehE?}*2d8~kj>7GG1Ttb zB%w52oV}`QZ3A6jDXG{lL5jqVINAxaQ?UzVr(%zU(sXgURS(_)`h)7V4oi?C(HTd_ zL3Rc2ilKH_w}c`#>=vQtqJL+!3A2@Scb zaWWN&I?z|QODbkbkRmZJj^=}G5(_|fMixpaauv>2m67G3@?QvvRT88~_~U3T$j-<* zke!i@5{g`f)1gwa74()Ou}y*$iS2Q;17xRSC&*64E(t}h!dazKaR7AxAEiV(BuJ4s z97mlXyJ{T=l@r?T>XJ~zW}I$S!7b2uMWR=N6p6k#It8*b5&?}-BrZrO1Md)IaMjpT zKywv|RFF*~EsoMbc1AK{sNIz*p)_5bWL3fQK%XcQ1ro$R#Hctb0of!M7LPC+NaAqlXwt)VuNF0zL zMWQ2)4ufnGoglkj9G6hmFK}`dJ5PdsU`Z-02~s3_kq)v`ks+bTRXCd!iCoaH{w5^yB#3{AQE^lVvPqQ05bGBb zid==`Q6xN|0X;%uiUcVVb#XKcWEbi@kaU5pUq~o&70v}!!F`~sUy+u&Oo9}N<#DtM zWT(O(L#$s&C~_5!PgSkWAonkY#1;usB(}!UHjqtXdknFDA)%~a;H*_6`(98)k!X=1 zMdCmlb%1OVhhvEK3kgN8!db2|asu?qtCEV75~N62anuX4N%X}~yX%yMB3I!=R4SYr zQqF5aA{k_pNQt9VkWC^DWEX0>gd#TM%u}OTHt4!v35i?@;vdBuM+G3eY88U)p{PVc zS--$prbtwSvUdpyj|3?aQ{t!&WT#?Q47I!FNhop^&UQs&5ooO<;gcXmVp$w52iYW6 z#SrTk63Y4ojz{rg6KL>mNyTOfQY5y-(N>V1k!>-=`h|odSK)N4mbwS@ydtqzf)t6C zI645bQ_&Ga?XJTTid=R*>soRA z?q(t31lc5#<0u7WlSqvr)-NO!xe6ykRjn+LJ=M*YApTLjag-NF1t2tKXl8}thg^lz zsXD$YkgldQ)e@vgc;aXZ$WBFF47IyvNhop^PM(r47J@!kBo;}KBH@dpWgwfxa*$m+ zS4k-A7dX4rn7R>ETPgj;CJ9m`HpkJHINBORtX~L1uEJTRQn3rPLy_1Mi-Z^zM=c;b z6$fId-PIwXtY6?PQoQH_)r^%?bW4y*#fdmN39?C8F~s_Xgd$hr98jsa0J}BB$V|FoP~-+2I%(RNGdWVNRh~jqim2(A~%LuzmQM{UYw1JL@DS{ zi;$?0AVs1oj;cX62@l9_W>X{-xe8~OA~7HI-TgvhfdnZM3*%@J$R^>7A=WP>6uAng zLy=eudRLKHCqatD#yHvpvPo=?A=WP>6uAoLq$05cG`dYvu~UK+iCuBD2V|4j3$ioP zBB88b;5h#&^`aB>zyTp~T!Ivdt~lxj*(6SYY!W9W6uAl~OOZGQ`imkFksw9lLL51+ z=_lcgA=WQIkVwHPQ6$nqiS3e#3<**sGUF%8B%u6>Eltyuttrl6_?AD>2{z*;ZFZOK(p|cXExXHZ z*_Ln1YHHbTLf9m^aKIfc! z&wcKhd*_Om121NkO3a1U{I^IHic2NtyHpApiG`4O6-H~{*6SjUtB72 zz@>wbk!XQTMGlFV`3p?9N*sg!s1n`cQi+o;or2_p49<{=qDQ>sRTx_(2B0O!C5l0D zY4NyALy(d1qzy}WA&UDjLn@I5y>UV$(#53`87^f)rXpF8sYteXIq+hFmu2hBhraSV zk(etkl_+#+J|y9D5(Jr9l!f9YufpW2#46~<>t(XCQe0YmolDh_iDEruqNo)w^B0); zDp3!8<_3{y5SL0cy0il_63vj2*ePD}DomwH?1i>zMfQnHCHA{?05TE>9qLGJ5ibW` zOub5UK|?P|TO1RYN_4w)5;78}9Af@LyyR7wT`JKJ{q4&lF(59L7<4J_(hwwK9jTt_ zD&fT(Qi&kcqY`Q2Qi*hzG9c3tFT~5Pi`kSrO2)TB zTq?23rAo+1tbpuS)nKBN22d4Kfnxkdep`FL@Pa zg-XnV-dBlSaq&kQK8KjU5F)P< zlO)Y~2)a)tTAf04uS;E!iQ*V!qUaVcc@-v0C3>LMS+Z&Mic6!gUFwI-ZZ-g!fp1W} z%wJ&2RKlB1mZMSlAS2;-DF~S;(jXH>x_HT}Fm)=C4Q)_~S>oc4G|Hvfkl8x(A+vSP z6)$-eX17W#gq~7~GI6QIGM83BCW=*%iK0@xDp3plol1nnr4n^6ZHA0QJ!B*r z#LN5zre7s?LO)iCUE)%S-7f8cjKp5ZNbD0Yc@-v@ES=f{9af1$;!=rLmySS2q6;z- z$HYt8jG3zvXP}o7BRl;)(v#u)Pg^YyHB|l__oFF9e zFn=Ll@+!3-Fb7m36M9-Dvc#oPWV~g#Y@)B_obUWb^!5HEQZX0J-bp|>=OA#tgM zXXY?@AtT{)i1`cgGJk>TQi%+x-~-vsGR375SuSNmMq-vj%wLF?124u_i9)DWCFYAu zB}!dd2pNeo$h5^W@sd}GNtI4r2VGE!YFVZd>s_jaOpk;hGhWn*m-!1!rb;wIn?96^ z>=2hqG`qADG7`HSV*WzBovC{;D^y}X^pndXaX?%uanPj}$Q+6eImGoB;^n}LsZ)t= z=&giEoD`QzoO0<5WZI$!GHuZ-Ugj?_dsJc&s`NO7FptD{sMDEC1yh}jF+~^7ne%R zb*a#$`H*btTz?_U$g41?RAL1*!6y={#HA9IF0FH^8Zr{=Wf}7qm?4$e3_Wm_NYsl< zB^q36bZG}L*JSv&E$n`7X_cOhpPIvt7&=FY_0e zy(+N`x+)+NE5xM|t6ZvdX&q#?&T3i4`~{{}CF-C@RbsQaRHELc2FO&T5i$ec4)KyU zV@|2WZfHYLqSzxYmDuajKFCPyhfG@>5HIr=m;se&g^sDj5pk(RmrKVWBhd|+ikuWL z^A{N3RkCUILY>+pwzyQH-=zV_H0K~>B;w*_{sNPw6243>9llvQ)ejkopi5~kr9-A7 z8M2JL3Nu$FWvEB#p@644JlQ5HIr=n4n7Rgd&+Du}fT9e78$`T-pnn9@!_$$g42fD$xR6b)!fe z5|>J}x^x6G73qSE#4+(Qe}O4fi8Ih~mFN+dO7yy9Lq?(>G77>RU!*Idrs2$Y;o~N8s$y3a{l#33Uw zSY2N{WKm)1i@qShhiFNB!Cz|2>P2B=LX8X+UG!=+}( zNbGco`$xn}UWHkx68oT-cItj{@kbiv(m}`!d@T-f{|H1Bt(Z!cI0iksSemmNG7=|U zIt3YtGY)b82!up0CZrMr(4SOd5Hb>Rmxdry5zozrxPL^5`3p>gN~A%LJRnh|Lq;OQ zrA){~k>yZFYBq$#EX*#I$cLWO5qvIWBnn-c?^3Bl9jOb2n7_arP>EGg%I77DN~aKM zluOl+iDJD&%wLF?yb9Bz67|q&tw@8o_#=&SX$NH5q8W1LFT_h;h3Qs_z0kLpNEG|T zr4svHIsnNBISGQyiB*eu$*V8}D$xZUd{88giA#%jyL1vVQJiv!`3vzfe}VB%l0CH_ z8c>M=ajC?hOL3Qm9OC+mTU5e}$x?|RbmuaOB28Q>k?vB4OPP?w!~G+&jJygnS0!dc z3zv&TzPMCku1kfG>5=)6N!LonOJ0R3Q;8MOU#Y|@aj8V5OY0!h7S#@Qq^=h)2VP92 zN^FK+P>FhRsYHWIjgXPp0ZBYue<5D-DomY9?13IAmx}BamrCq&X+LDLoCA>AE)I&9 zyb9B(5=WrJvm{075|>IGbEz9LQJjQK6sN>XUWM7E5;n9?$IgCnsltbfBL@RX7N|87sE|utV z=@?`rx*g*8FT~6I1!kQ}^g`yR5^Qm)M88V|kdYXKOhw}2C9lG)R|(&zI756$qVPjT zBIr^YWF*odBatCq<}WaHDlrTC)GCq46&HVWuS@xmITM%*jmOLVBjP2m!t7LuGN^L3 zNGubVN~~~c6=XK8O2~BTI`NWMVGgK72%5D{ZQzg8&F7#agj!5_*BjI-`=u#Ra@i2cO z%gC!R`6`hOO*=0Vv&6+8-Rsh9$n;3QL(E@@m-!1!rAjP>K2V7=ajC>ImsUWgEmlFM zB9-Fhz>BFLDZ1AYKl)&OrSt(IYO6qSqxGG8O5E z%mzLnUeabvuS$4w*l_cuB3{Ty_+0WsMk44C*I$U2yb9B=5?RpaRU%tl{L#HG<+?N* zGEwBqGUhKZLn=`U?M_G(3&o`pWiBm)OcX01(<7_IOJ0Qu24w?Z4;@aH3nXjBr4k{R z>LAmcn;l~QLcGjhV6s)B8G6(!5e$z zvxX(SF8LrM;fG9f2E|KWg{f7EOz11`NsnZSOQXnkX%=K8av>ANZ1Hm7#nh?9d}xbG zl!{9w7P?dhnXz*jWX8@F;${8<)1VU7&|j;>dU2^ltxF-uNYp__VzYRezrgHLi5<|} zD$y)1mDuUhF3415H)JZZN4(@!n0+d70Q%V@(iR8Br4lVJ9fFKRD`cAUhC{u=Qi(Gz^*~0V7cvsIcuAWvCsiU2&G@23F(fXP@O*lhypWObL1s7eiOWBZ-m<5?Aa>dJmSIiXI%?hFWFGv*gWtmEpy0j275@nFdJC})< zyb6<{66>HZsYJE7RARkLwUChrK}MoZyyR7wLX~KQ+EikPxKyIqrJazG*aex2>=rM1 z6=s=A?1x%)A2}c{l{n~93uGh?ImG;hc*(0Ut5l*JO8$)OW+%m^5~o}`0~v`PhnT+* zFY_0eYLys-4r-6Y#ibHME_psPEa8PrMSKtve#~Z-NQcIKNqQthTq=?2QWj*Q$aaYN z3-NN`#q3pyxzJZtqEK8aG2f+9NY>5Z44GW3OuXb(m{ygjgtn^0I&o?7YM0i#RO=A) z7eeG!n3F2e0R6Q}G&+Syqg-l+OcXmIGwZrbyrj*T0hQPXU790pv0q#o#Q~QNLZ&TR z9Af@Lyc~EjLn?6$I-?TZ;!=r|E}epm#2JT}zYs5Z6~;eR_K^XoLwEK;aj8Vyr6I^j zcs@J4r+Ohi=)>fyL>lyk=`voVi%TUkT*`!uL>6Rr_H6NT;Kh`xL_Soh5_83+5``|! zhm1riWHzmZ;${8hZGpue0UQB;acCDyrA4H=2`4l#crUh*nTol4Y0=TxFWTq@D% z(hkT-G()B$JH<<0g=toay->lO(y9Bzr4svHIsh4ogAQ^1g?O32!0b_pF6fz=Qjufg zQi*PtPC`cFltav4h?le()1ngnP;!Py42Vl523?AaSCymkJ>xF&{EVvr_T0>tZsd$=107 z`oy(TkyYYSiAtB&L8c~-@+!=Fl{f-Ds8Mu@OC^rE)D0PllMZqHg?P!U zFpVlh}W;${8Un~=sN~~~c6=W(>37H{hop_nQ!0c6t5Y&8|NYsf-B{sWM z4;hID$cz__;^n}LX;q0`P~PW6Vz;V(+ zM_lTHjKnd>WPIJ?C9lGGr^}|*1AXx(>5*P>sf6uPKV+J70Fo;4`xoM6{sNP!65c#+ z1HV}$e2|gwyA*^>TckO}{DpYQt1$U0kqzDWd1;GT;^L1q%B9(mk;sQkkIWS>X)~rw zB^E-Nw@4Ia;!=raF0Ft}MOHb)^%vr0{sOaJC2FB3R3aoUm8f%RGi0KucZlD=5HIr= zm`0V@36*?GqSz%amDugl9>_$o7c!l?PrT$+m;)-&0$rOU5{Ja460I&Bfs8~KWP0S7 zc$vSzbgRS}=hq1N`zdhgN(#xhnT+*FY_0e`6|&2eSV!JN;}1+61!a5 z4H=0&4l#crUUpr~I+ZvGJ*5&Y;!=r2F113YIgdER{DpYQt1z2Y;uQ4VFH00>#HA8F zF7-l2!iLN~(l1`}DonFV3_+W#M8b2&u!PqoA7m=xcZlmR#LN5zW}ixALZAMMNMwmi zqsVq?7G$Exg-jH)#mj*g)1ngdp^eodQ7SH#Sm;t2WF(e3#Pt{AC9lGCsYEsOXO&nl zE|sWtDdbX}LtK9$L|%pIQHdSUEnk%=nw>&)uS>gJ+U*e6UkH&`Vd5%r0II!HcC&*{ zA<`(94nd|lTOH#13-L04f$?80`^ZV?C6zcOF0IHJmwH_4b%^UPgqXj;WU53QnsLAE zsY6a7y7zO#VqVBZ;e$-x=@&2a7nod?$bf$Q8Ii~omqwB0QZ{5HWa4T z5nB3LsmKm-sYJ6&J0TOrE{C}OLcGjhVD_oReyB+$4v0%74!YC=8Hqy!*k3-B~h?n^b%z#P^LO171MdIR8i6NIfpC6X+I>hxC5XJqN zV7hEt=}@CeWQa>8GF{4o%x;$L5c3z}<-m){SBbgMw{Mdu3dN-o^Ia;1jKo5Rxc)-C zD$y-2l{o3rDacghj6=*{ zh?l$y)2$K%(9iRvB7@>miMUHcE_w2Yqwqo$_hANAA`QA_wn(IlOC>T~%5*6UGHsD9 z%Q*02g4f7)kq<3YiMirZi9(m=yHpApiG{L^yb6=6604xFj-8d_Qi*jgRYNB4To0L@ zy;i);UtkJVq8>^wkg>BtTq@D%(hkV%Bh8TMk)5)Pyb4pM5__SCYGef82N{X|E**eO zj~sM}`3v!qS79nuq6<3tHIXyv$!<_Nc^c={G7|G0;{FlwGJk~#v!y)NyCOphFJi1`cga^S_pRpJQLu~_zzE^%o^ zj=9tg8HtmSv z#0qh##4496AtSL4GJ9&Zc$vSzRH{TB6kZ}xY!;VF)VtK+Qlmr6UkH&`Vd_<4H}vR( zBC*FQMEAP14>D2ghfGBdh?l$yvqvRbp|@4yh`2P0E|-o$Mxq-s5+}vW`~~KSO7udf zmr4}2xKyIwr2)uD3_?aCE?)8~Opi+V3b^@WnMn8{BN22d4Kfnxkdep`FL@PaP$gzT zk1ZF8TygP7_qvo18Hu@&kth@|^B0)lOxZfipbu4InYdJ9g-fd-BT)$%iFM*-{sNP& z5+P_`xkOPXE|u8qQaxlO8XzOlC|>d^Orc8bg6^siiQVE-i9Igug^a{L$VluLFY_0e z6)JHEYEg++ajC=+m%1P$aSSpN-Qp!}##F0B4>WUyMA0iQm9SmvcWD4J5`(ggyb4pN z65hF_(hrG*4>A&dmx7Qvnx#SJXYA6&%lrjqw@PF~v4=%smbmz%dtI9CQoci6e<4I( zg*l`W3!&>)iA0%Gh&0Nj6)vrEi1`a4<}Wb4Dp3n9Rf&*Oi0*Z1GbFn>Cqa<;x~W0D zIc|yl_pCa))rZp)`)y>CH#wYQCAHUYn&h$O z`K-cV=sf@0aU_K%I7`Fcc8bX2E?`Tt9;`&8#9!)l9 zk#B2BP3}Y66Lnv(ig~o2w=NQ&^Y}cTskUKm&fz6XzxQC7ec;PHOm>{LXlP2g_W_dXU4&NEvh@p*wKzq?i*I#v?+R+E7J`Pfg0 zLSneRHTE)LT5a2p)?I(vKHYk@*vFH>lFuAHZimL5ZvFky*udFSIDKbNuWrA1D)#E{ zFRhmLJX;)$^aoGBb@tqAJr|D5|K{UoQxDvKpXcnG=56)qqf5^&A1JRl-D-P&&J*ib z4_E_Hp7Fdq?X|xMo?RY1ee~2Tul1Zgec?!|RM(nJU}sYIiG)1+FrKp|NIhpRN{hTb zA#&Q2vpP7lIIW;<^SEtS7rge^w6(ObJ_YjZ>Acpnr}9q3-i>r5MNW8Pf7Djz5w8{2 z=_a1C?pyiG7F4an=l{uC?r$pPId(%;|73-IRBEQx5$Op8_P^w9d(&HG%`ZMx74_bK z?RoEB z&1JK>y6J&T`_|o;6HN~U?HjNacJ)+wn&%pCN6A&5hZB?6u4#voV(-;&x{6KL8NKF->@WQ~iC zXWd%Lt6QzlD)C1b_?t?Ckw<)p#l_IFAd-82;+&t{O zgF4DKRqW##tP|ydn-h3IUupQgyw=t2R-0}jnGmzayAm zcb52NREgeguf(t&cN7MBES-;M;&mn+VO)yN^G4_Ss-pA!JkMAvU(vM5O9S1iI!%i+ z?SB@b&$Rt`pI+o&yQZ-;SJX!KKz{p29sABIr(-j$#a?Suz8QeZB%-a_ zjU#$dTmBu>Z@=Sn6*Yynho^dftlwr!SkiC#|D)enrv!WHdj$J}{Vt~5&gat~jUP_8 zmdjXVe}hUrT@s}08W+&TY0(8~PnV=OE=Z?8O=mu!C2|`VbYUdh9vueKKXtgE6Eqy|OaXt{TI!#fe{AK8Rn-AL-U z$-eQQ1?N6S8f-pc6X-i`%Vc@hEH3l_*;z#hN@os-(j`(EZFwC0i} z*1cXvv+YL%+h1al?02&Gnc$cB&Wq>!4wYMl-p+b?+bx^Iq%Ing3AYgh*xKU;Xyck1Nft4XqkhJ0aJh5coq z>48RjhVT2 zqSm{nuN2UadF?%6`B<90OKq0jjAeY2dPn-R*j0GqeBP_kjF%JNP8E;Kt z)1n^x+xVJ_Gs>EZd*orlWi?yu3f9@s8hRiR?n%u4kAa2vdF;=AhD~54W5T$S$mK6> z{v-ba4PQc}{+EsTJ>eU8UTr4C5QgY26_*oF+#(P1db-^l%MPb|ZhtlQ2bzUP%q}gr zo9IC+oOb)GiO*S!{Ps^Dzs%!lJ@Q=gnGLUoujcW;zR)C!mf0WB?}>4-mw%QNi&x2` zLJx3^d%B&c!5$8Jc+BY?J1&%RRAv*XNnNotI-WmRtTKK31Xw^zK$D`}R#hx7xqbW|yl;>05?ry4T~Sj-TQ6mC9nz zle~8E+QX}s*FIivtu6MHV@r8G=`HdUVB6OedrtG3$LEe=2YKBKU&dx)zl8ly%4WlV z&F6#I&+%HqYYM(}>?Z6_c&&itFDWTG#hW@#PLKH639g5eGd}s7$dPB#q=^$JO`1G8 zFlpkX$-$uC9}G^JGBxNAa`YVQZ`!n^q-oRA(xy*KnwFM1;%~;)>H3*#J~5L&PsS%d z`N<6Z^T>ZAckQ*;j?}$Q$5uA=cWKv(7TK)=&)r=RfBa5%Sm~`-trzd%A=OW}TQ8sJ zVdLPb)jscpNMc*yTN7yY$d)0-^$65dlI(09kuMK%po<-`|L=~=iH6qjWb0S~_t8U#!~V{3!3FnuV*NF}eQoTYoMzp$ z?f)chiM_-zJ9eDneO;*X(aadn8J?FF`%nJg9D9!cH#B+Y#eUpoUv;s&@2h;a&7RQr zh}wyLE3p*Gh<&@w4(JF_^I=~l3u`W`uer-tFR#~l{rHh$&j7ClUo7_gk@qoP z@9^5ivS+dH^YT&&Kd)5E+`#K)mZkCjC}m#aRl%~a@Cx(#4zEw(qu*)B&T;)5;^%Dj zJswPK^hT;kv!3Ov&XsI`Bs_`PE%v|2TR4){;#p9z)%V!T+I21L@E-feQ`ibCbjxdE z^k(RMzf3kkKb=WN`=VJ`X5aAG<;3<2YXg7Ns(nd6%IZnY=al$DpC;e>H5b{Kr13$? zTPH*V)_vaS170}?Ch?lvm?+`t<&vkQv_|5-$5Lv1D@cb*{59T@$#?@Ya-NG+VEYa9 z4;g1{59bKand(x}jn_C8dqGxN;$1mhu?>Hc>Qixwc8+V6%%_w6l4h}gNYRz*sIczl zJZCaTl5agAr#DgYl-o~=k&`k4bSjsZsL5dMoHW~SanzK(%P;3KU7Cnn@#x)hrXV%q z15)SYXp%*OInQeq`AF}rB0pJc!t-=duyJ1S>7pr(^QKruY0-IURuShW>6}UM+2LNy z;=w>vF7U186+98!>B)XsuT&`SLiv)!^isx!?X7`^GKx6)mFY!0AY;jP?Z0=Nab)^z zN;}IKE*|;D<-~B;Mf%hCM83#`nG9i##ffT9z2tfC+c)3E`pWD@1$4qT|3vH5%9Viz z4{K{$WZM(V7(8CIBTbSk*=32xefDyiFcG$^vkAW3{?pxhXy!b=eoKPE_D|*JgV!$R zgInU|wpECHTEJ167B5;7})rr^xIiXdhrJ-fkxT-m63qrRKm;WtichZN~ ze=TK#HKU_Akra5&UlD2TPHAhpFDc4^ADvt^$NNC|1#4p9CyU}w7bl_i?3riwGY~qd|Ct9;BndmsEJ?ZbO|PALJ*z4p{~TJL!VHDvPSVXy zi}UTNizHP}wnX|gTs+W)YJmsAw98WwR`{#_!!y7Uy6(8#p_2CllepN!qx8KCdRzxX@ zsBWPw_Sv=Aa(jcwnB77BKKmE?v2^=q&c}wI$8OGOt$QV)DdpBT@|W0ue1~!5h3yx@ z@2qK$wE6lziR3Z5G}50IT|HPS`^tU($R$r`w$)bpwbt}VYi>$6yGta_e414hjKsa6 ztJsywtmLv7`&C&ir75}W-cV}f&GgvIEmBW5GGy|OQc6CRV%_IUImXGARg@*~zhD(* zM&c7fQzG%J!s*u3#0g5DekeVb>+o4P%PPv2RZZ1pi+s@~8M0e0_r)eSrJ_aYbG|$j zn!sMBtBg%^0-tEs8%|02qVExF^&oRu<|IsO8KjoaFMi~Zhf^NM#+?u5L=NXRt!8Y{ zN=~*?qREkVFQ&*F6O(*z$j5@n;q=(6*7BhTTSO+&{a~53JnqyfRqB*-)|<8BAz8DY z`?1>9eWe7MxMOf0PY<3xSBHvFa-zE?sm5df{YJWTW#7**6fKuw>>WG!INAER=1+4r z*`ecDXOg_>o5^xhkJuzi+OOWkhuL$c$eTI$nm2FAA-yJv1crov7auEYS~Ot)fE857 zpTFPJR6NjGJRovq_TQi<-Oq+(R%id5Vi$^iq!;CSt|?oZ42FGK*HQH2f9z7Bte~|p zE6v)R#e9i%Jf)-H@thW{20JpZTU$0k|hB7NSb zjb2Xcws~2U^4OH~fvuAxeZHoRzN)}Wfu?P~iye|ShrSee{*9DC}u|Gu8vv@thwN#6gqDsX4uw7)8_?K5^o08y9erm=ft!^<%C&ZS9uTQc0ZXMLLruhJSWTHJdU_f@lr*$tBY#InpO9(zH*caC0@hgV#Y`PnV?J zc)W2zO5`nVy|=aXemX*0VspxT)K_mMN8Z+6XdF?pc|nj1Qg_z&MT8wHm_V>`MmDuMO$ak)*0AzY&td#n}!WygIGV-kM&`FSTEN5@xC!_ zv<|)Xyf*V{R&A$0N>XTn5q+WWsqKh_U&=9r^^^qE(6kLwt?ECEZ_l4h% zoC}0*wc6+sCbwopuV!RrT)j7Z-s*~+O9=&J11wo^Z}_75{0cT&C-zthhlb~wU-sm5 z=lp7kb=Z93s;6f(Uag;Kvp=R;8a}_W?|o8K4nAavL94wyVv|{&o#FA2O8vJn-!bNH z3}3LYd_Uh)Fe6zJ`5-g!o6rIQ)2SyCH88G#Q{nL#tvvJrI>jsC<+d5NYJxegQG?Dpjqb>6sL^7 z&RkPsDkY|lUShI|Y8oY`jUAQESuZCY1x0DY&6GA;Ky4Hw*y)H(AANQIXiChW#Ej8P zY|#>nucpM+V+T~B0i_odr4I*`K3YJzW_8yfcFpLkn`}yaf)bw?y@Z@wvt`eu#LTe+ z>X6;PB%`1xV>qCU(E|EM72Enr#6CIt>b95?*HYrz(MvpR0=kY8*Nq*}9h9ocT$yt^ z<(-t{1*Zd%wI3uBDd$su8~Nb6z_+I3O=Nxl(5E?GmGl-A^#&TA7#_BYdPiUHA4r?% z-9NJ4KaO6a&6Ie95^s!N;vcod;y+R1Ph-cviBeXHT~K6?49gx}a-msiACi5em$=oG zc#{%uj$XoN!irHMHg;IAbFOQZ^cNKMj|{7SbjkmqFs=1xB>y~miN7`_-lD`?qnG%G zmRS5YCEgx8tot>rfr6rekzoytE_tn4={rciGkOX6R))aerNq0Vmv}`>EIv<(^J9l~ zkWyC3U_sGfpy5f~wxDOX4vwz*lv(S0XudakiFKyL1xj2Py+o0T>mnsCjvZHq#uYCp zV&3HmcbkuoF8Q_=*m?=cOQVcdgJMR+gcy*#Qni*YQ0H!)TiVG;+v6YG0pk_7XIf}%eR2lIzf z1%J!xdJ&Wn<9~#8@3yNMJ8Tsp@$Ms#++xiDIWoQ{C zu8=7)JiLrj;z2F3*bFgaMm|f!dZVD|jgeuEk)I^q*M2tn$*5tSH6^Yv%=|)2EH=Z; zm|^`5rL2-S3yR(x8P*v2Nwrz2$xlWNtHhMJ!Z4F%!ZO3mm|Iu;tIn|la^R)hM6(L`ih42Zb8wzBf}aaKe^Ma)Z{0lhLvtgTw$2G z5SOYgHp9%AVRci=D!EWl#MjbJj>E9Cb&UMv2dc?{Gv+W;Z%Q!CY#n2mSz}5t%q+e% z)=@mLJzwK`zo6*-k);27sUM=4CuS2*wa7gOR2!|E$2>Khr>80S5=o0VSS zyeDW%Twz>!>pk5M%(yaUSY4E|O8#6>^yiUbjd9-d_bR#d3gvo z)@>TrI|W7WxEmMa%+@hZd{WF>uW;gXZczLA3Iof3X^F*VU>P&6?@`Jsd9R@8y^+l| z#(B?rv(hV^_uOYnnDd@dci?OjmPud63@cf~x>QhfX=GSqocH|hytc&^&U=1lN?c)F z`AaRa*o-S=Ol2DU9X(I`hMAWgwZx02gqfEewZy+`iF=3VWhZ|;MY7uZcF1WS-)o2cfoGY$ z95-?d9}Xp46L|JM!YD}^)w>WcA(SM?zW@JJ${bee`#PsKTmct&)@K#7ZcpE87UZ>Z zWoWyV=(w)P^ZJcNo?EhuJga9FdG6u;{k(6!rO4BfQ{>ryZIS0^Hxzl|Hy3$6%lkCm zXYl?J-v8~bMV>96Eb?r>zR2^dn~FRh-oKGihpdpX6v-fI< zhhbah+M>CF>NI z+!dS(JShi!i^RO?0lvHRZrE66pM8iW15FFOD+>l5ThJmu3koD#9oFh0zKrhJFsW>* zU8j}dijXvJRbbiOEL-O+3*FY1NG@y2Xcd5XYR-f(H-&`#IWGmCo6PMZw>NFnzIw+k&bK1v)z8lptz~>Gzc5R_@!1x5c7B%6{X%{ci~SXRYwtV%Z?V-~${5s+qU8=AoS94|6@!gsOth4U?)0+8<{R$_zX=5KFcO0?#GM;)$|& zoGxzV_LQpa7ec931p}e3z;j(|1J8A=$!TK@VB-kORckWSFV{_*O{YJ|#TrYw3?yiu zklBURJ}$f*&qlzG_X&FgTdfn|dvwq95@4Uj=dI#_ib%^o$P+HAnYWTKfBz6+=5evN zgn8HrGftRX5PAQ2u)Oy8rsNGMhIzU~pbR~waFDGR4p^BK8X#r|2sm}R_B9HCk+`ZGA)glENq`*cBMD8kOaG+dhX0?$0 zq$BJnfMltzER}ndh=D~(68yi&2c_G~rGN}E47c`Yleyl{?xCN{?bjca|GNmN+z#pg z?}z0x>1+C4S+5rYabRKK4Eyq4&FP4=rtl@}oUp%QX5!+@H^w&xt#Qx?2D-g^pO z+c3ber4i^ST4Mof6|^R^Z6_y=Q>Gy7-_Xy{!X=}B{wlQ*Sj?^oWK`G6Aph%fzTxoM zFN#;j_{d#*WVE=4E6R6Q_eS?!(G^5Hv9 z(mLi!Fbc`hK)S!i`$Ji7zaq^mqm&+CMwF#D1C&p2@047B-debti`}&pM-Kh0d9z3^ z`1?fUQc`HTUC7-s&WO>@EpL&o#On5EPTni`HOYVdz>+0WjdCuD(}9_TN<}DG^XU~; z(Q#Z$!`OeqbMX~x%TP4zUs~g-cyI~dQkc39(dZ`5+@^d6^Ea!z~%v zlIG#CBl`>Wn>eC=HObcHhpo1}6BqehS5r|%oWh0oEJlXUb|-d(M_q5qlsAR z)|9-X^PJljSNCyuugKI)Fq_U0*X9jxI>XC6y8pX}3L1pL+5T6Vdyqtv?ijG@o6%wD zFTKfA@A1fJ{Lxr!Mq;D?a~W4xYAaTcXSbEj^{1@US=PdbJykTn^HGr+ zZvOGvTR&P*EuWEPH6Jabrx<6F^)SkDw!AbnJ@DM^a!ll~bQ`xqA5P{N$wg<+(MVV2 zw3*F5(x17sBJb6vExk44x%_u^&&u;ZVv7h*w;x^RZqV;C9I-*i)>C=*h~DyOvCUrI zR2(c@Dos<|(^=e4dh99dEbf&CAYdL-@tl8Sx+ZL+LE{{ZLwJpep`;}9_Q*9 z$5=_vCoW&!n$jH^NaP)kw0ZxP8+)Dz+19)vK6!gXZz$_uX+N$x!*~**+E zX5Pa!53R{L9t{u0QXrG(v`Yff@xSt%_6>e+gBx-)h_>VhLKECvr;S|4Np)h=bdPlQ zUNUs)g0;>Oo(qqcat(dOoG_PPoRLr^;~~}g76(6P;F>TTYTtiq#r*74uO-Ol7xml! zE)x#L{c{dT?h{_ZFp=|G&Af*Qence-#M{<9BJofuQBf&6q;H!XMA{E%H@<7Vt<8ugADeE`IeYt7z%)wvS#{FEeBR)%CK?`>n26(2B}oMvgkq`R7H> zd7a}-aXeB<&fhk?cROcT+&t`iri(Kt~%pGrE$#6YpX ztU?Y**9<$t8;Cm28tie-qH=o~g~_Ui^FE!U=+q~Qwp$cD%gx0fTa(G+MV6`b;p1hb zf7UZ)AKvfD`)}Hp^EbJ3x@pl#+s_>roV#6ZKfB1S#T;tEJ$Kn;SDaSW_{!`#wIW1q z`G7=LC|-OV&?Lqf{9z}2CwCl=8(bh+$I{*79y3Z^hK8kYG zl8ZmNSB@b+&E84xJ461}M8&PWkCj&+;`mA*-*hk49iWLWgzmN9X4WTByT0813(k|Q z;ApJ7*6xw75* zGOgBYU&Fqm_f*)GIypte(<8q;sA)o~{RST{x8tPZ=A5=x&S@ieondtMgy&Rub2eNp zvsg8r>K-{Wp1zse{mO>Vj`=wQSf`^-@dr)%Kd?Oh_fBOF)U~^|TcCQq5$)U1H5!7A;w3&08T& ztWzj<3ZJ%TFhvr5N-D-6HPM!V%e=M!lfi~c^=hT^tK(O$R48k>PCZ&D`IyuxafiHj zYSbf@;pom0a*NNp$O!l;^6ebv9K3f{MVXb-p)%#(@LRYh-y52k*Lu9~{Ewy`tvdfB zxp`1CSgSbw=OQhwb7PxqA8b6%8}d}PeD@6-OiUcJXE&g%OT>ybr&p0heFJbupV^za{IshH3i$}ro+qRjAbWl?76 z*qqf_vLHKrSQcc57?`b#g;jH|4apf8zi-0b@^^+asoK??@uY0{hnnPyn#2H1%6~>bSX^}nvru+ z+?g9c$&?!(-)-FHvu2Hq4PWIwx0dVV+(bEn-I$tpp(=VCzf(awuq1tW36i|cl(*b^ z&6%RS&34}U>`#`m1t-FjYi6v8=Gx!Ck61fm6B&`-s<~lh)Th5#u)3X$UnfjsUmwoq zH8ZbpP5`D2p8(u7d;(zcYadt2_irTM{{)FX`Tk^#lkaaz#3nUux*YR0ZTgU2+9V0S z-&w~epPnKo87D$jjaM@b>#XR_SZb8FUR{@!#WWyHifCy`Kp3f=Pe1(+GuHp)sfStyRP%oO*&RE3qtbn zg%bCma+r>;nX!Tike>UP07;U`lbT?4w~X`y_sAgM%W0GUiG-(+Q@UJiJvJN5pb^Rx z>-B`v#U^_~LA$qjSh{aNEy}nWxqO+4+he-?Di-y9kAHmY)%XOq;Eo+j_?5*?R!3Vr zHCpVqejoY6b!~qbXL+~xFclN{<@|JSq$eq~qTH_D!MH5P947c2_XWI3p-KE0(qgnY zxW;3XZSFVch$(A|yeMhYa0)YlC01wbdO{+DDYt*guFLFHo?G00b^)L1O4xT%Zy8#3 z8qxZF+XtzUH?C`YV_bzb_xlpn(+fZE4LsX+Q$32&V&BvAKcAJ{8u(>5fgOMUE^Vll zcWFD_dzUuTtr%M8Mhw4+R#tzsz7Yw_Z`9`BmX-B{KdBKLn>~u}Nq=(e_4;$$Xw-{E8K_dWW(&N)<=DSD^i)Z;H% zmjXZe;9`kiepAYNEtG04PLHMjTz;fUerAYs@88mDR=NL)*ZI8{Pv~=ecflD4 zBN2NFPCb@twMSRSImGx9pR<3|LE23UeZ>E%5^v6_q;W}n-?X~m^oBL;U{m=4xMaFf zzBv7s=yFSKJJC;)Xc%(&VU&0*#StsF-{Tm}4deenZh~GUo(NIlxOKds?eS!*J88Ku z=M}yKxC@n7HmP5E;Fn|xzAD+Yq;Phk*mpnmk%}DMHja5Jp;rUjKP~4c#lb!s{m5c} zX3ht)`(ETX8(v}wiPM1WPR|swT6QOy0uE)#=p4G1U0xd4WcBIxKNq>3^C`B=yjJ`F z@}c%}`>`7dLN*-N8Z02O0#~|b}2Q|b6s1{xD;=b>?^U@#vv1xjY0^r*)s!zhP5R_~)xb|nWTnha4j1tu-LB{G%MCeOY2&S* zsYq-jx!i;V+ujX&-1ZlAh68-2p>pEzt8pC;ke%K;zFUw-;ScLC*Qg?F>1I{MeSEZP95z!l(I`*$ja@qT{jdz@^;?GWE-?KR4fhn>F`sW10!>e`wr2|EO9t-&+G_QMLVqMw zQN|C_iP}oqK50Y=_2x!CND5Cav!9avPxhqi7O>66uAxJxQy@7MD6?xEUpVC|PU+av z^>-^uV%u3eo3a(|(Um4<9~fR!`*1hUV12B?>g2}y;xqPEhFQ8>K1DV5ERi}gnlrIS zvHmofzYR1<5+`S*GGDgkb#~uyzxC8U7Rn&WF}-Qte~}no^SHMv(w52mO6=O_B}=YJ zs+zOh_gJ=^=zi}Jl()AsP^=7d%Fi5AYwT90_^hXPq7!)5>x<27S~RqT+s-*-;P)h7 z{DEwp>8xR*P7>%Ryn*M6hh#=fPG%RGDY21L(nZd605yp8r}N7eOF4P>+egn4^J?FJ zNl^SkW2Lpo)|rVk`LTYA1%aI7yFhN#NPmGJCsCr^;S4l}gnl zHx>^yuKuv2_%gfHbo+Po1>b-sA2NscAgc*&(&INEd6WzzA9bDnwxsLZt&i~Y<>dH5we zxfCLB@$}52k#o&WPvEC4!l&PQrB8p(^Z)pbv!`iZAxCoxK5@=R&6}Q(-qy5R=i22T zby~9I^jqZ>|0SDuMfDe^dE_TO?QbJ1vkjB2fflI)vE0~IRnQgwid%(m*O@BZTN=t| zA>Tq|p4FcOjr0dkwVhp+<)flC(`$V8JCtNtjg@NMYo^;zeNz?$W1nZt&0Mp`tW#DFHqBteY?fm}oodo)d_>Y*?LS_vfXjApZ$YEPv{TWzK2TWswqR#BuP zxgZH>F(CCM0veUtJq~JAOv1&?`+e4)38A&;Jw5%sfBjxQWcJ?czMl20XRY)9h_Svw42wp*H6%D-mB4q^BA{| z&#dTXCf9LiAfcmEpV7|h2>;d~V`xZ5*L99ANR8o>>!wiR$o=I5?^8-r0`2 zKl%aCR;G|6{5hFBKB@boR(C6PbaaMq;&HgW!wS!p??!73sX99AP&3A`D)k(0KR9Xf zs@bvTJSW*3I!?8BJnQ(`yPZD|oO5VM8ldiLl+brNR9He^WAov5St8~lkHNlkxF3Fx zYz)1pY8xFjjTggss`<$yj^XFu@a?{mxmJ~c;6%!*p=(lRME^DK$K3O_M$I-z3R}-4 z!)eTQ#ki2Zyx3kXiDp8I6&LMpS!^G^TnHog@Mmnr&as}H*1z$&kaaz~AzVXN5-swu z)0F+1{~!mwoK*Y$4eJ^jBjRMTml&|j*rPgvJg!j-k! zwx~u$ekz;Fd1cl) sPx^2V7G`D}-uwW#FBffDEVA^tb%ZE3v}Y67hBy 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 ox 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�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≶qf9ReGQgzi`~sO3yrGsbJC@4@0UY6oS_ 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

=&>yXuTtvgRhq(ZS6f?`_r>=0+j}SBhJN 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 Date: Fri, 15 Mar 2019 10:54:52 -0400 Subject: [PATCH 46/80] 4816 remove tool tips due to being useless --- ManifestTool/ManifestTool.au3 | 6 +----- ManifestTool/ManifestTool.exe | Bin 1157632 -> 1157632 bytes 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/ManifestTool/ManifestTool.au3 b/ManifestTool/ManifestTool.au3 index 2ce0a95919..c985820ed2 100644 --- a/ManifestTool/ManifestTool.au3 +++ b/ManifestTool/ManifestTool.au3 @@ -180,14 +180,12 @@ Func Redraw() If $selectedAlgName == $allAlgorithmNames[2] Then ;"One Data Source Per Folder" ChangeToDefaultGUI() GUICtrlSetData($descriptionArea, GetAlgorithmDescription(2)) - GUICtrlSetTip($algorithmComboBox, "Creates multiple manifest files for one case") ElseIf $selectedAlgName == $allAlgorithmNames[0] Then ;"Single Data Source" ChangeToSingleDataSourceGUI() GUICtrlSetData($descriptionArea, GetAlgorithmDescription(0)) ElseIf $selectedAlgName == $allAlgorithmNames[1] Then ;"Folder of Logical Files" ChangeToFolderOfLogicalFilesGUI() GUICtrlSetData($descriptionArea, GetAlgorithmDescription(1)) - EndIf EndFunc ;==>AlgorithmComboBox @@ -199,7 +197,7 @@ Func ChangeToSingleDataSourceGUI() GUICtrlSetState($caseNameLabel, $GUI_SHOW) GUICtrlSetOnEvent($browseButton, "BrowseForDataSourceFile") GUICtrlSetState($generateManifestButton, $GUI_DISABLE) - GUICtrlSetTip($algorithmComboBox, "Creates a single manifest file for a single case") + EndFunc ;Change the controls displayed in the GUI to the ones needed for the Folder of Logical Files algorithm @@ -211,7 +209,6 @@ Func ChangeToFolderOfLogicalFilesGUI() GUICtrlSetState($caseNameLabel, $GUI_SHOW) GUICtrlSetOnEvent($browseButton, "Browse") GUICtrlSetState($generateManifestButton, $GUI_DISABLE) - GUICtrlSetTip($algorithmComboBox, "Creates a single manifest file for a single case") EndFunc ;Change the controls displayed in the GUI to the ones needed for One Data Source Per Folder @@ -226,7 +223,6 @@ Func ChangeToDefaultGUI() ;rename to RootDirectory to root directory ;hide case name field GUICtrlSetState($generateManifestButton, $GUI_DISABLE) - GUICtrlSetTip($algorithmComboBox, "Creates multiple manifest files for one case") EndFunc ;ensure that all fields for the selected algorithm are valid diff --git a/ManifestTool/ManifestTool.exe b/ManifestTool/ManifestTool.exe index ca5927cce9c0df8d029ea717d5b3c748adee24cd..2ec0dcba64a984395d692babf0517a6400952d62 100644 GIT binary patch delta 1836 zcmZ9@3pf+%AHeZ#jOMa28#1{RR!3znIqo?)Zhy?(a_P^ZhLAgFICF~$g_&DSQYg)3 zIK#wNk;?RUzf}&pxx`dNW6nCybN({i%4UOr0^g^QfUp2qKtw=P;E(`BKukbfKte#0!3IGuh57OC zfBi3o7KhFJsHJtZNsO?I*dwDkHGgJV^pnR6XQi&2e`oe!eT4Ow! z5nh$8CXkD#TeR26TS$E3`*1qT$>33QdzWsla`k+m$!MxF|JB{Z2}}IuW7>Lih*}=6 zR|#0gN!n#QL=6)METu-ZA?(1gGi`Ej;JO4~c)(?#qAdw zPvaLds-R9sreQMR|`49!GhhP*Lyy7r^o=Q-JH&sXzM*#n`ysyC!hJssu`HCzU zQhoPr0F+?TDYZ)EMmqV#RJZqxgf<=F&0TmXy7yVj+hS|bO)&>TA$yF_H<>0$@~1(Y zIeF&`5I>zg`6jMmBOckbF;+13`e(k`yq6YO(yD%Lu@C(rMJOlbbL!X`X?L~-e_OKe zH~8L)ZZKAuc+&aM7o(CGsc2-Q|1slfnsIwXQ~z5B|IRQ)^+_O?=Ic=^lfa;-;VuQt zeuzeUh?MzDGqoJY+!wkT7m{_yUI$;tYCYsQT!rVqYMy^sd)IwUw=9dia87jRceP4q zTNL>maSFKB1XWYd z1WYHy6tn1|4!;^=uvQaE@wXRYm2T|~!4qmm_L( z()rn0W|^kWLY+_j?1_jF{`ChB2=k?4gKiVpxCDeXv?J z`Uc0&WAqGe$i*qfD1Fy6mpLZylKPA~K`a;93+bi|;To+n!jX=%ck-^Gi9AE~XMd1L z!#}X4Yt(5~3b*4pI(+Bc-sR~7uCJT7Jl9^tdnKa*C1W#k)movbnoRyd|CDCBzMVdR zU~fSGmK}FURlK9u4rl$^@jso-<3D}1`J|GOBle&IVX^d~M5N?}bwLDdGuiiJ6Opvy zv?Fpt4=wA&YIgFP7bSD0^B)`N)D{WvtCu*Z#ge!iQa2k2q|uec<(QszwZT!)dmU)> zr}ZlX=o>Pyk9?Va1DA8MV(t9l0-dUW+~4hP&vkO`FrZ7ZS_ zUdr>MCe&QKrDo4rB2Z7oOyoKCIPWPZ%`mTqP@I>xj??PkL!}fH1FsH5ZQ4JHgvZ~~ zQN^0y8!>8hJI4^}I#7<7|B^n9L5uz*5v{Gc=vVP%4vN1eda^q|Luym^!Mo#Gh8kO~L>G delta 1939 zcmZ9@3pmqz7{Kve5Hn+%%v~H3M~hOf5z@u2bW;*#ZHKMfDMQgem)TsBTc$(gKG%tu z6r+o3*>M?djYKXTm(>_DxtyJz=RD7O&hL3X&-;F#=l9<3bGzN=R*MEhb>AmuXn{Q; zqZ%0@U}rGBz8bs{45r7nLn!SKu+%>jDkUQ&DWPy(TG^q&*@0lS~4TqUopi$9j3_2f+b9Lha0LQ0u=Ppsmd2Pp3)X>-d) zxDMaDxw<1QOLo*tWrlpW?RWjo?#4N^l|0^Do^g%E>W6#*2Zzh8Iu)ul#GYKVUSvgb zgQ;~owec2S)-4tO`#S!D310&P8xf~k=}XT@pc^wE=aN?HUJfP$M(#x;)swxZoD<}Y zlzF0R%syQFl=ECeXQGWR@PKY&7NY?lbPheNr(l%kZ6U(5jEQ6C#-gdgWPhW(h36Z` zpCVNg0!j!8%G}GRC*1{!D1)C7=Do{Ygd0b}Lty=*u-?bx= zSZu~}DPvG`(&o$y@Q=WxT~+IFtoNxG^F=Gb)<@hmp|8cmi5y6j-sR=x9(8d|YSaE- z$`4{(5*05j51j8*x$vEJX+E~6lPcKCx1GHIt10U~@=LRQbH*V_hGw?$mAR3eM4GS} z^rWynD2Pq1uWtYn2;%4D*Tpc5oWL<1NNk?4?pWkgk4H8c*ces1sU;DVyw(Yuhf*Ry z1XU;6og)qDHK!9~o5}Sd(7CA)ItnIg8KiciF=1b!YK+q`_%FJ zt&6E8U*8W22;%KBhxbd4sB-MTY_@vO1f1e#`Z+`u5|F3-`OPk)U&mYAoUS6GXFozB zeLUN-L)7GkUVebkx$7V`Yzl;LE) zZihEGcM=??F%YV>sm47)B{BWFQcyiDdv>NYVoyn?>xYx>eF}Vmo8}Uw^8{*BPO(x; zCZa;d++06I1iz{RhuEofHoUsGQ+|HEd)F;MY~L#*^sN$I>-3^gLf?iK)@F}Ku2qam zaPC5355~HNO(<8^|1q_2GQ49!=IwYjS=NbX6|Z@S8C{FQFch1%wP_Pa9B9j4Z+*&k z<1L%xtGFko*hi0zXtg#65jMO3i9R=dvZ#Vi%4_w2qC*+joFNtz1?i85pp^ zEluQS&HXWIODFfLNX}+|qjqd2&U8a%fZNSkj`-9M%L&Wr;T-VI6m{JROQoIY5;=YA z*8Q~L`T{TEeap%{m?C;kukWVgm&}|H90M~mLeeg)XPI){jl*}%C9!yWAW9p3j1}}mdPF)C#~A`fneSp*F()L>w$0)8PAeLjWI?GZY%o5l$P*|*h77` zh#iaL12J1{cUQg}w)zlvNRg|9#Zpli&2Mr$*siZY&fYinK3G?tMxz2?Q?AT2Er~rC zanNe&9q-@s+qZu>qKL(Pg5J}sy8rMbkaxtJVdpH`H%{^Pr^Yi!` zfmv8fv%k4QsKc7gUwL(~95HG9iG#&3jEz1LS|xeuYnDqLqhL&RF!IsEjr$=7og z8?x$7&rKH|7@k~FfV|4^&2)+uD=#OpuEB%EI%$#9>^Bu&gP83WknwUDzPye$mL7LZ zob(`V7Jbjh`g)12>9&J_+7sn2gJdm%do>b>>T+l{y$UIZen{c0TG z+QN%+F_FE}hxH*@7~2&$I<8f0GIUY(i?PX-@J4$k1h*ZvATvNSJ^a9(p+b&l@wD-m zsVV>__%y;%iD(6ZH&CJ@6`0@Z-n*rO)zq#tB2q%|<>4HI&-|mhd)nLISiLN|bTFuO z#}U^=**uhkJ7gl(l6?8Stxx`NW!vZ4=X7qw8VGT4l-+K$j`E+c}V!*ov)Re From b8fb023f44f8b9074ea901986ca343836f35c2d2 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Fri, 15 Mar 2019 11:13:02 -0400 Subject: [PATCH 47/80] Updated based on review comments --- .../communications/Bundle.properties-MERGED | 6 +++ .../communications/VisualizationPanel.java | 48 +++++++++++++------ .../snapshot/comm_snapshot_template.html | 28 +++++------ .../uisnapshot/UiSnapShotReportWriter.java | 46 ++++++++---------- .../keywordsearch/Bundle.properties-MERGED | 3 +- .../recentactivity/Bundle.properties-MERGED | 2 + 6 files changed, 78 insertions(+), 55 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED index f88a5ffd81..a4be4813c9 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED @@ -32,6 +32,9 @@ ResetAndPinAccountsAction.singularText=Visualize Only Selected Account UnpinAccountsAction.pluralText=Remove Selected Accounts UnpinAccountsAction.singularText=Remove Selected Account VisalizationPanel.paintingError=Problem painting visualization. +# {0} - default name +VisualizationPane_accept_defaultName=Press OK to accept default report name: {0} +VisualizationPane_blank_report_title=Blank Report Name VisualizationPane_DisplayName=Open Report VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report: VisualizationPane_MessageBoxTitle=Open Report Failure @@ -39,6 +42,8 @@ VisualizationPane_MissingReportFileMessage=The report file no longer exists. VisualizationPane_NoAssociatedEditorMessage=There is no associated editor for reports of this type or the associated application failed to launch. VisualizationPane_NoOpenInEditorSupportMessage=This platform (operating system) does not support opening a file in an editor this way. VisualizationPane_Open_Report=Open Report +# {0} - report name +VisualizationPane_overrite_exiting=Overwrite existing report?\n{0} VisualizationPane_Report_OK_Button=OK # {0} - report path VisualizationPane_Report_Success=Report Successfully create at:\n{0} @@ -80,3 +85,4 @@ VisualizationPanel.clearVizButton.text_1=Clear Viz. VisualizationPanel.snapshotButton.text_1=Snapshot Report VisualizationPanel_action_dialogs_title=Communications VisualizationPanel_action_name_text=Snapshot Report +VisualizationPanel_snapshot_report_failure=Snapshot report not created. An error occurred during creation. diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java index 20f52937ef..f8ff5aaf69 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java @@ -681,11 +681,19 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider setCursor(Cursor.getDefaultCursor()); }//GEN-LAST:event_clearVizButtonActionPerformed + @NbBundle.Messages({ + "VisualizationPanel_snapshot_report_failure=Snapshot report not created. An error occurred during creation." + }) private void snapshotButtonActionPerformed(ActionEvent evt) {//GEN-FIRST:event_snapshotButtonActionPerformed - try{ + try { handleSnapshotEvent(); } catch (NoCurrentCaseException | IOException ex) { - // TODO something here + logger.log(Level.SEVERE, "Unable to create communications snapsot report", ex); //NON-NLS + + Platform.runLater(() + -> Notifications.create().owner(notificationsJFXPanel.getScene().getWindow()) + .text(Bundle.VisualizationPanel_snapshot_report_failure()) + .showWarning()); } }//GEN-LAST:event_snapshotButtonActionPerformed @@ -726,7 +734,13 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider "VisualizationPanel_action_dialogs_title=Communications", "VisualizationPanel_action_name_text=Snapshot Report", "VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report:", - "VisualizationPane_reportName=Communications Snapshot",}) + "VisualizationPane_reportName=Communications Snapshot", + "# {0} - default name", + "VisualizationPane_accept_defaultName=Press OK to accept default report name: {0}", + "VisualizationPane_blank_report_title=Blank Report Name", + "# {0} - report name", + "VisualizationPane_overrite_exiting=Overwrite existing report?\n{0}" + }) private void handleSnapshotEvent() throws NoCurrentCaseException, IOException { Case currentCase = Case.getCurrentCaseThrows(); Date generationDate = new Date(); @@ -743,23 +757,28 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider int result = JOptionPane.showConfirmDialog(graphComponent, panel, Bundle.VisualizationPanel_action_dialogs_title(), JOptionPane.OK_CANCEL_OPTION); - List filters = currentFilter.getAndFilters(); - if (result == JOptionPane.OK_OPTION) { String enteredReportName = text.getText(); + + if(enteredReportName.isEmpty()){ + result = JOptionPane.showConfirmDialog(graphComponent, Bundle.VisualizationPane_accept_defaultName(defaultReportName), Bundle.VisualizationPane_blank_report_title(), JOptionPane.OK_CANCEL_OPTION); + if(result != JOptionPane.OK_OPTION) { + return; + } + } + String reportName = StringUtils.defaultIfBlank(enteredReportName, defaultReportName); Path reportPath = Paths.get(currentCase.getReportDirectory(), reportName); - if (!Files.exists(reportPath)) { - createReport(currentCase, reportName); - } else { - String message = String.format("Overwrite existing report?\n%s", reportName); - result = JOptionPane.showConfirmDialog(graphComponent, message, + if (Files.exists(reportPath)) { + result = JOptionPane.showConfirmDialog(graphComponent, Bundle.VisualizationPane_overrite_exiting(reportName), Bundle.VisualizationPanel_action_dialogs_title(), JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.OK_OPTION) { FileUtil.deleteFileDir(reportPath.toFile()); createReport(currentCase, reportName); } + } else { + createReport(currentCase, reportName); } } } @@ -788,18 +807,17 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider // Create the report. Path reportFolderPath = Paths.get(currentCase.getReportDirectory(), reportName, Bundle.VisualizationPane_reportName()); //NON_NLS BufferedImage image = mxCellRenderer.createBufferedImage(graph, null, graph.getView().getScale(), Color.WHITE, true, null); - Path reportPath = (new CommSnapShotReportWriter(currentCase, reportFolderPath, reportName, new Date(), image, currentFilter)).writeReport(); + Path reportPath = new CommSnapShotReportWriter(currentCase, reportFolderPath, reportName, new Date(), image, currentFilter).writeReport(); // Report success to the user and offer to open the report. String message = Bundle.VisualizationPane_Report_Success(reportPath.toAbsolutePath()); - String[] buttons = {Bundle.VisualizationPane_Report_OK_Button(), - Bundle.VisualizationPane_Open_Report()}; + String[] buttons = {Bundle.VisualizationPane_Open_Report(), Bundle.VisualizationPane_Report_OK_Button()}; int result = JOptionPane.showOptionDialog(graphComponent, message, Bundle.VisualizationPanel_action_dialogs_title(), - JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, + JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, buttons, buttons[1]); - if (result == JOptionPane.NO_OPTION) { + if (result == JOptionPane.YES_NO_OPTION) { try { Desktop.getDesktop().open(reportPath.toFile()); } catch (IOException ex) { diff --git a/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html b/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html index 9b5640c3c1..3800cae9fd 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html +++ b/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html @@ -6,21 +6,21 @@

- Timeline Snapshot + Snapshot - - - - - - - - - - - - + + + + + + + + + + + +
FiltersDate Range
Start:{{startTime}}
End:{{endTime}}
Account Types
Device:
Phone: -
Email:
Facebook:
Twitter
Instagram
WhatsApp
MessagingApp
Website
Date Range
Start:{{startTime}}
End:{{endTime}}
Account Types
Device:
Phone: +
Email:
Facebook:
Twitter
Instagram
WhatsApp
MessagingApp
Website
diff --git a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java index a4588aec7d..6f6c81a67b 100755 --- a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java +++ b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java @@ -38,7 +38,7 @@ import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.report.ReportBranding; /** - * Generate and write the Timeline snapshot report to disk. + * Generate and write the snapshot report to disk. */ public abstract class UiSnapShotReportWriter { @@ -191,36 +191,32 @@ public abstract class UiSnapShotReportWriter { if (StringUtils.isNotBlank(agencyLogoPath)) { Files.copy(Files.newInputStream(Paths.get(agencyLogoPath)), reportFolderPath.resolve(Paths.get(reportBranding.getAgencyLogoPath()).getFileName())); //NON-NLS } - - //copy navigation html - try (InputStream navStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/uisnapshot/navigation.html")) { //NON-NLS - Files.copy(navStream, reportFolderPath.resolve("nav.html")); //NON-NLS - } + //copy favicon if (StringUtils.isBlank(agencyLogoPath)) { - // use default Autopsy icon if custom icon is not set - try (InputStream faviconStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/favicon.ico")) { //NON-NLS - Files.copy(faviconStream, reportFolderPath.resolve("favicon.ico")); //NON-NLS - } + copyInternalResource("/org/sleuthkit/autopsy/report/images/favicon.ico", "favicon.ico"); } else { Files.copy(Files.newInputStream(Paths.get(agencyLogoPath)), reportFolderPath.resolve("favicon.ico")); //NON-NLS } - //copy report summary icon - try (InputStream summaryStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/summary.png")) { //NON-NLS - Files.copy(summaryStream, reportFolderPath.resolve("summary.png")); //NON-NLS - } - //copy snapshot icon - try (InputStream snapshotIconStream = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/images/image.png")) { //NON-NLS - Files.copy(snapshotIconStream, reportFolderPath.resolve("snapshot_icon.png")); //NON-NLS - } - //copy main report css - try (InputStream resource = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/uisnapshot/index.css")) { //NON-NLS - Files.copy(resource, reportFolderPath.resolve("index.css")); //NON-NLS - } - //copy summary css - try (InputStream resource = UiSnapShotReportWriter.class.getResourceAsStream("/org/sleuthkit/autopsy/report/uisnapshot/summary.css")) { //NON-NLS - Files.copy(resource, reportFolderPath.resolve("summary.css")); //NON-NLS + copyInternalResource("/org/sleuthkit/autopsy/report/uisnapshot/navigation.html", "nav.html"); + copyInternalResource("/org/sleuthkit/autopsy/report/images/summary.png", "summary.png"); + copyInternalResource("/org/sleuthkit/autopsy/report/images/image.png", "snapshot_icon.png"); + copyInternalResource("/org/sleuthkit/autopsy/report/uisnapshot/index.css", "index.css"); + copyInternalResource("/org/sleuthkit/autopsy/report/uisnapshot/summary.css", "summary.css"); + } + + /** + * Copies internal resource to the report folder. + * + * @param internalPath Location in jar of the image + * @param fileName Name to give resource in new location + * + * @throws IOException + */ + private void copyInternalResource(String internalPath, String fileName) throws IOException{ + try (InputStream resource = UiSnapShotReportWriter.class.getResourceAsStream(internalPath)) { //NON-NLS + Files.copy(resource, reportFolderPath.resolve(fileName)); //NON-NLS } } } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED index f64794953f..6f95dfc82f 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Bundle.properties-MERGED @@ -34,7 +34,8 @@ KeywordSearchIngestModule.startupMessage.failedToGetIndexSchema=Failed to get sc KeywordSearchResultFactory.createNodeForKey.noResultsFound.text=No results found. KeywordSearchResultFactory.query.exception.msg=Could not perform the query OpenIDE-Module-Display-Category=Ingest Module -OpenIDE-Module-Long-Description=Keyword Search ingest module.\n\nThe module indexes files found in the disk image at ingest time.\nIt then periodically runs the search on the indexed files using one or more keyword lists (containing pure words and/or regular expressions) and posts results.\n\n\The module also contains additional tools integrated in the main GUI, such as keyword list configuration, keyword search bar in the top-right corner, extracted text viewer and search results viewer showing highlighted keywords found. + +OpenIDE-Module-Long-Description=Keyword Search ingest module.\n\nThe module indexes files found in the disk image at ingest time.\nIt then periodically runs the search on the indexed files using one or more keyword lists (containing pure words and/or regular expressions) and posts results.\n\nThe module also contains additional tools integrated in the main GUI, such as keyword list configuration, keyword search bar in the top-right corner, extracted text viewer and search results viewer showing highlighted keywords found. OpenIDE-Module-Name=KeywordSearch OptionsCategory_Name_KeywordSearchOptions=Keyword Search OptionsCategory_Keywords_KeywordSearchOptions=Keyword Search diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED index 521b871e47..282fa33b81 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED @@ -2,6 +2,7 @@ cannotBuildXmlParser=Unable to build XML parser: cannotLoadSEUQA=Unable to load Search Engine URL Query Analyzer settings file, SEUQAMappings.xml: cannotParseXml=Unable to parse XML file: ChromeCacheExtractor.moduleName=ChromeCacheExtractor +# {0} - OS name DataSourceUsageAnalyzer.customVolume.label=OS Drive ({0}) DataSourceUsageAnalyzer.parentModuleName=Recent Activity Extract.indexError.message=Failed to index artifact for keyword search. @@ -180,6 +181,7 @@ RecentDocumentsByLnk.parentModuleName.noSpace=RecentActivity RecentDocumentsByLnk.parentModuleName=Recent Activity RegRipperFullNotFound=Full version RegRipper executable not found. RegRipperNotFound=Autopsy RegRipper executable not found. +# {0} - file name SearchEngineURLQueryAnalyzer.init.exception.msg=Unable to find {0}. SearchEngineURLQueryAnalyzer.moduleName.text=Search Engine SearchEngineURLQueryAnalyzer.engineName.none=NONE From 8eb81a19b6db1834dec2ea3962133dd1630de07f Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 15 Mar 2019 12:15:08 -0400 Subject: [PATCH 48/80] 4792 add comments to clarify updating code --- .../DataContentViewerOtherCases.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java index 2a7ffa42a0..34254f902b 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/contentviewer/DataContentViewerOtherCases.java @@ -154,12 +154,12 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi filesTable.setRowSorter(sorter); casesTable.getSelectionModel().addListSelectionListener((e) -> { if (Case.isCaseOpen()) { - updateCaseSelection(); + updateOnCaseSelection(); } }); dataSourcesTable.getSelectionModel().addListSelectionListener((e) -> { if (Case.isCaseOpen()) { - updateDataSourceSelection(); + updateOnDataSourceSelection(); } }); casesTable.getRowSorter().toggleSortOrder(0); @@ -778,11 +778,18 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } } + /** + * Create a unique string to be used as a key for deduping data sources as + * best as possible + */ private String makeDataSourceString(String caseUUID, String deviceId, String dataSourceName) { return caseUUID + deviceId + dataSourceName; } - private void updateCaseSelection() { + /** + * Updates diplayed information to be correct for the current case selection + */ + private void updateOnCaseSelection() { int[] selectedCaseIndexes = casesTable.getSelectedRows(); DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourcesTable.getModel(); dataSourceModel.setRowCount(0); @@ -814,7 +821,11 @@ public class DataContentViewerOtherCases extends JPanel implements DataContentVi } } - private void updateDataSourceSelection() { + /** + * Updates diplayed information to be correct for the current data source + * selection + */ + private void updateOnDataSourceSelection() { int[] selectedCaseIndexes = casesTable.getSelectedRows(); DefaultTableModel dataSourceModel = (DefaultTableModel) dataSourcesTable.getModel(); int[] selectedDataSources = dataSourcesTable.getSelectedRows(); From bee943c130c1e8da1e42cd9e3984d4467a730702 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 15 Mar 2019 12:44:27 -0400 Subject: [PATCH 49/80] 4797 modify script not to check if branch exists before attempting to pull it --- setupSleuthkitBranch.py | 48 +++++++++++++++-------------------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/setupSleuthkitBranch.py b/setupSleuthkitBranch.py index 881ce44570..0cdfab82f1 100644 --- a/setupSleuthkitBranch.py +++ b/setupSleuthkitBranch.py @@ -17,19 +17,6 @@ DEVELOP_BRANCH='develop' passed = 1 -def getSleuthkitBranchList(branchOwner): - # Returns the list of sleuthkit branches - cmd = ['git','branch','-a'] - retdir = os.getcwd() - os.chdir(TSK_HOME) - output = subprocess.check_output(cmd) - branches = [] - for branch in output.strip().split(): - if branch.startswith('remotes/'+branchOwner): - branches.append(branch.split('/')[2]) - os.chdir(retdir) - return branches - def gitSleuthkitCheckout(branch, branchOwner): ''' Checksout sleuthkit branch @@ -39,24 +26,23 @@ def gitSleuthkitCheckout(branch, branchOwner): # passed is a global variable that gets set to non-zero integer # When an error occurs global passed - if branch in getSleuthkitBranchList(branchOwner): - #add the remotes - #if the branch owner was origin substitute in the name of that owner - if (branchOwner==ORIGIN_OWNER): - gitHubUser="sleuthkit" - else: - gitHubUser=branchOwner - checkout=['git','checkout','-b',branchOwner+'-'+branch] - print("Command run:" + " ".join(checkout)) - passed = subprocess.call(checkout, stdout=sys.stdout,cwd=TSK_HOME) - cmd = ['git','pull', "/".join(["https://github.com", gitHubUser, "sleuthkit.git"]), branch] - if passed != 0: #0 would be success - #unable to create new branch return instead of pulling - return - print("Command run:" + " ".join(cmd)) - passed = subprocess.call(cmd,stdout=sys.stdout,cwd=TSK_HOME) - if (passed == 0): - sys.exit() #exit if successful + #add the remotes + #if the branch owner was origin substitute in the name of that owner + if (branchOwner==ORIGIN_OWNER): + gitHubUser="sleuthkit" + else: + gitHubUser=branchOwner + checkout=['git','checkout','-b',branchOwner+'-'+branch] + print("Command run:" + " ".join(checkout)) + passed = subprocess.call(checkout, stdout=sys.stdout,cwd=TSK_HOME) + cmd = ['git','pull', "/".join(["https://github.com", gitHubUser, "sleuthkit.git"]), branch] + if passed != 0: #0 would be success + #unable to create new branch return instead of pulling + return + print("Command run:" + " ".join(cmd)) + passed = subprocess.call(cmd,stdout=sys.stdout,cwd=TSK_HOME) + if (passed == 0): + sys.exit() #exit if successful else: print("Branch: " + branch + " does not exist for owner: " + branchOwner) From e5c0e160a391bae2c871eb191478441720c2218d Mon Sep 17 00:00:00 2001 From: Raman Date: Fri, 15 Mar 2019 14:24:32 -0400 Subject: [PATCH 50/80] 4776: Missing jar error - We have a dependency on AppleJavaExtensions, but we are not downloading it. --- CoreLibs/ivy.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/CoreLibs/ivy.xml b/CoreLibs/ivy.xml index 2d955363d9..1ad880a363 100644 --- a/CoreLibs/ivy.xml +++ b/CoreLibs/ivy.xml @@ -10,6 +10,7 @@ + From e80f9d5d4d09becbbebfda7bd38d1b79419e7eb0 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 15 Mar 2019 15:47:58 -0400 Subject: [PATCH 51/80] 4791 ensure null correlation type is used for intra case search --- .../commonpropertiessearch/CommonAttributePanel.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java index 030b78c76e..a9c9ba1762 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributePanel.java @@ -294,7 +294,11 @@ final class CommonAttributePanel extends javax.swing.JDialog implements Observer DataResultTopComponent.createInstance(tabTitle, Bundle.CommonAttributePanel_search_results_pathText(), commonFilesNode, 1); } else { // -3969 - Node commonFilesNode = new CommonAttributeSearchResultRootNode(metadata, interCasePanel.getSelectedCorrelationType()); + CorrelationAttributeInstance.Type correlationType = null; + if (interCaseRadio.isSelected()){ + correlationType = interCasePanel.getSelectedCorrelationType(); + } + Node commonFilesNode = new CommonAttributeSearchResultRootNode(metadata, correlationType); DataResultFilterNode dataResultFilterNode = new DataResultFilterNode(commonFilesNode, ExplorerManager.find(CommonAttributePanel.this)); TableFilterNode tableFilterWithDescendantsNode = new TableFilterNode(dataResultFilterNode, 3); DataResultViewerTable table = new CommonAttributesSearchResultsViewerTable(); From aa40f6da03301a2dc16f00f5608c8172dfcba1c0 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 15 Mar 2019 16:02:31 -0400 Subject: [PATCH 52/80] 4805 remove select all from right click action in image gallery --- .../autopsy/imagegallery/gui/drawableviews/GroupPane.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/drawableviews/GroupPane.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/drawableviews/GroupPane.java index 3d20fb7edb..701a2628aa 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/drawableviews/GroupPane.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/drawableviews/GroupPane.java @@ -890,9 +890,6 @@ public class GroupPane extends BorderPane { t.consume(); break; case SECONDARY: - if (t.getClickCount() == 1) { - selectAllFiles(); - } if (isNotEmpty(selectionModel.getSelected())) { if (contextMenu == null) { contextMenu = buildContextMenu(); From 2dc4351c21c152b5d1b3a8d8dd07c5d3fd75b38c Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 15 Mar 2019 16:57:00 -0400 Subject: [PATCH 53/80] 3956 change is supported method for hex and string viewer to lookup content using DataContentViewerUtility --- .../autopsy/corecomponents/DataContentViewerHex.java | 10 +++------- .../corecomponents/DataContentViewerString.java | 4 ++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java index 601d74293d..a092186318 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -605,12 +605,8 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont if (node == null) { return false; } - Content content = node.getLookup().lookup(Content.class); - if (content != null && content.getSize() > 0) { - return true; - } - - return false; + Content content = DataContentViewerUtility.getDefaultContent(node); + return content != null && content.getSize() > 0; } @Override diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java index bc0980c58c..919be9856c 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2019 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -498,7 +498,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC if (node == null) { return false; } - Content content = node.getLookup().lookup(Content.class); + Content content = DataContentViewerUtility.getDefaultContent(node); return (content != null && content.getSize() > 0); } From 86d2747c7a8c2038a05cc0a54395bb44a772cdfc Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 15 Mar 2019 17:02:30 -0400 Subject: [PATCH 54/80] 3956 clean up netbeans suggestions and remove unused method --- .../DataContentViewerString.java | 33 +++++-------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java index 919be9856c..a5a94031e9 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerString.java @@ -18,12 +18,12 @@ */ package org.sleuthkit.autopsy.corecomponents; -import java.awt.*; +import java.awt.Component; +import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import java.util.logging.Level; - import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JMenuItem; @@ -36,7 +36,7 @@ import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractResult; import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractUnicodeTable.SCRIPT; import org.sleuthkit.autopsy.datamodel.StringContent; import org.sleuthkit.datamodel.Content; -import org.sleuthkit.datamodel.TskException; +import org.sleuthkit.datamodel.TskCoreException; /** * Viewer displays strings extracted from contents. @@ -264,7 +264,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC private void prevPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_prevPageButtonActionPerformed //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar currentOffset -= PAGE_LENGTH; - currentPage = currentPage - 1; + currentPage -= 1; currentPageLabel.setText(Integer.toString(currentPage)); setDataView(dataSource, currentOffset); }//GEN-LAST:event_prevPageButtonActionPerformed @@ -272,7 +272,7 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC private void nextPageButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextPageButtonActionPerformed //@@@ this is part of the code dealing with the data viewer. could be copied/removed to implement the scrollbar currentOffset += PAGE_LENGTH; - currentPage = currentPage + 1; + currentPage += 1; currentPageLabel.setText(Integer.toString(currentPage)); setDataView(dataSource, currentOffset); }//GEN-LAST:event_nextPageButtonActionPerformed @@ -348,18 +348,15 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC int bytesRead = 0; // set the data on the bottom and show it - String text = ""; + if (dataSource.getSize() > 0) { try { bytesRead = dataSource.read(data, offset, PAGE_LENGTH); // read the data - } catch (TskException ex) { - text = NbBundle.getMessage(this.getClass(), - "DataContentViewerString.setDataView.errorText", currentOffset, - currentOffset + PAGE_LENGTH); + } catch (TskCoreException ex) { logger.log(Level.WARNING, "Error while trying to show the String content.", ex); //NON-NLS } } - + String text; if (bytesRead > 0) { //text = DataConversion.getString(data, bytesRead, 4); final SCRIPT selScript = (SCRIPT) languageCombo.getSelectedItem(); @@ -511,18 +508,4 @@ public class DataContentViewerString extends javax.swing.JPanel implements DataC public Component getComponent() { return this; } - - - /* - * Show the right click menu only if evt is the correct mouse event - */ - private void maybeShowPopup(java.awt.event.MouseEvent evt) { - if (evt.isPopupTrigger()) { - rightClickMenu.setLocation(evt.getLocationOnScreen()); - rightClickMenu.setVisible(true); - copyMenuItem.setEnabled(outputViewPane.getSelectedText() != null); - } else { - rightClickMenu.setVisible(false); - } - } } From 42f6950a977f1807c2c7f781cb6ae41b39aa9849 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 15 Mar 2019 17:05:23 -0400 Subject: [PATCH 55/80] 3956 clean up netbeans suggestions for Hex Viewer --- .../corecomponents/DataContentViewerHex.java | 67 +++++++++---------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java index a092186318..0753f18905 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/DataContentViewerHex.java @@ -18,7 +18,8 @@ */ package org.sleuthkit.autopsy.corecomponents; -import java.awt.*; +import java.awt.Component; +import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -26,7 +27,6 @@ import java.io.IOException; import java.nio.file.Paths; import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.PlatformUtil; - import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JMenuItem; @@ -46,7 +46,7 @@ import org.sleuthkit.autopsy.coreutils.FileUtil; import org.sleuthkit.autopsy.datamodel.ContentUtils; import org.sleuthkit.autopsy.datamodel.DataConversion; import org.sleuthkit.datamodel.Content; -import org.sleuthkit.datamodel.TskException; +import org.sleuthkit.datamodel.TskCoreException; /** * Hex view of file contents. @@ -55,8 +55,8 @@ import org.sleuthkit.datamodel.TskException; @ServiceProvider(service = DataContentViewer.class, position = 1) public class DataContentViewerHex extends javax.swing.JPanel implements DataContentViewer { - private static final long pageLength = 16384; - private final byte[] data = new byte[(int) pageLength]; + private static final long PAGE_LENGTH = 16384; + private final byte[] data = new byte[(int) PAGE_LENGTH]; private static int currentPage = 1; private int totalPages; private Content dataSource; @@ -291,8 +291,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont private void goToPageTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_goToPageTextFieldActionPerformed String pageNumberStr = goToPageTextField.getText(); - int pageNumber = 0; - + int pageNumber; try { pageNumber = Integer.parseInt(pageNumberStr); } catch (NumberFormatException ex) { @@ -330,7 +329,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont Utilities.getRowEnd(outputTextArea, outputTextArea.getCaretPosition())) .toString(); // NOTE: This needs to change if the outputFormat of outputTextArea changes. - String hexForUserSelectedLine = userSelectedLine.substring(0, userSelectedLine.indexOf(":")); + String hexForUserSelectedLine = userSelectedLine.substring(0, userSelectedLine.indexOf(':')); return Long.decode(hexForUserSelectedLine) + userInput; } catch (BadLocationException | StringIndexOutOfBoundsException | NumberFormatException ex) { @@ -361,19 +360,20 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont }//GEN-LAST:event_goToOffsetTextFieldActionPerformed @NbBundle.Messages({"DataContentViewerHex.launchError=Unable to launch HxD Editor. " - + "Please specify the HxD install location in Tools -> Options -> External Viewer", - "DataContentViewerHex.copyingFile=Copying file to open in HxD..."}) + + "Please specify the HxD install location in Tools -> Options -> External Viewer", + "DataContentViewerHex.copyingFile=Copying file to open in HxD..."}) private void launchHxDButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_launchHxDButtonActionPerformed new BackgroundFileCopyTask().execute(); }//GEN-LAST:event_launchHxDButtonActionPerformed /** - * Performs the file copying and process launching in a SwingWorker so that the - * UI is not blocked when opening large files. + * Performs the file copying and process launching in a SwingWorker so that + * the UI is not blocked when opening large files. */ private class BackgroundFileCopyTask extends SwingWorker { + private boolean wasCancelled = false; - + @Override public Void doInBackground() throws InterruptedException { ProgressHandle progress = ProgressHandle.createHandle(DataContentViewerHex_copyingFile(), () -> { @@ -382,31 +382,31 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont wasCancelled = true; return true; }); - + try { File HxDExecutable = new File(UserPreferences.getExternalHexEditorPath()); - if(!HxDExecutable.exists() || !HxDExecutable.canExecute()) { + if (!HxDExecutable.exists() || !HxDExecutable.canExecute()) { JOptionPane.showMessageDialog(null, DataContentViewerHex_launchError()); return null; } - + String tempDirectory = Case.getCurrentCaseThrows().getTempDirectory(); File tempFile = Paths.get(tempDirectory, FileUtil.escapeFileName(dataSource.getId() + dataSource.getName())).toFile(); - + progress.start(100); ContentUtils.writeToFile(dataSource, tempFile, progress, this, true); - - if(wasCancelled) { + + if (wasCancelled) { tempFile.delete(); progress.finish(); return null; } - + try { ProcessBuilder launchHxDExecutable = new ProcessBuilder(); - launchHxDExecutable.command(String.format("\"%s\" \"%s\"", - HxDExecutable.getAbsolutePath(), + launchHxDExecutable.command(String.format("\"%s\" \"%s\"", + HxDExecutable.getAbsolutePath(), tempFile.getAbsolutePath())); launchHxDExecutable.start(); } catch (IOException ex) { @@ -418,14 +418,13 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont logger.log(Level.SEVERE, "Unable to copy file into temp directory", ex); JOptionPane.showMessageDialog(null, DataContentViewerHex_launchError()); } - + progress.finish(); return null; } } - - - + + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem copyMenuItem; private javax.swing.JLabel currentPageLabel; @@ -461,7 +460,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont return; } currentPage = page; - long offset = (currentPage - 1) * pageLength; + long offset = (currentPage - 1) * PAGE_LENGTH; setDataView(offset); goToOffsetTextField.setText(Long.toString(offset)); } @@ -475,7 +474,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont if (this.dataSource == null) { return; } - currentPage = (int) (offset / pageLength) + 1; + currentPage = (int) (offset / PAGE_LENGTH) + 1; setDataView(offset); goToPageTextField.setText(Integer.toString(currentPage)); } @@ -489,10 +488,10 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont int bytesRead = 0; if (dataSource.getSize() > 0) { try { - bytesRead = dataSource.read(data, offset, pageLength); // read the data - } catch (TskException ex) { + bytesRead = dataSource.read(data, offset, PAGE_LENGTH); // read the data + } catch (TskCoreException ex) { errorText = NbBundle.getMessage(this.getClass(), "DataContentViewerHex.setDataView.errorText", offset, - offset + pageLength); + offset + PAGE_LENGTH); logger.log(Level.WARNING, "Error while trying to show the hex content.", ex); //NON-NLS } } @@ -500,7 +499,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont // set the data on the bottom and show it if (bytesRead <= 0) { errorText = NbBundle.getMessage(this.getClass(), "DataContentViewerHex.setDataView.errorText", offset, - offset + pageLength); + offset + PAGE_LENGTH); } // disable or enable the next button @@ -521,7 +520,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont // set the output view if (errorText == null) { - int showLength = bytesRead < pageLength ? bytesRead : (int) pageLength; + int showLength = bytesRead < PAGE_LENGTH ? bytesRead : (int) PAGE_LENGTH; outputTextArea.setText(DataConversion.byteArrayToHex(data, showLength, offset)); } else { outputTextArea.setText(errorText); @@ -547,7 +546,7 @@ public class DataContentViewerHex extends javax.swing.JPanel implements DataCont dataSource = content; totalPages = 0; if (dataSource.getSize() > 0) { - totalPages = Math.round((dataSource.getSize() - 1) / pageLength) + 1; + totalPages = Math.round((dataSource.getSize() - 1) / PAGE_LENGTH) + 1; } totalPageLabel.setText(Integer.toString(totalPages)); From 734883521949c8edb7f058f6682daf0edf0c6d6c Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Mon, 18 Mar 2019 10:44:23 -0400 Subject: [PATCH 56/80] Added report to case report list --- .../autopsy/communications/Bundle.properties-MERGED | 1 + .../autopsy/communications/VisualizationPanel.java | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED index a4be4813c9..6a2a238915 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED @@ -85,4 +85,5 @@ VisualizationPanel.clearVizButton.text_1=Clear Viz. VisualizationPanel.snapshotButton.text_1=Snapshot Report VisualizationPanel_action_dialogs_title=Communications VisualizationPanel_action_name_text=Snapshot Report +VisualizationPanel_module_name=Communications VisualizationPanel_snapshot_report_failure=Snapshot report not created. An error occurred during creation. diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java index f8ff5aaf69..625b241d32 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java @@ -694,6 +694,8 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider -> Notifications.create().owner(notificationsJFXPanel.getScene().getWindow()) .text(Bundle.VisualizationPanel_snapshot_report_failure()) .showWarning()); + } catch( TskCoreException ex) { + logger.log(Level.WARNING, "Unable to add report to currenct case", ex); //NON-NLS } }//GEN-LAST:event_snapshotButtonActionPerformed @@ -732,6 +734,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider */ @NbBundle.Messages({ "VisualizationPanel_action_dialogs_title=Communications", + "VisualizationPanel_module_name=Communications", "VisualizationPanel_action_name_text=Snapshot Report", "VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report:", "VisualizationPane_reportName=Communications Snapshot", @@ -741,7 +744,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider "# {0} - report name", "VisualizationPane_overrite_exiting=Overwrite existing report?\n{0}" }) - private void handleSnapshotEvent() throws NoCurrentCaseException, IOException { + private void handleSnapshotEvent() throws NoCurrentCaseException, IOException, TskCoreException { Case currentCase = Case.getCurrentCaseThrows(); Date generationDate = new Date(); @@ -779,6 +782,8 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider } } else { createReport(currentCase, reportName); + currentCase.addReport(reportPath.toString(), Bundle.VisualizationPanel_module_name(), reportName); + } } } From c13e3100167d4e8e42b5e8b800b08c1b7d052c65 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Mon, 18 Mar 2019 16:47:36 -0400 Subject: [PATCH 57/80] Added devices to the report table and made account type list more dynamic --- .../snapshot/CommSnapShotReportWriter.java | 99 ++++++++++++++----- .../snapshot/comm_snapshot_template.html | 12 +-- .../uisnapshot/UiSnapShotReportWriter.java | 23 ++++- 3 files changed, 98 insertions(+), 36 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java b/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java index becea9ebcd..8024415d63 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java +++ b/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java @@ -24,6 +24,8 @@ import java.io.IOException; import java.nio.file.Path; import java.text.SimpleDateFormat; import java.time.Instant; +import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Set; @@ -34,7 +36,11 @@ import org.sleuthkit.datamodel.Account; import org.sleuthkit.datamodel.CommunicationsFilter; import org.sleuthkit.datamodel.CommunicationsFilter.AccountTypeFilter; import org.sleuthkit.datamodel.CommunicationsFilter.DateRangeFilter; +import org.sleuthkit.datamodel.CommunicationsFilter.DeviceFilter; import org.sleuthkit.datamodel.CommunicationsFilter.SubFilter; +import org.sleuthkit.datamodel.DataSource; +import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.TskCoreException; /** * Generate and write the Communication snapshot report to disk. @@ -71,7 +77,7 @@ public class CommSnapShotReportWriter extends UiSnapShotReportWriter { */ @Override protected void writeSnapShotHTMLFile() throws IOException { - SimpleDateFormat formatter = new SimpleDateFormat("MMMMM dd, yyyy"); + SimpleDateFormat formatter = new SimpleDateFormat("MMMMM dd, yyyy"); //NON-NLS ImageIO.write(image, "png", getReportFolderPath().resolve("snapshot.png").toFile()); //NON-NLS @@ -81,10 +87,10 @@ public class CommSnapShotReportWriter extends UiSnapShotReportWriter { List filters = filter.getAndFilters(); - for (SubFilter f : filters) { - if (f.getClass().getName().equals(DateRangeFilter.class.getName())) { - long startDate = ((DateRangeFilter) f).getStartDate(); - long endDate = ((DateRangeFilter) f).getEndDate(); + for (SubFilter filter : filters) { + if (filter.getClass().getName().equals(DateRangeFilter.class.getName())) { + long startDate = ((DateRangeFilter) filter).getStartDate(); + long endDate = ((DateRangeFilter) filter).getEndDate(); if (startDate > 0) { @@ -94,33 +100,76 @@ public class CommSnapShotReportWriter extends UiSnapShotReportWriter { if (endDate > 0) { snapShotContext.put("endTime", formatter.format(new Date((Instant.ofEpochSecond(endDate)).toEpochMilli()))); //NON-NLS } - } else if (f.getClass().getName().equals(AccountTypeFilter.class.getName())) { - snapShotContext.put("emailSelected", "checked"); //NON-NLS + } else if (filter.getClass().getName().equals(AccountTypeFilter.class.getName())) { - Set types = ((AccountTypeFilter) f).getAccountTypes(); - for (Account.Type type : types) { - if (type == Account.Type.DEVICE) { - snapShotContext.put("deviceSelected", "checked"); //NON-NLS - } else if (type == Account.Type.PHONE) { - snapShotContext.put("phoneSelected", "checked"); //NON-NLS - } else if (type == Account.Type.EMAIL) { - snapShotContext.put("emailSelected", "checked"); //NON-NLS - } else if (type == Account.Type.FACEBOOK) { - snapShotContext.put("facebookSelected", "checked"); //NON-NLS - } else if (type == Account.Type.TWITTER) { - snapShotContext.put("twitterSelected", "checked"); //NON-NLS - } else if (type == Account.Type.INSTAGRAM) { - snapShotContext.put("instagramSelected", "checked"); //NON-NLS - } else if (type == Account.Type.WHATSAPP) { - snapShotContext.put("whatsAppSelected", "checked"); //NON-NLS - } else if (type == Account.Type.WEBSITE) { - snapShotContext.put("websiteSelected", "checked"); //NON-NLS + Set selectedAccounts = ((AccountTypeFilter) filter).getAccountTypes(); + ArrayList fullAccountList = new ArrayList<>(); + for (Account.Type type : Account.Type.PREDEFINED_ACCOUNT_TYPES) { + if (type == Account.Type.CREDIT_CARD) { + continue; } + + fullAccountList.add(new ReportWriterHelper(type.getDisplayName(), selectedAccounts.contains(type))); } + + snapShotContext.put("accounts", fullAccountList); + } else if (filter.getClass().getName().equals(DeviceFilter.class.getName())) { + Collection ids = ((DeviceFilter) filter).getDevices(); + ArrayList list = new ArrayList<>(); + try { + final SleuthkitCase sleuthkitCase = getCurrentCase().getSleuthkitCase(); + for (DataSource dataSource : sleuthkitCase.getDataSources()) { + boolean selected = ids.contains(dataSource.getDeviceId()); + String dsName = sleuthkitCase.getContentById(dataSource.getId()).getName(); + list.add(new ReportWriterHelper(dsName, selected)); + } + } catch (TskCoreException ex) { + + } + + snapShotContext.put("devices", list); } } fillTemplateAndWrite("/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html", "Snapshot", snapShotContext, getReportFolderPath().resolve("snapshot.html")); //NON-NLS } + /** + * Helper class for use with the html template + */ + private final class ReportWriterHelper { + + private final String label; + private final boolean selected; + + /** + * Helper class for use with the html template. + * + * @param label Display label + * @param selected Boolean selected state + */ + ReportWriterHelper(String label, boolean selected) { + this.label = label; + this.selected = selected; + } + + /** + * Returns the display label + * + * @return The display label + */ + public String getLabel(){ + return label; + } + + /** + * Returns the selection state + * + * @return The selection state + */ + public boolean isSelected(){ + return selected; + } + } + } diff --git a/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html b/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html index 3800cae9fd..078f6fc978 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html +++ b/Core/src/org/sleuthkit/autopsy/communications/snapshot/comm_snapshot_template.html @@ -11,16 +11,10 @@ Date Range Start:{{startTime}} End:{{endTime}} + Devices: + {{#devices}}{{label}}{{/devices}} Account Types - Device: - Phone: - Email: - Facebook: - Twitter - Instagram - WhatsApp - MessagingApp - Website + {{#accounts}}{{label}}{{/accounts}}

O*Kd65fO+0ozyHU*y5;(i>p8w{fQNowp6j65PM9+- zbG+6G>G^Oq>@>$Y$N}eHmNM4^<{*XjYmW8M5=Fcz$4>PXrVDdQ|rQz<2WIJV73JW8sFZQ>f?CtQH9y@+9F74q6p!+U$W+3FA$|+N}kANho zccZwT;%JiN*t!ulZsuCn1Fh%!&L7VmD{U23ab$>qhb=i?i-P4Wg^e+>0j#rlm2FmM z$@uhs6x%AVzPX0uDl5@W6QB5>4d7J;5BEu1CkPo{Gm)C>?5UWyE$CRL!{>_GYxu4V z&C^xp81huY0;8=f{9UqoealtaEB2OsgD^ z_Q-?RnEAkZFO==41SQDvOCKD2*}k~mcUSAmnfo>%&Rt<^ey#~>P#V0(;8>$q&U$Uj zFlXDfICaZWSO@5_z-_l$j~mu0m^ntr;(rjNvJv&pc21jF4@`wK81rI!663tBn=OGO zzNWJU)6#%Z>*FQSwZq8xdrA)a!ba2~cO#kZY-rQ-lvbIG^b(aH$0=|5EsiO-ENJ4J zXcmcO`e|{!mS;I~p7WL?cRD%Jb1vm>x;ZjYyPOLQMTZssZ_u7ja#M|KObba~3vh2#!OX-OU@{6k@m*t$}nkRt!}r zuLx!&)*Js};hd`v?@EjBu;MN)%Z;P2d83P2gHVEN*Ac*HJ3G1K@c$G411Q8^?pTMO z!>4dO$0Yn8bv#NbG3Nd_*Fdg4I_&Nf%!b|GeE{z~&tx)@C%qcdiRyn5G?#l7%zEZH ztyi>MADi}@gVec?umr8zdmYXHDY&mb;LLRo7{H5^5goF zrJ`5Gl%$>9q2Sm?Yq<6%5C5Oy?BpKa_Anl;Eq4EqZztscGHi$3e>VsJ$*Ms+NEUDS z7DGy3(|Aifac%-megh~wzUPHA5_@&P=@DklnJB-0&F(zF8f#b^%UiGbxfTxiT7^5K zFfUv;=&L)2Tk7&QHMUN<}m>!*p1MxBC|FGMQ(eUm1v z`6i)O^~f7bH})C&G$EKU$g7xC29_n9{=y;80ig@hxMzk zHQ0;Ibq{B2{a?2CeP#Ubp8E;x6&&Twe{Zbga?~A14D#rIHWuG@2Iqy7C5&H_VxiPm@n@b;@esI=0L6p^!s7?Mof;sbDVU@mtDX5 zbV&7dzInJ1vgRLl{s+bt4&UHudKBfks}p;;>GKVVoPG3vHPpv78vh65+DOZDW#vDT z%bOa}{91mgUl<`*-tg-&hIDe%o_WZPz9T^Ycg^?ZtrSfr-cU@~yaRdxWKA4JO#E#0 zG|qBdtMV}P)05C=Idx&Ke8C?oosFkWYeEY{8@YH0maGd_g(puMUsCQYV#dn2Kdv6@ zbkea0!FMy}U_Y?{qhRd8Rb}iu>byLRXAPOPqOsrbaKzE?w&UGCTn97E)us2XWl;)^vWau0%GlKG;*48utKAeYi9?uk`7CHN%f_2{POx zbS-vukYC4}e~#HFsloJW6YtND;dbTy@zj#dNE}R!cY5$WZp@z^ZFC%6fBI|>dJmI2 zcnzt0q&p*Mern|YXfk{C8`l$YX?gembsdf^pLo5-V%A42w}~V6#<_RKxE$X2*#F>T z<=HazI~U#h(Dxa*wdrcsKGU8}-ecq0_vc^?V*6p)GXLJgln+OC+8Vel;d^blS<~r_J`mbvBzWIdu-7VK=(&xNd z<7m@+*<3g1`_}jmdi;HBhMI@jv>I(xuk!O@1y>?Dz`O&`y^hs^kjoQ9USf}q&~TIA+$<;H=mn=mgm2Ltn2vrak!UOgSK}jS|0D= z;{AcVBAN$3$2LEmccdhuliz;_%^bdj1ur|Tux>xJKt9r;;#xrJUD z!%G)0$XYUcjw2KIB)EG|Z2U_>ps}9c_mDH5;l#tbe3;*P@)~@xPv%FeoTq;& zfX_S?S{$sZspTtMoab8cD7=#!>>DR~6N$v(j$|pj?c55(v0L6ZSvAuMZhk;xz2yed zzIz?IQV$3=s7^cv8+shJx_40B^E;~UQ-CLRF0%Thsy-z+LF)rrpGiHctPZ#jf;RCB!=H0391ko9BL z8E?=ePb%Vv_s6|9Y_%~3{ay=`m0e>`l(Ux4cRwn?||L?cJ;|& z+HZhw^B_E@N!~ulZ;2=0DV9pX-x|71x}r=vqf9!fK2elOf^wq1$A>7jb|{|r4fylI zxNV?6inD-mN#x&0{MARHe91E)RShWVtOn$FQUj)>sR6lts;H;O(Rfc5&TGh%-btlT z8LZOZJ8IvMy@PfS*wwG9Z;{U1R`A?3T&Z2;^VhSZ=T^jBaSZN>XS}D}nZ~z4{}^ZL zFvJb(q=rrDu7>3f+BaZtzukRy^{VPw)Wa!1Zi@aD=Lqr*=m6?Y*~WRgWUt zHUK^U?>Mg^&%jP=| zXQzDjfG0Wu<1G0CT~wf?y9yvr0pux=Ti+I)`ltcl>lx?=MrV?Ioq~nJM>w~V&*^*h z{kO^*lBR~#^jAYl`l%sP`l=x)=e~P&*_L2y=Fiv)*-g12oxsym4ax5TzV2$s6$AG5 z+pF7G$rPpD!zR-H2JEngc2PrX`l_KNebmtW-fHNSUTWym1NZgc+jm!NKVrFdIZ>%! z;>qwIp6GV68dm^f3JK0zh9Qu;d8z-=R4n- zGc#w-Jbb@NGwHPde&o4&0qq{zLt0~bpT!Voh%-In%s(M}=5+p6KBX?wDvbFdRDKp^ z>t<)FS=xL8ib!0ywk-EX*ko#lHk~29gSeS&LhY3JgnnE`*e%e3Gu+ooTov}|sKnbm zp}$Jk9wq!YQ0fFP&W%TspW}pIeFgik68AT3PXw76EdR_9xwA9P*|h^rVQhpc3>BEd z(tK0s<0PPMHLhU-DYU7@<@&*$!1{s5lLB?>O=^;lO`7hm<-ZT9kY5!w+ z@Z~f9(a-bg=lS&W{1U4!b0N^75s$MR*yepUU<=BpSB*oN;UUg|jc+K*2Do=oyRzM;H1Svj~PBRI%CBh=4S zUv11I*O1gio*~bTrP}M~39FVco-6T**Gczqmeg>M>7EuRPkV-uX5#ZmJMr3=%X@ya zvm!%iFTO#%A&OoHl?>>x`NBrDRP*gl$eiQym2{mh?J3Rl!#;{VNs1F&L!9X~j`>!4hs8^*1Ej9a_bu;;Ya zm?N5A@^vcpm`Oc$m+L*;H*z53;TXol(TsVGqF z^Xu?=B;MBD05_&_FR#6uTDG<}5ogy5@NsEoobMbnyfe4Mdep^3f@9PCCarCv$wKD4&`rqMutR6t>$eHpEMcT2@rl<- z_ei_r9@9N7u@^nU&Lqp2l$ei%G-og6-CStYd6Z+c_*CP~X#9R#miDaH!I8}B3~d8x zAHtu!8C_Ued@tX4lifL_BeQ)_>%d4_^?+j9CgnMa%mp7|%on*~oR|+~nPIfwVOy}J z5$8{r5Z8ezsTo{quK9om`IKDbpRUE2#GH*h0uL1fS3l$mdRa{h{4 znn7fK{VC=GA}79-^l|#D=MNO$iT!}GrVuY-DZ|=eWw|VQi9w22sPWi*hn*;x)@JgjHfQTN~?9T0@=H_ z(gs9+>>%coW6W6JaFaY^a`m=@j1yf;wRisL5q>;rAH0fgLun_`Jb!@iHyXr`X)oY$aM2VLWF-4S|M?x2QU{+3ydxu5E$)C z4P-@Jd0L6T=UcRUkr~EUHhdSD{?+}0V@oqk=}A6Yb(CHEL+6?Nwkh~0=bNOkZZuanY{@wa=rG8ZFVL%N1^4e1)v?J4)) zeJ{R5V)_2t^Ol^x@1jg|QEeG^>kjPJtukJB3~tY8O^*z$PE&ii<0am?B?kuj51+a;JVy{}J=INMvl^9!$Tb?;@MK#r0c> zFZ%`k|8K}h{Dcnr|5Vb+>1T2t91}ULEt!WhF@2HZl z(a_q7qsV>iRqV9L+BLzU*z;`kl4Sy0lGg+`A~)kG^AwRC(;q+Q0>en{))$M?Owq~n z%&4PNOm3UA2W7~<0PRFx+G6r`8tn@^fV@Fo>_Bq-|GfN$ovFt66~6jITk+-dT_In# zp|ruVm!+G_7~4mm%rL``W}37^gH0-am^n_rgSH`W=Ll^>>~)N=9bOn?yIkK19q_^! z^W{4K_pJR(7`p0yopcZJ@|>=8jr7Ibg&w=pGh^xN!ORvzlT3G z?M>Dyq5SE@TYHmbG7e&I?D|wT>r+{b0fSBcmiYQq>?D7?$u(n6#MhDY|HLNWpPB#3eT4&9FU&V_FCCra_c!_6o5j9XT4|vPBKs8d z5c1NNldsVUvIbf6cV++fy}O@HHP1m=m$>I7UOS(Mc@ukg-h4glZDalfRjB;my7rCk z$J}tb8Pb_qZ0C;W@x`go#U?d2&9uKuwL+UDow5DR*rV?;Ifte){$6CmKVp1ln?6J2 z;@6ZNS%a+kyRx)To|p72>4ypT8}iaq=KuElnA;}mU)BM7)x&>PSIOyj_nm7qedg!T zUGJqYWcN4OyE8inwGV8?LIlT7=x-(*9cFUy>(feeOb2q;5B8Z|$Vxv*zLvHyjQYcF z{~wgC_%UM(RQf*hJ3QSCuNq>8mojcucC8mwOWumId}d;{&s2-t0G}CfE9hB-E_kXkOKa;m)9sE5X zZN+4tDLT(*PR*olWIc7LKj`MCnaoc!%+M{&Psa^39wry-A>;SY$!tMGBZ)S%ISzj5$`bvI}^%arb|3#m9 zNaTm`6+vHGK=y+ipXzvfo*-c#Mb8toKjbrGANHB!a<5&RIg7QKQN8-yMaW(CWuM8K zg{-vMeLO?P=U9%LSD$ceNX3u(%(egSGvy)|7(kmITsElFTkUf`b2ag)U!m+G!^NQ>C-;bD&e9Z z&Lj-k9bZe7xVNFh5}(oEWK^bg_U}lIq*Qai-3!Y!ozM78-ZyCX$cz32TCjVo|$~_-Zq~Z^&M=)8RA34^?#oBFY$KX$vRP$tn;$ARLS`vTaM&3 zJHP8Q>-YQ22DwM-qm+J0`67gU4caQ<=MFUIh6)1bmgWV{^$iVh-XfB#{bLU@Yrc;j zL~i0BGx6l;z{J?7z{JqVz{JuKfr-BSfF~RJfzP}J9TwSM@^YHEXAjUn=Mw*S=CiHH znIEAGkqxA?KAFK>c902_B+q3dt($zveTY&`#v!zT|7hN#w-#C5I==_0|rK z{mN(F_qxwyT*~w9`ZedE*pDor-xtvD3o3_ooT)65j}5=^nZR$+`QNx-;U|NF>as2?j+EsWE?p(l5vkOV8=$AU4QbKH=)T3oGz2E@xPHZ$eMpa z*3QkzS5}ETW$4z$-fP%Vbn9X=4j;P21W)_SAD}kLi-et=Zm$Qu?K6kGu(laSuGc}w zys*-__WBmWPHQX zd`_Cl;ats-5a0K%;%u>wxfR5J2Qn4N*zwQXcje4vw|&?B$gLXfH$@^VYZ&|N8QkI= z9hXDI{UzWxK^rgUCeM6s@icPpjPsj_$d1Gh3Y}v{R!w9qIh%dWafXuu?cRQo8SgiT ziu`7q$maDkdHd`RUoflKjde$eyJn)_?3ehGL8heiT7QXenLl|Hb+XmS&7I;m$3)id zm5)vy>*Q<#dY>;c7x+!?BIM3XH|P1@YYIC@cZ_T=Xw8cZuO3$Hd^VBEnd>(*L{9Q{ zYjWOliF+LiNqp~TIqjaMJTrG5`h#v4SzDjXr4#D&G;#0D_nTc3e+D}_ZGqq9E%cjq zk+I`g?`MYdk!glbikz%9;ICzus9hm1GcNO+!4-ZpYBBL*BiSp=V?54dY|SgliAa94 zi2p4#Lu7if$@PoS-(tV1miTVt!A`>Ozua$HBrd_1-4yhj$DwV#+_Uluzj*|D@(j=0 zLEO|z%HG?(OXx>XXD@Mk3HQ?{GA{3#&s4%Ip@|Zgkk2Z@)+H+A{LI+;29E{6L=>c&p5Fd!8*?xx#P02JII)S!-p@XUvx5 zon)!6J;)5cl6Ea}vbR&(Kaj(|Z2t)9cB`M2*Z9r7P#}ox8TRuf&30t&yOuT}a(}~L z*^W%4ntmX1y_7-Xc0!vZzFS@-d}9sq5|>a1hY33g?f1gvTpaH=6oxJ|g;gb{kbR#* z-=z2&f|Ro`!<|j7$|HWbDLm0N`zDrn`H!Dqwk@}ugHa!_#QM*zxqkUe6~;VMPy1c( zH?0MXBmC^Sx|04_CB5ICJ?G3h{&C{D81MeGoBigJ>#%L!{fq-L7xHmkumwBL83uWd z(-&u4OR?WW2Su_A_$vdmnGf+KFRj-;>^FriesfCGDqzfzvsin}Q|#NoZr+Kn9>Z4; zG5=(32cJDSP}{DT&NH|A&5xmdBT_Be`B_ZzBy$MPbT}P!o&C4@BahkEMyMZEVps4Z zUYgI{L7RiF8s+qqE$3BY5N9O3_ZU3c{-5%j5l|t|m!I1=%w*q?c^1A<;#@0xR6jFn zHg9Ukn;;3g*v9=;clymmnnt#qo7BAs?>W_*{pJJE6`qW(Yuc zBgh6mP5)K-FLQk{*Pr(CDQ98Pk6ka5^BqTX+!+r!-%-@x6xH%~DbRUVG{d#C0^Z+X zFFcDgJp+6NCR@g5=94+hCvz&<8R!^f^(W8Xx6^Na1$pK9E&MwP*S(eRwXgWi@1dmf z9i?osg!W7sJ$>xh=R~}F#(vdrilMG&^rGj_KJ7PO zgglu7_8`v+<@nF48tOl*G~0g`ohGpdN_#EK;yhcocKP(z{N{U*v`ay2b5}{9)LHoagp*Jo7E=10>}ZbZfJm8!8=Q zhVG_qSwDdK;p}!U_91sDYcAH0$VfJ;_?OfVZ%8W zFr0G%_&eTN!)nPByHKX!TzQ}FN!};aGvA>@EpPJ{pUHtz5_{r7R=6LzRTK;JttJzwd2}V zzLjUCnAf1qUcS4P&y5G14edT2*l~h$qtWEGreq&-fb}5@iU%w#nMf3N-s*1*7Gx_b@Z~pgT?D^&csh>qGiZ1Z(A2-?Y~P}?WB_}etH}4QL&~nn(-jvJ*sxEz5Kp{zqGU{#k{Hd*}`?fV*a*~ zH^%im2iWQ5=g*h%H;0gaS?|pbFut`Fa^`UiYl@>8=SH!Qknherk|FPzkzk7XB6PMs zV<-H~CGqQQc_!lrXAb4maqFN+dbRh=*O4ozN-MbFgBF-pG~{WGC6YwZ?Px(+f!TpLDwecQ$Gc~6I)Q5Nm<8oc5sx~V|%Vj z>aUe}`(6sqvHKTeGRzokelGTs_2{H?$G&X8$=;G#Y|n+pINQ${HxgSivLx5Nvo;ie z61z57$B}GnqqTh{*yt;-$H!u9nXS5Y_7~e*h2O`RKdLf5!nywcdD{=We5W($YvxTU zW;NvLD_hoF@e%C1cqMtA!#Z->vs<0rleAJ>Qp`n=SI71p$p@4AVX?fc`nTH2l^;(r zpM<Z9K<>UdK<7$LN$C9=q{byICp&}y-vS7#q5MUy>=g) zwthCnJP3W<)4Q|L!R&6nLp3t7L^(T8$)U}1ew%idzuWEAWXnF!mcgAF9qH|9t^FhY zs#A--zIV^I6f^dIo~O^+usy{*1$ozQkBI$J`k#F#iuZ!uya^kLzg<8(P@CB5)&a7y zEm>wXWAtd|2cx&>JEitKPNwq}w`4@@{uTGKhh@*o`-TlP!`kpQSj!m};xCw$`q{rk zkD2_{JA8-ClKw%fC+0$4->-Ng#oPsb)6>&n=7A;Yj5V3>DU7)_d>IFFF4Q+@68c-Q z)Sb*dsk?$PtjBM$dx5RqUZC_j+b2mole0aUC;CSuYy=jeL_PvhX*%9Y+WSI0V{UctzG#yPb_d+ju^&;&ziqCD|9Us~2yW<6ue#+JvU^yE%kxc*Xsr*ChupY)bH>7Jiy&Swtb-s|sqR^Ptgz}m~WE%Cf_z9s1131D1iKWP|s zGORMY!@f&ax(feprLl7Y+q-#27H7_!4;gWNdVuZIR<}p7Be8@zDn6DS>)8Lca{+tq zAp@JnK6ItCY3}{^gf(5)ry{PL=TOc-&vJ@yNc|=GhG@~QA;{VRb#C{qEA1E*@#V2L z7@FwIt2*14S31F$=PUBb+O1pTDly|j7jT}Vm^H41wU{9B@_qp8y`#y4x0dc3H^_{O zmH5VmF7S;jE%uG`P4>Cdg2+$EV+uq}w5GzIILS#yi znc`&Rd86n%u?u-$sf50M0sW|$HaW$9H^8-XY;g!%%vpfZw87C)waMwcCl&2q?7q{n zfPOWf?{v&F_B$Q6>^6i2G zeA$A7U2~qGFS8$ZbfL-g%{TFNIk!*hvuWm#=1|hiBF*&VG`pQoalW&TC9FI6vUul( zwvx3a-s0R^8}HXwG7l+AH$}0*rieN&qWneC(VZhZ3WBz8GENjSUnryx7DnS*ckgg( z|F`e=jCK2F-n((UA>_`6v6fA{9A45@)@oPQ`IL2@E32Hdd60Ut_KWdB)>CwhaPN-M zf1}-eIC=N8MC~v(z_rEU)W;zIHrdt(@&#Lx zd%ZiGKfx5?XWG`#p3^Gd=NKaGsp~rz`0wZ|@jDkj`#qL|UcblU`Z7LjENKm_)5mcmiX>crBl)QP^qsdCQ2m*X=z zv%#M0uXY#3?i+4kUjUyNebQ+-8^yfFeQzcHp1JEE^otPvqUwD5#}xX7BY{EO{RUEOZ%9_d|`r%le{_GfZoqW?-QtxB3B>wUD`?bv+Vnn zvhTw^@-D5jONH2_p6|^00%^>VSOa7|Hh>)sRMIvX(?^Q$&Nbhs2)Z^tNaoVF4?Tt2(vpeA)882TYKejF6)3Ns0<=2T1HaqFf&Y-ON zCa>xDd_T~QH#sI3zcUxVGxs2E(E9$lCi{e&#kju4x^xIXi1t``FrlwW|Kwe`q7%t$ z`)+)UuN~R<`0$}@nNHB}$H|NuD^{@C2N{H{E;4h7)9HV!uowVs?k{&+67W@JGU86#(3 zuW)@{&dkMz1Olal0|8$~K-PAAMf|O(*nMS1p)Zsbm2N95@_nw%whbGeOLz|9LkZ7v z;nKIUPhIO7yID84V?~Vq*Tk8YC}&#gjyR)-cvon{lCQ&A8HQINP|=*#2bg zLY7HCh)uLQS?qLT^FEKfm%F@M9dQnx@gkox=SOwSwa;F~vuk*EHP5~>`Pnv|O{8;& zOUL@|y#KMgzq7S%>|w-YpF-A0((#3C8&Ern4J9nejwY&^%lL~e$RzH z02#x{FXztempOb>GR%}(=I*qaeC%UBeIfs#mIXg|H0#rLd}eRd+47-otuEe|s=Lj9 zI_1QI-K${_!uBu5)g0`3PSmY!`zB_XiOkCjV!fQRvHExKsM>TB=Nw|=#Xqjirr%>b zLb7K(0sDbnk$Sc3RQi4=>u}D-yY)&p9%38NpRB{X@wC!RV!dq={bCYrG--^UGRRCR zUE-hOTj)>jaXiPi?eVnjakTA#Yuh&LBEmS=%)4CHKd^1#SG0wrw1wAb3rCXMg58Hp zPt9Qw(2n=k&KF|m$6)72W9LU<=SMg@Kbf#{!%mE#&;@7|xH5aOX#DzZrmi zs9~&HY24Sb$md!8nMYh_m2l+&2*4a%fJWtM-;lpH*O`HbHlv+K*WO?+})W9W#_Dez<6oWiy~ z-?$9MxqRAK9&K#68FwPC8Fx?8cOKk5XZUV{Pv(ZCk#{h;XSp?$Tr-OC!+zInch@r_ zZvLA=UYP@9dxu4t|5~4m{m#k+pUc|Mjo8nRVLxwIn=0!?y5F_M^_s3c?CzEaJ9lOe zrUctQh;wSI(5u*jqazs)6Te9{+>P_r2W9LCoke>sVhkDQ#*oBy-V*#6S)Y$xi{E*T z2~=H;@41ro`4wH?BXB;aJ*OA)>Pd0ES#^-yPj3}8HqlIjQQBC{##^xP5zdLUH@QgP5d5&Z+e!QzL9e* ztW%HWzI@hb^63kS@A1XgDe!M;i*}vD>Tf*y8;3tK7P}gt&yI2Wvu9YQU?HHG> zkTiUdJTv@6Li@2}%sBMScX_(oeXH{-biM?gSEBR9@i|IjeOFT7wp`;V*I3HM`zWNB zR4!R7!-nX4PVL^C-M&2bwXh3$*vvd^iuGlspL%`N&1D%2<=cPxX4JuCE!gjP#8?x+ z4=Xrf{iLAVU%~z|7sx-s+B9E%v9>9+(2QlhVXSYqv%&g37~h1!W&-s)3VrqV{S=>! z7q2FLy~cjS!}&9p(f1b8_vX94XUCAsX)B9)eg$L5LN|ukb-sjks7hOoR@Z*ADR0-h zXNQ|pE+;?B$j?&BT}Ayc2Fmzt`}-w4b2`tQ=ALQC`db-CZ()pSVT`%i^~uCNIp!pZ zdvfl%=$Umq@0%O0-{6yXpT9`@jHzh1J^oc5@?y)>W39g3))i~gqo|WE+jfGp;AzYq zw=j3KXXY=)Un=f7hS+vQ-w4q+dK+u4&ov#Ni~CEbkw!^!JF|AXfHsTm?ryhj8{*u5 z_cmmo$@^2h8!(GBma zkD|{Np6J%+?EGHF7uK7+@kPqoMj2y?@1m&A2}*%N#!d_(6?k$3qDsaGd<9ds1_TYh{U)cRQ?lYL3AkK1_w?~t(;G?}%a$*cuU z=0$CrrsU7|tMe$+Wct-4*RN!6LB@&^>1ISM2VX49jM&n(?;lL^=b6u1pMDGN+_uqO zw9&_DqmR)>cO>WC+Gn?Co8`k?qi6pfBD|h8O9g(clGSr#*PG=Hj=$*eCUzB3gg}gKqq3)@m)qUCfjdY+1(Dp zWh`QUA&*OLb{4=cjz}I$?07l>dp)LSzwO#D;+@}UmnX|Q z0O#QFJy=iXET-55*030hy6@*%yUO}exARHWZk-oDz56<^jM3QluKKfSbB2>O^d9SE z)~_3j&k#Uge6J6CU~Qk+(>8oy#@KPJuZ^Rw)E5rM*K!Br-{J2ie6!eoLkt_-{TpKL zOr@+txII++9@K8;x?Og=7k}HXhgO=rD(2GEWgdP=*ZMSVFOU9`N4v_~B5PRkO>bF4 z=DXhbI*H%(wl)=?z7U_@o?~SW;$~aav#qyD)LWouy;*-m&Q9Qud;W;@;gdbjhT1t( zcRy0bNonJ|lY5`@$ytNzUT=2Z#W!eZ-(BAnmo$#*`Zsl|XFxlxZ7LmNMpP#GC!BGU z^M|zEDxK@ub(s;VQ`ju)u`Xlhj;x)BSUWEr$pD?3nlv}FwsuUit?fCUxIJb0Ml$36 zh*Iq3LAO%k@*?ZE>_r@84r$wE{0xiFenUK~$2Y{?xn$-be9z2%7ne0QZw!b~XR>ZW zU5;TtXv{&ouhz;wgW6@*u9;I8&|eC$+q}ou;pQZK8;!OR;4E_h{~$mca4WIW2IRYZ z_y_ERjH13q9gIKC&4nog>2<9`OB+CbB=Yv#awl~C&+48%(o*zaLV4}^@+>o^+c(mk zPs_8qw+k7=_w}+?ZuOQhHrR1k_N;l&*0X_jZ9KzdN8Nh~_Shioya~@}H?RSZ*=r{DILiA;|BKnsz4l>`c?_CU(^;P@rcY8Ld#Ok8mJKgEl z4ftCm_$Lgp60(OWHreWQh~eCm+ZVTU zX4Xq9nKRq7C-HCN*)feg^f=3B*Js^#Bi;LR*sD^`etYlF*>V0V#(Dhw?ql@$49d^i z8EtJmZGHT~crKk@3(;#Yd+XM}V*e2vS%{6aX9S|o<8eAeS5;Z)Y={X&yV8ufZv!$G zbo(}->mR*;yUN9Jb_+kK$N4S0|Izz5*6o_cQG6cev4fb$$~#uBui;-*Ngra}s**k= z`r{oDd)B|(dp_2V#(2ku?;qz?@onqU6kE@}k*wFp*yF+uj>Ha*EbZ4-CZoSmVZY;U z<(o|1eiD;Ucv-i&EW&pb@NFZ0@A4DOhfb0I?!We4ZmlZn|vvxVTfZ{a8g^JfG zUZ;46;)9BN6%Q!Bqj4Ixw_@v@iMO!HTJ3!l#-%-U=iW#&o z`At@wt++z5LGf0_?RwuHMSC;UE5EBEQ=eS7>-huP5tuKyj#In&Rol z-2I)3+w{Jt6<^ozmlc1cxKHsh#RDpTMDe$Ze^T_T++fA+igzh)RJ>8KLGen(g^Dv2 zCo7InEZ6dQ`dLQblivo#T178@;pbd@wPL;E&5Cy@Zc*H!_$|f#iiZ_{tN4~;+UH&R z`HGVirz-{(*C<96Z&uu*xKnYj;`bGgD4tO4zs)@_S8<}^G{thopkhdIgW_F^4=e6b zd|vU0;v0%@DGvUEd+rJBn*56Ox=eAg;+2XGinl6mReVyhP4ST8QN=$gX58nVGfuHY zah~D|#ahMbS|3~V`ccJa6!$B>tax1U9mVwf-ShGlCn=UGu2j5H@gBt|6<<>9R7~6M z(hDd~S6rxAtr%0>qQM^v^X2rV{A5?ry zai8MLik*sSjA8N{p*TtLeTs_}U(t5*yy9-f&nbRN@n*#a#g&SsilY>#Kjoe~QR_KZ z@kXsbqt^>nZiQll;!TS8C_b#XNAZy2F~vVArakSRJ5+Iu;v~iCii;I%6>n19s`#|x zKE-y$R}_yazNMJ)HTT?6ijx$lD^@73RJ=}cqvGcjA60Bqd_{4b_Omzi+Eyz6?Y+l6 z_n_i&#fKF=xn~^H!l#eq*TQFzEb{qni(gaZ%OCbSMUk&D*y{<3XDf=Y$gibP@hru2 z6hE)&tC!gFbqznFxJdCqm3v69)x&AwYr*ns30N>KTNL>ssQg;^+Ka_JMZVl%uN@du z+HG8!ho2?CQpItK8Hy*>UwTFH`-)F0-lKS{VuRvJ#rcZU6jx}vUVg?ss?S%Pr&z5R zQT(XlJ&F%2?ooVR@sMJN;t9q6|L&fXuQ*9@zTz^)4=CQMc#q;kin|r}DgH?DWyLoX z-%{+q(>*t!I9+j`VwGa8;!TR5Qv96a!-`KUwkaM|Jfe6~(XW0?zTyPMX^IOK_wR7| zds^`!#d{QQRIFEAskl&ay5a=IEX8*oap|5^9IExuuGjk%cPegE+^85+tX5p8_&&ws z`kZ{dPFH;AVfWnMD!!z+Pw`2`hZVOfepGRTV!h%r#rcX;6(=c$Au6X)OE+5Ag zUsXJ)*rvEk@gc=6iY;WQN=37a>c2N6BTn6JGB0d zUhmL+Y*xHgF`~FiahYPd;xxqxiW!PV@r3#X9f}7OTNQUJ-lw=x@kYgZ#bV9x5pBo6 zRegGP@nyBs&nxa!+}h248}%!^`=;FO^qs3%uIR<5>;38XI=O&ivEn?%D;4V%w<_*b zY*lPmd{yyJinl9z&t0YYxK%OIEnhJw*y4>_-gq`l!}*%F{93XVyN`!W8h)?hP(?S4 znif}D)8dW0-ZIhS2nG9^@B zZ~B=_!?AgF_2FgVXj5Hd!-9r2jZ5lo3@FR<}M(idBG_Y}T)?TM}*vEs4or$3^xDbA8Qq;mez2OTw{bjrGk4ndJ)>FIr^p zzR4_TsEf^MT))1tVNPR1EZSJ#Gf1khJ>)n@cPE3Cm38@n>w;>je@=jiIXhoPp^4Fc?p>rET_Wt)Lgh{|6o0mD4FPc+Tp%sGOmoE;- zW`#nipdq|EMx~VSTpPNyDI5<)pBXlEPEEt=aD6-iasE`Rq(V)^g9%*}thAb5ho;GS z1JU)3P2u@94Wat5`CM1%<&kj1a`SlCH5$4+A~_+ASXbzrXwB+%OQZG6&6Q?;EEciN zLK+ZK_jO6x(5}0qUE!KBWLMa`<(ZY?4>nV2gk599r18YV-ecy)A|fX36`2yb*5)g1 zmcORkmAZ)8teN|}!YacxA-R>Ww0DKs+?ChFYGz%>Uu&*eC9$-~1&ilaSxpU-UJ#5n zt`0XfEu!s2Z;%4=4Yeh+f(xdUS5)xz@dc~bM_jvfsejCdNZ#kJu0{5CCy}7(1;P0h zK`#NmwN}ws6QXXTJZOz88()OCEq!job#>9khV|iw*zEeo)$3TTGfNxlljTjS(YD@0 zeCd+8m2(#_vt^lS7Bp4WhS!H@(W+>nOE=gn8+VWt>cg?{oM>IFZgoxl64&y~@BGpy z>uT!JZ@0KvbnHkSJ+-+ZW}Zx`tf^}X&)u*(Y#R!zu6{IEQPUK&f1cc!AMk|LjiGR` z(f++{v!Y);-4oT-EjQosNlR^xMk!`_9e;E?hN7uqf69WU^6;wWwQEH;;U=QZRjIVb z-el!@^P21HgEg_*#Wm}tg;biv_Wk{Yr&QIV-VlF-F(FK=nLklb-W;h%3o)-}JgK$e z-IdmFc}-nxUSo6#cC9{q`Kk|)W%Gi6ez+zwtDbr?S4eI&K?ybHr#5z8G)xO?Ouqzb^~rN9>Q+T-qBofLrAT|zt66;Z&dV!C2PHGCt`QyE zdRs(|v0@?;u+8;hY2vEgKtC^YRgGOaHdncNjY$2~SiWA2i5U}5!`U0czMNwFUoae9 z(->VZX3VxGZ0hOMWp&Y5b4|TuoI&8$6zS1k0srE~T4l=^@!o#RX}Mt)a6OgUO_4sI z9C)YJr4(ejX_k@-tIbl4Ff2j z#!amXN7vUi(007cns0ior?IiVHe4UMuw+R?O{A%|5eH~%ii%xWGOsQwrtfp{kj3E* zVhcBTd9W-tgdQ~g`1F>>6=&AfOR7Yi6f-chS>IRhKcSg8XMLo^o?2x zTT<|2H~aEg;Qkoaxu4P2^0Hn|5P{DCWhTBC2{RC z*m!+7x+Erp`J+8r0hP``(6IUjQ)Tl|8E$H9j;^Lyb8Or7uJJy&UcD}U{cNg?1dVIr zAp?AK8=BX9*V1%FUz<|!LL$vEYhAkhlTD(Ns_^=Vs067yylW|@w)$V9qwDH$HyRni z#78j$op!OBwt`FuJ*|(_M8jR_o-o!^=w?8Txg^E<3O&Nt*}92^bYM0QsD6WW5!&OA z<84e0Qdwe;mdY_plJq7)&0V#(-2Bz+Kh_+Dd|0yeHL*qXef%u$eqGww+zsN4VX)ok z$KTkJTm_?b*SW^M2Ay=3aJtw3dX2rbmpk16v)oMU^-eE#-Wl)oYH|`Ktq+Uls~Tww zSPZ>1=O)CsM(6712dVL^s>UvHGhfL~uSu z!!Pv+#fOsoJ6BgMv8dU)QD2ju;KD0vR)z7QKBIL!zb1-pZdkY6Gp?; zXh>bH6)AhcUwpUq7Iztz)kN#Wr=ho6sor9q_g`AyxT>aJ`jIg|)GP5Zu&ASINONKe!X(GS9*4{_1>qN*)r6b>qQez@d+m3WjiWXhF$tc?3MH7?v`gs zN5aBIweNjR(pZk6YrMWGArbRkE9?9RZLSQYOI_QszMJ$`{1j`WcX++YHEiiEiIR-K zcZjxV>5YsjH_WN8kuh;rVjtt4Q(hl(SvQx>tz0~}%ZvXaRs#2?@di698S2-*HM?=c zEOWlqVq-MCHcFmCt~};u2}M718tWUQv!e_wd}-JxBek2DEI0pYuOz|c_!pJTN*Lgy zHhZ?uH)y$Bf)ey=KL-AKeSmq+PpPB}L}@i$_q*75-(Tlxr!mqTSrl$)Hox{=R#$Ir zThv_Q4>mT%u4u0FtcBSssm^O$-HeV3{W2za&)bF$*0>9)6m(XQpoit=Q&M7ad!7G; z%h@dYHW&D1tamp`J96`m4~Vo@Zc?1tB{}FdX0lC*nphWWjPU%$&L2#^-7IvWD#mA< zCB0tqwOw-H?yVGmZ@Se*Tyq)zMKuw1TP_QW|Im|8Qn!uG7=;h|m#oGz zHB>dusjrj7%_H%=S2?d@iiBvrWf)9M&FWh9K^y3EW=Fyu)>)2sEc4lTob@VV(dA~J zZ$ZO#%o9S44pu$pF!{CC$97oGANcT7Ex)X;sZOR^9bF+#GGuwEX)+Icz03ueMRJF2v%`gRg}0d*j1^)QAFN^W!IvyaC8Yd#`;_9l^Aj_>v`%8i*#ID{Zce+`$w!A+YahFt{2Vb1BzOlI}tQuaUHdXXDFWT7UjY;UH(S8s|!tPh?y;}fNMBrlC`LGtcY!I{F#ph zO2cYQ?0U+-aNljyzc+NJlT zgxRi|VrGRt(99gl+6oC0{Z`q&?3VR@B(g5rwwST;7G&qiS9Xnxo?b5{w_-u78l6RD zT}JNl`ddZK4H#VYPWFo~u-UWfBegZu<#!XW7dJER)-ecvUqfw;B6UEot)=JsN~isX zX3rp)nVwwyq3>Nj4Pd3Wzrgz*qZDNm)WgN-!(GV zNe{%eqW9e=A(Sl~4Qv08yP(GW)y%^ss&!A|OIp$k#YgHI3Rt)4YJIa-vo;xy*3hJv zo1c(dXZ_+W@I!LH=l7Ve(@WP#tF<-SW>_V?-VRdsy4_woGyJxhhxK%F&pSD}_9kWK zPxRUPdV8BG_XlGOSY4z$neE<~k&v@0yYRO{dujIwJQdN0voz+exRx0yS~U08_A?(} zjUD4GM zJBfAMYQ2$hPE91%9K}N1ZuQ|^$r_`#dTm#<+yohE+NWA#0vK-LLxTE@4dD?0V|huJn~JAc-dPn&v?6 zO0|A|-G*?ztRBy?E3D;nmYYloUlPO2dFd5Nh~#q~lRK(!mP*fK&cEC|EajJ2>#SQF zW7AsFi2tL$`(=7ZFx+5n7WvuhRQdz{O7Z(`a}@uL7`x2&w$!1^08jj~#4M`|UmszK z=JM!Tv1Qj%6RTr2vgT-pdL9jLR0Z)w>u-?0V$AQ&++!gmas!2^GFS22c*2>Qm+lwP|CG(7gknA+hV!43t2MM zHOQ4+HnclXcIH!RCER`qv5btee0)8 O=eCKtGqtD|)htdTL-CB)BKU2h6?{HUU| zEH&0$M+Vo1o6KpSWX5>}HqQLnhNwgAg3P^)$f( zIG@Vqf?4`19KG5)dRV}&4og~g?6L7OGU#H3nJ>@oslf6YbXFvBC@)dodepO4V<(2A z(U9e6MQ2RoLs}29u=7Kg)HcVM;WtRth9!L|o3@mTZB5(Grmf><36ZWM`;oRaTrMFp zO;Cw)xps~tApB+#L4Xgi)S(jrAcmG~62FFI?D?NO(2V1s8=+ zW^Xa(X&0-rAQ#I>Pv{(HaU^Hfas4;KW=B~V3FALGL0Z&L-Tm?`@hBIR%PuP6Un1Ok zR~VEVR*SWj*+!v^HLi0>)(IJ#RCXy?ATFaG#Yh{%T%k_ZEJ(M)TLxh*p|Pr_3BPo` zu9DQpL+r9qhM7~bWI?&)&G|d#!#?`eS{G#FOnO|#MVWu|UCtVm8~PG^beeC`I%YA< z;c#^8Yi^K6!{7K)X>kph|Aj+p#)WQBRsjBVuRKaD)v6wxZ#G`^)(Ia!ZFiWAJ#^H zdBxmWORKyd@CKtn;@({$7QfD0a$(Lw-rVkxTd=n6KVW5aftr;NWL)=_Rf<_nl7G7# zJDh!jCY)nW@{`izE5IKe67O>4-^2{ai z9fr50^tMh|;5K%pi-I=MAVfF2U7gr#wXnN!ZJF5wdTy){a%ZMP2Cj5xTMzk`g8edTZfq zc=rANAJ#zUhrPn*pI2V>*Rg+@>0P&!4leU~7od0TOAO3P5I6%X=gkstIfGbNu*mBf zwXU!}rcVQX8u;fl;PpGNFG(L94tf16Mfp@PAL<9m$w+yxL*B8F_bB8Hs=PlTC}Dzf z?o{IBT&Nc(>B_x=Lm+vEm<9=x^Qv+dRY=0eLK6NSy`H7lEJ)aR23UJfrG_t2WVo~G zzaNxmvuI({Sq}!F2*h7kHMkHquTl=lPYWb@zD4m?P|9)}B=NUHlAljQ=Ro)A^#h>f z_aR80_Xs3%UxTDfKY}Fwr;xu=IpuTbT{?fk!pkZaExtT>MdgyJrOTGDc>k6E z3k&n#nWZx}6CIt;*h~Wdow@j*OY8rxhT-$4TJ!M`2Df;x5HKimi(K z726dLD;`rkrIw?rwPLMeL~(;+i{eJb&5BzUw=3>Y+@-iju~o5M@tEQ% zMKArdbeGS3#fgg36oZP@iW?L+Dc+^HU2%_MhvF&4mLIzI?X>;R&568wY(0HHIi19~ z|H*i1M_ya%o+r8Pe6ja@Z;om^x!&RS4GwqxopSc}3<>k}?Aeod^cyyJ#az1G@9UoD z?$`gP<^S2|{j>S`XVdR4-~GD#^Z#GHmT@Yv>@Clx*zxJV3rimS#d)7SmounW2M(?| z^zOUOTX|0l^6EpLFTWOj5il_?{}Mma^^-J3FRffa~8S!F1~L zT(r0Tcgi)UcmMEV7w&1(PM=5|8)I6xTMO9`Y&Oy z{9n7jOvlp}MXA8VjC8-=_>vocTPC}8-G3E7tiMf~?(LfHKZ{eyw2cf^Z@f-L z@2B5=SJsQ950*jiG8bt9Z=sOVk7U9WfVA<#CH%Jg%et=i_lxsyrFHRT+cLWN;J1f# z@kJ+xdVI@0TZemmVDGmI9H08^_eOrIRQLyef8a+W_r0*VEYNx1Q;~CbeC0b|s4Hu~ z`t7rRHR4m37yRzFvJc+#)4S&k?)S-a9>1^bFVAi-|NSjP@4V&Kua`YLD>L2g-&5J(zyO|fhckk>QfA!*B&%X5Qnfu;;`$sjmXJ3Ed z-;d5bzv8N2E^7PMU3b6!y_s9umR!Wy}*lzH4UD_~&2U z`^+U5)O_N`nKet_|J=<_EV*guH?E!e(>KolWdCn%`N*)pmd`Aj`K8}n{H3#h`{5mv zW`1br14s9UZkpHr^QG@w{crsbjIX->ws${$%X>fl*7SlKSD!WKg4Ufg#(w-K({8== z-aY2+pI&lg{XAgM#v&|R%Y|8WtKRD{(_@9-$v0(F+7eD;5 zZ?!Ie`AfGx{NPh1uh#C)ex&mL^7nr&Yw}qOj-EHQ^ztQ-{b=1;cfLRMq1IRSedw>p zo*#4HuQy(~{L?d@4c;~`fAMAERd3&R=i~kF`cU@K^Ip0CM+f(({`}#?c0|9+GuWbR ze$t<144V$g8tC=VJftl0^xlg{;)7(p}7q`kZ@~@sdYr68|#jQ5AghqR$De>2n z!|t(u!UIqfF^$|8FM<2sD^cX7XRO>O6e3l*FC>Ec;}a$}u4jx3m;36us{wr`{^UOS zHTM$hrCG;aiFp)x?>eIXIwp63Dahz9=*Eq@={L@rG3_z_3{Y&^Wv^QL!9JO+V8*g z;}cH-=&qtnix(?D16-g)pE#POB-v&OV{2uUi<&S|rK6E8%rh=oD4}cddKLcE; zd^PxW>D+~xW-s_Ilm&12IM{W$#uUMC0MmvUGZ|j+cBmX)Z~!08s*-SU93RZ8hc5zG zLYv_QALRo<+u(PCS$vdh7rfxB&>r}s;6^@P)&Vcr24w^?E&du_@^B1H;e%$vr-GM2 zlKu?vW6Ey?4?>dvLxOw|Y!vAT9)ODA1=sQ6v}y45;1?iCb36DwXr;)2Cp7#d_*p*s zvVrhz;0Z{cdlJkl)bzo7p>4=)1)msaOe_48;1)g-b`1V5@NFnLd0 zRK5{M_(|}Yi)hp1X-nY1i_tTD2Ket#75q-{6Vr`}!EXYmznAC2&j2r*Nqc~=0JoI! z_gUe$gLSiY6W;bBr+SoYZg#1gja(%Lwn!_KeCW^3@_Lr z1TXkU=rp|G+fc??JnJ&r7$o}K1`eoj&rJh=2$hS>B4f^lBoEc#6HtWkPOx#YyEg*1 zLz@Wi0B2s#xB1}9z+0dL@U37~5Z%HH{su~&K)V93zJj`gkAO2OA$Y-+kd#;OX-ITp zmQW8>v;$-Ww?cQp3%&$xhd&H1UFyQC!JDBr!UgYIMqc3smoKONzzfzufwMC$-Va|4 zFZdj^0=^A=9g_SU12f;x_u&c80;fX~J_GzQbb#=7FzYJmtH^*?K_asmd~qe;JVQos z;?>j(yx=@2YhtFw%isg>f|XDyd^PyUHRusu@Oh{jUhvOQ3|?@+wb(Uy!6IlYyx=*| z4tT)}p;maoi=adBWnfjcF(=_$!22L`PNv0gz-PbfPzAh2_*(c1 zFbZvim%nGA3nO+yI{oFL)m`8D6jzDuWmN9u$NZT)754!wYVNHoyx$4jqEu z1rEf0I|48GD0CcNa4(d4E_MlQg>vBqk3v#L!Hu<)lkm;p{5tFdd=RYt0DTHx@HR-~ zZwF68(ia3*uHzZV)Pv7M622dN7ZUkx^~Ssf9YMyd=PxHhC*iBXpFkOt8MDAYKq8Mb zW=2862ZV2gM@H}UfzzfcY z_QMP2{hKj|;RUaPI^hM=K7!`^}?ZYB@#C&3Fof-QnC1xJ6Bb`Bo^S3%NFLg2uS z=!ftOa4{s|LGag~V*Dcf7&zrlSC(S19m<+Q{{{0tP1}ag2XEhk9e@{n;WJ#r9|h07 z%iTK}yzFk;CE*odD|8rM@Hh8hXW);6%kQP{oR2*R@7_vT;J1R|&(nY5Yr$_o+u`?u zd%i$g@PZfJM?Jz%11H>X$Q*V9+z%DO3tq6@<);+<<%6V8_)+ldU!+~Zw}Ml5kbn4T zVAYq&GrVBhPSS@L{5mA^d%9ITXV8=If5zK0M!7#KDJ_2qQf)_jiZHE_Z z&msTtf4mZ`UBukl|KwN zZuglPA_Lw5iBGi&d=3)%HgL!TaQ_#{8@%AChkWJ` zykHFKfEU~h$sAemN06k`4vu{o-62y1UiD?#!7SQ8c>bg06TTR{_TOo5@YP`ISI8T@ z;14024){Ar@_8Km_T$tkGHu|1T}~zooDA(DT(A+^4=?y(=m@;v7U(#<;8w`YX1oU1 zJVAS7-c$>I3X*4S1}E$$&&W&!8z33`BH%rc$ZQ4w02L$C36_1;$yii=GnoG*Z37v> z8BftR-~~ShRl^G&gd*^Vz|+tUc)`-A$s4@j+t6Wn^ELW1BzX`#0%gIU{JPJKe#V6d zz$=um0v~`R{||xtAkl3b_!=bXbb@)`pzV>q;OF+zzvj@M!9PI7@SWhCZ#upf{1r5V z@MGX*-y%=&72r;&8vY14qLuoB9|dlMEA+rg52TChPZ*4yF4aoXJ;Hd9#FX4i#geRR4 z*#CLjB;je`Vo2IX5FGqn+9%;zU@0VJ5v+sc-g@w7km$J+T)&_Gj(i0C8nhLD54h(0 zlo7rb+yhBEf}tPytgj{b7IYYy)8MlQ=o@qKkwEh!o&_%$Ye(nsf|ve;XTb--VTb9n z@Dss*gCzeqf#v@}-zHq}lRu-K!EXj{c!f0QAp`n5NE1F4+y}|MZQzPul0M;r&p^`N zI>05bQeMJaz~^3bGVNd|w3BebIY)hFFTCIq=n%Z%?a)zp!8@SS@SDJAf90Or3ce1B zZjXWQdmY<*DYh5f4vC)ge@**@#7FG}pE!msK;}uX`8ST=00w?b`3V;+gCtGCXQ6t+ zTfx^Mv17-;g}>Kd_y3;$1-}yfBNTx@1>XGzX~Ay=NB;r)03QIafeye|gZrT4@NM9% zPIN_C%E7&m%`>?4Kb>w@fd8TV5%AIzE_^;X_)S;8Mc`sc${qykl^0As>0|^Sfll$< z9pJAZTVG(xA03|xu25d^6Mw=cEsx zngL(Gi03T!n`(H$7$p5va3>^X7rg&+ziB~cJ9tOXZ*A8m@NsAx;k&@MHQZc*j-f2> z6?_DG5}6&~)JpOOKMh+rZ~szW@Ixo87rvA#;}{H=|i9N{GoY48t&NYz)J&7#oJkFbuZ4MrlvT!-{tZ0Jg#%+`#g{HIB(wf z8+IgIh=Q;ap>tndP6ap$MUfr>S6b3j;F}iv5Ik?O^I(g9Iu0%2lK$9in*^%|>N4Hn zKy;AwAovQ(#@-7n4WuuzUExY3>wF4)aFE`%KJ0^JKNSFHS?qYY3rT!-!zw|HH*fj~ zwn36Ed=|;J@ovVTG$YKYfGJ`xH!{ zN*|H`APk>YR_(n_l3;qP&%nhROq$Wt2@AlZ)#?@zSkfjbuw2l8aWc8eL$ z*xoRF3F|esa5s`MAZ(hXeQpD1qU+>|gCmwQclwYYKDvy0vD?7K%V{%qNHXnMQC7ub z3qN@tpRtd_M>2K!-muP&vMP;qceol!yHa7dfs_hp@d zF`wWkb{zcjb7G5q3g&&qI)E*F=sU(3wkP!bo|uRYANqlDA~t;Lw6=X=lOO39Nr#7! z#8#MxWc*);p+D(%g~1gT+v!YM^)Qk+H-p|eI)*~OUs+EmQ@H0mehwpUaOVX*-m+jq zKK)J};r&<7v!auIk@8nU}XbY0@CTxquw;;I7VxNFzuj@QjVIY#W2$x#y zWcWLh@mO#v{ouEK}ajT*vI;G9+^$8BVHbrw*`f z41Bbbo$|$Q4r5&HRD`6%hE?oTDt0qCtg4+lfgJ|Zko1@Eki`~us-}JLg)aBmsS5qM z&jJ@B$)5eEVBZ>c=5bmi{2C>Z zehT)giT~J#U@l6)7S^hzeW(q?k@zMYT36dqaJj`!hPy4cFdvEk9`1H(Wj#BUA!Wj+ z9<)kQV52IYtkHDXiY+Jj&o$A?;wy>rJ!X-%V8z#Xajfe^9A<(z6ow@G$ z!I-f*7}_7ILM;1@{zKMC7))Mfg^@#qx!RVO=D2T5J-FcqC9 zUHGac{Q&$BNjXPhi_Wxh635B#Jd$e#d9YR&#?Js^1#`OUei!cUrpp)l`Pr#R@(6u; z*eOqJ;qORdmbivY_%r^d&@MQ(5B`xq67~wfPwW8LF^IZ|k1q@yVW*m73)dlO zR~kHzB!+n~VWf_sa7Z|Fhx8D*4b`4V%wftHJC#nl&?^Feu%qCxv5Xn)F!=6x)&=Zr z*eH_q1lt4lM5hLGP73=>q|8D137;+h{x0QfxRWh8SVT z!2Z+l6FU+nqXg_UxECd1AB1nBWbC8x6O@8|9IlKdZrCZX_jEnZ1K>g=@kxXq&(QsN z6!xE~?LZh6$9loG!qW+MDi2%u&V2ehh_=J$7w9!G6E0nd|D-3wMv1x{Z@3tRlb!?z zFJcT}hrl=_^Fr8Vu}+VIzDtM^>vIV7TS`9i`@{E80`^h(ujRA_`xLx)1?|OlhuJ6< zI|o*OPRHC0cDC5QFxq0rNct*0R(;`Ybe3)7;cj#YTNs*3dxPnB_)Z#e!_J1wHreq^ z2knKIki@e94olZ|81&v^rxM8{jND30v4vNW?6a=Jg&C|%q$k4Hk&Kgru+=s@Wj}`F zG`I`N_}mRUY}ffy;c+DSg}++tv+#@O86T8+5=QMHF4)4%oyrr^Qw;*{Rh?*3xvib2o8gE@Z*lFY9$rc;7yq z?gkg{XD*N@308QOeOw6pAlLzkZ$5AllGrA}&;xd=4f(_1&q&fMyk@6nzQKGUJrVwj zWZU>RnS*c9e$oSAt+(w|2zGrKjm$FP>~|Pfq{qY0-lbn+7+3JQBea?H6xidKw*BFR zzoJh`KLG1|&Ae{LxP|9YOVab8 z$G5Dp*v;U(NX~1HLf2E&#rdflT!|$8AUuk~$zSz5)=4DsiG)|bXUvg)9lHLYeG~qH z)OgmP({}0`6i1#@aOGLX2X+el0Lk1u31|GK`#KJOcZs%<=QMmKpYebl1@{(ECVeNI zeMOIfc-ZSIapU|e0G7YTv6J*K^!0k|ebsU{$-4GU7Y+>D+I$ijL#TNFm z*uqg3Te#F>3%6Tr;ajK~=O)5amUQ72i!Hpjmaa?qki{1ISZraa#g2qY7F)Q}Vhg{t z*uskzTUe>KE??NlVhf+P*up^;TR6dD3+G#G;YN!sd<~^DmV}>M(uIxd==3lck7R7v z-*2yKqUOY0=z)T;g)31Ub_%?Jj$#W>K47n|V+-x;*(*PH%7Gpz99!s*60wD^qActK zuwH$8bpl&huL1okHf)2cKEV16cQ)iZws2)rdliD60)Ks+GO^FXE-fh&yDMCQPGCO= zUqE@-S?~g?z%iBZp(kl0wkQ0s6>Y@+2>yT)uusE@ttk^b3jU08uz!KB?GXDH;bSNa zyEzO(aoECr-u5a3dq4cHJ!2R9d-z!g#yN5R9FF&4Y-2}4-;Tr$dmP+>;<0zay~v{h zb03~TA=o+4u@mzV+X*&8sn{NHBszc{4rid_*us@44?6|!My?InPr*NtC$_LoXXZZk z{jgjYe86^qQ_ybgscBe!}#>9s2+!}qvqJc zRRP2hdo_Hzuf2-E77j$Un^rXW(?EQ~7QP=upJIOie;!O5v44T{LRkB-6X1wY#xu4s zb_C8a5-aT5umuXkejIj33D`a0b`<{@&#A(Zi&z`6g*6uw3v6L;bR1ha4HaO= z!sk$h7OX$;`xN>JTj;Zjda;GxtBDD=aOfu1F>GP0?X(43xD1`d7B+dFwmi=-x)#kAykC-@#p!4_8BMH{h& zkM3qnU<=p0%s6?Hdv@^sS7-ya@Z?^~#}*dsV-3U>y6(4EXR(DJz0Tah7XE}hS~33N z>Nki3w(v!ij4gZpTgB2vX){CAN`1! zU<;dkOrK&4{ZJaVa0zPOmgnVQ?W4pKTe$oa;)9(Gea;Y*cJv+0LC3L$Q9tt?Tet&N z^=93MvwvkBz>bH%pT$pXVcXwmBerno@2ppnAHH{v{%y~?1P|x3K42e#U!VZ&FX5&0 z_=9~J_P@Y-g&hdvko(gWO*&tsjo89el#DHW1!ZCHg(pxpwlFjg|FMrl$IG<81N#&h zh+?qg;Zc-^EnJgtuMT3T!q?FWY~dMHfSm)U7Z3*@_B-$(YK|@Z0R>=Rh83?c*RU(W zEhr6JIP4m}VTZx1C=Xlcah)DjP%W)r-H5NYTSWbCk*N5+;aO@ADaw^Al8jj&%EmWIxx+ZWU3c`+ppP+c`WAI_; zaw;9W8N7gwU<+%ylvBRkcM#SuUyk=ws0;2xvDo|JVU&V>1U9KqP94A&E=4D?m%+ox zsSA1Fy;aDMEgXRCyHzwf1G_4=FtTT8d6%FN5b%g&xdn zcL#M2d1B|nZy#__{@8By9Mt0|5?lBaO2igkN9owYS`Sh_c5T=Xox&DIqwCl)a2ayz zNxd)~HOCh2M}FACuTU8FNq7OpVGA31IH)Xa57-Hvz!uhM?7)N0j1AZpd14D^qX6u9 zxD3T&3-_Z`Y~d449MoRymaqppitP{IMsiL25Il?Iys6nk4r&Q9&&T0KB-apJJss3! zBz6q^m&HB-^O58)fbE;=JU&o)5vzL43)m1z9uL^nV*A0JNY10PV2g(x%xkJGVZ~++ z<~12txbqPQl_PmzyT=@qQ!n;|FcyhF!b3>vIt|A**XfaP2{PLPU$EF&Ft~-z9|Bz; z*S06@{)D#uVaHaqA(ZoCI2Fk`ek@#tq|8*f$71h=KO*rb2Uc&b^Si;5ZHR9OeGLPj zBAsh2dRu!q0ZDok{N7@phIZ|Az4q`yiyZ>Lwb-X%Pj8F=a2paoGvV7v z&esmXwDt~aH|-LBfF%709R9R}s!Dn|Ozp(@#1=O0Osugz;cs0Wlm~V$jP2^cJ4nO? zF89NK>}1%!r-Smr_JJ#r#3Ti}`fJ~WLy-6u0v96jArZccB>w?;Umpka{+An^*jL+8 zux3BTKWk=f_?E>!1b;?S=2>`8e{ENVt&!Z*Zv!_YDL(^VLNfLWU}B&yQ}`>A_@9Lj z4$$S)hkJu)!%+GQ#s@PthBNQryMrB60qxC(nL{XtJVJ*MU6&JFgHDhq6~=@TAMyzM z4`q!aJrF)MjC!%X;W8v`NruOe_<0-_Ac>W*#&GJIMI4|Xl62uWC~Z8~k>G+6)JL8~ zIDDjo3VMeAg_Xit_ZWw+aF4~_3&)S5UnAKUz&A!S2ZymQhB;#>Czi1dE05K-D?Ede z!$^na#xoCTmpg0{$+j_!8Cdrj+9>JJK=zcWCOD``$dxw6z`aQNML2CDev&^H_KMQ! z0WcTIbys2QNjkj^bctqPK>iBQJBIae6fuNrk@RC4jGv01@+br8ew_#0NikJc)iJzi{kQJqF_7yUFxB>Dln< z74#)`0POc1>j=ID!g)x_Nr0KF7z2zM;qcWuJsi$M62k;IdJX$f@KcvvA;gT}}{uEKRS&sqoVcx?RWN>W$h?h2u9duSV04a3zv> zroh)Mwn}$UzDWERjzkixaF{JNV^X+qGvn$(<{Eq(NuC@yG=p(MTf(5rHu{3`SpoKY z9zRJBgz-r73#Vsl|Ks3MB=rjC?$9w$fIE@IDhvAW)Omz6Ep{Ay>IFTQBj6WE@}Gp= zvh-N;gVT_t$HG&Vbm4|wI!`)0@gn8mr!eCs9XH{7NVd&}`AGaMfQ@!*+XGH}S=+I& z#{t%1%JGL;NcN|vVfbszU*a#kh+HWr4_13!_k|nuMN*gW=Qo&Blyeq(9JJI0)mw}$ z(tY7PB>p78Us1Z`hpXPEOzhpT(ji@@D_o9b{3OGucbFrbR|@Uk)#cd3$B_8Y91gbF zA#mz@tdEo#3zM_;enGh8eLWuBK42^#b5JcAx5BIF1o^9e%36h_Okv%x9MnP5-Qh`8 zmHfhnCoOG+tB|bQsqja1lChKn!@t&X6E^rp*Xsd)KoZZ>F#i=A48DyHVIP9Sl%siE5e7dk33Du+#a5O!^23{*duUG zE#0mJ_&ky_GvVqwjw*xvsnF|woxd48h@>sTxplRj06Wy9|H$tHKYGwnrC=Y0*Xui~ zcx>U14YcjvkUsTrRAHni!C#R3Ox70oYh&%_Sva+cj#Vsd{E)886Gm8U;d@AY&W3|M zb^Z|ep2g0F-yxYJr(x%&j^^C=h4YbYn+UsmQ7&`VAFf9y@huI$i6qY=2lWWX%-5^*HsCeh4;bNx!fz zdBAo^{P%_d7F+n?llV-Yqi|y@M|BpT(_u_&#t-EPr?sIENRNe?$n0O(qOGIyB~MEj z;En&xFX8C+_(WY1(EVvgl}P!*9Z2roXTbs_?G=V~(6(?pYDxY~c&H=x6xsqCbkg&} z12*jJ$nO`RT`&yQ#}>YXGOL~`#n9JcnO&E#(bXCOIdh=YT>>--^bE0XjKc+O(y!mj?r5#Rja zCM3rp>G0)VdfUBlUT^xsm;EO6>BC$gzwjKA=WKJ~gaAkLnX4$cxUZv%B0UM-+fR?5 zsxTEvdxe*f+;=X3Tl&+-9Lr_Ec7b~BiiN%dnX~vKyowHCUx)7u(!OQGs35(D2+IWP za_r$mWFEJ}?~&{iPs2-t$1AP zA<2InUO*DtJowINZ1QKr=&_73>=?Lryras&2jK}M<5pNBQrorRAtYs1c!q6}*fH=u zB>A&p^$FT`gKaIgHyn>7eBRXEEI?9@u+mg*yTW!B+Z(P!QcfDYKFv{u;7^5E{6SKtAABE4 z9F9QG={gR=FObCQBy2xJx6udwh-6=r18dII`D?=wNb-ln3&@PEq{ms(VS&XKemYD0 zd>rOlY+>ZHI=`^pY(1~N;dk+lDi;6qp!XbIuP_;z$2_phe8w4h{9w!yM|A{S7?Z>} z78@Q%l3%!QIdzeK06vkd%M66GEOwg}^cOPw3+7tvmd`n=iYs+~R~UhvSq+_k@YapEX|?z1dMU$Bu!Awh|+3;hAmhYp`?R!0mb;5d=3s&ss-% z1{{;A+Y$laMbhutFyCSqz(zZCx(DoUu>)ZSlK2P@BWdpuc+q0#!H0M1ZJWWK$czbm zKa1`0;Rqc15`JTc!4oJ2TUcSYUSov`Na_-9LQ+mTd>=`l9)VN#I4Y+I`VKDH>!`x9 zliE_DA; z+rot(5eL!}VK$Ps3&(t{+Y$loK4E`G9(x#gjCQhL5N`O4z9u~#R{31}P!;w>W?w+x z6U2c$!e_oD{@79QOC+&631hy}`##|-C-pJ^Uiik>+W&(v_#2%+1P=LDr-#7FKRBx0 zlo%(hj=x^-n@T(l=B=$)-=`67rM}Fw@yQA{J7GBK7SL{4k{ygzv{j2~l zU!aYo7r@Mm)Qc@FK+;BG|<1}?7Rqzae|Nw8)$C*@6gZCJm$lk&$FI@WMfr^(|4=O7ukzO|gx zS|n{x6V}${3qL{9uH&#wT_+WfpZ0LKJ3ix^(7&FOd7dcz4$1FNpZxSj$J(TN^%Ov7_K7B-^ILJS6#r4|mk*&0u&Zwq>pfGdeq|y|h>O29mY+ApFgj z@z1sQT-dG)u_BK*^z6oX!xnlY$uIl>NnJ-^oFDnvRv6iXe#aJ0?d4=%&yR(Rdh;{V zlc0BilS;%Eo<(x}Bdpce(nh!$ofbdg;(qiub`m_%pLSsj>jdgHy2Di#I~DdFpnVI3 zUkqdplK&*^JxJ#dfJ>0fuN3&I#XbPX2kC7i;fqLqhuCg-*+&O?$X0hS-4(<{J#g~;5aEpT9{t~UsNi)7nVu;)v zH<*dek}muX$+o9qol)9$hkY$}AY5dzli)EV{v3xFN9%I(;KO5d`ORS4vBYx%;{gsv zGR8vSMkL#&!!MA;@Fcu{oKAO#i;<)!!AHh3PbsH43`XK-2uzG5KBNneAsKJSVa*9n zswL^QVcJAug)PjV#Mr|wfP*LN{2_2265kTwW#mfv1<)s2`ydQMl1JEND(&K!-xF?` zrq_@R_&XAxbK%rj_9Ntpg}))`qg*&^I_nr~Q9K+vL-%zUY&%o0=iabxoL;Zo;j{6~ zLCT4TSxDM0{Ly0Pz%g@lnGx_EBzdyoV{^6L9R7gBx6?3fo^GSiH$iVJw4bljg`Y2A z-J{+UuyG>!ICu7hBaxIJ4*M)7F60S-YnC{v80=J7EeV_aZmsWu;2OWeP*XuZ^ z!&+&&y|v*-Nao#9_{avGr#XyA;+wF>MxDPUoNBRSq4OrTrThwTIg+uF3?JOgT2Fd? zxNZxv!cK!3TZsv_aOyVVfE^1vZ`b3*7j8u|9x`B!=NVVzsSRspvc1@_^-l6&w}CTX zVE$sq!B)F;4BNm;FVpr(+_Qsruiz)PJ-miwtX_v6`7)X%qu|bL+BK8$22pVjH0**a6wiKSeN*g53u-bLTGqxM_{DbxnVot$* zf9k%dYB;Iq$~c?nDJk&dvd-o)>QT7c-kDz>OibVlR6eVE_AF(UBt=>))&!6;oHdkJu~px z+Ro|-`Qu?+U1ybrEo|oQY{o?R#RJaDiE>WDWA&X?DtV5>Wev#Bel{7NMiN_L--g-_ zggcS+Zx;O4VxNMQ8|idcIL*_U=WXdDnB2lywZs-ye8O2pV!OgwEuB>$c07!4MQp`q z`1(`$$r_an+qKhi^M+pD&gNM4hTkL8H`uSet~U?{cf@bX41wPu$#V*>?nK;ZS1SCd zGv#9+h3&dH>t_RCW>?}#y0A$%U8X18>WBZNXTYzK#QYSzx2Lo6C%r2C6iNBV;n%%s z3-&44xv#T|!S;o#`w?gCRM@k>F5e#x4%BuCoQC8aEf%h{*eS5e0LDxlb-~3JI|*hY z$uDd)Q0MW0pCjqV6R>WuGtWD4-5VZ6GB1Q@hdQf6qzl7`=~xL{g=xDD?1N;z3V>6P zv^^FEhC8bhlrMa7w6n^^-VK|MbyoIMxsL|lnZO*u&W2NBoKJ5NZ zX47BTRpDqPK19IX7F!q=PhDIG5N@68tfI)D0c*`;{%~wi8y-dGJ`0|iPdVhtfgdb% zRvFkwVCO_)i0umxS!|*ABAqUL)nXrjmy!5W03Thf?dC8GNjbu&m*~Fpfd@sT3tJ~? zyAAvtNvux5noD&#wc!#Z{wKk$%V`7KWIaLamU^ImoaJcp$1xv+Pdwgcd1 zB;zduw%DN4Tf$8noz3&ybm*{2m+1tqSO6hG?H;1 z10UY1>uLtWGw`4G3P0bb<8T6A-p;zs8dU&OvRIeMBRqwqEkci7+7?DyY~h#}omB$) zBj686@}GuXb~8^&_k;CbW~|a*^v%ll%30DBSR>9vkVf?*Se2K)4mj zwi)n+gN${`&w>Nq)NK!f72ak%kS;v-F5?0FIQ;58UFJy`k*)I!o!-~BaJt2ggDXDJ z^`^kj50g*EAzXVzw7k+}8ljk`6_!FJyC|q_-my--z zeX8v?@Ixfy>L~2_xt_EBF!==In{tGoBN-1TV9hVIT^kPiinW?NL9pFPJ%+tuxvzEG zonWnRbh~Q9L?r8s@VdnoMtrN&g(oexFy@r@P52>_zBmdW{Z8A>;V_FG20ujN=TTVU zd!0vE?g#pg<7y|k3CS^bI(+&^)>Do#eBgIKX+KXxw;a~!=^R(UXMV+rs(3v7VAYQTRLiK90MDC(h|S!c)1r9AWYWjx#7zxbULRlL%kP z!yn4ef@LqWk06gd^eb>yIg~GKa}EEog|A+x-^p_TcKuV^elXi$e3C9)RK~^hKMB55 z*2VNc8y>LJw(wJX7c(Zu;X@8C=HIIDgiekw=6l@2qfRcWHf0L^UHBQcaBF!N<%^vG z9V)me#Xi>w9z$s}8Iv%hs*5^>Eu2!##eCi`7G6VcHF%(_n5p7ZpOf@cE}* zR1EfR*s%k?(MDgm+lN?5I_%z&JnT39p{*0u|v#?_b{YV~PICL03V~4?oVJ;lk;3sT7 zT$kSlJ`(PtB1mrz(~$Iq&~20+Z^AC4$xpf;+$lD`Wx>5sF5H7;%)sH3bb2_fHia0H z?glGQrJcmY751G*ys!h|H6+&=uEY0Yb=@NN7sr_7ygm|E znMHouTNOTwr2KeT|5@#WaKs!Jl|p(roHUoQ#hMlaKbprF;@s9dfw&>L&*(Xyak7xH zO@86$NXA~9MCw}PVx9+8g`1XAK6!HBoMn1jezW&~?8Dnwe7MiV|Gumw@;wXkG@#0c z%y{KmM#WWv9?%sALN^!*f%(zplvn(wS(QLKzvW7$K`D1Hl%F4kymh2u5syOb< zC^yIzG1UxmhN66-)EffJ!x#w6kFJN`H_o@Do6;R=3BMnnbSdv3l=4nMDK8gFc}{jJ zt^#z2PvUS($XD|tr?!D?9^W9oLZ#1Y5s<-Mws{_dA zfn?2fNBs6={%2h?|G)XasUg3rDMNly-95ikk5@jW8mn)Wm*WZL>F_Vr%I!lnZrnIE zdT62=*lCaI)c9>R#QThTvicDSW}hQ_BaVYlDVS4vJaA-FL4@$lL9)Ej;Ds$_y9=7A}nxF#g^Q8U2&)z%3-~TZ9`yNQPEh$cM*21By zMUwPC5+^C>f8ir-{W~ftP6tbA$NwvFI>&V=HlTN8ZRf z?=VaM#POrJIAwzWF;Sd4c<>-UkWLdA8vL*8G1NVO^D{5n_7ii@OvCn*U&8k#=EpFW z6ciNj^ZW$!Q;?9b#8|@jg2~a7qobGTQsjI1$TL&tE+G>em_MI8bzZp5&qt1o4&Ry} z`3nsF^SP7fE-}k9zmFUlo-xwQzr_3=9zJs9j0E|4{>*ul&(BBdpXa|I+s~abc}BEZ zU;a$_9y2+5)yPfdcH79wF&;m{7d6JI(lAo4FAp4&X|+|IWv0X%!C9Zf9A;O7Z_3b zGbhjBdp_SslJzp*=Z?SOyWT$E(ogdeD5PMflpI6(F@+ss7?g@QJ7Eu!e-FPnF`64< z*b;O39zK#C9N!CnK9@A}=LX|e;v~DQ5X4__;Q!J;>!UlHKU_Pbi`p>3N2N{bsM4dm zsEt#*s`QwyYQqdawPl9CS~?|M&D=alP2Up4z23npHX~R~-pOCVem;cXXA+_&>>943 zvclAoCEeBXd0lvp)>oy@>ZaDt?ygqP>8{qz>8X~@@2Zw2c2mzK_^G5tekx^t54Ct{ zceNGDpWn^WORZVZTcsxSQmYgDs8x#t)Vf9e)%qoYYT3agf@+V6fVjI7Fo-4OAPK1*;7!hN$?o{_5F{ft)lA zRO?oUsR*X_Ftc+0GR)wn_tH!GB{DH$AYsafy>n5l*8-}a3>7&)!m!_yyuf(bq z`)8<(4dc}2thvPHd=u~ogf=VkTDYX{WAcjl?2H{;bO z@4lv9f8!v}Nq(um{`zZm>Wfd+Pd}YeXU^oPoSdK4Z@>Mf&gJH+^XJd2i+OqK(xpo( zzo0-BT)CpIUB9mW_>(`r_0Q-3cM)JI`u|;<|NRXfea9cum(kDM@n^JbF#4HUclddx zwEQ#VGj+z)8$Yvb@=w0uGgZEkU2hRRHG1k~{@LUo!nmR03e$SqL2ifL#aB_08 zb8GF^s8*v!jhfVZ?2%&S_vq1cplyD8d;2mDc4ge`+}zyU-5b?yQmp(QY+#dr?2U^F z-^Ma%tn(MM=Z*RGpuOGyMe(^^PW|)0nt#F_eyrtBy3>!Pe{Y?=eECU}EHd+}JKi1X z?En59oEUN$KfE5xZG(x2c=qn@A9 zS7lBQFwaHVM9q+M(d{>%i;mkfN=qc|VH%eusj#kgFAFp0sK2E)~a=hBT0i2WG zoD-f`xttT`Up%ia=Uq@2E?zRv5A!ZvRt1+YscTm*s|%M4)FpJ8^TkV7|4{kY4OLKZ zMP0vsjo<%xU0wOpP=Ee&{wPE7pU=N30_MW}Zz}svi|yLB*r$Dm_Jt{2K5N@2xb#n3 z{qxY^(9lqwD>Nh|WC)+${OcPmKOYht+{^s*?$sL(k)QVo2e6elWqVvG+`dj7 z$st9sJq}Pn(2zd8wSPguUEFGz8OULlA2Lj87($D*|6SZ9LoJGMo;3ir@r2PNN|_OA8*~dWwWLY8$MCE zeMpdN4PAe5aF<6Od9+1~mMxpLYGv6T2Zoh#HMj4;&pCE(;wfh^O$)al7Fwo^**^KX zUD>i6?z_9!tEac8{XxUZlrhWa=e~vA+r>9H)arkkGS>2MIlej!2__i9!J)%~8D{d& z>^||(EZ?V_U$<@|0soo*x?61er@epAl0No5U@y76t*+6nEH9IvdI)ZT3L>M2k2_lSH7uc6EJ^XXhakKPfgCUV{U zxwuXoqxh=jmh0n7lJqt4g)4ihd2+pbbsx+1=mA{wUSjUo^>yB#)XzWbYrJxOSFY_| z;kxcW`(!ih|NQq)1pZ?YxRc|Q8pS{6lIG6m{`>E*UAsmN`R;D$@Au31YHrRID!SL? zLk7OHhjVs$z_JD3UGJ@0&Dk)2?p%lOj+O7NQdJ6YcdvRs-^)5Wy54L4+}*J*-|foS zJ61MpaWCV}ck4$gCBGC@^r=y!mi6OQi+{zvuTea>h7sJ!FuHV6O4O+re~jA?4dIW_ z_SSiWNw4psl(RE=_<2aEQbR)I=W_ln=YvJ}E#37d|NQ??1pbM@|BDeQL!)@wQORS@ z^2qjovskmtV@^=`5#Ot!2B^t@xgNwno*OA@Lrm0!jyzXj{9h1$H%HP2=?C*8e)H_Z z{|Sk&I4xsD#<=;h`p@$h#(%RU#{Vw=dH%$>dhMFQvnWP>e!g+(@?|40FVDDm@uG45 z!UcnK8Y4G1*WmdT=%hZs{bLyVXmp$5;M8IxWZX7J3J z!8x=s;l&ZgGcS!a+b?~{xv-IkcqZzWy49GvTmLy%H|DI$w%$P(!M9~jc|9QsDoYS|9e~DwtGQaQE z{{^dh8(b^VZIHhB3**V^zpP0-ooQIxQM^BRmd;$K3gRxS^d9q^{OGdUHqjTGRKRrQ!+2^)_bA{=#^&`Y(0g zt$3c+;JMmD-L3!27Irh1(uSlZv}37FU);rb`aAyf{IFr$hP(BDc|sRs*@CVH&uAOm zA2+ZQ@yT!?q1~>p#z{8{1cpGFHy*N*m~l zzc8MP`)}*t?QEWzH*DK*xBl;1JHgnsexkwi`Nq1%{f)meo{IZ_H}U7Wf5Wy7ck4gz z85lcL(CV?qjy2=xi_r$}G#I>ZamVASxc|3{x$Vz+cfqi2!`=G7BWbv?W7!BJbNLA4 z`4uCK?JGwbyfPct6D8-4J8lnxV$pwZjbF zD=~N%#Nb_!!sBP#xZbJFyC#Nh8)Q52v9$B|;{NlFjKRAx2JgriTM`Bsn->f;ct^(A zyg0~6UlL?&S{iI@Tt3+B3*LJ%)~^b+w1IZ4)9v^>@#mcy!?q1~>;IPN{>GM>{>J86 zy^Qo(y$#;~F*eN!FgDKXYiyX`*GOB~&se{xzrp)N#=4~gjJ3-L7`!iJ@ZONIIwi?r4BIx`t^d4tW$@0Gv1v+IW8<`L#)j#B#)g^Q4c=uk*3a%?@D7#1dr}7P zM;W{)W$=!a!8=k0?>`y53uW*w)J^{1&G;ApZQF3S{%@S%V{Dk%(by2x(MX%z$>7~G zWBn9gWBoK=W8L&F#@d-(4c-YeQfK=aYvQ{btLJt%RweW>QWo?yRxa{4o?FuECjZ5U zJC)UcYa8yyf8MJy>z48RcO>Q5`ukVnZ*9lj_-|Y1f0KQu>(BqB&wp~>BA-9x9ENkS zTgl9Ki!t`U;s5_+ENyvu*Fy)wk#l1g85tm&sNBD71nEbdGxpR zxwO@`?M36^viWR?env-+vs<;_yr0KCNqvuA-=Ck&vmWw{ggoaV&v;0G6xN?F<4)p! zbN$8rk?*&QzueD~`-EUf<$&mdg6dQ7WjEcfbd z$7W&um#>sQ{w(e1U0Xv`YW;adef<~AaUo^CxNf4sJHXsy>#Xlh$vr~uBUt;xj0OE+t^eZXtG8{xJfn2$_7~O9 zJG%z&^%@z;T<=flX~x35-zxXLZN{dx{ygfJcI)|P*$)((i{i8RP+I)+FXt7uf8W{| zWAFN@2JaXfykl%+t)F1F_rp#3XmcQ(gRY4u;f&NBq8 zi_#|Efi`&m+2B2BgLj~fU8&FD!$gDkpN*aAlZ+i(CL6p1U08n}{cpD4GXG0jhj`D* z5Fbjaf5F`N%d+pa*1szu)W}*e)Zl$>gZH(K9ZQFs_nNjpC-<2~8N91)Y+XObrvBTH zf2m(|C-w90y1_f_#`d^=#vuTKnq55WJZ|jz{I(K#qmwSX`d>=6z<)ef4_*@|>qU7b)jE(vDw#`Q?V~<(Vlt zj*?>{t1s7hhO~J7Qih!SNg1~F^NzOp{FNN1TYZt^2Wu>C<0*AWENr*uy>Ekey$#;y zHlMc`Qrn+~B=&!|IFlr%1|?wpimKd8Hk;+gtn4mZfcP zjiq(_;y&K#ckA}n`$)H<^?s8rt=s<{{@p2U7_$i3C9d0CMjO$AJ5(CmogpuO--F+T zKVFUF@30S7G5r6C>C{$!L;f%|L5)(8q`7lh$X|u3N&MCJ;VP`q?KqX8I`Xp^@tdGKk@6?-ZGzfY=Ek3dQ`bbc2%|RfYnb_e7%5RIobT@Z zG>SaK)EI1Q?xAMR@oKD@W0+a;1ZtEPc<}-jfBVR0s~dkl%8Y@OKZX3GC^=L`@NWv` zkLTMk%9&vL6m5Dij`ZPXtHqxQe6xBMZMJEg8cCY9lu^W2f0sy4W($e8wa!syxz^Z9 zeNtXgJ=T&(;KMk|EWV|+7U>z;PWmFe6pzMH##kkhk~+q#5&R#DJ&8Br zNRCMUiFZ+^$5y|Fs3B&5gcY{eo!;+HFZZCw{h{=JD87q-l6#ohv%`q*oyABza_3)w zrT6cwM(N?(N1NXSP02FSM&RQle3J1#6iZl=x6=0#L3i@#`QT2>$C)u0P8neqZ~Kr( za#`c#V~(f}ALO5!HtUdEMmbXn`M zjt6UcNpbK}HB>$3uJlQNN|0^qQR-OiiTtx}ThHdFUg`n$wAnsAFSLJSO`m0!O7GTF zooJ1WQYlT(Qu&#+eY)OT*I3*uFJjfbm|wCojl^f&R}=6-)&f~A+*KnY+XzYzuW3$QenUvKm=?>E@NeItIM>y#!rM|D;V41zA7bNx69)(4~f&eIF#% zn`BEV#X8bu&d8|K>)6esP1Ygl@1i}1?O1fT^td~9NGpdkZoJt4)ua9qrHtRAz0EjE zmiZzc$y~Jdg>_byUWTrtBelxvQSv;oUB^qW=~i_-O38XAm7eSG*YX5w^7z6?j5B*w z>b+IlWL8+$wvysky1!oPFcva={TM^Co>^yr?S7^B{E_{Rb)?BYOZK6%wX8l~Dp0k@E^THNja@0hdi-;%6+!m- zLm8z-M}pFKdUd?{XR@b~6+ogUYm?qji8r#Bk~t`|SXN5$R(t$l39T=wWLas$XsfIk zH}7}6ctyR>O}^U3QTrm}VVr78S#m^Y-6QCAr=*prVF{!AX73~>MJt|lWEWrQWF;=X z7rVKvl44l27pZ5n#@@Wzd2zhe!<>u7*Hm}&C_x{0TH`1CYU_&aNek*JKepBTje1I_ zbSC2CEqgg@njAyRQMK$xWcKLMP|tD}Azqa>r~KPDV`Y%NvF#Cks9E<@mav&N)UdoNWljCvmQTj~wYtpmD z&k)A(Gl`fN4>rgV%NR7CXvkjpR=F$Plv`RY>%e%*l3xiSr4_AMa?B*7Odo+spNeM^ zU29xr%#7oob@h^CG8u1r7RvupZrz*uZ#X3t9Y0!+lB5QGJZ(E3WgRHqN;$48I;Pg6 zRj($p|ChDX_J~J%Q;*M4#Ag&W%evaI#Ma8(kX5PZctqN!kDTOaLfS4-(8q+b!s}K( z%$TtCy5#wC=i}nWvb^{Uqb2o?KEBocE@u+M%{gv8k}5u?OFBNhxdd66tovHoGs((d z(k$pki#rf4eby^w4>wmEDY3NHTlai&tXkTUmhIkEuUJ0hl@hJ1QYX_YxehN?^QO@z zeJ-()*&&whP22TT##qU#*v+f1j0fw!LC&{to^eIT>2lm@^MK~X2b3}S@Li5pX^o6-eSBiO_ZeZXa*D51YOIu+34e ztQy)6eWq|L|BL2d>Eq(oG4$fMn9J;xeQfDR)OQkRx!xgjM;{qjXJ8-86)8DKD!CWE zR4cO&Qek&>KuTIXEpYnwYqlkV!qD`gTZ zIe&Fm&#=SzD*CVvaX!oxmC)y&rAvb);8hpE=$vL)K_Hn$at) z-n&}&rp4DD8IjgiM2-;TjHa~GZ1dfG6f7m_{hG8u&NSp&p+4&ehn^^*jd+WeN-tW$v#QO-Hm0*RR-A$+m6_h z{IRZ8H(wXi$7IDzu#Wm$&nGV>$AzVz=Ss}w=u&z{k3tzUdex|Bxe8ixtK4rB`#zLt zJ$f&xy=5dZI9kt%w6{g6 zQl`E#RgY+dvz44-*#5kvYr$6EC9<;e=squ6dt}d{R}h&8GSaPAn)_0Vw7JN`CdGV{ z?#ZQKj@(%Mv^drC(*#N-Oo;mk}d9DrM^{2{Q8JY)P-i zB^^uJUJsJ-p*@wOzTRx7&-HaAtyhTjdRi1!9VZzJve%MW%K3|&+e$y_*;3S6nbWcw z%czjpwa31({Ni&^-|dlH)_q#>HT>3f)Um88McYf1Y}+mIk+r}0s^O(t-0`+0ofYc& zVSDtZulSU7R4->>dJWZQm~!pnW{)II-+Pia+&H&vk0z~04#m$@W&5HrXg$A@(OS~p zu1TRs*2tIC%Q|*9_gYasGA?ATiNIqoRo^^+l33f`TZpCyq zKMO4CiCeYY_Nd0{&7H)f5_4EatITLwWjj&7b>(`1t24FD6>}m!%Tcndi#M-B53`aL zAFFco*@YI$$dVOB9|h`jE*U-goXEpm^K|X9?~`03%&}Gc2wS2hwNHRjqV*hG?%zCA z!uqP$IqS&RYmV(T;5%90Y8GC{(|d;-kBh8j7vC>6x#d=}rpvVjIj+$666M^l==`I! zQt1jl{_Qo3{;yWzl^@+75?6gaN>*&S1A6PLM6%Ay7PeRar9bp|kfZ!Q^nqN}($6*& zpB-{%Vmw=0e=d7dIggRLOTUk-d*bF5NRMLK<5;gjHYwq1x*Q+ru_tSftj+o^x$N&` z-z_6X*0`ecgyLrfI+mM!yS<(g(RJG@zdkN=Klh#9zVBlXbZp=3@$MPM#QIy?T%LOG z`H`7#E$>`>~vS6e->x$zHY&y-K`@_y~R)!)Q*+O>8}>j#eS`g~HW?5Ey6 z`dEI|7YZ9eqWQSM(`rBp!i-t5PaPM5Z!Ws&=k|pUr701AM#Ybg>2m(%rR7@wKKcGD$0j@#uzL3L zs42d67d1Weeq)c8JzqZPT;p`-p2J)B9lQ6b)D-{p)19XG_xs}aH7idhuKIJp6KfCE zpZ0R&PQP@U@>Tb%k%!_()T-0?(@T!2k9ID1>fJ{&Jr>zjekgCzn@=21`6Hsn^%wu_ zJ<{b^^;#~K<~5qxsoI%+XT!^QJy=#XXj)0lAG7BNX-bA~YqLq8R_yWI*lSnqUYe8a zzGnK~#VvmNrb5iIA1-)|>$`At{H1i&?D4D-^1ku0 zzvS7b+;>}jFFd*@|E&L!4ExsxWp~D zV}1!N^Lm|bug)3U&a3nFscoZE6Yu?b+aLEVDF6OjdmUH*_U*~0-p;P)o>p%R`6g>| zhsy^RZXAEl**R&+fw2pZ9GD-~F}3NLUjoO)KJK5FvNkuo`N7y<+P!>bUryO&u0x&j zKOd7mYv*Z(N8isCIaqj5o%8i~Mzro)1Z0!DD{&hLB zOUlqOZ*=;~KmO~kZ8kiWvM=)Va{C7s&MlalvE`XfXMela_tf{%gKBMg^2tX(`?0)# zxknGa|M;Ra0sdd^c)8z*%AvJi@A$!p_uqJQ!{o}fAF_Mo$xgGJ$~10uJaFH?YBrv> z^TYCsPQB(eDP{TVN1vFmvtWI_^h=c&1o+wiS2{ipNJp-GP|A9Ogn??L0`0ks~=?EdC!D?Tll zc6R#L0~#z|Jtb_&Q_0^2b!ay4>e{!{J3Qg_^pxz+gZ=Y=U3_uF_wBZOz5ez$Rno@0 z{q|kA(aqj-trN2E=`P8xWpOY5U@+)QmCn_>p_2p4huQ^YDc2Yrmb__1W;9ZL1Hy{%enN6?S~M+4bDo{c#hLXM61o z`2J|iu7@wYdM>t6V%EFClU`U;Yu2a})%`!8y~6wArEh-N(=n^*%ywJ)E&i&?@zgb~ z9v%Am$@$+l2wwBniB>ZQOy9TU{{s_1?7#9;qJ8ZOG*MvN&m!zlh6?}dA{ehh)bo#? zj+PcB)+!wtMM#1{2-0+G?>Af;yA+C|;uSiPr$lP|5z0~bhz1INY$xaOV^~~|G^OV4 zMO1>pcfjh~oHWUGV+&7hl}{LL9(PE#^FP%uzQJL`mQ2gxkaVSy{)Xm7m!q~PUk{|F z{wK#bVHbYuirStSPC!jc*gOf8IIZ1w&kPPRz~9?pzqyKXaFJHdpAH3$QR{qq2$mGn zcXQ5ovKnJjhDmh3IRJi9WA$TiqCdm< z3b}IBw3!JLH?X)14TL3uh$a~+q1X2MC2xOJ!$VY-N@Xr?<;6B#&{WZ=(RLcAuvoC` zNdE?GJd6}>3FrQx?NccMRl?ysla(kNtq=4X0a}@q=@fb{;^FpMD{lP~PjR`9X~4O` z{x2B6E1NRpn4zB+YC3K@SVy!uNsl4!i{-W-SOQQIh;QI7{S^^_j9ROjsSV%nHYp22 zAsv10!*_?OMOOz2MLDH)vmflld&;f?Z&df~#DsnHZwVYo<7>rp*s7Nt#l|)lFn>&+ z%w4x!tK-Nj7XK&-YB)npbt|bJ9cq~+rJhhITM;Aa%A+Acfj@0Cr*PR!oA`PP?U3O(eZmEB|@666TVitwN2#EFx8CHl@=q*V> zru+94ZWE_lMv%u4*~FNPBP9hJ0q+cwW}n!#*&BNwl_l|E(Vy0Vg%e~)g|}R=GO8jq zxEn4HIhW8-^ic7BJB&UG;eBdX&7e|Ow#`P6g`ccB|5aSe%|W5G`WF` zMmLOQVnM{!dEwAqt>NoWCt_e6$pRfO?)CM;IZ>Wc%afcj5AFZui*(IxUoTIC=X>&J zHDQvqG#Z4-*z|rLv3pl7EM!JjN3YS3#b%|pD<<<4@W<4+ItbBbiVA2A&Uft;o0_-# z-}(_r)+OFpGt}Ri$6zT{xigzvHy+0v?-|7;B(G|bYxlA;S@X!l=_+?Gz>2C0~92-=q=_DZeij=OaC!VPjGay zfDW)=)qnE%w{x}jU`8eLJOVG&Zyn&Zs60C%CkLJ}*ICwpk9qJ2LfA+8M0hnyQe)4# zwdl}xt2-BetO_s+h^hwXc0p(eV$A8w<`GY0q<%i3Hk5gSrhPJM#^4?g8m1NY5DH>pgzAvZ|GMt(XM@a{ zh`bXS?0y4zMN4SufN_4^VV7cTMLytZc=-l<(R6H3$Hy@(LPstl3X>qAsN@F|&aQTt zj0vlq+Z%~UDQ!-*i{*onp_QlRz_u5oGSvyX>YpiFw8|3J?Bur8`A!szy=|bi?++oW zeb@PZOt6p`W6aPr(sR{T@kr;zn!*cGTyF)4 zWIl{H=3UY?h%xuTm_vTOIOMrYbT3kot!ET z@MLa%rR|Uj1*i4gnKJlaPtIysOWcu~0A6ghlFl{UR?ojuS%pzV*>cGP-&HN{x+DjA zY|*$>EjhH3#Z^fN^By`Z-Jd@utC;^|J0WI{v2psLT*3=@gK45ANG3rty7-||fCuW< zgr)7(c>HX4n}3{k+4*sI6D|cNlVYe#KEA zg=Dz7#jxxsL7B12ou8P_N-(8y@bY9B#;Q>+P+yM`T+ZfqhR=l*@&{cxUB&l-Gds=t zOqVvD*F8BJy0{w!#C^xgRhsphS;aIet*Mcw^w4_COY4$aO|rlj!K2Nrd=i^#gKZWl zU#1pZS%rj}p1s`oCo6Oek&*3Fn zGJ~j)bM}mDc=H>QZAI%hDSz=(s-M?9(d&d8`{HR)4mJ#FI_qwEL79~_q$_mKug^33 z5!1=FY3-Bm9C~O3GrDr{$^#uZ${PuBkR~rCqRg3FU@%S$!X%U{qB{OaF(g1NesZ8w z28zvf@RV7Oc&$E0h7utlW_nz-Bbi1Nmq@eNLGSM!87Yh5Y(*O`0kmJ2iS(!$)Imao zpJd0w&AV>@WWo^1z|lMrqZ1-Cq`tFC*g6NyJq6*j>{SA7?Y4=*ijE4;1{e?zr4-U1 zNVX1t;oAKMKtHE>*5y~U-!M}ba@Y<{$cf}GlIv^IqEn^262lB6aEE}nG4W?m+-m|G zfMwB2P;Yj_pvCu5zm3{q`o7{HS!sh{s;r)XtPc&MoU%>t!to?Ply52UAQ=lI+GnE6 z(mD8W2*k16T>$*gK8+Zd_t^2<#!@bH2-r>C16~xR|`{RE@Aww~eB)$Kw|8_SPeGl(xOc zMFKRNJ}j?fR2^yuB|jJlt#huRO&5w9?k5nM2T8TTg&PwBS6TJqAxhkk^PDV}0iQB^ zC)IlLI28)0c4HGz$fdROaO!YUP4eF1LMX^gKn^W%LVWGrk@iIc*KjOtbc_3j zKHz_wu+S*6Qg8C3Yv+LRz(sgzMPkU|HF#>`x6CzuX+rg_R!$k!^v?Eqfbh=e*Na6u zwa-`$hT7zF{epIYWapt+m?a0l_3#hv3zNePcSzgac>Hc+SM>3x{fgeBo@yr$X5Ve7 zr&1c2#6z6e-0dlug8+~OUssEg$>?2(#cRyYl9j|kXb@{L(R{2(O4LBpK2m6(^nIvf z*8JWL10=ym_Iy(hzUrgGezsFCYWBKdDjPM|1dAfv=XO`S`&wfkuv?lakLun#CzP)d zr$qYjSu6%#*qxvng8HZJqVUK}*>1c2H2}ZFI!dkgs`5&XnOcMJa#Fn3=8>ptbdcY3 z>&FYF_X^qB?=VRsOjfAYANcM3U$#BTZ5@_RW$~B!2LyHX=y?Mwi&vMU$|<5wT9pHa=QF!jk;zGmipIb+8ek*-D2OUP=sa z4z=P{5_9rj9BmEGS#ki$Nw@Geh__+OwPX#bhJer?393tJAxwmp_NRzRD&8#1qhuVo z1-Ad^c(nF$^2Dh-PG%io!;wAWlWlqFsLgKWxIV#eUhy{0Hk_jj6wD7J37I56DJ!O~ zhI|>j7z@Q4U#|6bta`jRmYB`ey=pQ7;tjoZ5+?#}TFxZS*B(k=DG@Dq1@kpLmq^IA#XRD@zpnfu ztd@G9OzdJTTXiqv^~TTinm^)>vnApBngS^kIjUzUg^cW4B6u@&5-M+@66R}6_U~`A zW;hWZ)LBKfxuEE3TGZ)Ez%$`{-MA8H6nR9jYqwi)vYf9)KZ0aUwl0ZEgZ^5 z&}CLs$wQN`&b+AAC@p}q*2*3$y(1Tm#-gVeRwCeGHhFCL>dDp1%XkvU_l%#Wn{*_^ zXrXZF6ZEnp9Y!w53;?B-dQ?D%JYsWPbG)45VX&87rG01r?%Q`$Hd4dQRpULe@_kEm z;^Fq0Y?U2d15a%TLSiVCORsBW;cfydYr(sg*UsKnq|U-EdVn2*u7##}QhVDu{N8qS zu6Ls<|6C2WekXj|v&ThlnHN44tt4k53EMJ8QD3kOED0#9(N2LA?Ab; z>~uA`Cy_G06 zB4XLl?Im8EPEp`{+plgPSL-54CX+sMEi)jk%gm=9P-^XAjT)1~b9gQ>EK*h-^1(N8 z0Xt?yRu@|tR&Gb}S^geWO!Ivr-gM1Jx{2>VZ<=7*Hgs$l$IwYEmU3)FeDgovOs?lR zQSC!WOuRbxyZ_nWBDw;jdJCg?X<^7@o0h3H+a~9xJ>y8vWZu9nc8Q8RP#wOHcSuUv z<`X3#*`!URBe(n6c1!^qnDm#_Fqq5lwi)WJ{$AYJG3%NbB2($1R^#2 zAJy7j{T&9a8#g_#!J1U-X28Jl@o7}n@{0t6;%dDsCQuQhw5NH-m9V2}tEnzW->%{? zGa-SuK7-_&E%vyh!mADd;@jq{LO&(}>;ii53O>yfrC;6~T;3g~|~&Wv#| zeg3Q2bT)me(8w=TaJ5H414t3nwl~Q*BU!!G;4JCE#gsEU6a6WM}f@6JLu2hi2$N&%I#P&5{NhP zcDyEY+_$LM8f56ozJ~;RPXwmpxdYvW7Kkb;OrgA|pQm;Qiu3DePdR+i4k%30U7!Sx zHL;7p-Yk=3O+lAnocm`dmQZNnBMn!CB`7HEb9hVSKU2EVjlWZ~!rCWhWc^`Yy^Ty+|Fl z=qWwesYsCmcJ4w)za{qc#$Ce_(^#OP?o@Uh$QX-a_ST_#ok8nI*->5z#NWdgW}_p; zu*T67nlgK?5#Jy2Z&)Sfl2nQv;o8+vX>cu!+7H0J3O93VQbkyz$2zFGTL4mr;v@Yf zK}O%lpS8p`XeW^ICsRJe(s@Ifu;hl@rY;L?m@|U?0U+aZTXXVPnp+VpgR509=JWnc zqu+kUWd};#dtaQ{^o3)ZzZjDDj0KLeM~U3Z7Q4j=W#U5gxM3AwKeqm+_iOW4JV!yV zs=y^7kH;rmoKnelO1}DU<8S}hw%}(2gF0$5Ws}b494$xjY_B0WQa$7oyAK6TfJvsi7%natU%-XDUkKCkbVKpFN(MH%b) z>D*h~Q0#+jC+a4PQ}0x{~ShwhWMDR;F#O(5J_8J50EH%KL+X=H-#U!}B!dgc;c}6AG-YDfyaP{fNgiPYu_GDc|!W5H&cOwf>++LO2dqk=eIE z)`XkcNa6+}-5viU{TkT`@cJh=lp#`@ra=6FbAm0?YCEw)9H6o7M~_)x_W{zR40s$L zQk?8P;r|!uIg56fw*IgwGp5E zs=TYEIUbe1C9u+R9F%>PDZip7L{wElL-dzmZ07L52FGgU!%hVWQONrof zY3$I;rxM-(=MI^;)nvh1!cV*Dba?_L_obG5&LxI*2xPegoSD_}YGZ9TvmCmF4ZW-- z#6&3xnVy8V@H6#`?dp|6qVo2cg5QrEwV!KT@3I2uunFrc^5~V(A9Ug?mSdeiE@&PD zG4)Y(3gQU<-O2d2(aZ?RCifGTKpI+7lyYEBEJpO;W~G*wyn5gplu%%bXgb=0J#gh> zO>TvYEh;xN8wU)&tUz-pJD;t@AcG@GhNKI11}*?Vy94#j&;*GS)M=B^ z?9#h$XtmwL!z)*I`A5);@ty*}t}!QW zr?=q^672c~BZ(*6^MPcbfjn2ci}l2rQ<=hWS$_&CTOsY1 zyW9%K%IA_?P}H#Eg3G=Q#MWljRRJ0gpO+vsRd?CJ-fbVL7d%z5N=kOayT5`Ei>oWr zfcYBTC|g6X2?HquJII7ZzlGM>=a18cyamj1sX<9y6*(-Y6%6)R`q3xqIQG*Gs4N~( z^)e|)npTOs1$)@-Jqj(1t^XFkZcx(x{?q_)<#Z*_-v%rZ&Iim(q`k^|fANo#UB~(- zHOKK7#L8T`RTt(~SR6VdYB7ZTRG{H@LoCb!X9uhoR7_KJcT+F0n5`g@Byli1yW`9-vVc)-WMf_IV5m7_j~n}13u0rv zt2rgsO+6s^=-8W^9Vx?vdmvr91gBw{;}&Xx8^iib_kMq(Tpf<9pCoQsGQ)M)tK~#- z2X*ttaj`}`Ah5^RU(>zDZe}B%2@UoBl+l(J9g@|OLkxl67`hLef>~h#$*4rv?GW;u ztZ<2A6=c&(#~!@(Z_@ZI)Ep{wn$RR=LPQe$9VpQ8gCjc=2z(;HLUXw6a^mk6>OWAb8VfQUoAkz$gihNSc{6N> zsxg|wSi?yx_pHj8W?^&GRI~0OC4g~Xw9f6j@t_A_B>(Iccb?W*54QU5S=|ugsA0>- zlW3i%z}6R@*ofSAJ3%}c76jaYW!r|{_#am0wtaGOzQXk{@7IK{L&UikfbcGvzUc^7 zOTTMo0x}{L#ha$^a3DShBZmS2qD>~oI`!j1207R!Wt6&e&~`V`JZ5#^cnF}L)=I$U znG;z^K)z%Ll>$HoOB4k&rarK3#czOzdP0m93tXys09;czRbC{|yXTnf-V(hF`exk6 zxVv_oLcsSpxh&pa4!BYTo;VV^{{SE98YZV%}!SRF#*A;>*D{D(m> zgl6K-vLc7%`_AeVw>zNE@nA5iC8`)wEt6X5on>RY_G@}L?KY|Rrlj7$_S$_gT{)Ul zzVZ!qVe;zrcUH+Ncvv94&U|AJfGCim5pyaL9#GH65`BqXM$*sbj6oM7`9O3r_DO`1 zIgeN;s(TIln9pbGxoUSk+MSVA@F!vvGBTvXYLuh*Ux6(q6t1Gx^i17KTy`MPtkmrZ zaT^nw(X1N3*dNDor%@h@WvC=wUd?2@7Q6>ja_Q|BLAY~{w4SW$iB71TE>$=EbM_X3 z)B0gf&xS=^aRen8a^M+ISGFouFMoYIZTFXb19F`g9f>vQfTE8yHoaWu=1su;u)7l! z=9-D%;hfIx=cBaWyc4cYGxHbhTjOguXhwNt(O2~8${m99bNx7(RANFD*M%)xP}7lb zMB&25S?#^0*FQ}2U1WnSn59|Bn|DUIAPFx1^sH(=W%swIF;A|6D1KKQGccoAWS@!v zOw9aJeYHp!9=rebrK}JQx-*z$PI1riG2!oySi!Bb1;22a$k8yWX`+bjdFqMHrrn%f zx#!Lj9I<;+Y|^5Oo)AWrq`4q-@^lFE<{CBa_KH3lHr;87Qbpn6+@~!VAn5yCakX1h zRTxyi#6n8zEvIoKWOO`&98yh)%U;m#pFPC34#*e;@R`HlkFww*b?dk&{J!G4Dsrez zh?kJ@W3Lv^W%947N-8Hj4JWkM_?jou3RombU*K+Cg$P5)M8!vFW*SSI%P88?p>2X$ zaQmL}(xb?=tHgMOvNYO%J^xGYnf>$!I*IM!TKlQKKOAXd!OrxPLzDRJAO_VHK zZV&>^sp(Jpe;aezwZ3?YxLx3ZRTOUaMT%Og7l?pk8t*0H9+n$-JgM%-Eyb9931$K1 zsyl92OONv2IN=f_rvuF0`MIcu&R73e^zf=+gMu-wQ>KFcE-ihY89zxIoOa#0QVYtW zXYIP?diIu`@2h;(O7M%zkoUJ&FM7ovD4x!D8X|=?+JWp;rzTsG*x=|GS0SEu!3J~V zBpn8sud`N;Kc^L#E5?@u+DpB+j74yKWv>)W+j;W@g?&lI3VnvfSv)4^pMGRq3dc|) zO7P#E>ELG;jrDcA8m+UNA)%trE{ww))A>~;~gL4is;_lYd*QYWLe*u=)TZs2i_FDu zOIL-U$H_+6%9N!w_o#x~(2DLM$&U|3{4TdkGe5l_*)NAF{%Z$nh>T#Ha*Q=^{8zBbP+l#*+pIDILq&@I+!bN2e4P9KJGMg4yoU&Z6FiN$-zUj9TK7waeAktI9~p86uQ=% zAzbS`^(6YZ&w)p@G#uCnL`Xv;3{6FhUf!vm@3eg`&4AXcvq zl_-DvljPFhYG%pO@(DCnf5AV@9U>UkZsX1kfFP~0gte>-{D(Rrf$_P$;3$Sw_lX_l z4Xk&Zn1ju*0yR^n3_X#!275o6S*OWr-n3UzBtf%VtxDa^O}WsP7KeVnk((i>ON=`1 z150`}if+l$kT;XxeYakNanuC|Uy_wOt2=C+alD_I&VQt?L+JY(Vbq_{e?`ps)590( zdm>l;307E6J3hbnj!jdLO^mNeFi5RifUWJqcAzdDI=}M)nBFt2_+mOg+C+;WX}dU= z1|#BrKhk@3p}fiqjFZv(WELucH?}q)x8eNROuW4NKPFRkskiTnJZ5TLi6zrFMS}GZ z8y6=z^};Ze81N9Wj9AobGlraSOghklWaQSaP5J)U;vVjC1M?@Z+G7TB@m=7-8;0FW zZcXkbU%u4H-tbYne%p>LS1a?+6-T{hrF4&>4XAsT*$jpSG{V-R_;g8w|J4+^vBRDd zPgc>0PJa?X8i@~pys6lBry)BwLARF+rFzu^N8duVIes_3~m~B;CmHmbsWOEDO z)hxS7aL~B*^&Q>b3dt=qiE^^-uFS~!Sw`^0nMKP={Zv2PYVtViffoz-efxjG5Qn{Z z^|_4;=PWN(-ee$6ZJ=?g*9lwWI72nt69OJ;+{EAXZ?n)k~GHiTJ@Q}l3vb~0vLWM-u{_B&Q z$|0f+*N99Gk(p=EPn(c}mMk%txWnTe9R z4>+r@^-0HVlVo52?-1lMn|WK-rja+-7Kl&jdQx_)S?B?S;VEfyK^5bxhB86}Ew>I1nPNJvRY)SQph8=)V76Wf?Rv_T9ggJRH%6qyAldxx?RhoB-st8n!e8 zr6$(m#xiKo=&ifFkmCp5g~IATQ6yxml4hO$A+lZz`HeKPW<7Vv;r5_A`1{(I;Tb;o zY4Rj2$K4nV*0_jFupnq$7&H?hhP)mL%J1OsX7fp0NRoRZ1fA?=r_XfS9mM!rsV4@2^;M$k3=Mj)-#;KkV zlRITe$(IU1jPDa3HBkW_t6`O!M_=%@rC65oV1_6&~x2=Y0`Qs#N{in6-a*fALi>OP;SeOiy1fVS?6H~ zmhHta9)gKWN=vOQpGTXyDyTq9kl$U6TD^QfI?! zt>c=}mtY75pev0OF6iLRG(6!M{%B8kLig2&xA(b=_f>RPWOpL;`NcHBM&+7%0Sb1B zw6=1Tbj<3>&~wK)5y}$)5w4>TdH_Y(#lM@w$bO$j50J#hLzhDW87d2Mt;uMp@6Pc4 zGkm~Jnhxf&+GYH=7L*w?nK$h~xs_^qhod&9t}+o%@xblzSWB`(>L3jnhW6Rwb~B#> zDU?<@-$wpaMAYy3IKhYSw?LmdXtvvTRV^Gjz>C3+QO}%bO2465fGLHRz>(Ms!8d&iTW>lzt^9IyH+pV^5}O zIo6Wg?oMiX$o3qkTqyP@u z>WxnQ8VC79spOivqIu1*&H3tpwf7JY2DYBWy5Lc*PK_pELPSe3Slb}TlDYBm5G93t zoQi+)m}@||f)bAtH1n;_q%W%^IfBf8{&)vXqZe~-0hNNfAMdx}P7wzqY5>QoT-}<4 zZrjZ^V5oa#2hIb#xQXYQN6H<18@y%y=|2=$;b3Fyq_k73{`npJjzH6!f##9*WWzI? zSjiVHX{#5>>%wTpn=N@Lj9Px?JD1E5WR*LW?2>}gG>0Y_NfjdAo4s`4HirSL^_(S*oWXPb#8df#EJ+x_y&Q&?-AsAq647CYop>7PSE5w<@+;-?D)6Xwtn3c6jCT2kA z7%80NDFNJ}>1E~*knS38(mZ&8R=Ux{E=Qi)LEB@IWyOO!NesW8N&&5_l&pA#z_T4{ zV;@eUSOln@4XCv2p&e8L5s7UpCbjnjaz;w&T|3_eGuQ533p$m#b_H39-t`jb-91 z&KPv7Qp1tly?;ppHg3m9t1JTZ06e>6aMfuV2$Z3ZxN#n@B@r~2j?&#xz+TF^b*vB5mB4Yr8 z@y0rhjkk$C144J|ocz+EbO2Fq9L6$UXu> z6jo$rdm@@Tp>uZSK$PfTkFE=upzHyu1;m&9#jXmwB0h2dw)wYdR@akUsgdal9mHJ5 zqIS0d97B{{a3`9mFQ6fvyw`OsmYsQw7Bs+(CfeV)V{M!bPLn>;z{`*_(fz2RO)W@O zjK6t70oVD}H)!iiYpktH(h{j@b?9oR9Ztr7&iw~<0Pn}=)0R-2VDXDH*gpMSziE{; zBrLI_uB8glN@X*#r70J_$P>y`#J_kU)`Dyx$E2L;eA{VsgTA#~se7D6(IgBRiratD zH6+-aA2BzhiK==?bSc$DOL*94)Ub-|6Fy&b(iInL-31kk#2TxApE?|5@>s8RtovJT zNnj77Cls_`4rYZ&ZJwd$v+kJZ*Z*pB3dP{;bq9|;-AJtykY(=xf^~4WQuZTl#%3Jq z15rywX|ahK@`^6fr#kE}RKuz=E6iQ;kmBzyP^Kxha5?w&>Xd5q}WHa-~;7;6(5h z<^8@pnG&e}$-JV5E+HkLwLs3_^gw(dD065zMz4P;(iMcfu!86bJ<-QI)s(17)_k`m zzftG9jmUl}ju^>B@BOv5q=J;rWUQ3=&DEkT*S=w~`%`T4J~10tKk z^?y-IC3|!h6f}HGE9ToNj=#Uvg&@3$OQtq0WVv(wGZJo`A=gd8hPGoEVD0nTH6&vm zu#&}k_2L%md}nUZ1t*ya09R=wQPcxGd_)*vD<4IuDZ~Tr+w{m_sp(!qq`s0krTr5u zWh7Jq24Xd?bV`Ay6TnUpM_2lVk~3V?+bO?g7llv1C5B)U@xj#9t*a2X8RYSUKcQKK`akoA z%Lq34=7w#l+6r0LDvp{oMb&}k6bD*GxNfHeIoA4Xs9`~hvhW4rlRmUZ zHDpL3Qeh~=vr@FNpiap5{h?4hz2*h`h75zzGEn19{wIM|r^Hj*%2hUc=Hs8OTr>MFTtw$%0ek8{74tU4&y7uoAkG+>7MwkN!pS&9;_ z*_QL8igC7k4S%uAQ+k`l2uL+SUbsvnF>W0V@W+9b!z9YT}shYm| zDk-xwUaJ=6CG6HB1ikl2rj&y)v27-^Z9#Kux?*>bePR?vRR~_X%oToz`uPoqT*Jc0 zw)dmk4_ClD{KXxNi4J3%HTfUZXsSs81*dSdV*flqid9aHX-+XdtK{cuxFF-)Y^GMl z|2x`MfZ(##6w4W?wFjDNK#E&IgI@G*?CuM9B%j0}g>In3xPVfz)*Z&?-4J61^j8Pk zhkFJh*Pk1lvW^A1Ke8Jh<|NWJbK6nmCV`RaK$uVoPm4QCUSG(5ZU7d`~ybF+oTDT%;#1Kw5B$1 z{dONLn0}0Y1p6wlUiYEVbdHP8Z6PO~=Uj9zQVc0i(21B?z+H%mk+C21+QL@iE`9m4 zp$jMz^CL1BCs^$`*L|?vyC~}p8N74bZXzd*RtPbNti z*7YMcC;CHofV+m!Fs+PGL7$ICjVslDxOjkDY!|M2rJA8sMXI7T-v^d-WG56|1UwXW z``q)WKAp8_ylC`%UanNMtXMLStg8`IhwH1O%EW4d`tyL7p{<*J3zG$aRTEe>6i&oDrQdvOE(K}GW zi~?OnoB$KU0EyFi#8$GVDp%>4-d+YAn@viBSbaaQo6Eh*153!A#m4Yfg&ZByN^MSA z)n7im#_wp|JgcM^w=XRaQbT8fb!`-UB)&c`#m#u2OBtsbWRc@~WLe_~iQN~Tt@{`g zYM`oR7yW1SUoxz=x}q+&_U`lK$FE4Ub@`OuON*M<#I~GozoQ{^`!?H{o^>TbuF#Ru zERYj^Di4CE5BIMp_qFR~SpwC6yIl~wzKW}^5aZu3#bx3}MDH^lqO)JlN#`EILI`aP z{z>g4qFyYrI3X%;ai9s|oFNns1`2) zEQYgzXd733eH9K7%zdy@M15laXll(;ppX8^Og~7-oI?qRHne35&IY|g{>2XlM;e4P z!i>NBz*bAg;$G?B!<6sHM|%Ba++`GKngqPQ{T+=Q&+!j^%PjY3A9PxLWSd^%Eb? zF&VS);6kyF0HAUs#ChJ{xDJRIie^$tv9K63)k@M^qEAFXx$6aV08mB1npe==AqLI7 z-JU50V_lE_nD-g~+_qPVisUo8>fw;Wmh~SkxQqu&X~_|)FrXE)#`?R{(d=nxY7!K6 zqXjv702ZDr?=TOSz16=w{N1;ZECL%&$Xd1~h6G?#(w#yP6sgVNOvcq?%8;7d2HDNq z#LwxM>3i9XQq&~BdqFu_A93UVMvkNDAl;&2oGpfCXWglBSOf`Xoo(=cbIPW6kXzgl z*W<*u$8F$11HLx~HIc7aO9YaZpMkVOR!O+WM1bhZ5DJ6VY7!apO`971TpsUn9f)vn zY8j*GT{hxe^P!3Id3+o8)H_IBzZBwx1+d)HUG9(jjgy#vqOR7^42u@U#%uZImR4OD zkjYxo2i;+PN+3+TB+r%lQs!;7;3x`*`~IERBGjJ9M{;wFwa1NqtHMv!H-y$rYl2)j zUsa3iAZ4k&lMG6$f|woN73bK`a)sVqA26C+=jsXT8VJ91GnMU{I07lI1`uGenJi`+ zk;|+@w`tEGDRYsqESYaS7wKoh2Q9m@4TsX(iMKt&9Z$eEwjk)g;!T%KpF~aEJ5dOi z96=ScdfR>@iYnx^e8hd$Fh3Opg+4HfWcJb0t?u7&Y8-{(Qx)fFSpy%WQy>AMhNkl&7exlmL1o zXB<9(nkyIIa-&O%1LuuS9C#>T{T~Vk)IZI%ja*YyPltK-jU}i+6#kOfXH|yz}Di%ORbuWfEfj=>0G6^^AY24l< zZn8e-(_-(h5hgk;;Yn4b9?4Z^y=6sFq&N|KjQS8eRpX(73Rt2u7RKqEQ$cx`dQ9Pz z_U;{s-x_U5s>XNP)4g`^P%uIL<&&q7fl*YT4QKfaj1r* zqr7w(*hFcacI`tim}8rPpvpuEOSJz1xJXPJgLJ$kS|wHP8Ip)H$i_Qu&DehMq)))= zC#^EI+Y4hj34IN%-w6tOC5nP=r3qf#aO6bNB(d~7H$E>!Eelk}ET7TmUMt7%p{N}; z08)5A1U-qLHU>j7+I7CR`!_9#BTt=Ip$H9*J?Bk%emN8wq2bPiptsa7#46JyOK8`5Az({xus) zXnqxUIeA5mq=26em!La9KMyO;&Yk>WC@{|kC+X0LfztxEH4i(jvs$QtO<=61JRysx~m>Va~7jmRUB4UAip@w;8vnYG^)hEH+f?diC`d z!RQbanTEj7BIuz!a(XQPUb8TIh?ncfeqaSO* zGuUcy;{`)lIT zHEw!-Xc1jvnNLFyx;@`^#VifygP*BF|DT^}??s~LP@iBI#eBt#eQhhkN%r0OD z3JO+{g}p40&4vSW0#U71nJ4#RjRB>}?JXk(8dH4-{RmBJ@sb6DnTIMUZl74B%RAdX zaUTz$${-u@LgzB>1UVAI_a)lq@pHLO)GS)M83dHK?Q6}9ZU;$?xF$G1_sA#JR&y>H zve5QnTEICMY$d{?*iNqSOPgW8Ak#86`;o+SYtzB~V%XZeh9n-kYV5OadSiv}-^6?k z853Kb1#*mLJ?}ndGv+0+ z4|qCnVGohDAY|ZvH^zpbUWTJkv%Bfm$1<~_T2F&gY?_Sx^<u#qgJs2Jyz)&zeBz0S}nE6N;hJN;xbEOCf8n}(cl5PjX5j=#0ry9E|^ z^1_eJEuMp`iHgU}>25A6oir{si+F}K(=5;66f z?5Bt!Km7LapZKD#u#yp!04g769vSsBnsP82;)h;={8fOx{^lE*p@=YTdED8{c9=59 zD80q=aCeCxYs{&|Ldn-#MWx3xEUex{FoZEw` z8qU!db`}CxqZo9*u*9(xn&%M(o8WjP7bV8b$WCB((vSxUGDFe$8xmo7D5Rx$GJeoK zvimu7@5SN$2^moX{NuomXeP-W=(c8HWrV3Y1n%TdyJtwZlw|;u)DAHz~QH&=Q=4`Gt+0&MY7oA4{C?jX^X8W$z(iC2E_W&zE z)W2&t{%*Gcy0Q-)0Z4!if?ANj1oduql_Pv~cDx3f*qM~6S!`~a1%$Ji6t%O$D&Lo0 z7wPzsU6{;I1{JtWXC|b%5)7I2F|2~cR`&CHH{7!#Ly=*bF*-qz^!l3!v6wlL|U(y`)^ zgbRZ0Q^jB|-+vZ_kC`S6xU)^49P&w%a8>(ET2^-t+8UMA(^K>I8(;}5(q(90i~^YZ zNRxjQALx-;hOvr$EL8qg1}&*s|2s9QtYbTu_2I(3(Ah&%tTR9=bDDZ7J%* zD)UNy(}M1{1IzKMly2wgn&O5`G~79}@j;Tgw`?FRjoW#ZG0w1wK_GXBcEBpDAe5#- z=;_V7Oq&I%(Q}9Cj{n_jnf!9mzYSJRL;dnt6hLSkE+RSbktDqa-@7}BTgT|1%I>Uj zq&nuwiiDw)rXS2v+x!Qd11p)PfCdW3Sg-lGoQ+G8{ zyY(cGwXw^}jmy^$a7~rjSorOE>qVBKMUP99ldhWZwcz-*Zr+CezX%Hm#wp{mE z4c@6wA~S^%hbn{0gt;{c0?Eteg-Yr+U1Y=GO)-#_G%@&z5H^A$imlhb!3l3e{ifBM4Aj+G(rOh;#1ElQZSz}jrpCoD*B91egmH%Ux|~BOE&Z=CJfCv| zvzf|>lAfm){|#*2(auJd!3xGBPDIy4BRT5?`q5r|{c6eC)P_yK-!6!=OhVp!N+g-W zlADQs-;Q6+naS;|h+wozh%)NllFup)R+Ln3e~*!~v`c$BzTN_R%M27C$9r$|n+-T7 z@3oDSz57~x()PTs5V%WsdGWQgYN*1kgu$`XE0^7^V}jiV;I(T(MUeqNGUoLMW_TE5 zyqU1onrZn$sIeh!32YMn&V@&j{u-?KFC6#r!ruxQ2Q<-V$AtJGrM#jv-;lYk))6r`kBGt=^y}`}CiTX4<0! z!W%Fzsv|!LR;7226q>UgDtDj|96t6RNEW6#s84`c?i}bH!}-S4`n3OZbS4ba{>4Un zdUi`by^{OtmU(EVk!t|2S_ZeelKOc{u`n3u+JQPdRJQweJ>-5#k7Bsapwkw+>c%*T z6U4f2^^y`&5VPcW)(s>g4nE4HkHSv^L#ZjGxg0gb^G|xa@&`pWnkc3e&o}&EBs3gk zSWbKA__=Mm&DvCd3%NU2a(ae2Vw?vKY_{G(1x_E-2uFL2c4cwE6bVA`Zk4l4~qgHq zVkOBBbL7zGRsYE|%6c-g-UIeEMFr>IpD4Dl4;lInxEh29j_zL4wmybp+tFWzAij)J z2?FGIS9HF(swCPjE10dw?hf^r`R9ciE?@OALDDIX$N}59824tQNPYhP2$mjiEeY1r zanfm(RplrM!s#28Y>q4B`|M#(a{AjHliIT&k{9|g{1*{EA=R^oSK~NBg7HY7F z{${I~&H`nYvKuH9T+rG*iH}z~*<~?Gl7`#}{96{(xY-nQU7q9V5xMR`F8E?r4Q)#H zIlI31YEUgxc7Lu8O38$Biv*IU9 zB6CENy)a;VI!NSo_s=)MZuZr%kY9$M5-}J2 z#4~iZ@=zPemmuFjlLSuVp5i}*W%L{^{w+Dxdv4I;Upn0_rTGfXx$3ea#+H2j`J=M=lnXs8QuS$f z0vNLTw{@3sNw+A@4&O}Hs#{tY_d?JtQ~><84zAS~+_~|J@0VMAGZd~ihSW`OcfT*+ z`8DvS4b>J)IZi6i0%OAJkCO9%9r}pAWt8RjH|t-JV7wWdH1oe-Z$!`tU|W9_qoloj zc0WAxFcE+uMGlF=DWt;dC-ZIADLKcg%Q89%lb-P5beW{N4MTOKCLD4rB8%|4l$=Xx zC*84dB(18-8#r@v@KiobZ2VPf&MZTbinVMH!*$`^S^a0m6?1M6z|tki#n8Yzf;0M( zg0jF8RZzctAtRewSj_1R4Rx&EWn|LyDP%X+$=6QBsu}8Ss^LVa@&RB}ys%S_Om}uBQL@w$vsMDv8mlO^FE& zgMMzuPkEuEs+PQ6`VnvAIR^n_-#}l%Fc@7(PhAX>(o9Li$^|x{{O8AY?cfs3xS`Bb zYjgy-GLoRNzEWQOz*EgO@4t=tIK7R$s-#`Zj2M>ya?b~e+yenBVhCC1y8<1mfhYFV z3O@8vUTqSn!(78?f!XBqZRNSahe%*}{GtE6x3n`}QD&1#>MAz^sK*`h2Fp7v$Ja7) z0Lb#{keG(P8~Q?j?^{s1%hi?9+IIJ$-l4=poOisXb%*95t5YGW?dP{MI^qTp^qDnV z)PrE`6|7f@Ggl^3KFWgt5h*6}c`%fr~04MQN zC4!C?WBN`y&P<`2_a$>GMboQ?JNT`-^%ws4;JtJOWU%dTHwjFVnJGT$2G zU`Wde3nyj!*JT+tZt_jd-(MLBBzLac)_Z-2r-60R!9Rix4iBN$hzYACoA(>+y2^Tv zvux&8;aEeIR3L2;AMfV?LU-;rDAxn=j&U`$DD)_e5o=hN_!>WXNqUV|O`LV>u&6jH zQk9N{MD52!L0mnpy!ZmRjV0IHG*mU>C}lKzDunuYekt_DfWzwU5QrD zjZJPwF}0D&5aRLddvKV;gi#bY7U`BX^Q0w zUC+>-h`s99^T}jrHY7bBDk~?#BpFYK^fKccad${loL1w~2X(c7W}t#=77#VLQQ2h( z)S!=kPyIE4Jcu|SDDYNwgK+B98W|1=mKwmc+m@IfK#&aAD>@Gj!etOIbJ-FI?k!sh zpaZP~!YvDgPchwva2hK#143c-^rt!W{sI^#G!E6#l7a-kR4k(tRudO?eZJR zHzt8d9ljKnhs?HXjUU+UwED26grfB45`DfaJKnEkMTgi^Y)=Z`z(Gu*Tmwjg8`Y~JG^^SJP*)9QyE{R_I?O{;BdC{VPOooSPs3k4G5jAFb z>KfAHc|6?OhTBHT?YOW!WZ_Ns&p&xQ@?edN!W!vuI2OZ)cqr@#?)G`%W|A*B;kq=bPZ- z*}NvH+19?jHg9j5E3ncTG}p9o2bJ2HkMwc_uV<_mOLdU=tK<>b%-joL1T0bjs4U#G@6af zXBrrLP3mT@R!buYkQqkHLtuq36Zj03Zv6GY7S&MfS1^L5RB|A7zK6%2Yk=k{{oU`&1dySHqXNyiH(TKh>UDvrxx z9A7<7G~ElQXv(6SyWJ)@8$d*VJ!P62EF2<_&G64Rh@MT@t-+y~xjJy00y;AzmLfLO#h>EjkXt$r~hU9f1 z&^a0c$DZ7!i%>i<7S?Y|U}R=@-jS*gq%)SoKvWDkrYpLngy@*$P|J*w{=q0sY|$Ni4WB#zn;KKiWFQ~sr;v7& z1wZtZeFH|{2`pA{^Q9urTI7)HQLefyYXT#q%i$RMCKz&{yHy@Ofl9&?D*5j0S6-;P zm8%ktEG<${=WfKcgE|3BfZt4}-+VYXe`p!pxInr;6o;*LAKGF%KfE%jWJvxtcg>Uq;xJ6 zG3M0<>dqX;J`kcyMB;_zMPUlj<8~(?gLEVQrcH&X#Iyi4zdGusPOCbSJ#I7MeQ`aO_7%p z2qKTkvXrXH2mZ<3QSd7Q#p9ztNQD-x1#^w&xp7vVGnf?`7jKM9*mCFJjbfXud6PVuY!%oO5e154(x zYCr^;)R16xkLSIBh!;tIV!uq{w8tdy1~O?CU*RG~#sslwBw+a}QE@=Ldc}uH35J%R zz6c1-Wp;sxmi^q(jANHDExl!uoA#13Ni2d7tx&9O8}D3X=ReaW)ii@}>17 z1F>TwweZU7@}|c3O2YIbKo zPVjg-57`3t7Pc|)a5-HXp8)XFFZb_A;U2jSA5%UMNr~FOje@3o>9SWmxGjW+ILUUV zZ{VkCB$?LLz(U-vMv&Y}OHX@r+^j>24B`bIdw$rjPl*bc!DoUWz;t8tPi>!dV%feg zUN3eZESi8G|Lmu3lXG`nIj|+O*(5_lH=%tcjMZQ4`^?DumM;>H3iT)wh;d=+^!81r z;KE+sWadrv*efLMkCENo;bo_aV35s>xMAfBZdlQ_wS5)=*Nf<%JveCKwC&Np=>hgd zG~dO&gzdw;;ES-)1k#q~%>TwL1fDF9y}gItE@1FSo_7&ku>6kU|~`qHbgF(q&cO(||j7IJlvZ8r8b*AFZ5)YE-y4rOD2S#VIgq;Un9( z1|^@X`Y<^8^L!Tuv0RhVg%eqPYF#TGwZa(Ev%+qM3Zc57=mm6OWk}A!K8ie#cCVnp zTE3l@n2pw0un&Uwd7CG~S{FH3J@wZA0#a7$it(fcs&OLcOC!vxBES_2FQoJ_tR4Mv z^t6LQa9<5C2Ig%a454*c*(%DT$kkMue_F!80pWH`s`ngjt9R}AG!p7i1f8@hCL6ia z@N$LWbmM$tXApng#b%9HSugoJzKw+icsF=Yo_7E`C0-e=A&$1a+Whf1+VNh+mPbES zyp7g!mTyBA3E*06m^%JHHT~P#1N+^#e}-62C~Qa?ASOthSJGllJXO$sYwKC_`=XgX$b{00c5hzr&x#zpfNdTVA3#g|_xW3TMKPluZzh7av<19zzeis)KwMEr7PKwYsVuR3 zrdBXDU)z;^2}fAEzGSby7scHq21+ms3&v9SwtErv=)LZ^x*rw0&SJGFU(mnEPZ|Cx zN9XavJ_r|(vC&=9!^lE=nt@GXK7W;g7ZSo){&dS40GuXD%F-NmPMNq+>tGZKhvRW!hD!v9 z>90h)!asN7ZIx1m4B<0o)B{{ejfn}q>Kgkzt!56@`5HcBjCyo=uRHteyv6w^%ewEF z3~ZP}ExU(>p?2tf5#hDhQhY}_qMk6DZbVD&IDw_NAfQPlyeH6Tg$L0x--XV58ya8e z|5K$$I#+Rt+Ihc1g+axTitv?2(G1_am}Tr?e;EkiyEiCYd>*hl@m+ZMlxCc0zP^Q& zR_2PtvA+;5kEK^}7w#v-FBwV~NB2v}!t&W7P80m($KKu=c<$?yY}<%i&%7H${JEzh z14B-vieuMvyo=hOEo^vg8+oQ2lSjh4af>fp51E=z=5Y%DEvvKc!qB73pBzF8)?DJp z)$T(Ii=8X;k0-w**<*bC{C6T)UDb!T`dK!&TFuNG=7&uxq9N@MnY9BiC(l&YWx>^X z0Nug9sn{>ciZw3{jorqZCEzjwt4%cbq=wG{g#*}czdd6zMKi3uWo0u$BQEhhGZ)>{ z)8<|MdkO45vuV8^b|>_jyhM{|#_%YBUro$(LCsx4Kg|{q=&l;xkLs=FyD=I@%`~m% z55@maJoJ z$qU|36T480RYglVQF^5AbQb+>m` z${`J3QUjBt#uFF1=)tO2VrZ4<8As*LTD)CmQJpO5;Au+;V$?>c_G9#!W@dtck+sR& z>3c7iMMyOkoC{0UdJ65+f(oExvb)7w{K5&wi}vE10_dXQWao1#Z)I$^Gzt&Fwnl)N zm8b;cnf61Sbpcp@7Kvr$skmfjoxJ!7E!PMj6P562=MqaSW94>9oD0mLU9<^iww)hhPUwIOo%S79_$TUBa|APpEO{gr+N+c!1BvvaV8-_h67wRl(EC&%2M za8~M*J%#-6D;cN%QBk%8HbEyjF^%twi{^%R6If&}vF++Ey>n~G zoHS7n7JWtM!V`L|arx*7Mb$WaTU$4--=K>O^DhICF(_(0i{wv>pFSgUsQY1O572W5 z<6JskARJc1Pq5z;G-{Ao{<^TdV^3ma`fohunihKF(i&E0NS8*`YTpVx>MY!qulx-5 zjo|wxm4x-+2&afs4J_^`dq(#Ok}ibNwq~Al?t!52h0T}oJIa7$Y`#IDu z&H(=zy@7yj3p^jdeXV(+gh$=k&kUXT)kpgdx5I}1C?`@KpDPKYST|hjiC-cc=gm<~ zWqC^f6I4bhoUo=~@Zjto_j*)rfMV?KWGcI#xU~1n-4j|U*C~K|VaknGf3WtsHgn#{ zfi;`gn(z z0N8s3LtNQJUz%Rir2>O~ttYjkc2DONU#y_4IL_u(IG;)d*GMJpt=xabH~}z zi(hIsL?Hi8#{G`8o<Ns&`iJ-g)9(Hb#~>-(>^ry77RKyZWgU!-YwhAD zxVJ9n8@V;y{GGv7Je|IzQ}b<38)~7Tfak<8f{3Kst^&_6)`y8f>}uhe3X<})6$X3` zm^nEL`t~5|_}8)YATe7De9X_Za(n)m#J&x&1buGA%TdK#&Pp*H*Un2-odUHuhbRN~ zMJAqmlOWi3INvI-S77TD(;`v?tp1Y=11)@^Ky|_)99pya2AjOLt0d_2T)PqAX7ch0q<96jBYN~FSf18hu;#ERCQ_1Ki zX{$IL6RMMfwPikTFM^!Cq5EO4KQ26U-N{-{R~vU!&RBzAkFCcTw)D7`0RZ%jN;_`T z1D)NX6+?(G0Y<}gX9&po>PV<*+Ov^T8;`s;usL2Hfop_MhQ_};CaseXKCY}uP211Y zMj*6{WbMnF!nkp)1N7ZF;8*^6M@j?>{E)=evHnusL0DjKT(SZfQH$#q7-PFFiZRiB zt3C>L{R@$%iUI-gm_r}Khd*mMs2?(u*C@4qQsNs%B5XF6HipBX23p465Ui%mIA%=k zT5~XpQmu9wfhzR6KS=5el)4c7VxLFKV1g7Ew8Rc@@=0f#HQR%~W*bo8R^h&cve?x$ zEYVa&9XJUO7)Rw%Q9FGFD=T4$F&_d6L0M)|0$&|>$gHgAVvvRha+Hm>qrW=0T)%H8 zl)FkRXino(*rx-g>0Z=r{do_sy(O3J($P&Gz>&!2imARHa)>^*rjJaB-gYE6vZPDy z=P2AJncVthXf=r7g`U?|4icB4sf!!yQ8|BK;@mEH0(-UOw&Lt{MDYshhXcOf9u(pFU-t+q1h z-Tx)DalH%NaC>1tUUBY(!1RyOAIV+WjU^~A71y}rxoW}&X!HREfc_K^Zyu6tLrAy@ zbE)q5wUzsqP~J^+-`3Gxm0d7D!$N-rvH)7afwCjuX>Ce&!qfTCJ1O?3`MOhUTdEWb zYJ?YuucQgbLRNA~bZQ z@(BV@yv@~$lOEJ#vb~Kq*zu*6w_{N_K12fOrsd@E`H?xi5o#y-GN0&=8ww=Jj~^H7 z=4YL8(ym=-QQ)il(6{M-+9vK{+UN2UH8mvEqaE!^@MyzXYb73w*#Ba6F3l78$GFCA z1NDB>vc#cMlxOYS=P$wzh%$Dm$rTUKir0OzLUOA z&#eZ-lasTWrTzJaEQ1T1xBdUvMfUz$WxX6=aop`BFRzZt%IPR?18#)?0hR4KNPf4o zZRRp#Cb#oiXapLX8>KKMc;Hle*rCJXl0yqBC@okp*%P>7jkwn}ON4Qj3xC#1g~ctp z=j~CoxZf!O5u$$FFu{9jEcP#i2uD&>3wgD75@LN!!}~CQ)jCh6>RjzVXVkoFfnr6x zeD~Pyr+KmcRX>rISeI#|S}o3=v89NxGxF)pg;%Xtuz;uk8wP8*5r z6Rs{i2S?K(KsS|YAzHMdNzIF`J(lZk<_7UlbjD+(c~!LQ69EGpP7|oX%niMgMl}h| zq^Hh7aBUoa2OnNt6V>pkmLtu>&c3~fL_v*|HJjSMsx;M$C?_3tnTAe-b>7p z2R+wVFhAu(qF=r%mC=@jld7Rml(qN_{=Nb%t9%Um)8 z5qS%7`JJLC{Q7U;Bv*^I*0S7*Ew(yz^b`D0h^e*COw#?l z&WSg~Pz0EFuXA@qWx{1!s&@JdpRb{j3h%cCIC&op%_O%u)1iRVL7TbAo6$;I<(L{y z$UwO@lHlAH6){Z-U#GjU8ooSKMN6vLH+4I9wj);Dcc{=4Bi_ zAloz7pp%&|1{IBhkiU8;i?}tFfG@5DZ~1j`0WT((VqO!~xlnxpH(SOBWGl&purT4Q z$Ue;8QVVXjD^={^uc)}hisQr;MKaqW^O|9fLC&MK9s292w*wSj zuMMTKye~40j#jABQ{(1Jfs)b{`rOB_>`Fjk$oQTITpAb;>hlpGzVbWQ@pi_MRIidv z>pwPZU9d~fA3z6>O$1N-Tg3n=`CU zQqRb<1B?mqU~D&fZMxg|?Ct{0gjXxb!2*0=Xj!hcN}w++>5EFzIWk+4mMX;Cpk|#$2s^~4(Egf`eJ=vjd=5`G5f?_ z57{nN2BYwS_eDS+Ibiosx*Kk8#eIluCX|67tk$Ae$fMrg%EdBH5+v8VgCV0(EywQs zo;&k>=}SvtejRTuZKzX{_y|YaX$C>|&*taOw{up%rfena-0@9G_0EPDBWJI#`qY-g;iPlsBRyS_f^gmV}S4g~aFHgn;!Cl+5 zcf`_xvcg`=&@!>_Dm8}+3ZBxG|ZyVN91QlM*ZkO|NutKqiy@{v65d&ED%O3)7#+_Fa1m12mlB-5xH8RL+h^rWSJMyNs?$0ymi{tk)OPKbjhutB0yIk z5qaOLM>j!()!O})<#o`SJ6l17aL;6u3yB;v5%^M5y874VJjRvf(q;6O8(;+>*{%W% z21=PpOSpeXBH+Mr`O^pp7u>q+Wg0}3Ci6Q{iORwBK|nbH4|YzIinnvwr9rdEiOZ_J;YsG zM2dWP&xULmac&P(_jvY6fU#~$dU02oVlE>Sm#MYbt(@E_&N-=oywM%SyR?7V72TD-ls=k{2ow`8qX5$o1XD9xJ1{jaFj8Fb|{!IA}I2?n}r9%8S&~LYSp+>gk_y zBU+kl23zTl{$SX}MX|u1{6>T7Uaa98zlIk-fVHN(Bbx zO|3fsqpQd1T`w0~=jImkdj0i{liC|6sAw8Bkl&!$Aob2yf|gDIdNfE6}?q0O7)Xn)k@_akoj9?O`*eapZ!eCe#Dwi@V3 zR}FsNHYM$e=EI><=64i9Y-dt&48 zc@ic^kbl9Pq*LaD^saZy;(;=Ow*K{|q8sN#1Q{OX!BANMAWRzCi4XrofC?<5-BY!e zx!y=N1?>A{U=t&5g(lYwA_{xxT`+f?>7Gv~3=aGT^h`)o;prbx;jUD$M~|5{Bj-Cx zC0>d_0KM66^I&gaJqRa5FXWedUR}Y9zO;(_YH5Ls^sxg{;f*}8<{xpWH(*{bbQZlC zGW^?xs0_!aysZfD(|kk0UAQ}Bl~fSJ*V003T4n86wI94P4DFDcN(n95L+CZ7ora0L^?f_9;3>L_pD#Uoh|1`wI-AXhuV2E3mNJGtk~OU#U5j zu}%W((O8m2lwu|i&18~6suc;u+PPM=Myq__;K=ZqyTl7Oz_DDf_nGLU=H?6AjT#57 zb~o!2dXJl2YXC*wKiY5=BVhI2n1a=pQ)h|mA7&@%r$QN`avW(#J+u&+Mo))H=``17 zJz7$mkTMKQWOu>*#Sr4JlgCVU!3Js z#2q8U{d4_U{1_vTmJ7l7u}a|lclUG%yy>bmDvUmzF!ywY#AtB$Z;gO0NHlg}dcXQS z-?QA4@6VcsIeQ`c45+GWWa}5!;-0Jam~qW<3%PIVpSMf4IJU&^k4JIjfWclVO6Fp< zfs|-Ox8kKgNkO;n`IGKBie?lK@m1KhUe)B*GAh+Ho`(@$u`*afPXTQrXP#4j)BZcA& zxE`DYzexh%-9DzGg0U23is}#u8Wg;UyoS{r|Y5`a@?MI$}FHh<;N9 zusJoAKYWHw7cE-v6mW`r!b{-g^PhCsLyI;O!GtZ&pC0oDpCfl(yaUq_S)Y*XHk`1(D(2ob{$!Awzg9$T0=xP*oMJFae-}>=?39nS{^54ngD7yR1$lG!X zGp|Bc_p>82`AB(J1vWKQ-heK@6pI%GBfSn`5xKGIyrXR~F|iF!wD3>{GmA{K0VbevmmYru;=O zBQ}(z<$El{E5?{!zl-#0i_cp1aZa>cg3jshvg7N-m$_++oI5#S`%e273z+{>72PE0 zYbR87Zw!RsgJP5_ZL~Lj*XSNf!&PeL^)m`=?G5X{;I^bK1ObfEf5`v{dmk_MZTnCm z(gEg1$UneC2c|+h;Yhbhn9y!9g?2&JK@`|dQg5@s0MBTZ&M-9Sq&(^(5LA!ooxw`Z zXOGU(`B|slZvN>6GqorR5`HS9d20ql_QGmEHa+*_>QQ|2*h94e(5@i}#pc(~cen>s z{wuOX)7+hDD8GHX617YeWO>DV15idtfNvC*!RBBztJ5_O@^evo3U{;8sFwdVxf~_+ z{a9gF6h#cuie;zr$2}y_^^2u}(sRacNTCkVI$fB|_LgyhyTV|ZQ8rw)>C=9kNAq5f z_)4(AwNTvqFV!%bgAuE8OO&=NvTPaNfF>e0H&R`E1X zu=vm?@j@wW8R%a|5xh)QjSojpArY+_{wVcj%%69x@Bnw#=-y12WclwDJP_!A8-DfgCB(82DAdmZa7(Cc)PsR%5f(33~ z>zP>qB$K$7Jh6o~{wF{YL6gdBisH*6i0vTgF$G0Vk4!`!K)Bcs;Dv+Esua`Mltlr z!n+DMZm3cBX1wVbB%P*BM-5i_qNDWto55 zaF^Q&3K$Ybd6kWF=;&0t)IjjIJ1CeGho2U%k7gXG{agd{#_>=XSz@90{@h}n3l9ovO-Bf34 zMBel=2x`NBfI*DinQkr_fU2>E7;K z(*o5gH*9?U(_$=3C0ksehjaw>nMeTGbrt|j1@wb2va7FTyx?YwdZrx2kf6{CkO|@6 z>S}sUOt@EbSy}&Y2lmZ{rJ-kIz-m@GmZ&r9pR&!+@N5~>bjlVgIV1rUn@AJL&Z+7; z6y?`-Sq=9s8BD$Qb@~8C}H`x z;GNTsQHt>v^^S7Vor<#S<6H5}{gOBdY6mW25CTN*vQ~okQcBs6cbeI$^>IMQBI4?f z%YWmGl3H@qAf^^pU~7;xLALO7W?LHoIXcP58?e1AWi#;&le^=f;!km>eH?3H?fkiI zX=6y&eAkJqf5;72ZvRWXz{X0Qx+6ud=gdHqs9HN|vBxXJ>Z3Szmx=Q!7dzY~V3V15 z>rlV^!ZhcqX!C6v^gJ4dxipW5?cH03?hS{_&bE%8rk7bPyPCgJ2J7UVA8)@MbaYHY_4@Ge=t{uPYy-4TJf0!VIT#S}zss)Ty95FNUik=rrxP^>hcJ(6yk0 z>EH+_04DwO(Z4$8qhuoes|pb?cT8g@Pqq0~4^zf!G}HYJp;3wlq@K@@Tn%kdb(MN_ z;z&L@TB}bfQ8C7v%Iq;o+~7hk9`_5^!QSpnSFL$eBiEO(AEvPZ-tvA+#8--Rw8(I# znX??{+yd3zQu(`Eu%e=F)LFJUbulGFO>nVbk@c^Xo2nXV-jQvG%qJM;cQv{5x`1Np z8$5w-ojsc*{?Aym1Am{&=S%g!-grm~fvQw|K-(oBF{RJme;z5}Mxv(>`WWIP&aQm*5R}zX&m~`J%on-@({U)!~el*_3=A`QO7Re zqam)9{kc2Pg%zn*3C&tvCzI9-uK-%0!7&&SN1;sV{SzQmx$2~h@T|00CI2|li2s%? z%}M}~XclqY(9P#GP=i0ix)?@QjE@myEQCR`w_GQ_6$=7ibCNPG?RBsCBgHOr@1+> zMF2-njrvazVro`I0i>)crgWU@W%7PlJ4icl!4C#Ka5-`;3p&Mbep+kxx4_kqy1rkc zdQ1ApkFLN@weMfpm!>N;I|B^I)1o|@8)@(>|d14jLSnT^Ri)Hs~sdSVai+O0i%u;Gn33I60E8{z|a7*1AeAd7UBv5aSv|rT;RvW=~FZGvLx^>t!GK|xn zp5-2vxeD1>XpJjLb}<`rU?!qrbcu&Zi+NsM_&laO(y-hFu$!63?R`{!29;CnI)g~u zB@LuExQGDo5xj;(DldHWUKE%81xeY{s52%pLBGj(5}?l^D8DG&y5Jf}$R^6T40U@q z#MM_G$HI$C@0J7p`I}i``EMu#ql{0*R-{UB-5`b9;@x4$HtXoRG z3>t~GOaB^vJI)49yP#@4X+x2;{A{}rUwt)+9J(LkL`**|?&8UcfDh+wY8Bf9LFtMU z1(+>N@o+T_AvRLAeRR#DYo8Zw;&0}|#iu>)hNkW1Uqi1zqx3Dc$`umSBg%IE$D_4& z6lQ}yO9I71*FogSSyU(^NxB9{D3vr-WT1Q3(>|X0&w(gzMB$8`}XB=ja&b|VZi&x~wI__(bhed6?W--O!X@HQA}$E5CaYoRSzQtYC{)Rl6wXO6sA z^Pjp-bUinO=czo&iDa+64el-&eJ=%ULsriVAVIEu3cAy38S6y&c_FCJO^KY&;{ZcI zyuUVFT$HU*1@(g7n(@aTTpmWFnd#RC)0Pz2#Z<<1&GhG@lE<2DmTeAwXT9rKuGwnw z77v_al!_znPyE^vBLpmQBfRkK1e0L^AWD;I(b4XWG$i`Wk7=j7&Nb^WYVBd`LZYgL zchO6j{_SAl4OLE6fPtH_EXApy+`(#e5|2i~9J`L{qmsN=Aw#yJiF~FTbem4oyxB#7 z883EGEExEReqXb@h5hNLz%Jolm_yc8xXGpW&YJVNvaTu7${szgbda07uPWRLeNjA& zdwK{{G*lG!O%t@z0S7Ykvg!1|AX|>S7*;+?MI_qzwFnPY`ijU_J{b)5bA3X=4&faf5=?es#HM5dQI#g zc1Njui{mZ~94g`lYcW$K7ITZV74n`f;n~jV87a2h5|f@Eis6fW$V)!!&q(Zh3SkQ! zChosJG=`sDiVu?pYsF4|n1$F#mW*#%S%5PIFJ>RLE2%JDj1SLv8_}>7A{7)r%MFaisW!^ri3FhZ2{-0g9&WRn}`+>cXyn8we-$u?uf z?L&*@ypl`k5@rvDd*{CT)mo>|Z0AiO8pR1$_Z(fFplEj=hVemnFcu>a^zR+ZVj)AwWK);aqpqz+#V7S@f7spyyu+1 z41O|UC+GnzEJKF$;n5G@*MzkWC`u zobSzOqLXuo17rH&X8zJ;9!Lw^){B-|*!RIMHdH3F{&zII0=T#>9o$Bb@k0oE!QOMw z0Q98pWC&D7jV88y=E^og1!6ULhNPU)gS%x-M9)~HIa}{TH{8M!65mP5uBxWNWO(Ir ztU&H3!8ud(aDbsRUztB#!{h?Ng%I-3P{E@qHB*$O7;ib*1Ou8App^!$nX^s1FluCM ze(<&^w%U8D_JhsluPKBgMc|n5V+6woXa_Eoxi`R37B}eVLqcl*YH7RU(UQJCw&Ojz~y?$~FPhrRc&_bqZgwuft_z*^9 z15g1{mvw3g0TxbU&ZD*kUfa1h5Ujlm$=y9ar&0^c{L}Ts6I2c=q2|Z6+%^eW^+D_X zkPpEvD>s!_QG`C##Lcbg*=7*2mY++`cI~B69Nq!*=G%>^>D8=geXZ};DT^;{*Pnq_ z9zV@=;A2|3L4hBPdMvmuD=+tG9Yf0v(mo`(N}o;WJ)po3Y}a(Lap<1~O3ompk&K+J@CB{r8s!Be=}EWK#zQD0$#Jv&j^=koHsMWp z>bKMeEOcV-Cl@sCe&V?|naNCLw443L9&VU6a9j6f7=?vV(=N<_G z13e$~^@H@WMh%O;;p39IVpx6C(MU)4wx;*rUSv4WYGAR8>^Y#;8V9e`(#Od1lg8ukb5Kk44Vj(_V zQcI$SlT5Qi_>}M#Zi~*_gQWYL6;o!Ema*ItcgiTk7U!7b-8U_l7@Sb2gWRV4UN|;d z`_!6)piB&jSZBef=+T+uVh~^}U&4RQe9(be0LSwR+JpT^$-df)(e%?wD*yVDvmb(h3Pf>?|7}Eb+*dAlt>i_l zM7c$tWEsMKoyRT7iWpiX_QPDRT^iaV&&YS8rz}u{D*g(ZJP)@|5s8eofJk3Ys-y9G zbP_}S+*f$Eyg3=BsBZimW{mu$UjT9mNR#kAE@jyv`3d6#Ps8TOnGI5VXH~?2@iu?) zZlZ#2I<(zD$H%C$YZ&J*Bfd~*bO*n>VrhuLx=E7qW=EwduL)UgA-!FU~YvCak(wIM@1>q)Zw zazRY&NxMCvSBLipf4JOuV6-=2auohVue){Gt^O`4AS4n19IedJUW~#jd>^prUglps|oj||!S$W;TgT2_n z{am;`iLLFVDEJVkxQtfhdw*-!+~*|&;p6b#IV0?l^ug?iIGYiKZdf@h%Gqqc(-9#e zfUp$vSa6`RBioq5?x3M~d23b5U>QOsOtg(VRS$)x5d3deAP4+RTQ}f|QPG~Vp8O|$ zShK>n-Bo~>&fJO)H$dIG>1AL3=_)kc`9t@vPew4_FZk&4qa9S5OwCe*P8iC;`rzuD zkCBN&YC;YEH~D<4*E)%_&O?y@k)*p|27u+YlfVluI)bkOzH%d;m=lF{bnYf7aBM4$XTn@>z?crRVT|2VEhF?R z?lm3|pa&a2jwz!Qh!+FS=>*hKNEOk(=?K1cOl9{dK|blC|kgI)M_hUg2gk)nlQU-9PvZVsF{EXObBdZCz4lV=5lDq8+CvFcen!9za8Qm!iDp?20S|k?2x= z<5ma_^>In^GB_&@)YTbd+!UC@dOYTqm58t&xAwA$dxE1KJxL8yV?CH5(vRvntf0r8 zSu7#{IJN_|si6tdEwEh$SSP9Ay=p+J@_n2AI}6->BJ$*4Fl2xmv?y2SvY_VVPHw}0 zp~=Ozu}WFcXFpI8=<$#KG3Mp-{ww2N8c*JhZ^mrmR?*`jq#JBWCQow^G7SoLBxrAPFrny=3n22JG>G?(do1lF-9b{rxR@FyUCQD~n zZsEAykiL3aO+IH;Ll2sQ*eFiY9Ow_r7WKrnKABM&a6 z0*u&`nX;KYl$is%zE_JSLn zeQM(*JQO#gN`lh*hJq-?)lE7Fh1Y3LLF_RdLy_hUtl?^rI>j`u>gXX2`d0UXSFQve zfe$>gcQ-w2yMjT${}}-Vcg*wul=>ks`GqH<%D3k!TT;dGvd|Rk&pR1hKk>yG_;E>e z2(sO8z^)4p)53#C*eSVS20auTXiz=Udt-S(oSoi2pgZTgQWdGj>ao{e+Dshvm2iFNx-QOwJOhGoi8Flrl<-Y!D+(nXW}wswO!R?gtET-0Kugu_(c znSheiPwc&k`+xl(X^61xAv7ojI*%7~u?i=RWkcmhG-E8rktcr?cLpa6@?)KAXxqHmcsJHJOl}K^A z*Hkd7Fg>W#_?I93FPW=0s5N1oM;B4%S5z!&{|(I@?rmT=Veda_Zm-$6za4H8v|wmg zt=qYLQgxPhWLJK(j!9qfC9^9tYVrl<5SgD?y_ndwG?n`O=Y}V}$i!>8gfh4akGO|S zls5kEEPjOvA9J4pC07!1@1#5&W3AfuK0C2$<(P#julZ??cI53H7k`p;M3=1hQ>34% zKrQv-@5SsXDlB~tF3+wj;v?(?uCDfRUIdNxo`F9>w#6JVO1|Bd&jE#nViP zIpmFth?4eFL-guROW*K!7{Byp)nmL%l34Z~#$(N*Ol+ogw#px;kyh87@hVP$lE_o) zxM_i**!Y3RyoeCXS31*D!fY_Dx0y9tbA#+Al3l3_yaNDWPg407v{#At^ z1uewz+2w_NbNCY#py1=sKX=HJAi6@i?F|N(=A$hjR_JdoQIGy&k3NZnY`4b;i-_m7 z&)F?u_TR&!kqR1sp__yUm|D7_`om-8DhdEKA3S#;Nut}2YR%uIs6Yh=JUXJ*!ktpW zJ~*;Wd@h1ZfU3;^IrdJ+hYyr0mITXyJ@V(iR;1}A*fJhqkP`iMwlriR=_h~;&Vhn3 zT>jvsY%H@usgfcx~a7ucK*v7ACzqvIy8p;?w=`v|qE^vTGhN&IS@C zqx=X$>>gaYqWfe6z}F|Q?KjA@ET?g|b25f!Wf0bfJ_tFUu%-&T&mrDvQ}JoUs!>$Q z_ItT@#_H#Udr9+RS6K4s#%+jEMTF7Y1#c;_^Jb^4&shu8MUd4BW5Tkve)PsA5Fbm# zUMjFD9-7=XB&DB_%Sd_2NTAY=&6&DnGsc>~fx~^fYKTW9_0039#_9adw}ewy1y52< z5~%%@H3)0r&)W1T>Fp*DrKZEJK5!s(MP7tM&oXwg5Uwk4^pO=X6fAI1{ybHE~DT+w|t7VMk*OHzPi<#%_}Bo!w&f?*O+w&_~fVkV`|V;b+)| zdyLPfR^B-kET_0vu@`9KvPtghXMP4nOzxl#c|(A8~PBp z{VF^oKZFsG&GK0isnCvc5T(e|YL{;nn4T=A4UU2SKSD7Fq%+1N+ubVTNp;=VTi0#L z6_u5>{xOo~+}ulYSP7iR?iuT3!&o@&k(yVGbvyIM$NVRG9#-ExQ{K@BEm)!^9uYX0 ziWF=Jqz`sOcn~0{xVhjq-hf-j-KGmH-}p4MC#ZZ@6=vD%bvP$_M@0osfabM^Vt<1Q z5~)qq`~SKl$CG$TZ-R5XwN#`_TJWJoK{fby8v9OjaljtMz4Ht8?Lm-0?6^Hi2N;b6 z#tbpX<-7d%RR2nmRsTc>*z#Xr8nFSFe-}xBflf_9xJHghPuA&fpEH5DQ+5vtmt}>m zb*?JI-&HQ-0~erq=`T906Q2NCyacPs?ar=bSygetnuVlX6#inIXQ^9j}(NH)5DjL09_}MSqxP%o1?hB zbSZ59Z#)#a_?{}S9%H<=TOj*PzPr&kBJ`#R6Gu%ZaQIqA*907`Gd`u|mRz3JC!C1%AGRx}fIc{Iq>Ke63C`yXBD)y7j}uT<*; z;mzzqPEaXUo~QI7nj|$FT}?b?gcOmcP2Un|JCHgoXb9q_Td%7c zUO3S^scN}eAk;IjXd{38<^9Lz@M!{Fqp*m+1#$7JJvTeoq2rWP==)WA9Y6HPEE|37 zU-&RTlip(+NHc9~`+rt5Q>)d5t(1knUGWG!p?Lm)i{T*2M#@AC9?d)()fygMDGMcV zo4?X>LgBvpuG=mPEKuTL{dk;-)%p`Oww-Rm^j&H-NlXvcnlrlJ<;oGe z9+TeZo^$}D7O8kPiJbLV?}jay9Wzb{E9F}?d+8XEjDqu6CcA{SP!%_Sk)1h^y&WwO zr3&lq7nJlsQb@jvD*PtXx8$d;u&TCfL;{!#;O6=20N>=N^w)YV;2tC-;)$qBUz?L4 zn~aXiy7(mZpu!z@{6JI>|3jjxE;8lpz+lIf{@dXC`(UUn1*d&B`^k({7A@zCArh^k zc^9SpAwkM>jc%y9voxI$%4aBU(-z~ew; zsPI4G{8Uj+f*2HlVhHUZCZYgiUkkMy+vs^s+Zh-fRw8!2R%-t2uCr#&SpYm2F3&=gUDc67lPlBqy@1;J8#>bV!s|&3u_!av&cz z5S+6S)#*1bSL${k^hlEv36H&EQBar7?s$-pNd&|x^VP9x8RBN{h>uAv4dHQ+B3fA9 z=-_M3!q#armekLz9lI%N)xXo>6e5{iO{o}~i8C}P;%5X3J75fXOe}f_%o_i^1SMW9PKXOykpT z;S0)Ms+BBl$JMoj_>%DTEOf_BZ>3jII#ujst`ZI~52(v9%P-B(4f*$BI~wpg;r_X+ z;n9Y3=4PxVvso(HYc~wn{htd9z+8YnQbX2jb!gT8DXkg-*|N{lD*uT3 z8NM2&&c91K5A<~nCs}*5_LJZ6DQ%aUdomh$Q2|!IqX5US%EHX&Nk>?-O3xE^`b64W zo?GZuYEBor$;e(!Hj+=x@9~=B*M798*#yrI8uoasMR%t;QpDX8e@2V!ZY}@ZU*3l< zsE{=rqc;7XI0l35&+b|?o`=V1d7Riq7T;&tpD~A9!;w%$2319=WZeqOuKaPl4?M*U zQT<%8rr!;&8E18dJGQg22}I3Ls;9b0)OInI&%etU4>r6F#-noQI5)$?EdL*mWM5Rc zA`A+Pj{_LCD{L8K;{tYd2!^m*#^9jXi))?NF2Sa-xO}vHIs6od2Ez%{aE!WJ+OV1+ z^KQeA+FRbEb~m(>!JD7%XqKnCi&eFEdJFl)f8IE30|K@Wo4k_xuIn|@JH)LN6O4n$2Lx0J}# z^vkqh=J#ccEiwCo^cNdicmBE!6arNY*GC}V&D+6Vl|3Y0tz;vRrgSKiKVZ9mKMU@L zy>-t_Y%FZ`Kfr%zeB0mD6y>&K9nr0j#6EUxYt1m!GD5s=y-w&8Rw zP3kw+KjTqJUr8i?nwV%KzG3InQb(T_ZRinbg7MYp14Uz7{Xc#R-s93(`h8gRm?2n0 zvI*mEU1}KFRn^}^(ltW9!F>MSVB0&2YtZ=VPL+6$#rZDWt9yFH-)_3pZ*6wm4k<(H zXJF06Z|Wl;RGjUL;rb5)L0Cicon9^ES&qz$SW|dV9R+mH-fppheoe`|`wCEXDW`tS zC1`8EW}^W#_?yLV1HX!dD?sDv$hp0zQ`_u4+1LRM~TND(P9ZO=zvF`hgvVer2B$x8At zi|_9VfxYlD>r>;L>SdUZJf^BaX_-)7zz(<0u5>;MGuuLTH!eouBA(9FK|WP_kHS#4 zCk!+XJ1|+;`exUYeSYQCTmmNRr0NuOYM)r~poj6bdMv(x{kH=ax#Xa|f?fd1`HIYz zS8by=^A{_$_D%*NZvhx*G~3RsN^W=UI!@N64*m2WC5ZbxzeuuK|E~QJyQ-OkYbn6Z4OpvxMinBW| zXFKmy_>3F3XSDSo=C&oTMV5>jualw{TK@oX+T76TVN^(z59lG&J7l7h!84pX~wi*Rb`ohxtw^FW+k)sIZTmeSlpM!-M4-S zMj&4n5C%S;dno$>4E4yJK#Kou0U(K z#yiCiAq$$ZZ3nO9$=&oEl8-+zrA@V*C875gWxeCr(U4Ytb=x6*%lv-ml1OSn#L`3-O8N1be0!vT+--Mikt=fq1dZJ*A~KqVGWV*rl1>+c}Kn*%z9(s z0AAY_yyj^-Pmm3p&j*V*$V>E19+MCWw+fpzkfZ*H>X2r-v*ESi(0W|KHVllkuvek5 zG4S2uYc8T}&^|Mt9{UlsYUsk=%A4_XcQRk7JokS`NFydAm(J<174RGyAwtS8I7Hz$ zV3)&4sX-H#4w z=WuqUl73$U?N zuQ(uovI`Hgvw*C=-iDM~!bq>|u1E;-JTaQmr5C$55Hcgn8PII&97{&(XG<()H6T9m zlRG_l7_pPwQtSo#|IOYFipem~=jSAI$^qC@0RWy9^8I@GI9;Vb>yFOV;uQ^|UG}Y_ zoxX?IRz4T7QEa#5&yTSw_8;ajHimurXC7b>z843ND%h&UMnV;}fnP=uMg`O<-wC3Str?IempxuOg(YhqmetYn}J- zCR&T-^v6BEc=Vw5i$A_vdI3h7+Dr|!rfFnIWn-MMPpy?zIJvj+r09fRirD$FOePdk zqsn3Y4#v)h$dcz&mxy$YfxOc~p8#OR%%V`m1r#cw($(e=7xQC=0To@}yClM^lH!cp z|C?K1P}pvk{R{?#SDi)oizQ<%nf&vW!Km1)vTgVE#UIe*y$#sfY3Lz2I|gU`KO46` zRA?6-IA_Ulqf$tl|AG!SQuCw$xZEVei|Vg$?MJ)Pgd3tNGoQegieaO@nT2m#m}QQ>&pDtlPdRvO0^94DpIspvMoOIq zj6>(R{BaBmTbgiQmhQI{U$jFsHBR;9iv>#*+zS7JKc4Vrrc>6+xH0|#e9)&d-0Ph= z@?O6!a{jw>{1m0pFHXu~$ro`w**EUDrg9z5kUYD$FDn>$Dieqqjpj&hQ9lf8&Oe~# z22S@Mnyd^Q=ye!{|_XP@1eh_gEDUP=vn~mH88?3&4=EQhm{CwqLpR6&W%s~v9d9jy} z@W43UkJ0%}g7TMh_Zl)C%RKcvPc@GB_t*9z9s-r8ZkzSNyP=(TObeBF*De8fAjTmd z?=^w$4BoGOV1G*=y-+kOV@Bu};j!5v zWvn=hwF1;Jm|lC))-Alb*;ijFj$g0YfhG| z*H;r$z(Qh=c+XISANdZBV8h8C3EerBMO`2JWVXvXWP@I@^|Z6n*rkKRM7WT2>!8Yi z4vyL(imRV517(n)`et}sW}X$`=bQaC%QArDsX=nt^`%(7$57a)G@1=m=4tRhvC+iE`Gc+*r>rfThlAGFY+ z`K*ys5hn}gq{#X(sEm0sgsrb^Ri*LLrkQs|KjboTjG_dHoH>rC)H=nMsjiSr#v@K+ z$g`Waf7Wjz`DCdV(Ad2uqvw72e5}xWn(WR+p^S_i%v+LjE<<_B(7*!4nQXDd1lE#p z!VSauf1eJDJM%eKda;&$!0Q{`eD`DB6!2;h=Mq0vQ7Oe*qr#5lDor7 zp8^5=1kQ|k0FpDl)vGJjV{hocOi>X3m4lCaNnz9acrP40h4wz2nqNqc{1K|9AaP^O zsO-ws)T;*{KU9$#!KR2@D(du`ZakD57-S*24a7k>2^v|-b)^4fvRaO6UYkIj(mj;F zojkfeUf+1LJOhn!z#y?<$Kv9>>6*Wsh@Lz+mT#N!miw3Wd5?a}xF zcZJSg$O9!b^c55W1*3FKN`CxM5hh@Q6TQJJEzxRA@no6KOtIlpO1&73jM>CQO-+Cc z8Qx_=Z1Q^=$QuB(~f37~AFYwgb+g z&pId2+H@cy)dbjh_fpLw&7Vn2d7GcA(fq9&Oh;K{BBC z!u7%kn272_rVK)3iTiSyw%%l;dz|HD8-`wu@HFk4v`(fY1W%E>UB4!gOC#qcSy-U& z%Kjm4cVFZ<<{ox;Z3#A|1V5CytzPH zy>xh1-XR4-c@|Hxu$0pUFgF2jH>)Z zMSonve7mhaod*~L45epalyFTOn=0ZzC0}M563@edQ@e|&YDlc8hFcv`#86R$rH@&- zuGCe5?qnF5VGQ&WuSInkSXeb&lC@U0bFpUu$U`x`w5Fik@yavK(H}w=6*f)TLx53( z0~#T|%|+7_2AA`Rd#m1-E{HU1kHDc8+umO?iqhTzWu0|i0RfRB}Icpv3_XkSfyus zPDme@VaVDT#9@<=I5P=3tblDLvlJ#LU>k<1=z;zlPt?_I>+;fclWl_dJLzGi}7pmb!LX)Hhv z)V&a#+qOH>9ktxr2sg1Xnd$MW2mH|*Amk9eDn(C5^`r&Pqk|O)++e02V*+EuSG+4wJmDOZzV%06_cflN`UHfi0D#xR1PG zYrSWXN+v^f8zd2Diy4p#CTJts7e+o3ofRh}2#<&CxW&}j=-tJG5OarO%~b})XF0-$ z5AB6YX_wcw^*`ujdWIL^7`Kf7dbeqkeJCgqadb-1-<A8Td`sfi@_(1nmO5 z1LrZmA~H1%1ReY0)+`MX>-AkUDtP}};2vJ?TqCx^ z`uPaEwff%-XL7A6O&xL(E4Y2eAUcriJb5=@;_QK2Vo}Jt8b(r%Sx+nwDg>EEpmChV zPWJ&2R{Oz3M{8bKbc*l*r5n}MFIfZ(lJ9W$x}r3^`cr;iC2bAWE)fiKBmNfFc`QuB zeDbhA#j}>~o0bn&s34HvJh^v4hFmsDtl8!>st|;V7=idVGM62S0f)aPF6~0TEA#I! z;)I)px=HeXks+4G+Vi5?^!l@9V49lE{sX&El7Y3s z)z(P)uQlr;a(V(<`!gNY{OafQ?mQz`&d#`eaO`_3?x>q&4GPI`bM(g7kp#DH&i(6@ z{ADm@LXH%|R9P196~#PMGYz9CBN0f>z95@N&Vr6{`&MAFAYQUa`a#}o(I z^KuGqH187Z>3?Hzj0+ghPY0>c<+D#$jp0gN;vqv!?uS%JXGZPg6oOjo8rd2V1E`@S z949k{a7MQd<%0RW?dZt6j5#;PRcIQMCvmFvs5u`M;t+fu3G!Pbpw-BQ)x9GALgleO zeph#1ud=UpuCc{oyE$iA^XLeCb0#~)$?--> zHrD!T15CgD?qfaX{N2mwWQjxW>q98g0&m{z5zSq(kK}%6h)K8M;ikQjFuw)OTB-z( z4w|T{|G+{9fum4xs(_iSC<14)?6Q7zH8WhDx7!V>=;WpG&-f!l^6Gj)B|^5Pk#RwX zBew*woH2zPq(v6qIFC9H^?((2mcb>q@~Y0MI!o%{_`Ks;cjF1`CbYgn5+O zAm!LIWY$a&nV(y_J#%xI^1)5GDBVeE;LCfc!7!TQcPQZPq9E5g>K`Cx9>jLQo0IB)Tq>=PC~>q+?Z>%g4nM= z+R0UP#$gKqV^9e-{A{(8VdR_z=0FKJktr)kd~$%a*ljAo_c+4v2}yAO;F(w!fGu#Z zBH1t+C)TW82!4=1%Jj<|6&P>cZbH7IGRi|-Y{3#jg<^1vTQ7?5l|<64Bwuz(;vnk2 zFImPJYfWQ2mCierKE4$NXh5K20fL^TFhE(zLmYmG$Ith+ufX(_gtmJ-UPPU>YW}C_ zNcOtgCxR$bILd%@o6MGwR%12_!`FWu==i>KGzq7Be*FkAukFmt;`Vjy+8OCWEY&6g zN4c=@-yo*Q%SE^rL%WP*rMfafx3sAB|J{F0(~e5EP(HyCBFcru2|Z@I1mrj*Xa2PF zl@k!3MSo-+E63o8jW4%yaS}=U?dsqg5it7WnbSJp{R0PmTcrx9Y*6(UC@ej_j-*V) zb6pZ<_GiAGVgy4ai}&e%MWww=&!FI}*O=v|+Pvn$nrmBvw)CFsIl!yID0*!-G7O9` z;2=;RVV~rFdYxJUZCQ5n)7TQ2Vg?f*6X&7Tiy&~0$j-$*bm8(`-;lUr2P$Qsh5TvX zWQbNQy=t}EK<>@iJzy;31w`8c{d0EGp1!zFwA902a63zd1FEwUs#=(&*T=c-vM>;w)QG6XfLc~^PijS`AlPjLI z&})P;+nR2?;mfa7~+%TdPFEG{Z+Cc4&9m~XZ^RrI?> zh;{p^9InRC2HFdY?K=TeB5eM&Wq*pv8B-Jsef=a|VRWIn0vwy$p`xIOkI(+Qx=B|d zSt&r=V74n5dru;J^)j^a6^15>#Nu5t38eCpI^t zJ;wGU2ei>32(_sb3hGKt=rq|D(A)}Jck*#hDv@GxRl&aryMQL{&U)}DjId!c1_f@W?^>vJmbZSff~68W6_hkSJs|Ji^|3T^9=bH6dd4uWy7+kHPwWfL6Cu;$iqS1YA!@qol7XbLn@FH z+Lgsg6{2D>LT%K1X=VG4UKh9 zu)khQ=?2?S*OS4nTOWgPt~1SPq6>!|N4hC5CE1QIdpRn1#^WgauN534Y?2 z&c*BStJqrG9WvL)x!2deJEb&tVp+Q~QyZbd?-VNf_X-rV{|^k7?~>nq_T6sel#kkP zX)^A%NlCH1R~-lQWDOo#wD%=l2niDUUCD-9GEbn-XWu1Z<-Mx+!h|Ri?Gb&DS=M@$eq?fT z#I;j0`#w8tIwNihYJ#uLaGgl2ijAB#b`y^HrdN#?G6ldMsP||DNt7Y~VP-5qRuWOD z`dRmN5k<}YNf~WEee^Y+W_^+5y{_kX6JM!*6zm0Sx`Ni3P{rFJUC3V(Cg>osMp3|?bbx}H{Ros+Zh>;>mSdG}gN=y> z-bP^Fy2832-?B$#>4$6Lx)xc-Rj|_q@eKf8$v^a#{zX!qUeGJp~`sk`Av3*|C@^ zV~SkmV}sV7Eut1Mt$dDGmww3ga2YN636Ao+O+*>VEW$PU&xG+Lz@r1%;fp z?d_P3it7QLb!yjb0NT8|pv59~RW0*JQId$$>!A?y%CT<7(V)1aohNL3!W z?^YqF40~^o4%Kb>0q*iLefz1KwWf&Idc*l1N4#nIi1Bv~ldd1HKSj&{GtnjV($o*e z;)X~JtsvOzXBJk9PmD-^tG(`Ax`tHYrYgcqzS4GR(78YS;qbekixaA6Yn%~uEN8yiO5)(J4uvVMkcuY8>CtA5 zfqUZj=|)nlJ{);g49`5m>XIYw(f2biS!#Uerm~;d)}AFIoZSOKCe4xQ2K-R1XHIQQMwugBmpD+|GRpM z2yvR)>J8+#o&awmFsnNdPWr!uv`VYLmKUi1-1b%N*})E8FRwWg|AL6YhAgfKXWcl% zQI{beX(gq;L-I=@24SG3n&=ERhzvg6U@bmR4a*-2z;(;4x@~L<2}tVOmH`f{OBYLy zga+$T>KH9AC==KZ;wOF*?m?`nw$!I4v@@zIpt^%+Yuql7niAOA6d+krNhPe2QH=_s zuVhh6ru<;CyGWr}4~#mKlF%c!CUu=l9-pHmfs3_c{Ns?9tRhwZ(*!e$=}3R6I_FEz-zgBy%I@B{V^;ez`@w>5fe>eIqK0}Q3X>G-52oH@qnt-K0{un6m$? z^EAKlF%>(AluM>6lI&NwC~=kSxac+XNx{oFCjU1>grsd8@^23VehlS)-YdWe?9Xmy zAl;a=OmuAJ!Q2Xw4rDx$xqO^=-y-OQ$%j>QNmfVlY{6F%@s(8XEOPesa)O6{t(Tn_ zxPbM8>{7pl^Fh^*TTWlgAPN@YN$-d0L$&UB>ofH%O;q}rJ&7B=|NWY~YIkb&UgqsT zO~ja8cl=oWe-1kno~z{iu>x5xc-4D@=)B}5&yj*u?i@oa0N-)g{ErE1xh@_ZJU!^vZdx_fV)(xb zk!W7`Wnd(erTsxL0QFvMuq&!t`4iLLv(kL5NSx5FQ5{hqyKkUhU9@IKV`j!pzwFwv z^DoPn+#eGA2GeeYBL1gLlwhX~?dMKmgIg)zurBFvn3Zd`0gI|QnaT^FbQC4kG$;p9 zKitV&;*tUN!4t`!<3d@|mf424$R zfl*fjO3b+olW*FJ=@OB6PvU~G!pE;}7=JOosFKQO?zNEPb+5#$1SR8lHgtH4lhRRz zcs>Mz<~{32f0Qaq$H0t~t%tEudl3q*0p>9$xUK54l;Ysc(qr-Ld%YHViT^#BPJh&? z0g*pfz>xpb{52UDk?$lCsYQHXo}VR{sKIpGGI0KP&0`rCn^iz6Q9DcbJvrr(RE}Ih)bRPT%*4<_d5?BOh9yODKdMfmSacx#Zel%ao>`Zm+J?nEZOujHMOBV*G1QVCXC1ZeQ46=((z3)rzG1e60T7xQGyq-$^PVM+V`>FK>;1Qt$Z+U` zS6>hQjGiOEvs)B@SkuNx8M5{bcr*66t>}K{0-F=^_Y-ytbq_nk>}M)trBPR3{r}&6 zGW3|RH|Y_`m|oFBm)yRD6z7SlHxXz;o*?GH`<&WS@iL78Y8s0ASM8jPAeO`tFRZA5S+lpfUv zU-Mr#`Jv@E%$8eULf}PcIinNeBEruoV)Y^y8I|YM9G-aRU>FiIPiJk66*p~MTa-iWZ0yC=QvC$$*R&6E7 z+Bftuv1TWXNGvoZRk+-fpB1?r_Yk|Zn$-6ux%2kY#uVMs5PPO#_YZQ97Qy3g4&SE? zdrdxHsP3q94EO<700$*~@4RehCq^tFA8Th#QGt;;B4lIVg=M!j?XE~v(CEbG-o8;$ z06Kb92t-vw$+oP*r-9sm06RBbP2FRmsGiPQUbF-l>WKlueMDl;tH^BRgY01k>LxS( zQu85Df^6;>`+*JK7a`50D9G8UKL9&G#J`l&N?f<=VqaiB~8XTlnmr*{SZh;IK9Ua4eA|(y!5tRg)ytbOAnUN1+U%xcWyY4JZxs8 za9v#qK7fVj_g(xdb~ZqyL)7vigyi@L+QG7(*EE}6t+5Hy9xTlnk(_vdB#{YMj^7WG ztPHF@?BP zEc6rHzGr<=fTxQfB|159+ISRDo@UqwwlG(mo-*9{462hFtX&U+mpY5~N`*fp47^PL zG5H?y`hz<+)q}bE7Zix@s>KyJn#-qe&oZ?Tp59@Njg5$&dw8mA<(wZzWL%$}#}jP? zRH^Mt%&dsBIj`uEmdVH?VMInLHp7-Lo3UbE9J`=9eeZq#*LLJuvz91Nt8@!N+PYBE zyy3T2qes^j&cWD|Fx?LRJ(?GVL zIL(;5X1*6v4FPwSMe*4C>(39MMc;PO8b7YYxWhV%y zJ}a~IAsMsqJT{6p3Roqym7~sual!A9Hn`dwf6-<4qUU9Sg=u9lE%!)pMQIql8fPcW z_u$Ext;OnS{NRSSP@#S6aDoU(-Jh3QOR7(2MW zWLu0X#&EW0_&{XxZPZGQYox0F0+a5l7v0(?(PjW#Up{=<=wa^#`g%oRffU+Wj4-@| zW)2o9G0ZhEDStl@xr{EwXyGk>%JZDHP+gUo?AeMuR`Lmcl1bkX{b*#ksXwsfu@5$# zLjC5qu%k$A)U?-`H@}-(0%-O4L3baA(xwBEp7I_NH5!Y{gL!?p8B6wdObkm13=pP7 zm*KPQ-t!Hb&mFkJtw0iy-J&qE#M?({@2&`6WooULyp>P)Davk4JM*yoOy;P$lk@f( zfYi9a9*N}i0xl%Q47z_MC`F*+Y9`3R!}iza_e%$Rb?q4zg{*K>yB=h5p-F*G&6H+B zv}8}HG(Ohg3u+PtP}rj8U>ayOvkaen!V3p*dxp zB{;{5fW-Vm`w3M&DeKJKokCO#SlIxX#Hy|GBkq3D150@@&<38g z#dP`|oqLtZVU{w?s+EXLxIVTtrRfaEGJrZ-6v_ZBlSE72><_D-Efr7fU*OC<7WiUp zTXLfoUFn`hzoNL*k&3mvtTcbX7ID7KWC>6+qaS8fgfHs4QvE2XW=T!+WtkPWJ5_s@ z)Bj04(wQ`qeU=4;9{C7Ya`_ece0c}P$MW7y09SJ#hujItZ=?lJ*`qcHZ|vVB&Il;9 zvHFe=vaZaw1PU?U zOj7#rF&Q=c>+J5;Ax-TTTUBiYEtXF-Q3%>9Ffm6aU#yE~p^cr*I;j{a+M_6F`VAPs znMgoPb>OIFS^o)&cbpzZzd~zLzA4R*EGc!viy^+qlb({)Gz*X149P@!hHR>BX5FOb zzVT&$JYw^;nWpQ{++|jnLK21C&3lkjmn0R?T#C`R%qXQQRy)lXeHa=u^n_r-*Tnoz zD!2i@^NzWAGk2X&lCcm8P6W?4(~Gki*8h8?tDJzOvPDC6{{)$odXA=zDz{h`mgk}Q z=KOH)s|{BaQ1r{|wX=3nat72Grj9>VDwL zDa74y8DxOn5O9syWczgA3<6-T1NhX{0mgtwfen_%$UfqAipxUq|gYe;!51EmQC&6Ja3%hHoP+3Oc z@$MSl*pTdKEzWJO6C~2i*h$9S}vDWo5UpPO9Lw z0f-|Bs9(#W;b2DsM1akZ>qXDPb`hm;9Upd-Tl1%Zb!sbKVUSigjH+ucmg4UXc>lk# z(fP=*Uah%TDO-}dN-#~-GaPyye!p-9Pni4(f67@pOPsp*AJ-(apc^EK_c$wEcBVc9 z4CicLJu$Mtk?#1dvZNbF5Aek9VylfH$UfR=EDiQ4mzPrNn8x+a(Tg|Q#V>D(LGEI|WzgUTT_E^My+`UqvW2223G z2=o6178#Ksiu!oHlOVNhD`3r(=ZT`q^nVNa%R1ZB=J-+gKzdHFSF*>UdU?-9w+Iao zB|^_U-6B*KeW)1ZY8GJBp(TcK@b4T?5JtTWhl>?Y1IrqiX$0#{iBw62i=z4h#pfL< zV}5{5jl&(tP+C;SEXpx>OKUYc)F{(51T|e4e@o7^HJU|KrKD4LIm~J&c zKjt@Ejn3clF#M}dBoPqqHQ?PWfR(6a=hPZyAeS_7G5q(WyJ%7G^u#G7ZNZJQ(`5t` zd!^#tEHzxVc`XIYZ_s0xmBr!bf$RUq71dfCC3`y&gfTN=5Ifn^u4nP=GC~my)8@QK z9Df}028g>dTV2IdZpN;A?6N>Cb3$Bz6r}vCn|rTOdgXaSF{N4qG zuadU5!XYc0DmaHb<4S}fIXELMngG>b;)qsEn3mK_ zXs~@2{5qJFo=e*!N@Oa3K?TAa7 znJZy+L}wyt+B{1rBYOb8#rUwDaXYQTVTNSGm#ap+a_w5q>4JBACs||={1c)I7S{EJ z`+xuHiieD+Il;8RV3C0bKED5fdXT^(sSyseO>`vn(w)%cO8tQnmG^q-8)w{{U@3)X z!0D15!ElW~J?s44-9Df$Y3?8W{rch>9Q*As88dXpAjdgnGVkUyYdE8~xn?0YgvJ-y zx{PaY8H3Li8ycev@)$9XV` ziq^Yhnz}kqp?qWjD|jq}>yI15l;7}cAf08b9mT4s>%mvbLG5ZE5c*Y8uD4l3B@QT~ z$~9o0zCS>G@@Q?UpI*pfhi1HaK=ij=X!o}*h8A1&GvJ8^4*cn8frh3lB3+JCMW)nO z<}~(^;Bkr(R(`oNsVJ2|l+&ZCA#Q3|MO}Gr^a7EXMt!}Qu?bO@aAs|jVW0_nB)^9rg`49NB?44HX&TJ zs|h-^5^P6-ab)_@&R<23Pf33cXkpzHWx>$%j_M6^1FoLX9Zxm5RJ7xd>As3$(+Dc*nM zync?{$~>in;;#k?0P=QLsxthY0LMg|soTy*VX6VNwmG+is39@u$pNyZ$y9;GFIw#O zNi2|fJ=$qF6tTC!FbM2}FEpp{Mmdd`Lw#t%^IbH@MDo>8lFOFINmg6~fc``}9h!8r z?Vy2Umx2>%?kq0fuMXiVR46P7YxyHeV|j`Ia=2IFR<1vCT>57^btPw_gzT*kj9##? z`x||MwA+7S^jF0DsMh4M&WJJp0$P1cGVuZDdB>n9(5(;9pUhyOS^y_y>@pN2@3?$% z*23=vtFB3(`rel4mFTFvUbM-P>NlvSv+Z1W5ZhUz=GT$}MSgA|(ijs$`bbUXel5Lo zj(=hmjgvsCjoMu0uem!K*In7Rcql(8pFmS~LE<-&b-fejijsx+Uv!v$RsDBi9Q5a$ zTF>%aU-?$&6h81%xfEf8n|1^^W;cZ5igEtS!oBrs?!e{=Az42d(T1U(Y|Ig1KxuK} z*Awj5%Y|6$g5!@FbB-y<4{Q-;dCw~k8kj=CB;~-mgNPjU0J-VqWrydnbAII0Cc%_+Urc_Foz^5tXu+y97K%=$01T({ z)xP^k(c~v_!Wi19-<)|6s?H2E4^Z7cnS!vAVis$9N*1_vM6HM-p($DYF5vi32k?q# z9zSRT8meKCTZ;KgcgpGfdIf0=fs0|&eT876!>TZt1rbNYdHd7?O?0}d-IQIQlqzF= z3^n{DR}_>7f#S{W``iA|uoI99M17vVCZO2_uHpqx%#sbh4~NVRf}^#KZUZEy!3Vy| z!B4ITNZG2=VA)=9$H~G@o`cv`37YHhi4Xh83OHSaXkv-~pp7z0A~Yx&grQ$B(0cRz zqU;S$JDq83@5&oS<)8)ZwDy8>wMj7oYGnrO>C~{tVV+t`A*|L7W~y}R-e0$-g^Wge zCG<4A+T)jst+sWq1N76dpL+U^JVP4eG!b!h(=U~7#lVaz83W1NhJq+mya%SHCwPX4 zO?}lAUm83)(qZ?{7-pggr)c=I8jN!d5C|&TfJ$I``zE~N6FPCR4Y*s6e%?Bf_TyK;X*HMrqN38ZiN>^RR8j%E zvp^B?u`8kYzfD%AWwCa(U(g5wNjF($4%ygeP&pgXOeBCr`c`(;#FiB$a8Te19A)K* zf}FunMK-qJrSzE&OPiEQ3?RBbc7Qc}D28j?ArXo!7{GF+13fb|kx6e14N;Dzs-WC_ zJS}z|@eSKcyo85K@(wcPY*E=K$yESl6+k7b)ii|*c+pp0@Q*t0e}I`Z>Lgz2oCin1 z8Vy!rf3CTh-V7)V@QaBX*`hLSpfp}?V2Sw3;0Y4(!B@-YiCOH{Lnh0=f)JKsM5dm{ z437IMOE6nr)M0VBRw-L@ihN%mjI?`ixuz)eu(Z{x@;RdxZedvKw!>R}%gM3yR7TkB zUdfpw-}e}WSa`GLgftNJMy%P)OW=yVhY zd5&s3NN=c6NH9g2h2iyKQq2!O*$4LzxE&;1;Iq&l2ugUekM+-mk$2Fxe~Ksi2hpRd zC->>06E(&_9?fa|q5DN=37ySzZsras=iwd&8C}k}Bji4+(t-F}!W67sMoMzbw5cdb zXjz0^g!oaNMGjmZ>>{%UhDrsjh$ zkfe(hK7m>=(k{II-Y;>CE9KP{7k$B zzEfbdQ>5yxsiuKY#GsizOey+{qB5^i`yK-74~<16f{OfpNh|pDqI!P3ehJYej5hiHIxOwKWwk8N-zkrVezO(XHY89V zi#MPZqBpVSBUwYI_k<~-QTz?}{izp`Q&oIv1~Zlsw_2-;`Yj~ifc0^6vpCPEre?9% zM6(OBsKg<6p#()Asf%Imh*AtZ_G@u#47LSM@5rvR8I&WGVT-Rs`^xse)k3vlX2YVf za+MYQGFO!Y=hu?{J-`c|+;GVb1=Qs%ojkOpAuLs58#RpQi5Rp@`U&(NmX(HbeeYch z=T!9-NWoRJ3mf6sxYgjk(jX1I7CG%gI+q`MQ#~SV3_F-7k2>aarosVXiF{vuJfE=QEL$w~AatHX zj=RoBn&<+vwZG?7y6LDqx&z{RC51m`znYRu9B5z`5_oR5tVvbn!MlFfshed6XW@in z4=9&~Seneg(((^V`om4mGZG7EFkXqm2L3~mRXR-TD#EocRSi^?wUQknw3^5j{oR4G z9CND<9x4`YHS}9ad?2js!KHL96l=0F%9K!O)4Xejevu;|HIB8hg*mh78d&x|TqAN3*mNB_&~3ap?<{pIj88Ju)~}xP&%IB=}Ta0q};^-8j(C zO#u3@#oFGtGNoDMOZYdlGF6AFCO#x9mD#|K0&VPXG}1tnuCY@zLbv{DASL7b-Lx<0 z-O#W7v0uq1LQf-5v``C@b})v)s?w|Xp|MPKaxQfrzx#ptl>7-v-i|={L(DfL#`~}d zOnWRPl8m=Fn`3dmj&dD%_G-bKzK07OT&cx5*x=^n&!Ya;Hly>^3B z#S&tA&z1YkH#>pk)E2uDj|-|+pGt;Y=kg$*kFf#E#g+=ZN^;B~GWvrgbNl^)DSX$X7mq=CuKI|)0FG$?dQnB4{3Mqbh4bqawtI4n(tL;e>L z?+8kc1*=q_uS#lKMF{0ea1n$I=_d$5lX|6R#_&7Jba!%5g6$yi#;0t2)l>|1Pt{&7 zq~b%>BD5LRBw)1qY&v(s3dEKfq*+vJ>IUHH6Eboj!S!Fd{_sa0ncV{yYFn=fyXuQ| zuRUKZ{B zsg^{EHQ=9dWmM0X?x(?8dM|^*nc=(Cm=Uw2dE$mi-$ipVpKoT64;vBDIj?^}o3UID z$V$bCNEgem*G1M0x%g0Y-bVl@HAV@P(yX(bfqUgnB-{sr&|tEq%PWlGq*JK*9l6;h zu>4?_g^JUYLC_{qj3dp5&ZAtI+w@iqbb};<&I$6}V-$FWHhs6r(E(wk6I^21*tmae z1~Ke&H!^XGMfHXwAcsv&(nbLmYZTlH=UId}TI=_?VXw@ho735tnPs+*{9W^=#B*>G z-sI$lpEoB_(@+QVOVhI$*mnVskr@?L>>*MygaV8v>W? zPtu;5I;Y9ZcS#95RpBsJQWNBH3704_i5A!m!37E^^rts8mi)`V=~ed2I4t<$4pYiZ zapXlAz&#NKHn8^H49vAJ8TK^HCp{mJ07&m$;S>NnrZP&Tvj;`xqelKj0;dx#m@;jHHTCpV9Oz-SE21 z0FbAVYZJJ=2vHhsiddG(LQXiR-26fVRK8Hq?~#siE~zDE6`|JX*Zmi-u#l=boX9u8 z&|;hDWZ^K=Fm=p{E*sHXUKw#P^wK5nD-0q&WZ&!BFB7hLgi0fsC)|b_F=It#w3#$- z&k0-8yq@xGZYhSsrL$b4tFFkhs@i~(Ymx)w7^6HrhYfaWW9cB$knzR1-X93t>(_TT zVF`3efgPG*Hi7f_kHm}lyqD84HGmX6p*}nfcvy!c_ftUr!%+$QkSm))2O~u1pqG?xzPIu4=HSQ=-g+|B_;X zh%7;dxgV&yw5@qHSYi!~`l^_K7iS-97jYmhrcVz9VN*Lx9#ZjmTj&zF%Di2nBCyaC zFi4`L-CkRBvwUwF?>ZkFRRs)mbEWlE{E%@Ik`L^M%PKwh{-Tj+4R3Jy?;?>9$@~Yv zi-_x4vGohKEkz2$Fk~82qV@|Cc4n~|iC<9(=xtZqpx-q){3a^c7v?OA?E6QP&m!NB zTfDgq(+vbs=hliNBGEU>oa^-3u@y#3 zldYPU39Ar`zsfu?2^F!rWaPoz*?KUySqSF>xUf{gj=AKCm3|Mzrnkha@Y(@dtP?-Y zY>-Hlxp5-}z24jw4le450*~LpZ`cgPx8($bSk#{lVD2yZu&{1!z{8*QBwS(0pcqgn zq@>W$(E@Czc{g%e^ly}b$~{R$^F64_@~k2VN&L;?lb_H2Q|ORSAvDt$7juJtbC3-( zrd(e8mk5jM@5q}cIjcImOdJ@;_3B#ZNKt^nZ~>$JUm-UDaF&S1zUN@SlyVmgAwWQ= zgppV;{CzN6ORlftvp6MeY;1+wOebFWi!*MLymcZO#`qtde?c?d;q@`VygkoHg{_B< zIm$6qggSPb-6Jo6{I6(>>_WQ!l$;FTy~IYJ9Wb|S>pIx)Ww$yd=;0UZrEEm{VjVyb zOskvK>(k0D97qe5CAc9>dS)P}+?|aqorykxq^XjcPiEU9wh9Gq^Y^UfDe;U}z0Bobd;Pm`b2S^r{?FiNR14CXC2 zWT#1TOPjGr-}mGWM*|g~Frbvbv=c)wZ!Rq=anwd9} zY?hmArJ4+mma%iKC6st^brNN#NxqS8M$cm2ltp6VPkzB0gCo{~fLwqOyXEp}(zWOV z_ePfC80mtjt)3^cVo!?1vX9I_I;=~Diz?#V<1^#Ry_(9)(x4 zCqGn{)>|PCA_bV>e5WTwhZ=LZ#Cw3Rq=>~C5e40ZzBoFK#1Ax#7pj6IMzYk2^OIQeU z*HDe8g4H`mHt34Y_+*XNqRBdG8)>O*nVb%5e{xD?Z5X&v9Poj*#I~>=5yiI+fX#Lm zk(%;NJe|}dJ!X6*lro_}PY>8gn z*wuhQJn8?1m626a#M8mggV56{%h0vPP9k?0&OGSz#oUeS9D*Eu;OxfQ>vsKW2EN70R&M6?u zlApJW7#|-oj>8$n(mtoED>Rkhs@?@zPvZ0)xe9dmeN)2*Y3*`i8RQK!QtHTP(4@kmZ+<%_Z&b=`{ONt?vC@4lL`IMJl8RX?S?q&P&8)f-IX z8YgKjvrco8e9D-+fi>s&Ko~>E2K+Pfi6Ri9*HmQ*l^fHFjEVUj@Ajk)N~bV{HOizf zb@J_YmbB+uGK83yjIX4xNItOP)ZRsu`T}&n&q2Mlf`@D zC#u23?C`NRIR4iShdW`*&Dt{7`8sP7M*Jdk_?&Fhji!NBDZ)R%HZ~}z2bDE3xZw<# zbhb|VodRL6Fk)?+tz_x|K|x{ZO{z?dqSZ8h#BwvK>lX7PLK6Q?#b1fzSS~gxda5ME zG2>7NT*!QYp_f~P z<5jf9nkh#5*1Hy+-MrFS6c#o_Vrm{j_tOErHh)72HJMTC26SiWD+# z7$!_sm7FjjvyuaVlTj@zk9jy%-PX2j;V$YGifOLAt8`pJa1?w6ydi4Ty5{J=?-je_~`uz zT$*^7Sq5K-9=8k^(?w_innC*MEX&*`i@sk|4Kw2CE8>7~4+Gd@!wJ0%*blu001jyw zilywCXsHib#`DH{BUj%7I2D@5;bS+EVLWRy2>58{gXETfy}q98Y-rsiQlhCgt9CznEFKgtF>{lojyK1L-QxG7M=x<gf9}`V3jpyS~RnhCv&MF8(hRCqiiCa zJ+g4d%2U)pEbmnt9E@|F_GJ$G&b@Oo7p6}It}{Cy`$blLYP&cAODXAY4u z^{SL=w3D(n^%EcLV0m$x_#GZw3#NHVCAYxW6EWc~iENujz`@vPzx9JD>t@akSI%hMoRb1cI*s6^&QP+kd<7iGEOUu!5iSSu>L3*s;erKc z{|v%6)}O_}aHF8(Ax#St~DokB6brTVX|&a3@ucsqn6{Tx}s| zQlVbMelr_UY@L?{DCZc)b@*uUoDalI2l;og5x>SlBTs~(|7UaZ%ac{xAh(qytYNV* zg6SOms=(UXw}1sT%*eW(O%**-|N9!~NCM_=K_LSvepnG_tKL3>TVHezv9~uXYyheN zLvo)W4og$@Oqi-Hzje4x#whi9#3)OfN}1X$!fx#%qS=;#;ep?PiB-VUG5;lji13fh z4J!pRjKXb`M(nbQ&=*0g?O#+A<`m*^yX2(rLPw>W#4mF@35_3bR-%hSc(_!X8zvZr z8?nv>c)q>Yy6rWnvh$)4e{q_hS25Q!o^Oq;{tPV)Q2NcNsW+qzSQ$-bL!6;`RB$ml z=s+GQpp^3Ne9dmESz%;(#dp)bX-MXIJ1{XW4?{-)*Aqa3&G{mlhaQjvTPpGuJmqj_ zyYnuV__7t1f6qm3dv0*4d_oiml(uH|J6i+)@|8eOoWl4M|0ld>qP|5#HJA?(P_gQv z!hO@Zme0c=k9zeua49jTsurTq7TqoBUIe>zMfEQyj$NE}JEkPumCn2Yjqt4Wx&)q;E2drj77ot6OIjB zzuqBfKY+p9TjhdcS^1d>LGoHw9)dezi@4L7f>u`tVa)KMb#P=#k=Vc&JNoxyl`lI8 z;i|$Q-)blf)Tp6aeYN1VP6;e*6~^+!A&moE1oR|K3Fk6uCBI8Cg+&NvlBP{?yI80F z*tezlRJ-7*w8PK3qdYS@&OM8^@`dt@L2FPclarw6f(pG%3hzN0`Ug>54}vt5A&-qa z$e!ZM4~`odmz_O0KuES9F5^5i3PWBC{WkhTMY(*B#+o4_cr>>JGrzz(zsK>Sbw=Fh zt30J(op@XX{Po5ft-rc{O2}NjXbT;S zs7l-1<_YXzWJ2l4=gj~LPJPS>_0*uWv*6tt%7@YGlWc{rn;4Z14yPoH{AiD3bYiRfMX%%;n@oN0SCxg zs?`kzlKSk4?WG$!)Tkc< z_Rx$!{+Fs zrqrWLKjRCvL0C=Hv1LO{c}tP+;FBAISEiSPSU9Fr+=Xea>Y*WC>f8TjL;=#eeqOdch7ew1 za!KQa1&E1-msI7|1ip#V-7b)o*)Xe`p#pkJO$jor!_mNBNHMu(&0Q#T7Ac~QqkaBe zm?sP+HGewj;e2`vEb*fH1sVX8Cx((^EANa9Uk=*ol(_tE=(tR8%&@^7C^8O@{37h- z=^MTt%zzN|1I7y2ySvI?giwJybRJ9BqZ11`X)pHHj*Y4qza@kC6J^&5DB^XZ`M>$a zxZ!=VN8cKL2QDIvIzz6^?S+O@kt&(&m=Cl4NE`Y+MC&+XuW3orONw?aRF}Bf{J-HC zYDMCIVh<;5Q(?*1WN9chg&EnoOCwbXg*7qMpCQQD8k}_F7Z4k$qOPs$J<+TK}TJV+VW?3M^HaH zAdW5qsA?iZ1M-4J@=NMgCALrHrV#}Afp#KdtRrIVc05}A40nC+bdsGHp&QZ(65~Cu z?y7s6%^~MKnYc;p6(X)8(YZes_?6?p>&r#r(M(AOF#(UBV9bf|dltKf()yA`5c$Xt zYZUPKs}gEFSHe=rj#73m>77RdrpgPXUQ?RuVB^f6$O(|1qJP3q-9}y7tnm>8C$BH4 z3EIhohsp`$wACX*s!lg1g#ls&QPV)Xt~)zF`DY?qqK{kNuz(3fKqPW64Xi?ke3DaD z7MauXo*lee+cWqT*ZV!pFANhD_u|6!I=`|YC@Xnz>eZ|gw8}KR=HatRG)Wv}WU%9S z4cub;iYqM%IDGJy_+xKTR>dWQYPNtoI ztOdx_Xtv?RWsn`@lO0=Qa-etWsdO9`HTo(MbcHV%?tRmm*~8!&ssQ9fpGnV))J_kz z4m98H4`Ct>VyK+)62~0#!rl^$?1ZzLn^35%a!gslCBpW0A4;@zYe1plQI8}n4cJDy zAP&eZ^m1L6D(7et5>sB2is}m0GRfbe^E9}qj-x6PoyJWtN#za(d9-B!oE*9X`2Z+) zyv2TtRKKr!Wf;AKN9R>bWNHA&w+p;~Zo#{DDM*~)#hT)f6&X!vuW1@wx>pnua6!wX{9XP7rSBVKoQpLQt=cQpM9} zk^+^&`6FT79(_Jl%DJVCWV+1ofV!i!V+|I_=^D{<%RXv$59GAnNk35gM~p_7e}r(l zr|0q@-KjzT4@JZ*?TvK(d|#s0V{wJDlM9yS54SypSwbK>(mI^nou7I;V7b*Z8@U;n zVZ0+v0S5zGYP={FUdWO>GX?G1 zXPMGM-yfOu-ENhvA`spSTH*EAZG2DovF9P_Ow<`Mf9Ga6kicjWJ%gDD5sL)CS@!n& zU}()`B>kQkui78E^%D5Ie?*4T=QjOZ?T$c1Fw4VUS(2NA$TQ}Tmp7(k@3|}Nt1qcL zfhBMFogxh{mvGl|CF1~wenNNgTo%%SOvlf6EFOvV0X*GWl;d}xg`xN{bDmoQ{ zD@R^_LK-c|X4Czz>Wcq86)$dDG{V%si;FfwPmY(M#lDETH48is^n(t9U4heAXC-3q zAwc(%taU)8>JC30yZvX!cRfb;D#pefxtik25%@L^-ax!r=NxZ7-6)wOeHIrN{->Uc zNF!P2pK35Jjw~(d$Py_oTI6Tw+L@6!N`ue4QY$N;n|W)KSnvGmnlj|$!QU_!jDalA zvkCKRNSSw#T-!P!M0+>3f`K%CrsS;}g*Rp+pxtK5P!CY+mzA9Ugm~fJQD|SGnwcqu zHa!waIMf)A`6Q#mKE4=^y*5B*u5^TY>}N&E&dvJit>CXa2NwFb{og@mg?}6pkuMu? z`Y)1C(SqhBL%@J@AZ5P2iPA~wpZLj4Ij7gB@;K@;zW)jtV~kyJd9EJNy_M^#dz>=# zSwVE>?2#=$FG|*s#=r}S4aOPAf6&EIm?q9#+PC#)?`wq&{SyH)-tbMzf;ii!8n4ZX zGuCNI%zfEw!3#dm_QQt|7AfHKdP3dS@&2`0iyXVkoY*;x$9>=%_srMyeBi>lFw}@Q zY4JF0L9u>u0dnBlDoPUbH^OF^*iT`>_weLXdch2yDWFH}nMsY(8kMb`)JeJP(j(Ri z9RSdoB%JQo6WkDMF1n26x|K#8c++_(I3P=YJ2_aRpUI#qa{tJqSK}fv-`79s3di__ z%{_Cc(`()6asFAz6qKb|mUJM5}4^;ntyUEF= zi#MeoN0w4TK@~RB5Z9f`74-r2ZWO4iu)=jN6>mWBTY^HJOC4!L(sKVDrCW*UR)=P4`ECR zcg@*GRjb22>V1+TEZ+sBXXMFm*2?wrLHTK1DMnZuzjXCUly<6qawoDv-_iEDQAFR9}4k-uRG z`$TJkWxjCr?(=>@OxoDjTyg0W8@N{ zWfaM)`Wm+#pL-{hg)ag0^PQHE)xe!Ijz{W0)-bH_k58m-SIrWOp%@nxL3W^UwE;EP zP=^TbLh;zwx?3Hecxx&dV)CX|b)AOkznhjc`0#Vvq3;o{K_FMDI%j7^7QNFW-prQW zm>o<*&X|>7Ir8b!z?G&Ub8SyY1(S89$O-S*UJlE-RXZ^qo(Dt{`N`wr#y z1g=BfAuM}3R0#c$smY|mQu9t2e8W5d$ zw&@{ktoNlujqpCFE~d!axZ7kqxq%X?P5Z^Em_F$%9O>EMWQQMqgs56cy;;Ci;G-SH zv%fA998nbhkn9tQy?LOx5Ue}r>BNhulTpUF{p&Osm_i%$2X}O+rRk0=;}b>I>+7{N z;vOVyg1*`8UcnUOQ9^NE(MUHH`vTGCR#J%9%Z`-?^fvdCjM4*%M@Gx5QQmfR9R{tr zP@=x8Ffgr&Mu+2)Ctgo%ntnb~7#D=7$r{juY2!w0ml2JSq}z#(a!~@EN}gwmmUWYb zECTy6y-sXFY;~mBL@x!DM`^zs`3j14#S(M(^JOv$5G-b~G|G4y836);>vH$4ZD^mr z8sQ#zVQP{s--{NRMv$?SpN7F|-f$9p=uRTuY{V9krDr!pYV_2WZ&D!pIlomscx2_- z#*7E~W(Y(dE2`dQ6F0NCDtE5(Z`{jfzNQWs0|=WpduJdn@FsC6ez0R!!Wn62X)a8E zMD3yZM4;lr?JkgUNq4p@UWMEXaaHreuRsnub-cR9bj2?rR`R0NI<%29C{S(m~XyFQP=1m_!g=y9tyoHopp}#ZX;{;9`soAh!QI@L~@yN zERx55qPzst-E{)UiZ|qZMFZ4KZD{iK;}#v?a*)*6r0}Cv6+`Aa=M|u6O+#yqI^xG| z*?*j^tp6k|CvXIfHIH5TU#hBWgiH#{tD1UPmC%|sFJoJ5d?p^z3zQ_W=?cdO7+4tW zll?JdX#8^Ok53A;Fi7*^KE%5>ff^eX%%9LDVgVl24RuQGlt{X8OhrZ{-7GB&>^OWP zlYInTcxDBR%lD&>E{S^wI$lz(f#h~ajH?^C!=-C2ke+2+*vmfNdAWzS)<+QTGhZ)&fCKLyj={MgOlOPy+1?Vr_2#@i zCjD~yHNDo#LB-;8GdbX^{;}5f=in-5*geJxatg2QORm@nF?j==`~)y~WTws}J`V(X zNf*X+CDpsW87r~Ez}Px#)uR4QZ?R{27P54K1)M)am2MuZqKURIn%c!cz|4R(Z1!-> zM8&qY1&~#u71-U`$8I(hj$wx_--)vv>A1(&#kN+^%z|Wh^e-a^H3?_E258^lO0=;^ zmA?V=gt=Ue_}tM|{=C`vOE|v)g)|$`gKUPIBeMVLoJ(QuEZ05KQjmGnh5CG|NluDG z+~;TKt8YbqMPe|${mlV3lp78q-z&p71C+b|K^!W*uV65pL;F+{9-pr`Db6Z8mfkt2 z8QPH~)y_z(dYgZsW$vA98kmy~epQd!VftT1&42xPfLNaECbX<0Ek#2SUG0N?i-yAH zsnzH2iAQ(77Z<1=)8SQuL7}67I+)f!kd043 zBzsRzj{L1S8Br(c!$m1_d;4*+!#{ki*8%9S`5!n*#*~(=ZU994+{qye{}BcofXbdRt*IU>wcdZz|&-LHJM!@@tD_ zZpE(;$zMA_=zD*%ywsC7cT<}jIvS(0XhbV%6{s>~b!$O9OzAH~^n5)~J)U%o?g->c zkQi(+#cxW*1(PW%P$*!<~CiNJ~ukDf6{}Jb=}VZgt&hodoGBDa-HJj zWSrs9I$iV&ZECW1RuDvA^{rBztC4P@OV*;zy2Yt23d7f%%=-y9AO2i7&AiCIKv8=P zu*hit2;Hl)7a{eM#?MrD1u%R31`-H28Za&nibRtEgSr)n`Y^V2dq6qVM&r>|A){XW zXb-5Xv)nIzLKJ7#GSQB=Yq5xkl7NZrG?Xa?Q+2buO#P745`iAw-qXBnr(ogWQv<61 z(yzBk+wQS)#BOwRLq4inYSJ@HVJz0sZwF;7pY zR0ne>;C7pu3Hc!B0ulIJFCOG@d1E(D(N*LQXQd1M4MF(7WG6(t8maM4QhtgrwXDqg z>Fsm&%9k_@Ey)`VUNqgX+6pjzDQO8You0F4y}C>Fsk0~GVbR8&o#LfTGNnMrK|lQ= zdPZ`(%3k4rvUWsJHkik`AQizVr@ZV@4*Yr5y=G*Yc^T$YEGru;3Fv_Ox!_jI1J(Sz z`OF=8tbUwUj?)>WwwZwS_K!NT_AH1QIUMsoKViFK_xA3I;1ngf*gGFQZ$bp@=Npiz z0o6@1I)d6hUx)WGvp4>fTz~pjjNZ!kXr_0dbLF*V_GD(-ufs5Fz@tqGmICrwoVNqO z7d1$7yVA|!=I+z@@rZ)51-Zv`ng|Ff*Kz&>nuu|frd@2XolO9@Ud{Em!kJZ~2hq2H z!Z!S7j0-Y>2*(Xmbp5J-FA+^>dE$7Ye=NK8n9-$sIxd_H+Qa_NsTw|ehR@3c7ZF{A z(IZvWpjBGezQ(@@s?+xZZ+%nkA9YkG8%8<#7CAghpxtI3N%`9m?2cP;Ta!jF>+ zfj>I=l!2ECHpu^7DgsQBDL@9yAc@^8O?C;2y9yVi-fJ&Q^1!&;7lxq3s0MXX?as$8 zixpt4kV7d$vLq+E?G)JEr^!X&=nrV1ca-3o(>%6?2p%|Ugd9oM(*3CYU?ZGoVVp9^ z#9}}Y3H24ZJd6rlg}`b59h7-vlMYZAP+!8nF`ecFAS7T5;+NT0y-3XG)v1r~q>YUU z9v_1U(zES~_=a53Z<7-4;NPWBpn$tb$38>BsYGSQw5aKZCqiX-{=0=K@TCLrUR+6P za*FqJf{nwG+$!Sf-LSNx=}hWD@J$2w(!mRR`sHAFQCQr#SBNi`Jbu)cytvQFX7Elt z1zijm-Mh-E83-u}ZU-sAwe&}aKYWU`AVf7VKZ%g)E1T`1lyI(%aAb}N1)^Jl9WK@N zKyj3+8*1p(q?I!I4H_;C^lN;5p$nTjX~Z**X=@kgHOIdm2~fXUnuIkm{+<%n@4!Bg@| zj*-oV=bY!;RMgzj=1sX~1-H}E>A1xH)b`I_tBC!i+c&zL3DMcz;rykIbWv>n=3me0 zoB?x5VgT3@y3Ne$LPoueUu*zK<>hJ(z%c1(VY14OF)Bn`N}J3IORme_>gYfItQvySW=tn7;+R`4O;2q5^~*U3BX#$YAYkQ=#G zvW8T80hy1IB;_20FuuPV*6$G|Q!6UQ4~CL~AzCpSH9URd@|m=g`jRHM;Bt_pYCpE+ z%FW0NK?2+)kxw zbrnPNnVL_bzD@^ws&-DG(o zhpESRCRmJr7o#wbIRcc$jb;aDu z?|m$FKYV10Pb+#xuQw|E*e(9s&?kh~hC&FPT@mM{j%4lXfedgc4J`!+CmNQ}r)+Av zU?xSYElZ*yR_e1A_Rc#P9Y&P49M>?MErvRs&#-%O*7>;( z%^L}-e8v25--37zb;|H@T#^f?z$|r?N68lWX1o;=UnIu?nzSR{)PONq=C>R>^Qpu7 zB`i+j_c+}EC6vXI~ks+B$ z^10q0#iLaej^8ig$AL?OLnK`>+_VZrkVKp!Nmpa_C$U=>{JE8D*e#TCkcQdNMY=S6 zXS!exVisMpr0PFr(AYmYDyE<-o(oS(fE6jD`M#=3a~P)c4fi#ICzJy?!GKO!dvT$p z=3i0t>qds~>}?Mo^$dsZS$AJju?DpU${Vi}X^wZ?Fw)%(9sBgeY@X{;ub@wZLGZ#a z3)H)vP)h&#yQX9Oh>MDw!ad@xTkT0_WkA=)C>TKWvg(r#h`Cb93zN;cP75{hEBotp zL_<50!76kHLaRSa9z8=fO`H2T&j^z6c&eskliJO&x~e?o14(jyEeR`@`h-b!&JF@4 zolbbVvDAQYIQ6p_|iP;R`1 zrqXKN<~XSaI!}a(XvlT4Pj`rc*%LR?iT5mSv@`$m^5sCnovb&{0DOB0c^F!Gic9Y6A%^M0vUufn)kcs!xQc5 zAk9`s1>qoO?W?5F0Z#nS6<3^S zdY8pWt+}P5fIR3#RFu=nJF9`Le=kaK3|rrbm-_GQRR_`K4UtPYjUGI>{@X2SE?0$o zm1ZrTLBCy8Qt=V%xIObqFboa|E@T9vn|1uRh__qL$j3E|78=1f!qs@DUtrOVtbF!LkTW~9YXR|2z?x5nB z;>5qzvwEf*l{tD19oK5^b_u(d29xcb2{ocgx;peAOXmrJWbSvl;V>nnfA$UX7W@QR zWvo&EVe+a{ng2#&1~G!H&I-uL$e7&0=se6=>R8*NNs0eofTr!Vy*}2kX~LSP=>vi@ z2t%BEAm$kZ*J(gzCX$3@f4X5@-R|w;>#)uE!+d*;a#|9a_?KvZXQ!SkKqQ*u>Lp*Z zf2j_Shj0V)5gl*_3q0o0k@OjQVp;-vI+f2_yCuJNyBWJQ64^sD0fxImo$hvoL0jM9DF>QDorb5 zH10@GJ@-WJdS|~m3Ex7x(>${IetwP650_S^o-N2Rq#Vc8U{={{Rb~p~_1dM9#60{{ z37McC=JUSH+7vV?d-OqlSq?ttnzrDKeUSl2VZzy>ZQRn_!*ksdX&0ucNgA*}r`0d< zF!>X#Xn0p%F=>qodQ*Y>9lUY+DprLvg7Z77hN)Y3%VMzlh6@UUk|J+ey>95i<4zRd zk#W@$@U<@#AhPY%w2QEce$kII5mNJ74wBX9Z8~YJV3_&J-8&7$x@n@K0&z3*P!}=8 zUptr|B=eW*czhwI!6+I8cezqflrteJ>g5!tR8 z_TCF;Qzdy4;)C^l0!*y164-L34tkif(z<9ueOlPZ_K~j*|1=xtXInBD%*efXsn)iM z_rZ7=e5OM~AENp^gjaNZW9y^FZ=koJI#vt2LjzRQrH4W}2>#PM62*UPX7 zpmP;(`SGc1nAtY*DY_dPtRG-+X1DI{prUi&mjkav%RSTvdV|k=B8gBfddSrIdKfJs zqLdUQHh{jTzj_^}xrx>%)V+X@q@}=U1=!Z~$uRCgt8lvVy2o$=5($-uS!J|WAWrGK z@gK;qW@pAXp#WYC>ItRXcWecU0Me(Y?|!Yn%(^}d8Ul~i-i_rDZ1_#B5POp>0)rF< z2jGiJq#7C>jIBEqhxAAPvvudqDc9!H=OYk82E;oDAUv-v>+IDpV6jB7j=-dxmASCt zhm5o*h6(EdzyBP|Lmnv^+7|A;8833yf94u**g{X#FgnkGMPeY|Opp*}qtGIOU?VeO;aoV!6Vx);SwQ87 z&JoHmBpK}Oqksi!RDgUgrP4o~?h2Ou2Q4S?K{UM2<1IEIgSnu1r1=Cpo=cO|wUgCjh>|I{zK zQ_9*$0qzhG>58%)dwAgt7_bvj&?z^LWCM2;wisGS3CG7v4eWJtlzk(V4c58Inxw~W zqZ^IuYW>970kq7BbRTFe>}kLDDm8;#$~0Uz9c>sg6w-x>8~7&rA-QuC?~Z8sEa>Of zh3m!&xhKf9?#a(k(+VZjksb6FTG2u7ef`{NyL#(prl42PT}x<$Y33)z6q55f9G;Er zf64>sJf$5#^$)z8Rf2;jB)vBXjN7vSE9~-_<@qH)dK)aD8Zw|*hHH7>{WRnRB^x9p z+M`#WqM*4x%}HBhhEe8!{5VxzvDszbHh&55fXC>FaQIy$e076oKEeOv6_YU+_sG^BLK# zzjAaO4}Ow4lv;~pR|&kzh8{z$&R}2smaX+g=-#5Efq-JhFBH)1xbqOf7&QxE-Enn+ z7YXayd|2sL?E5dw(M0k?*;#SpK_;Dz%s@8RDQ638?`0z6UZxG0}|~xAO9;B<=j-MK;*s3x(cz?0c=kB4W;s*wsoSPY1UN6%PDrL(XQj=YI=JC zdNC<-o9?o-#X$pX{6j>~m5Rn;nmg0icqTio69Pj2#*nmPvD-soZ)NKSk~tFvI16`w zL^rtRxeU)ZElIum*iI@t9lNX4djILfpkfBlRI zn%j^ecVubC+5=Pd<=#k^p^n|K(v(Fnr&ixSBT!3rOJeo*#nmM`^2Xet zanI2GWf)w1=m7N?W;9X6RDF z^mW+rjQcihP)=;CaaMGAhm2`pV!Ec`NKJxTiV{SSlQlp8qJT%&&LJiM791IO+_*_UW38S~TpJ)CQ%8Ab=BEXMV7~f&^VNi@4Ek_^wPYFy~=t z{hsSe9#^KvV`nDr*J1$TGJJdD?WA)yv&;DEF8Y{2O(l z{`0xCN>HUdk6Q-JGsYVueOpTw)MtE~W9C}s3}@Xz6uZEFk#vNuh5y%}yQRY{HM(5; z9Rr9zBeZwU>b2ZIJ0Kjm6V4yY5O_(Z1mSzJv7RWlFV)IeAVCFnKs7UuA%JSQ-eKH# zjgV0aoug!W?{uzX0;wb@7s|H`59TAB-+zeBHTIeg&Jsk+YN!E4X z)ljOVzdECpBeg>c1pkT2?;jKo;=ab`c?S&dFdW<*JtKn7TV#Hl7pJ9`$S!kJ?u2z|hV_qCD`jdGjzP zLU{uD*9wnZL^Cno$Q|@c)a$#nxwPQJpM&%^t*Wy_5Sf>2?pW8@<_U1CHsbu6SDH_x zcTqB$Lgt&i_K2wpZs5@oB*+qUO3!fyGLG(af$86|1C09+zT!P)=(hV@oFPZhJj%}j zUy?AnGFg4&QTJ*~`|j`f^Q82E#*}feKe%cBFEI~{j?F&)?bOyt_R1e-QbFuvDqxjV zQcdWkhA0aHxK$hQH~k-Ea-AIVWczc8+dhpUvG-c5tz9?j590(+XYZAj&isfW0imI| z#a-`WG4drJ(hPc#)d1JfjC*U`aYqydT}ZUS2Fn#F9A$qbqf_+&3M>8^P6M3rBFCoK zSk3R;+1i1Jk-+&)S~JHoo!|Vdxcs*}7b@hCda;*MG-&sDCg!h(Rwf@4syqo{!Out8 zn$z(9NT7rrp7s*8?XFo0coR$>OShN(hD%G4Mo$YqxfHOzjVglT=uouMGZ#99a$K_D znsZ=wl~cD!)h?4Hp@@=2MGu6VuPalxRnu;0U0hUp0{s&0Al9G@|AC%*&inrcchUMe{fSH%2AAXX?ddA~pkY=@O;_iZ*7*15+jfniSSrySMjs!Z{J=rzALl_=YK4t}k%0CT#k-G$-R8Pjzc z9-UP1z)R2oT4~!63O1(2FU#z3ddX4rVjF_GT=iy2rB9vYoy20;K6R{qxzB3d00}qm z?H{8R<|_dz!}^452|;lS%MzQvo=_i4-uZ90_>qF`9bTD+1Zi)Vm~B9R%KGFs$iPCy zEMf}K%Yh0bWI^fbIRK$mg}VC$scXy8rt;a%>v*pwq_5I&ZFFk2Az#bCYvRAIs^g!C z2zT49+6fMZc2p3;i!7{?Z9grTSQW zYT!hMvNs|{G{EP=`>SyV$Ji^x)=^LZHNIjy{`)f(kbiy5S`_1OD3Cd85fE`C=Y9Va zuz~5v94#Y;Jk-w5Q!?c59lGgnB24-fdwRxpA?%4Ya7tLJNjgE%rZl$ziJ?#F`;j|V zi@f6tBtU~%UkB6tMPTcF?Hd$F(^EXjwOv9$wTf~HjG}{zr+4R{PO5t2%cWvFfYRoj z6j$HjG<)a)Nziq;*w`@m654oUBp2WG=ew0ioSl`BSkjE)_Ti;lEL_j&Yxcm331*DvN;(U&dA6kbd#=pTx|4~Saq zhb9B|oa$LX`$L|HUwM1T&~UMeC;{ah2A^|cTyEsquLIwGXHNZ-R*=BDb@FifNJr0A zP@?%P7&yE(06rFnVBLe^W$qJZ76-q>DYdLu|cmv}wUo-t9ZlLOI%+qz3Y z3LX2p=W;Ddg+5qJ1!-kOA-1u@MevqeSxXQYdMD=|kteg0lcR^e401krDvTg9`-K5} z#OhdMHWa9Dw}$jGJScT(dVycuAsFigHK^ z(HlwMIlJLMWQIiwuC0lNvtWOvUk#k7|* zTil(+ly_HQS%+UDP<{Kxa6x|Bei}vHK14oS7|wmyCtv4~15$0nSb&h8bn#&S1tfDc z{#)1sx{q48`vBnQ$HHsyXhbEzzFqpng$I_4MdUGufYC)sa*^rHAtofE{@&}8av2ak z7yV9>LNYKHTOP)Pe*fT+F+OI>A4$h6F-|7!fYu1}IskTx55h0WNHH3b6 z(w)vJ36pLuH zQmG=^z_e&TGVdp&jY&_`!Ny?;tdh8Zg_AE}U5YNy06qRP^39y}==5bss(3=!VeK9T zrZ)KW+WnQr|6YgH?UFIWtM62C%!wx(H)sg(YY(eL2uYN*lhH_dXB_eTG-b(;*6LT# zhCa=(c)G`9(86sAA{|bCBXl)pBVCtn$Z63I=!MhcJus#bGh5x z#1Y&ziD#=%l0R*88l~W2<1c801m8mDyqu#P8E<5{KQ#H1?IlVC2En47q@7;NLFLQB z9vqaMW3jVl#z@iSg=5-+6-qLNMWaO@RKRCwAv-O5X-QwFzwU_}zFS0%!JwSBFfNx= zbORVYnlH7Q#nA6h?yuJek8z(r`nCZ>jKui39J51n-Q55W|E{w2YQPimKpb;n z_g&}Coz`B-;2ZfZFUZ-}^3NbVv<@epGa+8IXM`U}`$zxAOVk^AUdN)Al?`tyde0Zg z@;{Dyx15{RODu_sw95idFa(@vtvzM01QOSZabCF@Z<*oh5Z&*p4D-mlSXaxWrN5j` zb`fj^fo1N_sv7w1ftwv&=G7_YGY9Seq~z?G_hUIRR$EWEN;~FVoV}i=&_kIuzZm(e zgsi55A5LQN-GOq$ma9miAAd6m@6PveP^BL?#~d5eD=loA7g}&J=Zre$a|2#+U>WQ5 zpjtYAU#^rD}0Mz0)3(MW^U?A4(L_X^W{*8(0~0k1b(s&2I7 zBS^#@hrV&R*t9)FJQVBf1NYHqXO#Og0@ULs|c&^);Woh zr6bY5RK0%Or9iJUi*Bxglnc~MWe9H8BlWs8Aslsb%;uQAA1ahBL#g8^{YLgL0t!t6 zgaF|tZ+Yj-uZUaSizMop~oIosr-r$scYfG}Uze`MDtN<8gr?7&pJki_|1tTlQ2 zdzW(44`O8CvYO~EcE~=0JcSdMRm24b0w&G(8;4Ymcyr1pe8MKAF{R}Jd{C97(cUnruQwm`3@Yf&}t`)yM2dUQ*MtXPA z$+S2uI;cnC2p3{4wZ$KNut~8A%`6X;;?Ny^c^TnMkOV5=D4+gvTzU@pJxRGaDkh@#+`RNoluoW9RGXyR@L(a+NN3OSJ@x+vP(zMPbK!;Zce3xCZ!P~ z6(SHaaImvP%a_b}FKZyV9I!89-Wv5soyW{`#fu^>SX3Lq4D zTPO$l8l7U!WvCxG3&9W3gtP>j_zO!@ZyO%Go~UA7(&fk1kO3;P4SLuETS|Dkxu^lO z!tf3A3QP<>=<@sc`g7+_Y|Rll+=-X?H!^P+2iw?;e{TjH5>bcrq;w&fkGcZpLjc#u zRD{0dHY6j~@c59cX2!k-Rh|++V#^LatWZgf4*Ea}k8|hAK+8GT&r0CgxOX^u-@xMe z`~2|l9SiBCRu1AY`p>;L^jUp}dmu%u=JFI1Md{cb49Q)UE_f>Ywc{X1qkrsa;q zb6x9ePov%Z_aPVLy*2}jAd()~k}Xu(_6}OA>Xpm0V82mWKi-JoEo9EK-H)9zwpap; z(Fwj9R-u5>yt6hLIsk20+9s6tOzJ~kfYIN|=` z&4HDV9%uC?^8!~YxzdDw#H3#|F#pGh&FdG`LADvXIf7zMaUt;Es9g9t7mUNbmC4G9MI{Pwua?rDfa_Gpja%R z&h7$>^J1=x+jhBo!41x9j~YrrasB~d!*WN z%C#QKK+#;8njy!SMa2mUu~^#4f`ti=m#>Pb+Y0r3SzTp7eR+NVz@q|j^)_Aw02jCD zYnJa%yu=HJ|I$d=1ws3bh{oDuNKq)m` z;*B;F5N+RpVZ|i&0y@@t$fUB}II&ObO z=K&y)<1Ww)LXYxR9RIpe;a$)a@wxq{FAjm0iQ@7KmJ1E zBW84YAz2}h?V>g$!lQBtUYlw9)9T}(gt}yn$*7>f-jh~Q&~1|QbCaJWxg&4!%eD(t z6dV_>b~M=fqW|}F=UTN*9Y$&q-`DUBm#q}fJPh;j)4;~rHhSE`5uQV8ccI}<{b<8% zaXJ9Vr} znNn$nZaFpL*K!13Tl__GMxVi&?zRStfJSX*Uk{Wz_gX|&tghUs`POOt0)_PnEI>kA zGiewu-hh1Hvy4-n-m6hbT8L8*Xe8xx5y?+q8nusdxq-X2Lph zbwaVQXLg=iJc3&sj0*pPO-~1T^J!Uv*Hqm3qt zDA4-V5dm#m8mZ9FYT$NdpezF_MuJwuzU?Pfp zpDBE~Q!T@!0063Wt{8Nd2cs%85ZYzB7ZrzBsA(BN9zxktt!>`!^=T~#G|p^Uvo^m* zJ@IC~o}R$|K0~37AK_vZ)&g!MYN8hMT609$;Z4*cjrYJ;BEdUbf@E6%VvS~FM{)_5 z%efjq52!H^*+g;`IwF`-3Jci&-9vD*uVC!gHVZ7qXAJ4_o-lgY&`ym-=Qt&s_+Y8G zK6M2xM%ghIG`Z0y>Vh!79A=AYEM8WS*9T(OVsDpf_8K#vnvP5xT(%ijH)yX&hjTUD zLs(fW$jBQ{Du&;6A^k`^G&u#Q@eMPh;J;9&DT!Jsn4A5JUpN!J5bLwS7m>3$wEwU&5BHqA5)w2*ocm@P9+p7^40&}g zLrAM~YeAGd7wx=@7lKa${nPpiZ-iqqb-vUA1lYNSoZhdYnq`&ECdC2XH(p z+gEeG@RpJu7dN&}=dTWGB;Y+adc(T!Esb4X-&t^xVUn}MTmdPF+|4yer_F>kd%rdb z@O^O-R0%OWXpu4ycQr&1C)SThPIF{!tLwW-vExW%vL#)wn)#<9tT;Je@oRbK zDe<1S`FBo6mKSBk|5!TK`;Wwb98S%&{=>H3gQdp%xVcE2v}i*DK-_+hnk)gPYKBaOxG-T8U|0tlC%ro3>pcCPmSpZqL=)W7@W6cuZ0iVC|M;s;zFe7K%07mCM}Q6 zBK`IHl(H`t<`Q4Fw6-5qo)|t*iy<(J?@w}GZ`%V+cCfV<#jUHGy8E_BdELmi7dE5! zyRynK&2ot+eXuS}M+#mo)}!izd$A+@q)P={UU6j1<0LxmR87k;{v>b@r8pF^n@O=; zQz5RK2&>p*y>^k}B0D3Tpz#9vflPGUhthKrfq5z(c3L4(X$qED6~53eR7>42crWrL zBr~iFWduejSAHZlBzCGI082HM&IjZ_06C?bs>j1C`)4t=ROPC(M+r`bDcv_;{g27z_K@I^VeWD$mO;|LYbHq1m#eH9_)q%XvUf$a z4kTU+vyWB;+7`TZlLv2`%3-F#y-C+B;F;c)Lj-6?8Nxjm6S}3QNuU*@4#9j#OEX^( z=4;xvFp@Y26KT!A8#rjTQI7VBQ{QX1ByA9vt>ovKWuPT`C2>M-rrrR|=6D-utpj!D zW!ag%jSxj?wgjVI>R&#u8cg#0))0B)$#+g8uNwyQ;xoIPsL2&&~(Q!QtwYU<<6bwL{r+#+dm;7ya(A0GTZ_OO@-Vs)o!xE-6E(N1#f zfzpFUHYr%2CwP;b$I64L{c%aWE2OOZ;i~;iPMg)wi%_Na_*3*;cdZ+*h>v-UbGImz2MsPi^7g4&s2qz-Dq%LMfiS-L z#_EsYa9NBFnvs?>iIAEu?KkjVwNnE|yzs)FqUq94l=E=b4sA!LAvo1So!#`y0&zU* ztMfxVNMWqapaQZ@8ZuM{j)=1pergL4*w=|zvop4UVLF|s<_6CiJLTAvA6%RF|tNL9I;l5C@Q`|egCDzq@+H5ZU<*V#^hj@^gj#Sku!0v>m< zt#49$cuRBz(}DANS*Yfi9!&Dbn$M7=&+a^~n;a{LiLKu?t4bI$E3GKBvAfzE~O<;W2v$gc$AW zx@Xb~MHLmQ@%q9xf4EcU?8ZKKK+KUqe5GV�}!ve{x0GJ{!~=SiRqf1l9ep1BVF@ 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

diff --git a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java index 6f6c81a67b..1017e2e743 100755 --- a/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java +++ b/Core/src/org/sleuthkit/autopsy/report/uisnapshot/UiSnapShotReportWriter.java @@ -94,13 +94,32 @@ public abstract class UiSnapShotReportWriter { return writeIndexHTML(); } - protected String getReportName(){ + /** + * Get the name for the report. + * + * @return Returns the reportName + */ + protected String getReportName() { return reportName; } - protected Path getReportFolderPath(){ + /** + * Get the folder path for the report. + * + * @return Report folder path + */ + protected Path getReportFolderPath() { return reportFolderPath; } + + /** + * Get the case for this report. + * + * @return Current case object + */ + protected Case getCurrentCase() { + return currentCase; + } /** * Generate and write the html page that shows the snapshot and the state of From 6875c94050afcdee54df42c09b765a6b5ded102a Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Tue, 19 Mar 2019 07:28:52 -0400 Subject: [PATCH 58/80] Get max database IDs --- .../autopsy/report/Bundle.properties-MERGED | 1 + .../report/CreatePortableCaseModule.java | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/Core/src/org/sleuthkit/autopsy/report/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/report/Bundle.properties-MERGED index 68a553dd27..3111ffbe6d 100755 --- a/Core/src/org/sleuthkit/autopsy/report/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/report/Bundle.properties-MERGED @@ -5,6 +5,7 @@ CreatePortableCaseModule.createCase.caseDirExists=Case folder {0} already exists CreatePortableCaseModule.createCase.errorCreatingCase=Error creating case # {0} - folder CreatePortableCaseModule.createCase.errorCreatingFolder=Error creating folder {0} +CreatePortableCaseModule.createCase.errorStoringMaxIds=Error storing maximum database IDs CreatePortableCaseModule.generateReport.caseClosed=Current case has been closed # {0} - tag name CreatePortableCaseModule.generateReport.copyingArtifacts=Copying artifacts tagged as {0}... diff --git a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java index 98805e420e..609928d98f 100644 --- a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java +++ b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java @@ -24,6 +24,8 @@ import java.util.logging.Level; import java.io.File; import java.io.IOException; import java.nio.file.Paths; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -41,6 +43,7 @@ import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifactTag; import org.sleuthkit.datamodel.BlackboardAttribute; +import org.sleuthkit.datamodel.CaseDbAccessManager; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.ContentTag; import org.sleuthkit.datamodel.FileSystem; @@ -290,6 +293,7 @@ public class CreatePortableCaseModule implements GeneralReportModule { "CreatePortableCaseModule.createCase.errorCreatingCase=Error creating case", "# {0} - folder", "CreatePortableCaseModule.createCase.errorCreatingFolder=Error creating folder {0}", + "CreatePortableCaseModule.createCase.errorStoringMaxIds=Error storing maximum database IDs", }) private void createCase(File outputDir, ReportProgressPanel progressPanel) { @@ -312,6 +316,20 @@ public class CreatePortableCaseModule implements GeneralReportModule { return; } + // Store the highest IDs + try { + currentCase.getSleuthkitCase().getCaseDbAccessManager() + .select("max(obj_id) as max_id from tsk_objects", new StoreMaxIdCallback("tsk_objects")); + currentCase.getSleuthkitCase().getCaseDbAccessManager() + .select("max(tag_id) as max_id from content_tags", new StoreMaxIdCallback("content_tags")); + currentCase.getSleuthkitCase().getCaseDbAccessManager() + .select("max(tag_id) as max_id from blackboard_artifact_tags", new StoreMaxIdCallback("blackboard_artifact_tags")); + } catch (TskCoreException ex) { + handleError("Error storing maximum database IDs", + Bundle.CreatePortableCaseModule_createCase_errorStoringMaxIds(), ex, progressPanel); + return; + } + // Create the base folder for the copied files copiedFilesFolder = Paths.get(caseFolder.toString(), FILE_FOLDER_NAME).toFile(); if (! copiedFilesFolder.mkdir()) { @@ -689,4 +707,37 @@ public class CreatePortableCaseModule implements GeneralReportModule { configPanel = new CreatePortableCasePanel(); return configPanel; } + + class StoreMaxIdCallback implements CaseDbAccessManager.CaseDbAccessQueryCallback { + + private final String tableName; + + StoreMaxIdCallback(String tableName) { + this.tableName = tableName; + } + + @Override + public void process(ResultSet rs) { + + try { + while (rs.next()) { + try { + Long maxId = rs.getLong("max_id"); + String nameStr = "PORTABLE_CASE_" + tableName + "_MAX_ID"; + nameStr = nameStr.toUpperCase(); + String query = "INSERT INTO tsk_db_info_extended (name, value) VALUES ('" + nameStr + "', '" + maxId + "')"; + currentCase.getSleuthkitCase().getCaseDbAccessManager().insert("tsk_db_info_extended", query); + + } catch (SQLException ex) { + logger.log(Level.WARNING, "Unable to get maximum ID from result set", ex); + } catch (TskCoreException ex) { + logger.log(Level.WARNING, "Unable to save maximum ID from result set", ex); + } + + } + } catch (SQLException ex) { + logger.log(Level.WARNING, "Failed to get maximum ID from result set", ex); + } + } + } } From e3199919dd4a8e0c94ab386720d841e749df78c3 Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Tue, 19 Mar 2019 08:00:01 -0400 Subject: [PATCH 59/80] Updated to check for white space report name. --- .../sleuthkit/autopsy/communications/Bundle.properties-MERGED | 2 +- .../sleuthkit/autopsy/communications/VisualizationPanel.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED index 6a2a238915..e4daded09b 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/communications/Bundle.properties-MERGED @@ -33,7 +33,7 @@ UnpinAccountsAction.pluralText=Remove Selected Accounts UnpinAccountsAction.singularText=Remove Selected Account VisalizationPanel.paintingError=Problem painting visualization. # {0} - default name -VisualizationPane_accept_defaultName=Press OK to accept default report name: {0} +VisualizationPane_accept_defaultName=Report name was empty. Press OK to accept default report name: {0} VisualizationPane_blank_report_title=Blank Report Name VisualizationPane_DisplayName=Open Report VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report: diff --git a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java index 625b241d32..f3d4f95bb2 100644 --- a/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/communications/VisualizationPanel.java @@ -739,7 +739,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider "VisualizationPane_fileName_prompt=Enter name for the Communications Snapshot Report:", "VisualizationPane_reportName=Communications Snapshot", "# {0} - default name", - "VisualizationPane_accept_defaultName=Press OK to accept default report name: {0}", + "VisualizationPane_accept_defaultName=Report name was empty. Press OK to accept default report name: {0}", "VisualizationPane_blank_report_title=Blank Report Name", "# {0} - report name", "VisualizationPane_overrite_exiting=Overwrite existing report?\n{0}" @@ -763,7 +763,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider if (result == JOptionPane.OK_OPTION) { String enteredReportName = text.getText(); - if(enteredReportName.isEmpty()){ + if(enteredReportName.trim().isEmpty()){ result = JOptionPane.showConfirmDialog(graphComponent, Bundle.VisualizationPane_accept_defaultName(defaultReportName), Bundle.VisualizationPane_blank_report_title(), JOptionPane.OK_CANCEL_OPTION); if(result != JOptionPane.OK_OPTION) { return; From fd688a21c57bf30310329cf67ca5b65df528480c Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Tue, 19 Mar 2019 09:16:27 -0400 Subject: [PATCH 60/80] Changed the case list panel on the left hand side --- .../keywordsearch/multicase/Bundle.properties | 4 +- .../multicase/Bundle.properties-MERGED | 4 +- .../MultiCaseKeywordSearchPanel.form | 130 ++++-------- .../MultiCaseKeywordSearchPanel.java | 185 ++++++------------ 4 files changed, 96 insertions(+), 227 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties index 9ca1203be4..97b54b454f 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties @@ -11,13 +11,11 @@ MultiCaseKeywordSearchPanel.keywordTextField.text_1= MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected cases. The case can be opened to examine the results more closely. MultiCaseKeywordSearchPanel.casesLabel.text_1=Cases MultiCaseKeywordSearchPanel.resultsLabel.text=Results -MultiCaseKeywordSearchPanel.uncheckButton.text=Uncheck All -MultiCaseKeywordSearchPanel.checkButton.text=Check All MultiCaseKeywordSearchPanel.searchButton.text=Search MultiCaseKeywordSearchPanel.viewErrorsButton.text=View Errors MultiCaseKeywordSearchPanel.warningLabel.text= MultiCaseKeywordSearchPanel.exportButton.text=Export Results MultiCaseKeywordSearchPanel.cancelButton.text=Cancel MultiCaseKeywordSearchPanel.resultsCountLabel.text= -MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Pick Cases +MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Add Cases SelectMultiUserCasesPanel.refreshButton.text=Refresh diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index d10f80b39a..a42701dd53 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -92,13 +92,11 @@ MultiCaseKeywordSearchPanel.keywordTextField.text_1= MultiCaseKeywordSearchPanel.toolDescriptionTextArea.text=Perform a keyword search on the selected cases. The case can be opened to examine the results more closely. MultiCaseKeywordSearchPanel.casesLabel.text_1=Cases MultiCaseKeywordSearchPanel.resultsLabel.text=Results -MultiCaseKeywordSearchPanel.uncheckButton.text=Uncheck All -MultiCaseKeywordSearchPanel.checkButton.text=Check All MultiCaseKeywordSearchPanel.searchButton.text=Search MultiCaseKeywordSearchPanel.viewErrorsButton.text=View Errors MultiCaseKeywordSearchPanel.warningLabel.text= MultiCaseKeywordSearchPanel.exportButton.text=Export Results MultiCaseKeywordSearchPanel.cancelButton.text=Cancel MultiCaseKeywordSearchPanel.resultsCountLabel.text= -MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Pick Cases +MultiCaseKeywordSearchPanel.pickCasesButton.text_1=Add Cases SelectMultiUserCasesPanel.refreshButton.text=Refresh diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form index f348e17108..ee2bd31d85 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.form @@ -39,29 +39,22 @@ - + - + - - - - - - - - - - - - + + + + + - + @@ -72,7 +65,7 @@ - + @@ -88,7 +81,7 @@ - + @@ -122,25 +115,21 @@ - - + + - - - - + + + + - - - - - + @@ -232,31 +221,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - @@ -271,47 +235,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -428,5 +351,24 @@ + + + + + + + + + + + + + + + + + + + diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java index b55a1e426d..07383604dc 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -38,11 +39,14 @@ import java.util.Map; import java.util.logging.Level; import java.util.stream.Collectors; import javax.swing.AbstractButton; +import javax.swing.DefaultListModel; +import javax.swing.DefaultListSelectionModel; import javax.swing.JCheckBox; import javax.swing.JFileChooser; import javax.swing.table.TableColumn; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.filechooser.FileNameExtensionFilter; @@ -117,6 +121,14 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex outline.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); caseNameToCaseDataMap = new HashMap<>(); setColumnWidths(); + + //Disable selection in JList + caseSelectionList.setSelectionModel(new DefaultListSelectionModel() { + @Override + public void setSelectionInterval(int index0, int index1) { + super.setSelectionInterval(-1, -1); + } + }); } /** @@ -237,30 +249,27 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex * Get the list of cases from the Multi user case browser */ private void populateCasesList(List selectedNodes) { - Collection disabledCases = getCases(false); - casesPanel.removeAll(); - casesPanel.revalidate(); - casesPanel.repaint(); + caseSelectionList.removeAll(); + caseSelectionList.revalidate(); + caseSelectionList.repaint(); caseNameToCaseDataMap.clear(); - int casePanelWidth = casesPanel.getPreferredSize().width; - int heightOfAllRows = 0; - for (CaseNodeData data : selectedNodes) { - //select all new cases and cases which were previously selected + DefaultListModel listModel = new DefaultListModel<>(); + Collections.sort(selectedNodes, (CaseNodeData o1, CaseNodeData o2) -> { + return o1.getName().toLowerCase() + .compareTo(o2.getName().toLowerCase()); + }); + + for (int i = 0; i < selectedNodes.size(); i++) { + CaseNodeData data = selectedNodes.get(i); String multiUserCaseName = data.getName(); + listModel.addElement(multiUserCaseName); + /** + * Map out the name to CaseNodeData so we can retrieve it later for + * search. + */ caseNameToCaseDataMap.put(multiUserCaseName, data); - boolean isSelected = true; - if (disabledCases.contains(multiUserCaseName)) { - isSelected = false; - } - JCheckBox caseCheckBox = new JCheckBox(multiUserCaseName, isSelected); - caseCheckBox.setBackground(Color.white); - if (casePanelWidth < caseCheckBox.getPreferredSize().width) { - casePanelWidth = caseCheckBox.getPreferredSize().width; - } - heightOfAllRows += caseCheckBox.getPreferredSize().height; - casesPanel.add(caseCheckBox); } - casesPanel.setPreferredSize(new Dimension(casePanelWidth, heightOfAllRows)); + caseSelectionList.setModel(listModel); } @Override @@ -283,12 +292,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex keywordTextField = new javax.swing.JTextField(); exactRadioButton = new javax.swing.JRadioButton(); regexRadioButton = new javax.swing.JRadioButton(); - casesScrollPane = new javax.swing.JScrollPane(); - casesPanel = new javax.swing.JPanel(); casesLabel = new javax.swing.JLabel(); resultsLabel = new javax.swing.JLabel(); - uncheckButton = new javax.swing.JButton(); - checkButton = new javax.swing.JButton(); toolDescriptionScrollPane = new javax.swing.JScrollPane(); toolDescriptionTextArea = new javax.swing.JTextArea(); resultsScrollPane = new javax.swing.JScrollPane(); @@ -299,6 +304,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex resultsCountLabel = new javax.swing.JLabel(); viewErrorsButton = new javax.swing.JButton(); pickCasesButton = new javax.swing.JButton(); + jScrollPane1 = new javax.swing.JScrollPane(); + caseSelectionList = new javax.swing.JList<>(); setName(""); // NOI18N setOpaque(false); @@ -335,38 +342,10 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex searchTypeGroup.add(regexRadioButton); org.openide.awt.Mnemonics.setLocalizedText(regexRadioButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.regexRadioButton.text_1")); // NOI18N - casesScrollPane.setPreferredSize(new java.awt.Dimension(174, 281)); - - casesPanel.setBackground(new java.awt.Color(255, 255, 255)); - casesPanel.setPreferredSize(new java.awt.Dimension(152, 197)); - casesPanel.setLayout(new javax.swing.BoxLayout(casesPanel, javax.swing.BoxLayout.Y_AXIS)); - casesScrollPane.setViewportView(casesPanel); - org.openide.awt.Mnemonics.setLocalizedText(casesLabel, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.casesLabel.text_1")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(resultsLabel, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.resultsLabel.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(uncheckButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.uncheckButton.text")); // NOI18N - uncheckButton.setMargin(new java.awt.Insets(2, 6, 2, 6)); - uncheckButton.setMaximumSize(new java.awt.Dimension(84, 23)); - uncheckButton.setMinimumSize(new java.awt.Dimension(84, 23)); - uncheckButton.setPreferredSize(new java.awt.Dimension(84, 23)); - uncheckButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - uncheckButtonActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(checkButton, org.openide.util.NbBundle.getMessage(MultiCaseKeywordSearchPanel.class, "MultiCaseKeywordSearchPanel.checkButton.text")); // NOI18N - checkButton.setMaximumSize(new java.awt.Dimension(84, 23)); - checkButton.setMinimumSize(new java.awt.Dimension(84, 23)); - checkButton.setPreferredSize(new java.awt.Dimension(84, 23)); - checkButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - checkButtonActionPerformed(evt); - } - }); - toolDescriptionTextArea.setEditable(false); toolDescriptionTextArea.setBackground(new java.awt.Color(240, 240, 240)); toolDescriptionTextArea.setColumns(20); @@ -423,6 +402,8 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex } }); + jScrollPane1.setViewportView(caseSelectionList); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -438,22 +419,17 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex .addComponent(substringRadioButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(regexRadioButton)) - .addComponent(keywordTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 679, Short.MAX_VALUE)) + .addComponent(keywordTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 591, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(toolDescriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 295, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(casesLabel) - .addComponent(casesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(pickCasesButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(uncheckButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(checkButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addComponent(pickCasesButton, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() @@ -464,7 +440,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(viewErrorsButton) - .addComponent(warningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 695, Short.MAX_VALUE)) + .addComponent(warningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 607, Short.MAX_VALUE)) .addGap(14, 14, 14) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(exportButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) @@ -473,12 +449,9 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(196, 196, 196) - .addComponent(searchProgressBar, javax.swing.GroupLayout.DEFAULT_SIZE, 769, Short.MAX_VALUE) + .addComponent(searchProgressBar, javax.swing.GroupLayout.DEFAULT_SIZE, 608, Short.MAX_VALUE) .addGap(108, 108, 108))) ); - - layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {checkButton, uncheckButton}); - layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() @@ -501,21 +474,18 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex .addComponent(resultsCountLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(resultsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(casesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(resultsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE) + .addComponent(jScrollPane1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(uncheckButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(checkButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(warningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(exportButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pickCasesButton) + .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(searchButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(viewErrorsButton) - .addComponent(pickCasesButton)) + .addComponent(viewErrorsButton) .addComponent(cancelButton)) .addContainerGap()) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -536,7 +506,7 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex */ private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed if (null == searchThread) { - Collection cases = getCases(true); + Collection cases = getCases(); String searchString = keywordTextField.getText(); if (cases.isEmpty()) { warningLabel.setText(Bundle.MultiCaseKeywordSearchPanel_warningText_noCases()); @@ -566,21 +536,16 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex }//GEN-LAST:event_searchButtonActionPerformed /** - * Get the cases which match the selected status specified by isSelected. - * - * @param isSelected true to get selected cases false to get unselected - * cases + * Get the case names from the Case List * * @return cases the cases that match the selected status of isSelected */ - private Collection getCases(boolean isSelected) { + private Collection getCases() { Collection cases = new HashSet<>(); - for (Component comp : casesPanel.getComponents()) { - if (comp instanceof JCheckBox) { - if (((AbstractButton) comp).isSelected() == isSelected) { - cases.add(((AbstractButton) comp).getText()); - } - } + ListModel listModel = caseSelectionList.getModel(); + for(int i = 0; i < listModel.getSize(); i++) { + String caseName = (String) listModel.getElementAt(i); + cases.add(caseName); } return cases; } @@ -637,24 +602,6 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex resultsScrollPane.setPreferredSize(new Dimension(outline.getPreferredSize().width, resultsScrollPane.getPreferredSize().height)); } - /** - * Un-select all check boxes in the cases list - * - * @param evt ignored - */ - private void uncheckButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uncheckButtonActionPerformed - allCheckboxesSetSelected(false); - }//GEN-LAST:event_uncheckButtonActionPerformed - - /** - * Select all check boxes in the cases list - * - * @param evt ignored - */ - private void checkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkButtonActionPerformed - allCheckboxesSetSelected(true); - }//GEN-LAST:event_checkButtonActionPerformed - /** * Cancel the current multi-case search which is being performed. * @@ -811,20 +758,6 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex } } - /** - * Set the selected status of all checkboxes. - * - * @param selected true if all checkboxes should be selected, false if no - * check boxes should be selected. - */ - private void allCheckboxesSetSelected(boolean selected) { - for (Component comp : casesPanel.getComponents()) { - if (comp instanceof JCheckBox) { - ((AbstractButton) comp).setSelected(selected); - } - } - } - /** * Ask the user if they want to continue their search while this window is * closed. Cancels the current search if they select no. @@ -849,12 +782,11 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cancelButton; + private javax.swing.JList caseSelectionList; private javax.swing.JLabel casesLabel; - private javax.swing.JPanel casesPanel; - private javax.swing.JScrollPane casesScrollPane; - private javax.swing.JButton checkButton; private javax.swing.JRadioButton exactRadioButton; private javax.swing.JButton exportButton; + private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextField keywordTextField; private javax.swing.JButton pickCasesButton; private javax.swing.JRadioButton regexRadioButton; @@ -867,7 +799,6 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex private javax.swing.JRadioButton substringRadioButton; private javax.swing.JScrollPane toolDescriptionScrollPane; private javax.swing.JTextArea toolDescriptionTextArea; - private javax.swing.JButton uncheckButton; private javax.swing.JButton viewErrorsButton; private javax.swing.JLabel warningLabel; // End of variables declaration//GEN-END:variables From b7a95b978731979e5ede584118e2091974f8819b Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Tue, 19 Mar 2019 09:42:24 -0400 Subject: [PATCH 61/80] Change to storing max IDs in new table. Close the portable case when done. --- .../report/CreatePortableCaseModule.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java index 609928d98f..e485c971f7 100644 --- a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java +++ b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java @@ -66,6 +66,7 @@ public class CreatePortableCaseModule implements GeneralReportModule { private static final Logger logger = Logger.getLogger(CreatePortableCaseModule.class.getName()); private static final String FILE_FOLDER_NAME = "PortableCaseFiles"; private static final String UNKNOWN_FILE_TYPE_FOLDER = "Other"; + private static final String PORTABLE_CASE_TABLE_NAME = "portable_case_data"; private CreatePortableCasePanel configPanel; // These are the types for the exported file subfolders @@ -318,12 +319,7 @@ public class CreatePortableCaseModule implements GeneralReportModule { // Store the highest IDs try { - currentCase.getSleuthkitCase().getCaseDbAccessManager() - .select("max(obj_id) as max_id from tsk_objects", new StoreMaxIdCallback("tsk_objects")); - currentCase.getSleuthkitCase().getCaseDbAccessManager() - .select("max(tag_id) as max_id from content_tags", new StoreMaxIdCallback("content_tags")); - currentCase.getSleuthkitCase().getCaseDbAccessManager() - .select("max(tag_id) as max_id from blackboard_artifact_tags", new StoreMaxIdCallback("blackboard_artifact_tags")); + saveHighestIds(); } catch (TskCoreException ex) { handleError("Error storing maximum database IDs", Bundle.CreatePortableCaseModule_createCase_errorStoringMaxIds(), ex, progressPanel); @@ -356,6 +352,27 @@ public class CreatePortableCaseModule implements GeneralReportModule { } + /** + * Save the current highest IDs to the portable case. + * + * @throws TskCoreException + */ + private void saveHighestIds() throws TskCoreException { + + CaseDbAccessManager currentCaseDbManager = currentCase.getSleuthkitCase().getCaseDbAccessManager(); + + String tableSchema = "( id INTEGER PRIMARY KEY, " + + " name TEXT UNIQUE NOT NULL," + + " value TEXT NOT NULL )"; + + portableSkCase.getCaseDbAccessManager().createTable(PORTABLE_CASE_TABLE_NAME, tableSchema); + + currentCaseDbManager.select("max(obj_id) as max_id from tsk_objects", new StoreMaxIdCallback("tsk_objects")); + currentCaseDbManager.select("max(tag_id) as max_id from content_tags", new StoreMaxIdCallback("content_tags")); + currentCaseDbManager.select("max(tag_id) as max_id from blackboard_artifact_tags", new StoreMaxIdCallback("blackboard_artifact_tags")); + currentCaseDbManager.select("max(examiner_id) as max_id from tsk_examiners", new StoreMaxIdCallback("tsk_examiners")); + } + /** * Add all files with a given tag to the portable case. * @@ -694,8 +711,7 @@ public class CreatePortableCaseModule implements GeneralReportModule { oldTagNameToNewTagName.clear(); currentCase = null; if (portableSkCase != null) { - // We want to close the database connections here but it is currently not possible. JIRA-4736 - portableSkCase = null; + portableSkCase.close(); } caseFolder = null; copiedFilesFolder = null; @@ -708,7 +724,7 @@ public class CreatePortableCaseModule implements GeneralReportModule { return configPanel; } - class StoreMaxIdCallback implements CaseDbAccessManager.CaseDbAccessQueryCallback { + private class StoreMaxIdCallback implements CaseDbAccessManager.CaseDbAccessQueryCallback { private final String tableName; @@ -723,10 +739,8 @@ public class CreatePortableCaseModule implements GeneralReportModule { while (rs.next()) { try { Long maxId = rs.getLong("max_id"); - String nameStr = "PORTABLE_CASE_" + tableName + "_MAX_ID"; - nameStr = nameStr.toUpperCase(); - String query = "INSERT INTO tsk_db_info_extended (name, value) VALUES ('" + nameStr + "', '" + maxId + "')"; - currentCase.getSleuthkitCase().getCaseDbAccessManager().insert("tsk_db_info_extended", query); + String query = " (name, value) VALUES ('" + tableName + "', '" + maxId + "')"; + portableSkCase.getCaseDbAccessManager().insert(PORTABLE_CASE_TABLE_NAME, query); } catch (SQLException ex) { logger.log(Level.WARNING, "Unable to get maximum ID from result set", ex); From cc1924faca7e91bbacc2b139b2204612f1dd4b43 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Tue, 19 Mar 2019 09:44:40 -0400 Subject: [PATCH 62/80] Removed some warnings --- .../multicase/Bundle.properties-MERGED | 33 ------------------- .../MultiCaseKeywordSearchPanel.java | 6 ++-- .../multicase/SelectMultiUserCasesDialog.java | 2 +- 3 files changed, 4 insertions(+), 37 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index a42701dd53..9736f90467 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -29,55 +29,22 @@ MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be select MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel. MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled -# {0} - connection info -# {1} - case name -# {2} - case directory MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2} -# {0} - PostgreSQL server host -# {1} - PostgreSQL server port -# {2} - case database name -# {3} - case directory MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3} -# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0} -# {0} - case_name MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0} -# {0} - case directory path MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} -# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} -# {0} - Solr document id -# {1} - case database name -# {2} - case directory MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2} -# {0} - file name -# {1} - case directory MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} -# {0} - file name -# {1} - case directory MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} -# {0} - query -# {1} - case_name MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query "{0}" on case {1} -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.findingCases=Finding selected cases -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for "{0}" ({1} of {2} case(s)) -# {0} - case name -# {1} - case counter -# {2} - total cases MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for "{0}" ({1} of {2} case(s)) -# {0} - total cases MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s) SelectMultiUserCasesPanel.selectAllButton.text=Select All SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java index 07383604dc..bc197c16a0 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/MultiCaseKeywordSearchPanel.java @@ -542,9 +542,9 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex */ private Collection getCases() { Collection cases = new HashSet<>(); - ListModel listModel = caseSelectionList.getModel(); + ListModel listModel = caseSelectionList.getModel(); for(int i = 0; i < listModel.getSize(); i++) { - String caseName = (String) listModel.getElementAt(i); + String caseName = listModel.getElementAt(i); cases.add(caseName); } return cases; @@ -665,10 +665,10 @@ final class MultiCaseKeywordSearchPanel extends javax.swing.JPanel implements Ex }//GEN-LAST:event_viewErrorsButtonActionPerformed private void pickCasesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pickCasesButtonActionPerformed + caseSelectionDialog.setVisible(true); if (currentConfirmedSelections != null) { caseSelectionDialog.setNodeSelections(currentConfirmedSelections); } - caseSelectionDialog.setVisible(true); }//GEN-LAST:event_pickCasesButtonActionPerformed diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java index 28b583e563..75d449c932 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/SelectMultiUserCasesDialog.java @@ -64,7 +64,7 @@ class SelectMultiUserCasesDialog extends javax.swing.JDialog { try { multiUserCasesPanel.setSelections(selections); } catch (PropertyVetoException ex) { - + //Do-nothing } } From 46729e8ded81b2941f6158e9f310571743793e80 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\dsmyda" Date: Tue, 19 Mar 2019 09:47:04 -0400 Subject: [PATCH 63/80] Added bundle comments back in --- .../multicase/Bundle.properties-MERGED | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED index 9736f90467..a42701dd53 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/multicase/Bundle.properties-MERGED @@ -29,22 +29,55 @@ MultiCaseKeywordSearchPanel.warningText.noCases=At least one case must be select MultiCaseKeywordSearchTopComponent.exceptionMessage.failedToCreatePanel=Failed to create Multi-case Keyword Search panel. MultiCaseKeywordSearchTopComponent.name.text=Multi-case Keyword Search MultiCaseSearcher.exceptionMessage.cancelledMessage=Search cancelled +# {0} - connection info +# {1} - case name +# {2} - case directory MultiCaseSearcher.exceptionMessage.errorLoadingCore=Error connecting to Solr server and loading core (URL: {0}) for case {1} in {2} +# {0} - PostgreSQL server host +# {1} - PostgreSQL server port +# {2} - case database name +# {3} - case directory MultiCaseSearcher.exceptionMessage.errorOpeningCaseDatabase=Error connecting to PostgreSQL server (Host/Port: [{0}:{1}] and opening case database {2} for case at {3} +# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToFindCaseMetadata=Failed to find case metadata file in {0} +# {0} - case_name MultiCaseSearcher.exceptionMessage.failedToGetCaseDatabaseConnectionInfo=Failed to get case database connection info for case {0} +# {0} - case directory path MultiCaseSearcher.exceptionMessage.failedToGetCaseDirReadlock=Failed to obtain read lock for case directory at {0} +# {0} - case directory MultiCaseSearcher.exceptionMessage.failedToParseCaseMetadata=Failed to parse case file metadata in {0} +# {0} - Solr document id +# {1} - case database name +# {2} - case directory MultiCaseSearcher.exceptionMessage.hitProcessingError=Failed to query case database for processing of Solr object id {0} of case {1} in {2} +# {0} - file name +# {1} - case directory MultiCaseSearcher.exceptionMessage.missingSolrPropertiesFile=Missing {0} file in {1} +# {0} - file name +# {1} - case directory MultiCaseSearcher.exceptionMessage.solrPropertiesFileParseError=Error parsing {0} file in {1} +# {0} - query +# {1} - case_name MultiCaseSearcher.exceptionMessage.solrQueryError=Failed to execute query "{0}" on case {1} +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.acquiringSharedLockForCase=Acquiring shared lock for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.creatingSolrQuery=Creating search query for Solr server +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.executingSolrQueryForCase=Getting keyword hits for "{0}" ({1} of {2} case(s)) MultiCaseSearcher.progressMessage.findingCases=Finding selected cases +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.loadingSolrCoreForCase=Loading Solr core for "{0}" ({1} of {2} case(s)) +# {0} - case name +# {1} - case counter +# {2} - total cases MultiCaseSearcher.progressMessage.openingCaseDbForCase=Opening case database for "{0}" ({1} of {2} case(s)) +# {0} - total cases MultiCaseSearcher.progressMessage.startingCaseSearches=Searching {0} case(s) SelectMultiUserCasesPanel.selectAllButton.text=Select All SelectMultiUserCasesPanel.deselectAllButton.text=Deselect All From e7f0e87c8dddb4ee554553c89d04b115aca7241e Mon Sep 17 00:00:00 2001 From: Kelly Kelly Date: Tue, 19 Mar 2019 09:55:57 -0400 Subject: [PATCH 64/80] Switched from using getClass.getName to instanceof --- .../communications/snapshot/CommSnapShotReportWriter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java b/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java index 8024415d63..7b4dee6d19 100755 --- a/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java +++ b/Core/src/org/sleuthkit/autopsy/communications/snapshot/CommSnapShotReportWriter.java @@ -88,7 +88,7 @@ public class CommSnapShotReportWriter extends UiSnapShotReportWriter { List filters = filter.getAndFilters(); for (SubFilter filter : filters) { - if (filter.getClass().getName().equals(DateRangeFilter.class.getName())) { + if (filter instanceof DateRangeFilter) { long startDate = ((DateRangeFilter) filter).getStartDate(); long endDate = ((DateRangeFilter) filter).getEndDate(); @@ -100,7 +100,7 @@ public class CommSnapShotReportWriter extends UiSnapShotReportWriter { if (endDate > 0) { snapShotContext.put("endTime", formatter.format(new Date((Instant.ofEpochSecond(endDate)).toEpochMilli()))); //NON-NLS } - } else if (filter.getClass().getName().equals(AccountTypeFilter.class.getName())) { + } else if (filter instanceof AccountTypeFilter) { Set selectedAccounts = ((AccountTypeFilter) filter).getAccountTypes(); ArrayList fullAccountList = new ArrayList<>(); @@ -113,7 +113,7 @@ public class CommSnapShotReportWriter extends UiSnapShotReportWriter { } snapShotContext.put("accounts", fullAccountList); - } else if (filter.getClass().getName().equals(DeviceFilter.class.getName())) { + } else if (filter instanceof DeviceFilter) { Collection ids = ((DeviceFilter) filter).getDevices(); ArrayList list = new ArrayList<>(); try { From 8c64e63277324e69dde7880abf2034131483dfb6 Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Tue, 19 Mar 2019 10:05:00 -0400 Subject: [PATCH 65/80] Name changes --- .../autopsy/report/CreatePortableCaseModule.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java index e485c971f7..3ce5c3a369 100644 --- a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java +++ b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java @@ -66,7 +66,7 @@ public class CreatePortableCaseModule implements GeneralReportModule { private static final Logger logger = Logger.getLogger(CreatePortableCaseModule.class.getName()); private static final String FILE_FOLDER_NAME = "PortableCaseFiles"; private static final String UNKNOWN_FILE_TYPE_FOLDER = "Other"; - private static final String PORTABLE_CASE_TABLE_NAME = "portable_case_data"; + private static final String MAX_ID_TABLE_NAME = "portable_case_max_ids"; private CreatePortableCasePanel configPanel; // These are the types for the exported file subfolders @@ -361,11 +361,10 @@ public class CreatePortableCaseModule implements GeneralReportModule { CaseDbAccessManager currentCaseDbManager = currentCase.getSleuthkitCase().getCaseDbAccessManager(); - String tableSchema = "( id INTEGER PRIMARY KEY, " - + " name TEXT UNIQUE NOT NULL," - + " value TEXT NOT NULL )"; + String tableSchema = "( table_name TEXT PRIMARY KEY, " + + " max_id TEXT)"; - portableSkCase.getCaseDbAccessManager().createTable(PORTABLE_CASE_TABLE_NAME, tableSchema); + portableSkCase.getCaseDbAccessManager().createTable(MAX_ID_TABLE_NAME, tableSchema); currentCaseDbManager.select("max(obj_id) as max_id from tsk_objects", new StoreMaxIdCallback("tsk_objects")); currentCaseDbManager.select("max(tag_id) as max_id from content_tags", new StoreMaxIdCallback("content_tags")); @@ -739,8 +738,8 @@ public class CreatePortableCaseModule implements GeneralReportModule { while (rs.next()) { try { Long maxId = rs.getLong("max_id"); - String query = " (name, value) VALUES ('" + tableName + "', '" + maxId + "')"; - portableSkCase.getCaseDbAccessManager().insert(PORTABLE_CASE_TABLE_NAME, query); + String query = " (table_name, max_id) VALUES ('" + tableName + "', '" + maxId + "')"; + portableSkCase.getCaseDbAccessManager().insert(MAX_ID_TABLE_NAME, query); } catch (SQLException ex) { logger.log(Level.WARNING, "Unable to get maximum ID from result set", ex); From 8f158dad12f6c88abb98ee378580ff73ad3f4629 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Tue, 19 Mar 2019 12:28:18 -0400 Subject: [PATCH 66/80] 4791 change token file name to be most common file name --- .../CommonAttributeValue.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java index 7895e7a410..c4fe25f14b 100644 --- a/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java +++ b/Core/src/org/sleuthkit/autopsy/commonpropertiessearch/CommonAttributeValue.java @@ -22,8 +22,10 @@ package org.sleuthkit.autopsy.commonpropertiessearch; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import org.sleuthkit.datamodel.AbstractFile; @@ -36,7 +38,7 @@ final public class CommonAttributeValue { private final String value; private final List fileInstances; - private String tokenFileName = null; + private final Map fileNames = new HashMap<>(); CommonAttributeValue(String value) { this.value = value; @@ -53,6 +55,14 @@ final public class CommonAttributeValue { * @return the file name of an instance of this file */ String getTokenFileName() { + String tokenFileName = null; + int maxValue = 0; + for (String key : fileNames.keySet()){ + if (fileNames.get(key) > maxValue){ + maxValue = fileNames.get(key); + tokenFileName = key; + } + } return tokenFileName; } @@ -97,8 +107,10 @@ final public class CommonAttributeValue { } void addInstance(AbstractCommonAttributeInstance metadata) { - if (tokenFileName == null && metadata.getAbstractFile() != null) { - tokenFileName = metadata.getAbstractFile().getName(); + if (metadata.getAbstractFile() != null) { + Integer currentValue = fileNames.get(metadata.getAbstractFile().getName()); + currentValue = currentValue == null ? 1 : currentValue+1; + fileNames.put(metadata.getAbstractFile().getName(), currentValue); } this.fileInstances.add(metadata); } From 9c8aaeca4adc7c2a576e85062613235f0cc04e83 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Tue, 19 Mar 2019 13:58:19 -0400 Subject: [PATCH 67/80] Fixed a bug in CASE-UCO report module initialization --- Core/src/org/sleuthkit/autopsy/core/layer.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/core/layer.xml b/Core/src/org/sleuthkit/autopsy/core/layer.xml index c25f37199e..02ea2b02cb 100644 --- a/Core/src/org/sleuthkit/autopsy/core/layer.xml +++ b/Core/src/org/sleuthkit/autopsy/core/layer.xml @@ -342,9 +342,9 @@ - + - + + @@ -289,7 +289,7 @@ - + From 81b2938fd36f6da7a9d42cc4b552077aeafcb582 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Thu, 21 Mar 2019 08:32:12 -0400 Subject: [PATCH 76/80] Revert "4841: RecentActivity not making progress on large image" --- .../recentactivity/Bundle.properties-MERGED | 2 - .../autopsy/recentactivity/Chrome.java | 4 +- .../recentactivity/ChromeCacheExtractor.java | 85 ++++++------------- 3 files changed, 26 insertions(+), 65 deletions(-) diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED index 8c51d5e2a6..d909db9e71 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED @@ -2,7 +2,6 @@ cannotBuildXmlParser=Unable to build XML parser: cannotLoadSEUQA=Unable to load Search Engine URL Query Analyzer settings file, SEUQAMappings.xml: cannotParseXml=Unable to parse XML file: ChromeCacheExtractor.moduleName=ChromeCacheExtractor -ChromeCacheExtractor.progressMsg={0}: Extracting cache entry {1} of {2} entries from {3} DataSourceUsage_AndroidMedia=Android Media Card DataSourceUsage_FlashDrive=Flash Drive # {0} - OS name @@ -135,7 +134,6 @@ Progress_Message_Analyze_Registry=Analyzing Registry Files Progress_Message_Analyze_Usage=Data Sources Usage Analysis Progress_Message_Chrome_AutoFill=Chrome Auto Fill Progress_Message_Chrome_Bookmarks=Chrome Bookmarks -Progress_Message_Chrome_Cache=Chrome Cache Progress_Message_Chrome_Cookies=Chrome Cookies Progress_Message_Chrome_Downloads=Chrome Downloads Progress_Message_Chrome_FormHistory=Chrome Form History diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java index 5006ee27b5..23a6f3ab22 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java @@ -93,7 +93,6 @@ class Chrome extends Extract { "Progress_Message_Chrome_FormHistory=Chrome Form History", "Progress_Message_Chrome_AutoFill=Chrome Auto Fill", "Progress_Message_Chrome_Logins=Chrome Logins", - "Progress_Message_Chrome_Cache=Chrome Cache", }) Chrome() { @@ -124,8 +123,7 @@ class Chrome extends Extract { progressBar.progress(Bundle.Progress_Message_Chrome_Downloads()); this.getDownload(); - progressBar.progress(Bundle.Progress_Message_Chrome_Cache()); - ChromeCacheExtractor chromeCacheExtractor = new ChromeCacheExtractor(dataSource, context, progressBar); + ChromeCacheExtractor chromeCacheExtractor = new ChromeCacheExtractor(dataSource, context); chromeCacheExtractor.getCaches(); } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java index c9ae1b674c..1f7eb0580e 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java @@ -44,7 +44,6 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.casemodule.services.FileManager; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.ContentUtils; -import org.sleuthkit.autopsy.ingest.DataSourceIngestModuleProgress; import org.sleuthkit.autopsy.ingest.IngestJobContext; import org.sleuthkit.autopsy.ingest.IngestModule.IngestModuleException; import org.sleuthkit.autopsy.ingest.IngestServices; @@ -56,6 +55,7 @@ import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.DerivedFile; +import org.sleuthkit.datamodel.ReadContentInputStream; import org.sleuthkit.datamodel.TimeUtilities; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; @@ -93,17 +93,12 @@ final class ChromeCacheExtractor { private final Content dataSource; private final IngestJobContext context; - private final DataSourceIngestModuleProgress progressBar; private final IngestServices services = IngestServices.getInstance(); private Case currentCase; private FileManager fileManager; - // A file table to cache copies of index and data_n files. private final Map filesTable = new HashMap<>(); - // A file table to cache the f_* files. - private final Map externalFilesTable = new HashMap<>(); - /** * Encapsulates abstract file for a cache file as well as a temp file copy * that can be accessed as a random access file. @@ -132,14 +127,12 @@ final class ChromeCacheExtractor { } @NbBundle.Messages({ - "ChromeCacheExtractor.moduleName=ChromeCacheExtractor", - "ChromeCacheExtractor.progressMsg={0}: Extracting cache entry {1} of {2} entries from {3}" + "ChromeCacheExtractor.moduleName=ChromeCacheExtractor" }) - ChromeCacheExtractor(Content dataSource, IngestJobContext context, DataSourceIngestModuleProgress progressBar ) { + ChromeCacheExtractor(Content dataSource, IngestJobContext context ) { moduleName = Bundle.ChromeCacheExtractor_moduleName(); this.dataSource = dataSource; this.context = context; - this.progressBar = progressBar; } @@ -178,7 +171,6 @@ final class ChromeCacheExtractor { void subInit(String cachePath) throws IngestModuleException { filesTable.clear(); - externalFilesTable.clear(); String cacheAbsOutputFolderName = this.getAbsOutputFolderName() + cachePath; File outDir = new File(cacheAbsOutputFolderName); @@ -292,9 +284,6 @@ final class ChromeCacheExtractor { return; } } - - // find all f_* files in a single query. - findExternalFiles(cachePath); } catch (TskCoreException | IngestModuleException ex) { String msg = "Failed to find cache files in path " + cachePath; //NON-NLS @@ -317,10 +306,8 @@ final class ChromeCacheExtractor { // Process each address in the table for (int i = 0; i < indexHdr.getTableLen(); i++) { CacheAddress addr = new CacheAddress(indexFileROBuffer.getInt() & UINT32_MASK, cachePath); + if (addr.isInitialized()) { - progressBar.progress( NbBundle.getMessage(this.getClass(), - "ChromeCacheExtractor.progressMsg", - moduleName, i, indexHdr.getTableLen(), cachePath) ); try { List addedFiles = this.getCacheEntry(addr, sourceArtifacts, webCacheArtifacts); derivedFiles.addAll(addedFiles); @@ -425,10 +412,13 @@ final class ChromeCacheExtractor { moduleName, dataFile.get().getUniquePath())); - webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, - moduleName, dataFile.get().getId())); + long pathID = Util.findID(dataSource, dataFile.get().getUniquePath()); + if (pathID != -1) { + webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, + moduleName, pathID)); + } - webCacheArtifacts.add(webCacheArtifact); + webCacheArtifacts.add(webCacheArtifact); } if (isBrotliCompressed) { @@ -469,10 +459,12 @@ final class ChromeCacheExtractor { webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH, moduleName, derivedFile.getUniquePath())); - - webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, - moduleName, derivedFile.getId())); - + long pathID = Util.findID(dataSource, derivedFile.getUniquePath()); + if (pathID != -1) { + webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, + moduleName, pathID)); + } + webCacheArtifacts.add(webCacheArtifact); } @@ -493,37 +485,13 @@ final class ChromeCacheExtractor { } /** - * Finds all the f_* files in the specified path, and fills them in the - * effFilesTable, so that subsequent searches are fast. - * - * @param cachePath path under which to look for. - * - * @throws TskCoreException - */ - private void findExternalFiles(String cachePath) throws TskCoreException { - - List effFiles = fileManager.findFiles(dataSource, "f_%", cachePath); //NON-NLS - for (AbstractFile abstractFile : effFiles ) { - this.externalFilesTable.put(cachePath + abstractFile.getName(), abstractFile); - } - } - /** - * Finds abstract file for cache file with a specified name. - * First checks in the file tables. + * Finds abstract file for cache file with a specified name * * @param cacheFileName - * @return Optional abstract file + * @return Opt * @throws TskCoreException */ Optional findCacheFile(String cacheFileName, String cachePath) throws TskCoreException { - - String fileTableKey = cachePath + cacheFileName; - if (cacheFileName.startsWith("f_") && externalFilesTable.containsKey(fileTableKey)) { - return Optional.of(externalFilesTable.get(fileTableKey)); - } - if (filesTable.containsKey(fileTableKey)) { - return Optional.of(filesTable.get(fileTableKey).getAbstractFile()); - } List cacheFiles = fileManager.findFiles(dataSource, cacheFileName, cachePath); //NON-NLS if (!cacheFiles.isEmpty()) { @@ -946,11 +914,9 @@ final class ChromeCacheExtractor { return; } - // Don't extract data from external files. + cacheFileCopy = getCacheFileCopy(address.getFilename(), address.getCachePath()).get(); if (!address.isInExternalFile() ) { - cacheFileCopy = getCacheFileCopy(address.getFilename(), address.getCachePath()).get(); - this.data = new byte [length]; ByteBuffer buf = cacheFileCopy.getByteBuffer(); int dataOffset = DATAFILE_HDR_SIZE + address.getStartBlock() * address.getBlockSize(); @@ -986,8 +952,8 @@ final class ChromeCacheExtractor { i++; } - // http headers are terminated by 0x00 0x00 - if (i == data.length || data[i+1] == 0) { + // hhtp headers are terminated by 0x00 0x00 + if (data[i+1] == 0) { done = true; } @@ -999,11 +965,10 @@ final class ChromeCacheExtractor { httpResponse = headerLine; } else { int nPos = headerLine.indexOf(':'); - if (nPos > 0 ) { - String key = headerLine.substring(0, nPos); - String val= headerLine.substring(nPos+1); - httpHeaders.put(key.toLowerCase(), val); - } + String key = headerLine.substring(0, nPos); + String val= headerLine.substring(nPos+1); + + httpHeaders.put(key.toLowerCase(), val); } i++; From 4947c739bc3073e01628485078151fda0b82f5e7 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Thu, 21 Mar 2019 11:51:54 -0400 Subject: [PATCH 77/80] Revert "Revert "4841: RecentActivity not making progress on large image"" --- .../recentactivity/Bundle.properties-MERGED | 2 + .../autopsy/recentactivity/Chrome.java | 4 +- .../recentactivity/ChromeCacheExtractor.java | 85 +++++++++++++------ 3 files changed, 65 insertions(+), 26 deletions(-) diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED index d909db9e71..8c51d5e2a6 100755 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties-MERGED @@ -2,6 +2,7 @@ cannotBuildXmlParser=Unable to build XML parser: cannotLoadSEUQA=Unable to load Search Engine URL Query Analyzer settings file, SEUQAMappings.xml: cannotParseXml=Unable to parse XML file: ChromeCacheExtractor.moduleName=ChromeCacheExtractor +ChromeCacheExtractor.progressMsg={0}: Extracting cache entry {1} of {2} entries from {3} DataSourceUsage_AndroidMedia=Android Media Card DataSourceUsage_FlashDrive=Flash Drive # {0} - OS name @@ -134,6 +135,7 @@ Progress_Message_Analyze_Registry=Analyzing Registry Files Progress_Message_Analyze_Usage=Data Sources Usage Analysis Progress_Message_Chrome_AutoFill=Chrome Auto Fill Progress_Message_Chrome_Bookmarks=Chrome Bookmarks +Progress_Message_Chrome_Cache=Chrome Cache Progress_Message_Chrome_Cookies=Chrome Cookies Progress_Message_Chrome_Downloads=Chrome Downloads Progress_Message_Chrome_FormHistory=Chrome Form History diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java index 23a6f3ab22..5006ee27b5 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Chrome.java @@ -93,6 +93,7 @@ class Chrome extends Extract { "Progress_Message_Chrome_FormHistory=Chrome Form History", "Progress_Message_Chrome_AutoFill=Chrome Auto Fill", "Progress_Message_Chrome_Logins=Chrome Logins", + "Progress_Message_Chrome_Cache=Chrome Cache", }) Chrome() { @@ -123,7 +124,8 @@ class Chrome extends Extract { progressBar.progress(Bundle.Progress_Message_Chrome_Downloads()); this.getDownload(); - ChromeCacheExtractor chromeCacheExtractor = new ChromeCacheExtractor(dataSource, context); + progressBar.progress(Bundle.Progress_Message_Chrome_Cache()); + ChromeCacheExtractor chromeCacheExtractor = new ChromeCacheExtractor(dataSource, context, progressBar); chromeCacheExtractor.getCaches(); } diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java index 1f7eb0580e..c9ae1b674c 100644 --- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java +++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ChromeCacheExtractor.java @@ -44,6 +44,7 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.casemodule.services.FileManager; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.ContentUtils; +import org.sleuthkit.autopsy.ingest.DataSourceIngestModuleProgress; import org.sleuthkit.autopsy.ingest.IngestJobContext; import org.sleuthkit.autopsy.ingest.IngestModule.IngestModuleException; import org.sleuthkit.autopsy.ingest.IngestServices; @@ -55,7 +56,6 @@ import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.DerivedFile; -import org.sleuthkit.datamodel.ReadContentInputStream; import org.sleuthkit.datamodel.TimeUtilities; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; @@ -93,12 +93,17 @@ final class ChromeCacheExtractor { private final Content dataSource; private final IngestJobContext context; + private final DataSourceIngestModuleProgress progressBar; private final IngestServices services = IngestServices.getInstance(); private Case currentCase; private FileManager fileManager; + // A file table to cache copies of index and data_n files. private final Map filesTable = new HashMap<>(); + // A file table to cache the f_* files. + private final Map externalFilesTable = new HashMap<>(); + /** * Encapsulates abstract file for a cache file as well as a temp file copy * that can be accessed as a random access file. @@ -127,12 +132,14 @@ final class ChromeCacheExtractor { } @NbBundle.Messages({ - "ChromeCacheExtractor.moduleName=ChromeCacheExtractor" + "ChromeCacheExtractor.moduleName=ChromeCacheExtractor", + "ChromeCacheExtractor.progressMsg={0}: Extracting cache entry {1} of {2} entries from {3}" }) - ChromeCacheExtractor(Content dataSource, IngestJobContext context ) { + ChromeCacheExtractor(Content dataSource, IngestJobContext context, DataSourceIngestModuleProgress progressBar ) { moduleName = Bundle.ChromeCacheExtractor_moduleName(); this.dataSource = dataSource; this.context = context; + this.progressBar = progressBar; } @@ -171,6 +178,7 @@ final class ChromeCacheExtractor { void subInit(String cachePath) throws IngestModuleException { filesTable.clear(); + externalFilesTable.clear(); String cacheAbsOutputFolderName = this.getAbsOutputFolderName() + cachePath; File outDir = new File(cacheAbsOutputFolderName); @@ -284,6 +292,9 @@ final class ChromeCacheExtractor { return; } } + + // find all f_* files in a single query. + findExternalFiles(cachePath); } catch (TskCoreException | IngestModuleException ex) { String msg = "Failed to find cache files in path " + cachePath; //NON-NLS @@ -306,8 +317,10 @@ final class ChromeCacheExtractor { // Process each address in the table for (int i = 0; i < indexHdr.getTableLen(); i++) { CacheAddress addr = new CacheAddress(indexFileROBuffer.getInt() & UINT32_MASK, cachePath); - if (addr.isInitialized()) { + progressBar.progress( NbBundle.getMessage(this.getClass(), + "ChromeCacheExtractor.progressMsg", + moduleName, i, indexHdr.getTableLen(), cachePath) ); try { List addedFiles = this.getCacheEntry(addr, sourceArtifacts, webCacheArtifacts); derivedFiles.addAll(addedFiles); @@ -412,13 +425,10 @@ final class ChromeCacheExtractor { moduleName, dataFile.get().getUniquePath())); - long pathID = Util.findID(dataSource, dataFile.get().getUniquePath()); - if (pathID != -1) { - webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, - moduleName, pathID)); - } + webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, + moduleName, dataFile.get().getId())); - webCacheArtifacts.add(webCacheArtifact); + webCacheArtifacts.add(webCacheArtifact); } if (isBrotliCompressed) { @@ -459,12 +469,10 @@ final class ChromeCacheExtractor { webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH, moduleName, derivedFile.getUniquePath())); - long pathID = Util.findID(dataSource, derivedFile.getUniquePath()); - if (pathID != -1) { - webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, - moduleName, pathID)); - } - + + webCacheArtifact.addAttribute(new BlackboardAttribute(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID, + moduleName, derivedFile.getId())); + webCacheArtifacts.add(webCacheArtifact); } @@ -485,13 +493,37 @@ final class ChromeCacheExtractor { } /** - * Finds abstract file for cache file with a specified name + * Finds all the f_* files in the specified path, and fills them in the + * effFilesTable, so that subsequent searches are fast. + * + * @param cachePath path under which to look for. + * + * @throws TskCoreException + */ + private void findExternalFiles(String cachePath) throws TskCoreException { + + List effFiles = fileManager.findFiles(dataSource, "f_%", cachePath); //NON-NLS + for (AbstractFile abstractFile : effFiles ) { + this.externalFilesTable.put(cachePath + abstractFile.getName(), abstractFile); + } + } + /** + * Finds abstract file for cache file with a specified name. + * First checks in the file tables. * * @param cacheFileName - * @return Opt + * @return Optional abstract file * @throws TskCoreException */ Optional findCacheFile(String cacheFileName, String cachePath) throws TskCoreException { + + String fileTableKey = cachePath + cacheFileName; + if (cacheFileName.startsWith("f_") && externalFilesTable.containsKey(fileTableKey)) { + return Optional.of(externalFilesTable.get(fileTableKey)); + } + if (filesTable.containsKey(fileTableKey)) { + return Optional.of(filesTable.get(fileTableKey).getAbstractFile()); + } List cacheFiles = fileManager.findFiles(dataSource, cacheFileName, cachePath); //NON-NLS if (!cacheFiles.isEmpty()) { @@ -914,9 +946,11 @@ final class ChromeCacheExtractor { return; } - cacheFileCopy = getCacheFileCopy(address.getFilename(), address.getCachePath()).get(); + // Don't extract data from external files. if (!address.isInExternalFile() ) { + cacheFileCopy = getCacheFileCopy(address.getFilename(), address.getCachePath()).get(); + this.data = new byte [length]; ByteBuffer buf = cacheFileCopy.getByteBuffer(); int dataOffset = DATAFILE_HDR_SIZE + address.getStartBlock() * address.getBlockSize(); @@ -952,8 +986,8 @@ final class ChromeCacheExtractor { i++; } - // hhtp headers are terminated by 0x00 0x00 - if (data[i+1] == 0) { + // http headers are terminated by 0x00 0x00 + if (i == data.length || data[i+1] == 0) { done = true; } @@ -965,10 +999,11 @@ final class ChromeCacheExtractor { httpResponse = headerLine; } else { int nPos = headerLine.indexOf(':'); - String key = headerLine.substring(0, nPos); - String val= headerLine.substring(nPos+1); - - httpHeaders.put(key.toLowerCase(), val); + if (nPos > 0 ) { + String key = headerLine.substring(0, nPos); + String val= headerLine.substring(nPos+1); + httpHeaders.put(key.toLowerCase(), val); + } } i++; From e61f372720870be10f4283954d5146fd636715b6 Mon Sep 17 00:00:00 2001 From: Ann Priestman Date: Thu, 21 Mar 2019 13:21:19 -0400 Subject: [PATCH 78/80] Clear out the artifact caches and set the case to null. --- .../sleuthkit/autopsy/report/CreatePortableCaseModule.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java index 3ce5c3a369..b0db1d0b46 100644 --- a/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java +++ b/Core/src/org/sleuthkit/autopsy/report/CreatePortableCaseModule.java @@ -708,14 +708,18 @@ public class CreatePortableCaseModule implements GeneralReportModule { oldIdToNewContent.clear(); newIdToContent.clear(); oldTagNameToNewTagName.clear(); + oldArtTypeIdToNewArtTypeId.clear(); + oldAttrTypeIdToNewAttrType.clear(); + oldArtifactIdToNewArtifact.clear(); + currentCase = null; if (portableSkCase != null) { portableSkCase.close(); + portableSkCase = null; } caseFolder = null; copiedFilesFolder = null; } - @Override public JPanel getConfigurationPanel() { From 92a8190056bf3adb7d5d32b4bca01c0f9fd417f8 Mon Sep 17 00:00:00 2001 From: Brian Carrier Date: Thu, 21 Mar 2019 16:16:31 -0400 Subject: [PATCH 79/80] reduce pmd warnings --- ruleset.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruleset.xml b/ruleset.xml index 3d08ec338c..1db2da660a 100644 --- a/ruleset.xml +++ b/ruleset.xml @@ -94,7 +94,7 @@ --> - + - +