From 609e8b5199973bb0ce5ffeb3374b5bfd45af3e7a Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Tue, 13 Mar 2018 14:04:53 +0100 Subject: [PATCH 01/35] Fix build issues due to missing dependences --- logisland-assembly/pom.xml | 4 ---- logisland-documentation/pom.xml | 4 ---- logisland-plugins/logisland-common-processors-plugin/pom.xml | 5 ----- logisland-plugins/logisland-web-analytics-plugin/pom.xml | 5 ----- 4 files changed, 18 deletions(-) diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index 98add1c11..996478873 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -155,10 +155,6 @@ logisland-documentation - - com.hurence.logisland - logisland-elasticsearch_2_3_3-client-service - com.hurence.logisland logisland-elasticsearch_2_4_0-client-service diff --git a/logisland-documentation/pom.xml b/logisland-documentation/pom.xml index 601f6ce33..cd4a61b00 100644 --- a/logisland-documentation/pom.xml +++ b/logisland-documentation/pom.xml @@ -88,10 +88,6 @@ com.hurence.logisland logisland-elasticsearch-plugin - - - com.hurence.logisland - logisland-elasticsearch_2_3_3-client-service com.hurence.logisland diff --git a/logisland-plugins/logisland-common-processors-plugin/pom.xml b/logisland-plugins/logisland-common-processors-plugin/pom.xml index d91d3a5d3..67fcdb797 100644 --- a/logisland-plugins/logisland-common-processors-plugin/pom.xml +++ b/logisland-plugins/logisland-common-processors-plugin/pom.xml @@ -77,11 +77,6 @@ com.google.guava guava - - com.hurence.logisland - logisland-cache-service-api - 0.10.3 - com.hurence.logisland logisland-elasticsearch-plugin diff --git a/logisland-plugins/logisland-web-analytics-plugin/pom.xml b/logisland-plugins/logisland-web-analytics-plugin/pom.xml index fac978cd8..367047ee6 100644 --- a/logisland-plugins/logisland-web-analytics-plugin/pom.xml +++ b/logisland-plugins/logisland-web-analytics-plugin/pom.xml @@ -55,11 +55,6 @@ com.hurence.logisland logisland-elasticsearch-plugin - - com.hurence.logisland - logisland-cache-service-api - 0.10.3 - com.hurence.logisland logisland-elasticsearch_2_4_0-client-service From 51ba9ef2db8d10a9ddedd71b91e35e2eb943cf7c Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Thu, 15 Mar 2018 10:24:20 +0100 Subject: [PATCH 02/35] LOGISLAND-369: Add excel extractor plugin and documentation --- logisland-assembly/pom.xml | 4 + .../_static/kibana-excel-logs.png | Bin 0 -> 480140 bytes .../tutorials/index-excel-spreadsheet.rst | 192 +++++++++++++++ .../main/resources/conf/Financial Sample.xlsx | Bin 0 -> 83418 bytes .../conf/index-excel-spreadsheet.yml | 94 ++++++++ .../docs/_static/kibana-excel-logs.png | Bin 0 -> 480140 bytes .../tutorials/index-excel-spreadsheet.rst | 192 +++++++++++++++ .../logisland/util/stream/io/StreamUtils.java | 60 +++-- .../logisland-excel-plugin/pom.xml | 65 +++++ .../processor/excel/ExcelExtractorPlugin.java | 227 ++++++++++++++++++ .../excel/ExcelExtractorProperties.java | 197 +++++++++++++++ .../logisland/processor/excel/Fields.java | 67 ++++++ .../excel/ExcelExtractorPluginTest.java | 96 ++++++++ .../src/test/resources/Financial Sample.xlsx | Bin 0 -> 83418 bytes .../src/test/resources/log4j.properties | 37 +++ logisland-plugins/pom.xml | 1 + .../ElasticsearchRecordConverter.java | 2 +- pom.xml | 5 + 18 files changed, 1222 insertions(+), 17 deletions(-) create mode 100644 logisland-documentation/_static/kibana-excel-logs.png create mode 100644 logisland-documentation/tutorials/index-excel-spreadsheet.rst create mode 100644 logisland-framework/logisland-resources/src/main/resources/conf/Financial Sample.xlsx create mode 100644 logisland-framework/logisland-resources/src/main/resources/conf/index-excel-spreadsheet.yml create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/_static/kibana-excel-logs.png create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst create mode 100644 logisland-plugins/logisland-excel-plugin/pom.xml create mode 100644 logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorPlugin.java create mode 100644 logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorProperties.java create mode 100644 logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java create mode 100644 logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractorPluginTest.java create mode 100644 logisland-plugins/logisland-excel-plugin/src/test/resources/Financial Sample.xlsx create mode 100644 logisland-plugins/logisland-excel-plugin/src/test/resources/log4j.properties diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index 996478873..8ac5d3d99 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -175,6 +175,10 @@ com.hurence.logisland logisland-solr_6_4_2-chronix-client-service + + com.hurence.logisland + logisland-excel-plugin + + + 4.0.0 + + + com.hurence.logisland + logisland-plugins + 0.11.0 + + + logisland-excel-plugin + jar + + + 3.17 + + + + + com.hurence.logisland + logisland-api + + + com.hurence.logisland + logisland-utils + + + org.apache.poi + poi + ${poi.version} + + + org.apache.poi + poi-ooxml + ${poi.version} + + + org.slf4j + slf4j-simple + test + + + junit + junit + test + + + diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorPlugin.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorPlugin.java new file mode 100644 index 000000000..11af404f8 --- /dev/null +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorPlugin.java @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.processor.excel; + +import com.hurence.logisland.annotation.documentation.CapabilityDescription; +import com.hurence.logisland.annotation.documentation.Tags; +import com.hurence.logisland.component.PropertyDescriptor; +import com.hurence.logisland.processor.AbstractProcessor; +import com.hurence.logisland.processor.ProcessContext; +import com.hurence.logisland.record.*; +import org.apache.commons.io.IOUtils; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException; +import org.apache.poi.ss.usermodel.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Consumes a Microsoft Excel document and converts each spreadsheet row to a {@link Record}. + */ +@Tags({"excel", "processor", "poi"}) +@CapabilityDescription("Consumes a Microsoft Excel document and converts each worksheet's line to a structured " + + "record. The processor is assuming to receive raw excel file as input record.") +public class ExcelExtractorPlugin extends AbstractProcessor { + + private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExtractorProperties.class); + + /** + * The configuration. + */ + private ExcelExtractorProperties.Configuration configuration; + + + @Override + public void init(ProcessContext context) { + super.init(context); + configuration = new ExcelExtractorProperties.Configuration(context); + LOGGER.info("ExcelExtractorPlugin successfully initialized"); + } + + @Override + public List getSupportedPropertyDescriptors() { + final List descriptors = new ArrayList<>(); + descriptors.add(ExcelExtractorProperties.DESIRED_SHEETS); + descriptors.add(ExcelExtractorProperties.COLUMNS_TO_SKIP); + descriptors.add(ExcelExtractorProperties.FIELD_NAMES); + descriptors.add(ExcelExtractorProperties.ROWS_TO_SKIP); + descriptors.add(ExcelExtractorProperties.RECORD_TYPE); + return Collections.unmodifiableList(descriptors); + } + + @Override + public Collection process(ProcessContext context, Collection records) { + final Collection ret = new ArrayList<>(); + for (Record record : records) { + //Extract source input stream + InputStream is = extractRawContent(record); + //process + ret.addAll(handleExcelStream(is) + //enrich + .map(current -> enrichWithMetadata(current, record)) + //collect and add to global results + .collect(Collectors.toList())); + } + return ret; + } + + + private final Record enrichWithMetadata(Record current, Record source) { + if (source.hasField(Fields.SOURCE_FILE_NAME)) { + current.setField(source.getField(Fields.SOURCE_FILE_NAME)); + } + current.setField(Fields.recordType(configuration.getRecordType())); + return current; + } + + + /** + * Extract the raw byte XLS content from the input record. + * + * @param record + * @return A byte array inputstream (never null). + * @throws IllegalStateException in case of malformed record. + */ + private InputStream extractRawContent(Record record) { + if (!record.hasField(FieldDictionary.RECORD_VALUE)) { + throw new IllegalStateException("Received a record not carrying information on field " + FieldDictionary.RECORD_VALUE); + } + Field field = record.getField(FieldDictionary.RECORD_VALUE); + if (field == null || !FieldType.BYTES.equals(field.getType())) { + throw new IllegalStateException("Unexpected content received. We expect to handle field content with raw byte data."); + } + return new ByteArrayInputStream((byte[]) field.getRawValue()); + } + + /** + * Extract every matching sheet from the raw excel input stream. + * + * @param inputStream an inputstream that will be closed once consumed. + * @return a stream of {@link Record} each containing the stream raw data. + */ + private Stream handleExcelStream(InputStream inputStream) { + List ret = new ArrayList<>(); + try { + try (Workbook workbook = WorkbookFactory.create(inputStream)) { + Iterator iter = workbook.sheetIterator(); + while (iter.hasNext()) { + try { + Sheet sheet = iter.next(); + String sheetName = sheet.getSheetName(); + if (toBeSkipped(sheetName)) { + LOGGER.info("Skipped sheet {}", sheetName); + continue; + } + LOGGER.info("Extracting sheet {}", sheetName); + int count = 0; + for (Row row : sheet) { + if (row == null) { + continue; + } + if (count++ < configuration.getRowsToSkip()) { + continue; + } + ret.add(handleRow(row)); + } + + } catch (Exception e) { + LOGGER.error("Unrecoverable exception occurred while processing excel sheet", e); + } + } + } + } catch (InvalidFormatException | NotOfficeXmlFileException ife) { + throw new UnsupportedOperationException("Wrong or unsupported file format.", ife); + } catch (IOException ioe) { + LOGGER.error("I/O Exception occurred while processing excel file", ioe); + + } finally { + IOUtils.closeQuietly(inputStream); + } + return ret.stream(); + } + + + /** + * Handle row content and transform it into a {@link Record} + * + * @param row the {@link Row} + * @return the transformed {@link Record} + */ + private Record handleRow(Row row) { + Record ret = new StandardRecord().setTime(new Date()); + int index = 0; + for (Cell cell : row) { + if (configuration.getColumnsToSkip().contains(cell.getColumnIndex()) || index >= configuration.getFieldNames().size()) { + //skip this cell. + continue; + } + String fieldName = configuration.getFieldNames().get(index++); + Field field; + // Alternatively, get the value and format it yourself + switch (cell.getCellTypeEnum()) { + case STRING: + field = new Field(fieldName, FieldType.STRING, cell.getStringCellValue()); + break; + case NUMERIC: + if (DateUtil.isCellDateFormatted(cell)) { + field = new Field(fieldName, FieldType.LONG, cell.getDateCellValue().getTime()); + } else { + field = new Field(fieldName, FieldType.DOUBLE, cell.getNumericCellValue()); + } + break; + case BOOLEAN: + field = new Field(fieldName, FieldType.BOOLEAN, cell.getBooleanCellValue()); + break; + case FORMULA: + field = new Field(fieldName, FieldType.STRING, cell.getCellFormula()); + break; + default: + //blank or unknown + field = new Field(fieldName, FieldType.NULL, null); + break; + } + ret.setField(field); + } + return ret; + } + + + /** + * Looks if a sheet should be extracted or not according to the configuration. + * + * @param sheet the name of the sheet + * @return true if the current sheet has to be skipped. False otherwise. + */ + private boolean toBeSkipped(String sheet) { + for (Pattern pattern : configuration.getSheetsToExtract()) { + if (pattern.matcher(sheet).matches()) { + return false; + } + } + return !configuration.getSheetsToExtract().isEmpty(); + } + + +} diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorProperties.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorProperties.java new file mode 100644 index 000000000..f7266633d --- /dev/null +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorProperties.java @@ -0,0 +1,197 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.processor.excel; + +import com.hurence.logisland.component.PropertyDescriptor; +import com.hurence.logisland.processor.ProcessContext; +import com.hurence.logisland.validator.StandardValidators; +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * Common options for {@link ExcelExtractorPlugin} processor. + */ +public class ExcelExtractorProperties { + + public static final PropertyDescriptor RECORD_TYPE = new PropertyDescriptor.Builder() + .name("record.type") + .description("Default type of record") + .required(false) + .defaultValue("excel_record") + .build(); + + public static final PropertyDescriptor DESIRED_SHEETS = new PropertyDescriptor + .Builder().name("excel.extract.sheets") + .displayName("Sheets to Extract") + .description("Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property" + + " is left blank then all of the sheets will be extracted from the Excel document. You can specify regular expressions." + + " Any sheets not specified in this value will be ignored.") + .required(false) + .defaultValue("") + .addValidator(StandardValidators.COMMA_SEPARATED_LIST_VALIDATOR) + .build(); + + /** + * The number of rows to skip. Useful if you want to skip first row (usually the table header). + */ + public static final PropertyDescriptor ROWS_TO_SKIP = new PropertyDescriptor + .Builder().name("excel.extract.skip-rows") + .displayName("Number of Rows to Skip") + .description("The row number of the first row to start processing." + + "Use this to skip over rows of data at the top of your worksheet that are not part of the dataset." + + "Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.") + .required(false) + .defaultValue("0") + .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) + .build(); + + /** + * List of column numbers to skip. Empty means include anything. + */ + public static final PropertyDescriptor COLUMNS_TO_SKIP = new PropertyDescriptor + .Builder().name("excel.extract.columns-to-skip") + .displayName("Columns To Skip") + .description("Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. " + + "Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.") + .required(false) + .defaultValue("") + .addValidator(StandardValidators.COMMA_SEPARATED_LIST_VALIDATOR) + .build(); + + + /** + * Mapping between column extracted and field names in a record. + */ + public static final PropertyDescriptor FIELD_NAMES = new PropertyDescriptor + .Builder().name("excel.extract.field-names") + .displayName("Field names mapping") + .description("The comma separated list representing the names of columns of extracted cells. Order matters!") + .required(true) + .addValidator(StandardValidators.COMMA_SEPARATED_LIST_VALIDATOR) + .build(); + + public static class Configuration { + + /** + * The list of patterns matching sheets to extract. Empty means everything. + */ + private final List sheetsToExtract; + /** + * List of column numbers to skip. Empty means include anything. + */ + private final List columnsToSkip; + /** + * The number of rows to skip. Useful if you want to skip first row (usually the table header). + */ + private final int rowsToSkip; + + /** + * The prefix to use when defining fields' name in output records. + */ + private final List fieldNames; + + /** + * The record type. + */ + private final String recordType; + + + /** + * Creates a configuration POJO from the {@link ProcessContext} + * + * @param context the current context. + */ + public Configuration(ProcessContext context) { + sheetsToExtract = Arrays.stream(context.getPropertyValue(DESIRED_SHEETS).asString().split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Pattern::compile) + .collect(Collectors.toList()); + columnsToSkip = Arrays.stream(context.getPropertyValue(COLUMNS_TO_SKIP).asString().split(",")) + .filter(StringUtils::isNotBlank) + .map(Integer::parseInt) + .collect(Collectors.toList()); + rowsToSkip = context.getPropertyValue(ROWS_TO_SKIP).asInteger(); + fieldNames = Arrays.stream(context.getPropertyValue(FIELD_NAMES).asString().split(",")) + .filter(StringUtils::isNotBlank) + .map(String::trim) + .collect(Collectors.toList()); + recordType = context.getPropertyValue(RECORD_TYPE).asString(); + } + + + /** + * The list of patterns matching sheet to extract. Empty means everything. + * + * @return a never null list. + */ + public List getSheetsToExtract() { + return sheetsToExtract; + } + + + /** + * List of column numbers to skip. Empty means include anything. + * + * @return a never null {@link List} + */ + public List getColumnsToSkip() { + return columnsToSkip; + } + + /** + * The number of rows to skip. Useful if you want to skip first row (usually the table header). + * + * @return + */ + public int getRowsToSkip() { + return rowsToSkip; + } + + public List getFieldNames() { + return fieldNames; + } + + /** + * The record type. + * + * @return + */ + public String getRecordType() { + return recordType; + } + + + @Override + public String toString() { + return "Configuration{" + + "sheetsToExtract=" + sheetsToExtract + + ", columnsToSkip=" + columnsToSkip + + ", rowsToSkip=" + rowsToSkip + + ", fieldNames=" + fieldNames + + ", recordType='" + recordType + '\'' + + '}'; + } + } + +} diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java new file mode 100644 index 000000000..ee7cc9d7d --- /dev/null +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.processor.excel; + +import com.hurence.logisland.record.Field; +import com.hurence.logisland.record.FieldDictionary; +import com.hurence.logisland.record.FieldType; + +/** + * Incapsulated field used by record of this processor. + */ +public class Fields { + + public static final String SPREADSHEET_NAME = "spreadsheet_name"; + public static final String SOURCE_FILE_NAME = "source_file_name"; + public static final String RAW_FILE_DATA = FieldDictionary.RECORD_VALUE; + public static final String ROW_NUMBER = "row_number"; + public static final String RECORD_TYPE = FieldDictionary.RECORD_TYPE; + + /** + * Creates a field for the spreadsheet name. + * + * @param name + * @return + */ + public static Field spreadSheetName(String name) { + return new Field(SPREADSHEET_NAME, FieldType.STRING, name); + } + + + /** + * Creates a field for the extract record row number. + * + * @param number + * @return + */ + public static Field rowNumber(long number) { + return new Field(ROW_NUMBER, FieldType.LONG, number); + } + + /** + * Creates a field for the record type. + * + * @param recordType + * @return + */ + public static Field recordType(String recordType) { + return new Field(RECORD_TYPE, FieldType.STRING, recordType); + } + + +} diff --git a/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractorPluginTest.java b/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractorPluginTest.java new file mode 100644 index 000000000..4a1aaec45 --- /dev/null +++ b/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractorPluginTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.processor.excel; + +import com.hurence.logisland.record.FieldDictionary; +import com.hurence.logisland.record.FieldType; +import com.hurence.logisland.util.runner.MockRecord; +import com.hurence.logisland.util.runner.TestRunner; +import com.hurence.logisland.util.runner.TestRunners; +import org.apache.commons.io.IOUtils; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collection; + +public class ExcelExtractorPluginTest { + + private byte[] resolveClassPathResource(String name) throws IOException { + try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(name)) { + return IOUtils.toByteArray(is); + } + } + + private TestRunner initTestRunner(TestRunner testRunner) { + testRunner.setProperty(ExcelExtractorProperties.FIELD_NAMES, "Product,Date"); + testRunner.setProperty(ExcelExtractorProperties.ROWS_TO_SKIP, "1"); + testRunner.setProperty(ExcelExtractorProperties.COLUMNS_TO_SKIP, "0,1,3,4,5,6,7,8,9,10,11"); + return testRunner; + } + + private void assertRecordValid(Collection records) { + records.forEach(record -> { + record.assertFieldExists("Product"); + record.assertFieldExists("Date"); + record.assertFieldTypeEquals("Product", FieldType.STRING); + record.assertFieldTypeEquals("Date", FieldType.LONG); + }); + } + + @Test(expected = UnsupportedOperationException.class) + public void testThrowsExceptionWhenFormatInvalid() throws Exception { + + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), + new String("I'm a fake excel file :)").getBytes("UTF-8")); + testRunner.run(); + } + + + @Test + public void testExtractAllSheets() throws Exception { + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), + resolveClassPathResource("Financial Sample.xlsx")); + testRunner.run(); + testRunner.assertOutputRecordsCount(700); + assertRecordValid(testRunner.getOutputRecords()); + } + + @Test + public void testExtractNothing() throws Exception { + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), + resolveClassPathResource("Financial Sample.xlsx")); + testRunner.setProperty(ExcelExtractorProperties.DESIRED_SHEETS, "Sheet2,Sheet3"); + testRunner.run(); + testRunner.assertOutputRecordsCount(0); + } + + @Test + public void testExtractSelected() throws Exception { + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), + resolveClassPathResource("Financial Sample.xlsx")); + testRunner.setProperty(ExcelExtractorProperties.DESIRED_SHEETS, "(?i)sheet.*"); + testRunner.run(); + testRunner.assertOutputRecordsCount(700); + assertRecordValid(testRunner.getOutputRecords()); + } +} \ No newline at end of file diff --git a/logisland-plugins/logisland-excel-plugin/src/test/resources/Financial Sample.xlsx b/logisland-plugins/logisland-excel-plugin/src/test/resources/Financial Sample.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f049f345b8373e33311725be7347059ae1b26887 GIT binary patch literal 83418 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%0AZu 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

xm>|k*JqqGlZMi>=y|{j_vgTBR6cL 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 literal 0 HcmV?d00001 diff --git a/logisland-plugins/logisland-excel-plugin/src/test/resources/log4j.properties b/logisland-plugins/logisland-excel-plugin/src/test/resources/log4j.properties new file mode 100644 index 000000000..6e15ede10 --- /dev/null +++ b/logisland-plugins/logisland-excel-plugin/src/test/resources/log4j.properties @@ -0,0 +1,37 @@ + +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# + +# Set everything to be logged to the console +log4j.rootCategory=WARN, console +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.target=System.err +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n + +#org.apache.zookeeper.server.ZooKeeperServer +log4j.logger.org.apache.spark=WARN +log4j.logger.org.apache.spark.scheduler=WARN +log4j.logger.org.apache.spark.history=WARN +log4j.logger.org.spark-project.jetty=WARN +log4j.logger.io.netty=WARN +log4j.logger.org.apache.zookeeper=WARN +log4j.logger.org.apache.hadoop.ipc.Client=WARN +log4j.logger.org.apache.hadoop=WARN +log4j.logger.org.apache.hadoop.ipc.ProtobufRpcEngine=WARN +log4j.logger.parquet.hadoop=WARN +log4j.logger.com.hurence=DEBUG \ No newline at end of file diff --git a/logisland-plugins/pom.xml b/logisland-plugins/pom.xml index cfe4d0ed1..5b176dbef 100644 --- a/logisland-plugins/pom.xml +++ b/logisland-plugins/pom.xml @@ -41,5 +41,6 @@ logisland-enrichment-plugin logisland-elasticsearch-plugin logisland-hbase-plugin + logisland-excel-plugin diff --git a/logisland-services/logisland-elasticsearch_5_4_0-client-service/src/main/java/com/hurence/logisland/service/elasticsearch/ElasticsearchRecordConverter.java b/logisland-services/logisland-elasticsearch_5_4_0-client-service/src/main/java/com/hurence/logisland/service/elasticsearch/ElasticsearchRecordConverter.java index 86eb9f628..1f0561c42 100644 --- a/logisland-services/logisland-elasticsearch_5_4_0-client-service/src/main/java/com/hurence/logisland/service/elasticsearch/ElasticsearchRecordConverter.java +++ b/logisland-services/logisland-elasticsearch_5_4_0-client-service/src/main/java/com/hurence/logisland/service/elasticsearch/ElasticsearchRecordConverter.java @@ -35,7 +35,7 @@ class ElasticsearchRecordConverter { /** * Converts an Event into an Elasticsearch document * to be indexed later - * + *e * @param record to convert * @return the json converted record */ diff --git a/pom.xml b/pom.xml index 3eae4907b..4120b2bde 100644 --- a/pom.xml +++ b/pom.xml @@ -756,6 +756,11 @@ logisland-solr_6_4_2-chronix-client-service ${project.version} + + com.hurence.logisland + logisland-excel-plugin + ${project.version} + com.hurence.logisland logisland-documentation From faf943d26a84506170c388d1091848b845689cff Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 16 Mar 2018 09:50:40 +0100 Subject: [PATCH 03/35] Renaming as per code review comments --- .../tutorials/index-excel-spreadsheet.rst | 12 +++++------ .../conf/index-excel-spreadsheet.yml | 6 +++--- .../tutorials/index-excel-spreadsheet.rst | 8 ++++---- ...ExtractorPlugin.java => ExcelExtract.java} | 20 +++++++++---------- ...rties.java => ExcelExtractProperties.java} | 13 ++++++------ ...rPluginTest.java => ExcelExtractTest.java} | 20 +++++++++---------- 6 files changed, 39 insertions(+), 40 deletions(-) rename logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/{ExcelExtractorPlugin.java => ExcelExtract.java} (93%) rename logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/{ExcelExtractorProperties.java => ExcelExtractProperties.java} (95%) rename logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/{ExcelExtractorPluginTest.java => ExcelExtractTest.java} (83%) diff --git a/logisland-documentation/tutorials/index-excel-spreadsheet.rst b/logisland-documentation/tutorials/index-excel-spreadsheet.rst index 7b46c35ef..be2a55ddb 100644 --- a/logisland-documentation/tutorials/index-excel-spreadsheet.rst +++ b/logisland-documentation/tutorials/index-excel-spreadsheet.rst @@ -98,19 +98,19 @@ We assume that the stream will be serializing the input file as a byte array in kafka.topic.default.partitions: 4 kafka.topic.default.replicationFactor: 1 -Within this stream, a ``ExcelExtractorPlugin`` processor takes a byte array excel file content and computes a list of ``Record``. +Within this stream, an ``ExcelExtract`` processor takes a byte array excel file content and computes a list of ``Record``. .. code-block:: yaml # parse excel cells into records - processor: excel_parser - component: com.hurence.logisland.processor.excel.ExcelExtractorPlugin + component: com.hurence.logisland.processor.excel.ExcelExtract type: parser documentation: a parser that produce events from an excel file configuration: record.type: excel_record - excel.extract.skip-rows: 1 - excel.extract.field-names: segment,country,product,discount_band,units_sold,manufacturing,sale_price,gross_sales,discounts,sales,cogs,profit,record_time,month_number,month_name,year + skip.rows: 1 + field.names: segment,country,product,discount_band,units_sold,manufacturing,sale_price,gross_sales,discounts,sales,cogs,profit,record_time,month_number,month_name,year This stream will process log entries as soon as they will be queued into `logisland_raw` Kafka topics, each log will @@ -120,7 +120,7 @@ be parsed as an event which will be pushed back to Kafka in the ``logisland_even Please note that we are mapping the excel column *Date* to be the timestamp of the produced record (*record_time* field) in order to use this as time reference in elasticsearch/kibana (see below). -The second processor will handle ``Records`` produced by the ``ExcelExtractorPlugin`` to index them into elasticsearch +The second processor will handle ``Records`` produced by the ``ExcelExtract`` to index them into elasticsearch .. code-block:: yaml @@ -140,7 +140,7 @@ The second processor will handle ``Records`` produced by the ``ExcelExtractorPl 2. Launch the script -------------------- -For this tutorial we will handle an excel file. We will process it with an ExcelExtractorPlugin that will produce a bunch of Records and we'll send them to Elastiscearch +For this tutorial we will handle an excel file. We will process it with an ExcelExtract that will produce a bunch of Records and we'll send them to Elastiscearch Connect a shell to your logisland container to launch the following streaming jobs. For ElasticSearch : diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/index-excel-spreadsheet.yml b/logisland-framework/logisland-resources/src/main/resources/conf/index-excel-spreadsheet.yml index 32c6a318a..c2841e872 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/index-excel-spreadsheet.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/index-excel-spreadsheet.yml @@ -72,13 +72,13 @@ engine: # parse excel cells into records - processor: excel_parser - component: com.hurence.logisland.processor.excel.ExcelExtractorPlugin + component: com.hurence.logisland.processor.excel.ExcelExtract type: parser documentation: a parser that produce events from an excel file configuration: record.type: excel_record - excel.extract.skip-rows: 1 - excel.extract.field-names: segment,country,product,discount_band,units_sold,manufacturing,sale_price,gross_sales,discounts,sales,cogs,profit,record_time,month_number,month_name,year + skip.rows: 1 + field.names: segment,country,product,discount_band,units_sold,manufacturing,sale_price,gross_sales,discounts,sales,cogs,profit,record_time,month_number,month_name,year # all the parsed records are added to elasticsearch by bulk - processor: es_publisher diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst index 7b46c35ef..a53aed48a 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst @@ -98,13 +98,13 @@ We assume that the stream will be serializing the input file as a byte array in kafka.topic.default.partitions: 4 kafka.topic.default.replicationFactor: 1 -Within this stream, a ``ExcelExtractorPlugin`` processor takes a byte array excel file content and computes a list of ``Record``. +Within this stream, an ``ExcelExtract`` processor takes a byte array excel file content and computes a list of ``Record``. .. code-block:: yaml # parse excel cells into records - processor: excel_parser - component: com.hurence.logisland.processor.excel.ExcelExtractorPlugin + component: com.hurence.logisland.processor.excel.ExcelExtract type: parser documentation: a parser that produce events from an excel file configuration: @@ -120,7 +120,7 @@ be parsed as an event which will be pushed back to Kafka in the ``logisland_even Please note that we are mapping the excel column *Date* to be the timestamp of the produced record (*record_time* field) in order to use this as time reference in elasticsearch/kibana (see below). -The second processor will handle ``Records`` produced by the ``ExcelExtractorPlugin`` to index them into elasticsearch +The second processor will handle ``Records`` produced by the ``ExcelExtract`` to index them into elasticsearch .. code-block:: yaml @@ -140,7 +140,7 @@ The second processor will handle ``Records`` produced by the ``ExcelExtractorPl 2. Launch the script -------------------- -For this tutorial we will handle an excel file. We will process it with an ExcelExtractorPlugin that will produce a bunch of Records and we'll send them to Elastiscearch +For this tutorial we will handle an excel file. We will process it with an ExcelExtract that will produce a bunch of Records and we'll send them to Elastiscearch Connect a shell to your logisland container to launch the following streaming jobs. For ElasticSearch : diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorPlugin.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtract.java similarity index 93% rename from logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorPlugin.java rename to logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtract.java index 11af404f8..216cff6ed 100644 --- a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorPlugin.java +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtract.java @@ -43,31 +43,31 @@ @Tags({"excel", "processor", "poi"}) @CapabilityDescription("Consumes a Microsoft Excel document and converts each worksheet's line to a structured " + "record. The processor is assuming to receive raw excel file as input record.") -public class ExcelExtractorPlugin extends AbstractProcessor { +public class ExcelExtract extends AbstractProcessor { - private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExtractorProperties.class); + private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExtractProperties.class); /** * The configuration. */ - private ExcelExtractorProperties.Configuration configuration; + private ExcelExtractProperties.Configuration configuration; @Override public void init(ProcessContext context) { super.init(context); - configuration = new ExcelExtractorProperties.Configuration(context); - LOGGER.info("ExcelExtractorPlugin successfully initialized"); + configuration = new ExcelExtractProperties.Configuration(context); + LOGGER.info("ExcelExtract successfully initialized"); } @Override public List getSupportedPropertyDescriptors() { final List descriptors = new ArrayList<>(); - descriptors.add(ExcelExtractorProperties.DESIRED_SHEETS); - descriptors.add(ExcelExtractorProperties.COLUMNS_TO_SKIP); - descriptors.add(ExcelExtractorProperties.FIELD_NAMES); - descriptors.add(ExcelExtractorProperties.ROWS_TO_SKIP); - descriptors.add(ExcelExtractorProperties.RECORD_TYPE); + descriptors.add(ExcelExtractProperties.DESIRED_SHEETS); + descriptors.add(ExcelExtractProperties.COLUMNS_TO_SKIP); + descriptors.add(ExcelExtractProperties.FIELD_NAMES); + descriptors.add(ExcelExtractProperties.ROWS_TO_SKIP); + descriptors.add(ExcelExtractProperties.RECORD_TYPE); return Collections.unmodifiableList(descriptors); } diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorProperties.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractProperties.java similarity index 95% rename from logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorProperties.java rename to logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractProperties.java index f7266633d..eeecb217f 100644 --- a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractorProperties.java +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractProperties.java @@ -24,14 +24,13 @@ import java.util.Arrays; import java.util.List; -import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; /** - * Common options for {@link ExcelExtractorPlugin} processor. + * Common options for {@link ExcelExtract} processor. */ -public class ExcelExtractorProperties { +public class ExcelExtractProperties { public static final PropertyDescriptor RECORD_TYPE = new PropertyDescriptor.Builder() .name("record.type") @@ -41,7 +40,7 @@ public class ExcelExtractorProperties { .build(); public static final PropertyDescriptor DESIRED_SHEETS = new PropertyDescriptor - .Builder().name("excel.extract.sheets") + .Builder().name("sheets") .displayName("Sheets to Extract") .description("Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property" + " is left blank then all of the sheets will be extracted from the Excel document. You can specify regular expressions." + @@ -55,7 +54,7 @@ public class ExcelExtractorProperties { * The number of rows to skip. Useful if you want to skip first row (usually the table header). */ public static final PropertyDescriptor ROWS_TO_SKIP = new PropertyDescriptor - .Builder().name("excel.extract.skip-rows") + .Builder().name("skip.rows") .displayName("Number of Rows to Skip") .description("The row number of the first row to start processing." + "Use this to skip over rows of data at the top of your worksheet that are not part of the dataset." @@ -69,7 +68,7 @@ public class ExcelExtractorProperties { * List of column numbers to skip. Empty means include anything. */ public static final PropertyDescriptor COLUMNS_TO_SKIP = new PropertyDescriptor - .Builder().name("excel.extract.columns-to-skip") + .Builder().name("skip.columns") .displayName("Columns To Skip") .description("Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. " + "Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.") @@ -83,7 +82,7 @@ public class ExcelExtractorProperties { * Mapping between column extracted and field names in a record. */ public static final PropertyDescriptor FIELD_NAMES = new PropertyDescriptor - .Builder().name("excel.extract.field-names") + .Builder().name("field.names") .displayName("Field names mapping") .description("The comma separated list representing the names of columns of extracted cells. Order matters!") .required(true) diff --git a/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractorPluginTest.java b/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractTest.java similarity index 83% rename from logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractorPluginTest.java rename to logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractTest.java index 4a1aaec45..6ab524d7c 100644 --- a/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractorPluginTest.java +++ b/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractTest.java @@ -29,7 +29,7 @@ import java.io.InputStream; import java.util.Collection; -public class ExcelExtractorPluginTest { +public class ExcelExtractTest { private byte[] resolveClassPathResource(String name) throws IOException { try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(name)) { @@ -38,9 +38,9 @@ private byte[] resolveClassPathResource(String name) throws IOException { } private TestRunner initTestRunner(TestRunner testRunner) { - testRunner.setProperty(ExcelExtractorProperties.FIELD_NAMES, "Product,Date"); - testRunner.setProperty(ExcelExtractorProperties.ROWS_TO_SKIP, "1"); - testRunner.setProperty(ExcelExtractorProperties.COLUMNS_TO_SKIP, "0,1,3,4,5,6,7,8,9,10,11"); + testRunner.setProperty(ExcelExtractProperties.FIELD_NAMES, "Product,Date"); + testRunner.setProperty(ExcelExtractProperties.ROWS_TO_SKIP, "1"); + testRunner.setProperty(ExcelExtractProperties.COLUMNS_TO_SKIP, "0,1,3,4,5,6,7,8,9,10,11"); return testRunner; } @@ -56,7 +56,7 @@ private void assertRecordValid(Collection records) { @Test(expected = UnsupportedOperationException.class) public void testThrowsExceptionWhenFormatInvalid() throws Exception { - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), new String("I'm a fake excel file :)").getBytes("UTF-8")); testRunner.run(); @@ -65,7 +65,7 @@ public void testThrowsExceptionWhenFormatInvalid() throws Exception { @Test public void testExtractAllSheets() throws Exception { - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), resolveClassPathResource("Financial Sample.xlsx")); testRunner.run(); @@ -75,20 +75,20 @@ public void testExtractAllSheets() throws Exception { @Test public void testExtractNothing() throws Exception { - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), resolveClassPathResource("Financial Sample.xlsx")); - testRunner.setProperty(ExcelExtractorProperties.DESIRED_SHEETS, "Sheet2,Sheet3"); + testRunner.setProperty(ExcelExtractProperties.DESIRED_SHEETS, "Sheet2,Sheet3"); testRunner.run(); testRunner.assertOutputRecordsCount(0); } @Test public void testExtractSelected() throws Exception { - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtractorPlugin())); + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), resolveClassPathResource("Financial Sample.xlsx")); - testRunner.setProperty(ExcelExtractorProperties.DESIRED_SHEETS, "(?i)sheet.*"); + testRunner.setProperty(ExcelExtractProperties.DESIRED_SHEETS, "(?i)sheet.*"); testRunner.run(); testRunner.assertOutputRecordsCount(700); assertRecordValid(testRunner.getOutputRecords()); From f9003b9ad6a1c8131fa66f444adbe912fad2b202 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 16 Mar 2018 16:55:10 +0100 Subject: [PATCH 04/35] Use a header row as dynamic field names --- .../tutorials/index-excel-spreadsheet.rst | 4 +- .../processor/excel/ExcelExtract.java | 58 +++++++++++++++++-- .../excel/ExcelExtractProperties.java | 56 +++++++++++++++--- .../logisland/processor/excel/Fields.java | 11 ++-- .../processor/excel/ExcelExtractTest.java | 50 +++++++++++++--- 5 files changed, 150 insertions(+), 29 deletions(-) diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst index a53aed48a..be2a55ddb 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-excel-spreadsheet.rst @@ -109,8 +109,8 @@ Within this stream, an ``ExcelExtract`` processor takes a byte array excel file documentation: a parser that produce events from an excel file configuration: record.type: excel_record - excel.extract.skip-rows: 1 - excel.extract.field-names: segment,country,product,discount_band,units_sold,manufacturing,sale_price,gross_sales,discounts,sales,cogs,profit,record_time,month_number,month_name,year + skip.rows: 1 + field.names: segment,country,product,discount_band,units_sold,manufacturing,sale_price,gross_sales,discounts,sales,cogs,profit,record_time,month_number,month_name,year This stream will process log entries as soon as they will be queued into `logisland_raw` Kafka topics, each log will diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtract.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtract.java index 216cff6ed..8fb4b8c12 100644 --- a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtract.java +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtract.java @@ -21,7 +21,11 @@ import com.hurence.logisland.component.PropertyDescriptor; import com.hurence.logisland.processor.AbstractProcessor; import com.hurence.logisland.processor.ProcessContext; +import com.hurence.logisland.processor.ProcessError; import com.hurence.logisland.record.*; +import com.hurence.logisland.util.stream.io.StreamUtils; +import com.hurence.logisland.validator.ValidationContext; +import com.hurence.logisland.validator.ValidationResult; import org.apache.commons.io.IOUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException; @@ -60,6 +64,20 @@ public void init(ProcessContext context) { LOGGER.info("ExcelExtract successfully initialized"); } + + @Override + protected Collection customValidate(ValidationContext context) { + ValidationResult.Builder ret = new ValidationResult.Builder().valid(true); + if (!(context.getPropertyValue(ExcelExtractProperties.FIELD_NAMES).isSet() ^ + context.getPropertyValue(ExcelExtractProperties.HEADER_ROW_NB).isSet())) { + ret.explanation(String.format("You must set exactly one of %s or %s.", + ExcelExtractProperties.FIELD_NAMES.getName(), ExcelExtractProperties.HEADER_ROW_NB.getName())) + .subject(getIdentifier()) + .valid(false); + } + return Collections.singletonList(ret.build()); + } + @Override public List getSupportedPropertyDescriptors() { final List descriptors = new ArrayList<>(); @@ -68,6 +86,7 @@ public List getSupportedPropertyDescriptors() { descriptors.add(ExcelExtractProperties.FIELD_NAMES); descriptors.add(ExcelExtractProperties.ROWS_TO_SKIP); descriptors.add(ExcelExtractProperties.RECORD_TYPE); + descriptors.add(ExcelExtractProperties.HEADER_ROW_NB); return Collections.unmodifiableList(descriptors); } @@ -127,9 +146,12 @@ private Stream handleExcelStream(InputStream inputStream) { try (Workbook workbook = WorkbookFactory.create(inputStream)) { Iterator iter = workbook.sheetIterator(); while (iter.hasNext()) { + String sheetName = "unknown"; + List headerNames = null; + try { Sheet sheet = iter.next(); - String sheetName = sheet.getSheetName(); + sheetName = sheet.getSheetName(); if (toBeSkipped(sheetName)) { LOGGER.info("Skipped sheet {}", sheetName); continue; @@ -140,21 +162,33 @@ private Stream handleExcelStream(InputStream inputStream) { if (row == null) { continue; } + if (configuration.getHeaderRowNumber() != null && + configuration.getHeaderRowNumber().equals(row.getRowNum())) { + headerNames = extractFieldNamesFromRow(row); + + } if (count++ < configuration.getRowsToSkip()) { continue; } - ret.add(handleRow(row)); + Record current = handleRow(row, headerNames); + current.setField(Fields.rowNumber(row.getRowNum())) + .setField(Fields.sheetName(sheetName)); + ret.add(current); } } catch (Exception e) { LOGGER.error("Unrecoverable exception occurred while processing excel sheet", e); + ret.add(new StandardRecord().addError(ProcessError.RECORD_CONVERSION_ERROR.getName(), + String.format("Unable to parse sheet %s: %s", sheetName, e.getMessage()))); } } } } catch (InvalidFormatException | NotOfficeXmlFileException ife) { - throw new UnsupportedOperationException("Wrong or unsupported file format.", ife); + LOGGER.error("Wrong or unsupported file format.", ife); + ret.add(new StandardRecord().addError(ProcessError.INVALID_FILE_FORMAT_ERROR.getName(), ife.getMessage())); } catch (IOException ioe) { LOGGER.error("I/O Exception occurred while processing excel file", ioe); + ret.add(new StandardRecord().addError(ProcessError.RUNTIME_ERROR.getName(), ioe.getMessage())); } finally { IOUtils.closeQuietly(inputStream); @@ -169,15 +203,20 @@ private Stream handleExcelStream(InputStream inputStream) { * @param row the {@link Row} * @return the transformed {@link Record} */ - private Record handleRow(Row row) { + private Record handleRow(Row row, List header) { Record ret = new StandardRecord().setTime(new Date()); int index = 0; for (Cell cell : row) { - if (configuration.getColumnsToSkip().contains(cell.getColumnIndex()) || index >= configuration.getFieldNames().size()) { + if (configuration.getFieldNames() != null && index >= configuration.getFieldNames().size()) { + //we've reached the end of mapping. Go to next row. + break; + } + if (configuration.getColumnsToSkip().contains(cell.getColumnIndex())) { //skip this cell. continue; } - String fieldName = configuration.getFieldNames().get(index++); + String fieldName = header != null ? header.get(cell.getColumnIndex()) : + configuration.getFieldNames().get(index++); Field field; // Alternatively, get the value and format it yourself switch (cell.getCellTypeEnum()) { @@ -207,6 +246,13 @@ private Record handleRow(Row row) { return ret; } + private List extractFieldNamesFromRow(Row row) { + return StreamUtils.asStream(row.cellIterator()) + .map(Cell::getStringCellValue) + .map(s -> s.replaceAll("\\s+", "_")) + .collect(Collectors.toList()); + } + /** * Looks if a sheet should be extracted or not according to the configuration. diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractProperties.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractProperties.java index eeecb217f..29a107d7f 100644 --- a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractProperties.java +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/ExcelExtractProperties.java @@ -22,6 +22,7 @@ import com.hurence.logisland.validator.StandardValidators; import org.apache.commons.lang3.StringUtils; +import java.io.Serializable; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; @@ -30,7 +31,7 @@ /** * Common options for {@link ExcelExtract} processor. */ -public class ExcelExtractProperties { +public class ExcelExtractProperties implements Serializable { public static final PropertyDescriptor RECORD_TYPE = new PropertyDescriptor.Builder() .name("record.type") @@ -84,11 +85,24 @@ public class ExcelExtractProperties { public static final PropertyDescriptor FIELD_NAMES = new PropertyDescriptor .Builder().name("field.names") .displayName("Field names mapping") - .description("The comma separated list representing the names of columns of extracted cells. Order matters!") - .required(true) + .description("The comma separated list representing the names of columns of extracted cells. Order matters!" + + " You should use either field.names either field.row.header but not both together.") + .required(false) .addValidator(StandardValidators.COMMA_SEPARATED_LIST_VALIDATOR) .build(); + /** + * The row number to use to extract field name mapping. + */ + public static final PropertyDescriptor HEADER_ROW_NB = new PropertyDescriptor + .Builder().name("field.row.header") + .displayName("Use a row header as field names mapping") + .description("If set, field names mapping will be extracted from the specified row number." + + " You should use either field.names either field.row.header but not both together.") + .required(false) + .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) + .build(); + public static class Configuration { /** @@ -114,6 +128,11 @@ public static class Configuration { */ private final String recordType; + /** + * The row number to use to extract field name mapping. + */ + private final Integer headerRowNumber; + /** * Creates a configuration POJO from the {@link ProcessContext} @@ -126,15 +145,27 @@ public Configuration(ProcessContext context) { .filter(StringUtils::isNotBlank) .map(Pattern::compile) .collect(Collectors.toList()); + + if (context.getPropertyValue(HEADER_ROW_NB).isSet()) { + headerRowNumber = context.getPropertyValue(HEADER_ROW_NB).asInteger(); + } else { + headerRowNumber = null; + } + columnsToSkip = Arrays.stream(context.getPropertyValue(COLUMNS_TO_SKIP).asString().split(",")) .filter(StringUtils::isNotBlank) .map(Integer::parseInt) .collect(Collectors.toList()); rowsToSkip = context.getPropertyValue(ROWS_TO_SKIP).asInteger(); - fieldNames = Arrays.stream(context.getPropertyValue(FIELD_NAMES).asString().split(",")) - .filter(StringUtils::isNotBlank) - .map(String::trim) - .collect(Collectors.toList()); + + if (context.getPropertyValue(FIELD_NAMES).isSet()) { + fieldNames = Arrays.stream(context.getPropertyValue(FIELD_NAMES).asString().split(",")) + .filter(StringUtils::isNotBlank) + .map(String::trim) + .collect(Collectors.toList()); + } else { + fieldNames = null; + } recordType = context.getPropertyValue(RECORD_TYPE).asString(); } @@ -167,6 +198,12 @@ public int getRowsToSkip() { return rowsToSkip; } + + /** + * Mapping between column extracted and field names in a record. + * + * @return + */ public List getFieldNames() { return fieldNames; } @@ -181,6 +218,10 @@ public String getRecordType() { } + public Integer getHeaderRowNumber() { + return headerRowNumber; + } + @Override public String toString() { return "Configuration{" + @@ -189,6 +230,7 @@ public String toString() { ", rowsToSkip=" + rowsToSkip + ", fieldNames=" + fieldNames + ", recordType='" + recordType + '\'' + + ", headerRowNumber=" + headerRowNumber + '}'; } } diff --git a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java index ee7cc9d7d..7368ff682 100644 --- a/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java +++ b/logisland-plugins/logisland-excel-plugin/src/main/java/com/hurence/logisland/processor/excel/Fields.java @@ -26,20 +26,19 @@ */ public class Fields { - public static final String SPREADSHEET_NAME = "spreadsheet_name"; + public static final String SHEET_NAME = "excel_extract_sheet_name"; public static final String SOURCE_FILE_NAME = "source_file_name"; - public static final String RAW_FILE_DATA = FieldDictionary.RECORD_VALUE; - public static final String ROW_NUMBER = "row_number"; + public static final String ROW_NUMBER = "excel_extract_row_number"; public static final String RECORD_TYPE = FieldDictionary.RECORD_TYPE; /** - * Creates a field for the spreadsheet name. + * Creates a field for the sheet name. * * @param name * @return */ - public static Field spreadSheetName(String name) { - return new Field(SPREADSHEET_NAME, FieldType.STRING, name); + public static Field sheetName(String name) { + return new Field(SHEET_NAME, FieldType.STRING, name); } diff --git a/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractTest.java b/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractTest.java index 6ab524d7c..3beda2d87 100644 --- a/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractTest.java +++ b/logisland-plugins/logisland-excel-plugin/src/test/java/com/hurence/logisland/processor/excel/ExcelExtractTest.java @@ -23,6 +23,7 @@ import com.hurence.logisland.util.runner.TestRunner; import com.hurence.logisland.util.runner.TestRunners; import org.apache.commons.io.IOUtils; +import org.apache.poi.extractor.ExtractorFactory; import org.junit.Test; import java.io.IOException; @@ -37,8 +38,12 @@ private byte[] resolveClassPathResource(String name) throws IOException { } } - private TestRunner initTestRunner(TestRunner testRunner) { - testRunner.setProperty(ExcelExtractProperties.FIELD_NAMES, "Product,Date"); + private TestRunner initTestRunner(TestRunner testRunner, Integer rowHeaderNumber) { + if (rowHeaderNumber != null) { + testRunner.setProperty(ExcelExtractProperties.HEADER_ROW_NB, rowHeaderNumber.toString()); + } else { + testRunner.setProperty(ExcelExtractProperties.FIELD_NAMES, "Product,Date"); + } testRunner.setProperty(ExcelExtractProperties.ROWS_TO_SKIP, "1"); testRunner.setProperty(ExcelExtractProperties.COLUMNS_TO_SKIP, "0,1,3,4,5,6,7,8,9,10,11"); return testRunner; @@ -50,24 +55,40 @@ private void assertRecordValid(Collection records) { record.assertFieldExists("Date"); record.assertFieldTypeEquals("Product", FieldType.STRING); record.assertFieldTypeEquals("Date", FieldType.LONG); + record.assertFieldExists(Fields.SHEET_NAME); + record.assertFieldExists(Fields.ROW_NUMBER); }); } - @Test(expected = UnsupportedOperationException.class) - public void testThrowsExceptionWhenFormatInvalid() throws Exception { + @Test(expected = AssertionError.class) + public void testConfigurationValidationErrorWithoutFieldMapping() throws Exception { + final TestRunner testRunner = TestRunners.newTestRunner(new ExcelExtract()); + testRunner.assertValid(); + } - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); + @Test(expected = AssertionError.class) + public void testConfigurationValidationErrorWithBothHeaderAndFieldMappingSet() throws Exception { + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract()), null); + testRunner.setProperty(ExcelExtractProperties.HEADER_ROW_NB, "0"); + testRunner.assertValid(); + } + + @Test() + public void testThrowsExceptionWhenFormatInvalid() throws Exception { + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract()), null); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), new String("I'm a fake excel file :)").getBytes("UTF-8")); testRunner.run(); + testRunner.assertOutputErrorCount(1); } @Test public void testExtractAllSheets() throws Exception { - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract()), null); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), resolveClassPathResource("Financial Sample.xlsx")); + testRunner.assertValid(); testRunner.run(); testRunner.assertOutputRecordsCount(700); assertRecordValid(testRunner.getOutputRecords()); @@ -75,20 +96,33 @@ public void testExtractAllSheets() throws Exception { @Test public void testExtractNothing() throws Exception { - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract()), null); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), resolveClassPathResource("Financial Sample.xlsx")); testRunner.setProperty(ExcelExtractProperties.DESIRED_SHEETS, "Sheet2,Sheet3"); + testRunner.assertValid(); testRunner.run(); testRunner.assertOutputRecordsCount(0); } @Test public void testExtractSelected() throws Exception { - final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract())); + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract()), null); testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), resolveClassPathResource("Financial Sample.xlsx")); testRunner.setProperty(ExcelExtractProperties.DESIRED_SHEETS, "(?i)sheet.*"); + testRunner.assertValid(); + testRunner.run(); + testRunner.assertOutputRecordsCount(700); + assertRecordValid(testRunner.getOutputRecords()); + } + + @Test + public void testExtractWithDynamicMapping() throws Exception { + final TestRunner testRunner = initTestRunner(TestRunners.newTestRunner(new ExcelExtract()), 0); + testRunner.enqueue(FieldDictionary.RECORD_VALUE.getBytes("UTF-8"), + resolveClassPathResource("Financial Sample.xlsx")); + testRunner.assertValid(); testRunner.run(); testRunner.assertOutputRecordsCount(700); assertRecordValid(testRunner.getOutputRecords()); From 8b2f648d8ada0b136e3edbafd93dee74eb2f729f Mon Sep 17 00:00:00 2001 From: Mathieu Rossignol Date: Tue, 20 Mar 2018 17:34:26 +0100 Subject: [PATCH 05/35] Update parseGitlabLog processor to handle new way of logging params in GitLab --- .../logisland/util/runner/MockRecord.java | 8 ++ .../commonlogs/gitlab/ParseGitlabLog.java | 100 ++++++++++++++++- .../commonlogs/gitlab/ParseGitlabLogTest.java | 102 +++++++++++++++++- 3 files changed, 204 insertions(+), 6 deletions(-) diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/util/runner/MockRecord.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/util/runner/MockRecord.java index 6bb30f2e9..83135afa9 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/util/runner/MockRecord.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/util/runner/MockRecord.java @@ -89,6 +89,14 @@ public void assertFieldEquals(final String fieldName, final byte[] expectedValue // assertedFields.add(fieldName); } + public void assertNullField(final String fieldName) { + Assert.assertNull(getField(fieldName).getRawValue()); + } + + public void assertNotNullField(final String fieldName) { + Assert.assertNotNull(getField(fieldName).getRawValue()); + } + public void assertFieldNotEquals(final String fieldName, final String expectedValue) { Assert.assertNotSame(expectedValue, getField(fieldName).asString()); //assertedFields.add(fieldName); diff --git a/logisland-plugins/logisland-common-logs-plugin/src/main/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLog.java b/logisland-plugins/logisland-common-logs-plugin/src/main/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLog.java index 632383dcf..7ab2a916f 100644 --- a/logisland-plugins/logisland-common-logs-plugin/src/main/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLog.java +++ b/logisland-plugins/logisland-common-logs-plugin/src/main/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLog.java @@ -129,6 +129,9 @@ public Collection process(ProcessContext context, Collection rec // Normalize the map key values (Some special characters like '.' are not possible when indexing in ES) normalizeFields(jsonGitlabLog, null); + + // Explode the params field if any and set its values as first level fields + explodeParams(jsonGitlabLog); // Set every first level fields of the Gitlab log as first level fields of the record for easier processing // in processors following in the current processors stream. @@ -141,7 +144,7 @@ public Collection process(ProcessContext context, Collection rec } return records; } - + /** * Sets the first level fields of the passed Gitlab log as first level fields in the passed Logisland record. * @param gitlabLog Gitlab log. @@ -190,6 +193,101 @@ else if (value instanceof String) } } + private static final String PARAMS = "params"; + private static final String PARAMS_KEY = "key"; + private static final String PARAMS_VALUE = "value"; + private static final String PARAMS_SEP = "_"; + /** + * Explodes the params field (if any) and set its values as first level fields. This helps having simple queries + * in ES once documents are indexed for instance. + * Example: + * + * Input: + * + * "params": [ + * { + * "key": "utf8", + * "value": "✓" + * }, + * { + * "key": "authenticity_token", + * "value": "[FILTERED]" + * }, + * { + * "key": "user", + * "value": { + * "login": "mathieu.rossignol@hurence.com", + * "password": "[FILTERED]", + * "remember_me": "0" + * } + * } + * ], + * + * Output: + * + * "params_utf8": "✓", + * "params_authenticity_token": "[FILTERED]", + * "params_user_login" : "mathieu.rossignol@hurence.com", + * "params_user_password": "[FILTERED]" + * + * @param gitlabLog + */ + private void explodeParams(Map gitlabLog) { + + Object params = gitlabLog.get(PARAMS); + if (params != null) + { + gitlabLog.remove(PARAMS); + + addFlatParams(PARAMS, gitlabLog, params); + } + } + + /** + * See explodeParams + * @param prefix Current prefix tu use for the attributes to add + * @param gitlabLog The Map where to add parsed attributes + * @param params The current params to parse + */ + private void addFlatParams(String prefix, Map gitlabLog, Object params) { + + + if (params == null) + { + // Handle null params values + gitlabLog.put(prefix, null); + return; + } + + if (params instanceof ArrayList) + { + // This is a list of parameters, recall the method for each of them + ArrayList paramsArray = (ArrayList)params; + paramsArray.forEach(param -> addFlatParams(prefix, gitlabLog, param)); + } else if (params instanceof Map) + { + // This is a map, is there a key field ? + Map paramsMap = (Map)params; + Object paramKey = paramsMap.get(PARAMS_KEY); + if (paramKey != null) + { + // There is a key, recall the method with the associated value + String newPrefix = prefix + PARAMS_SEP + paramKey.toString(); + Object paramValue = paramsMap.get(PARAMS_VALUE); + addFlatParams(newPrefix, gitlabLog, paramValue); + } else + { + // There is no key field field. So this is a final map. Explode it by + // recalling the method for eaf internal field + + paramsMap.forEach( (field, value) -> addFlatParams(prefix + PARAMS_SEP + field, gitlabLog, value) ); + } + } else { + // This is a simple type, just add the new field with the passed computed prefix + gitlabLog.put(prefix, params); + } + } + /** * Deeply clones the passed map regarding keys (so that one can modify keys of the original map without changing * the clone). diff --git a/logisland-plugins/logisland-common-logs-plugin/src/test/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLogTest.java b/logisland-plugins/logisland-common-logs-plugin/src/test/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLogTest.java index ee8bda18a..7004e1f3b 100644 --- a/logisland-plugins/logisland-common-logs-plugin/src/test/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLogTest.java +++ b/logisland-plugins/logisland-common-logs-plugin/src/test/java/com/hurence/logisland/processor/commonlogs/gitlab/ParseGitlabLogTest.java @@ -23,6 +23,7 @@ import com.hurence.logisland.util.runner.TestRunners; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import java.util.Arrays; import java.util.List; @@ -39,8 +40,8 @@ public class ParseGitlabLogTest { private static Logger logger = LoggerFactory.getLogger(ParseGitlabLogTest.class); - // Bro conn input event - private static final String GITLAB_BRO_EVENT = + // Gitlab input event + private static final String GITLAB_EVENT = "{" + "\"view\": 94.68," + "\"method\": \"GET\"," + @@ -64,6 +65,45 @@ public class ParseGitlabLogTest { "\"long\": 32345678910" + "}"; + + // Gitlab input event with param + private static final String GITLAB_EVENT_WITH_PARAMS = + "{" + + "\"view\": 94.68," + + "\"method\": \"GET\"," + + "\"path\": \"/dashboard/issues\"," + + "\"params\": [" + + "{" + + "\"key\": \"utf8\"," + + "\"value\": \"✓\"" + + "}," + + "{" + + "\"key\": \"authenticity_token\"," + + "\"value\": \"[FILTERED]\"" + + "}," + + "{" + + "\"key\": \"user\"," + + "\"value\": {" + + "\"login\": \"mathieu.rossignol@hurence.com\"," + + "\"password\": \"[FILTERED]\"," + + "\"remember_me\": \"0\"" + + "}" + + "}," + + "{" + + "\"key\": \"empty\"," + + "\"value\": \"\"" + + "}," + + "{" + + "\"key\": \"null\"," + + "\"value\": null" + + "}," + + "{" + + "\"key\": \"integer\"," + + "\"value\": 7" + + "}" + + "]" + + "}"; + /** * Test fields renaming if deep JSON and also some types */ @@ -71,7 +111,7 @@ public class ParseGitlabLogTest { public void testFakeDeepEvent() { final TestRunner testRunner = TestRunners.newTestRunner(new ParseGitlabLog()); testRunner.assertValid(); - Record record = new StandardRecord("bro_event"); + Record record = new StandardRecord("gitlab_event"); record.setStringField(FieldDictionary.RECORD_VALUE, FAKE_DEEP_EVENT); testRunner.enqueue(record); testRunner.clearQueues(); @@ -126,8 +166,8 @@ public void testFakeDeepEvent() { public void testGitlabLog() { final TestRunner testRunner = TestRunners.newTestRunner(new ParseGitlabLog()); testRunner.assertValid(); - Record record = new StandardRecord("bro_event"); - record.setStringField(FieldDictionary.RECORD_VALUE, GITLAB_BRO_EVENT); + Record record = new StandardRecord("gitlab_event"); + record.setStringField(FieldDictionary.RECORD_VALUE, GITLAB_EVENT); testRunner.enqueue(record); testRunner.clearQueues(); testRunner.run(); @@ -147,4 +187,56 @@ public void testGitlabLog() { out.assertFieldExists("path"); out.assertFieldEquals("path", "/dashboard/issues"); } + + /** + * Test that the special params field as been exploded and replaced with first level fields + */ + @Test + public void testFlatParams() { + final TestRunner testRunner = TestRunners.newTestRunner(new ParseGitlabLog()); + testRunner.assertValid(); + Record record = new StandardRecord("gitlab_event"); + record.setStringField(FieldDictionary.RECORD_VALUE, GITLAB_EVENT_WITH_PARAMS); + testRunner.enqueue(record); + testRunner.clearQueues(); + testRunner.run(); + testRunner.assertAllInputRecordsProcessed(); + testRunner.assertOutputRecordsCount(1); + + MockRecord out = testRunner.getOutputRecords().get(0); + + out.assertFieldExists(FieldDictionary.RECORD_TYPE); + + out.assertFieldExists("view"); + out.assertFieldEquals("view", (float)94.68); + + out.assertFieldExists("method"); + out.assertFieldEquals("method", "GET"); + + out.assertFieldExists("path"); + out.assertFieldEquals("path", "/dashboard/issues"); + + out.assertFieldExists("params_utf8"); + out.assertFieldEquals("params_utf8", "✓"); + + out.assertFieldExists("params_authenticity_token"); + out.assertFieldEquals("params_authenticity_token", "[FILTERED]"); + + out.assertFieldExists("params_user_login"); + out.assertFieldEquals("params_user_login", "mathieu.rossignol@hurence.com"); + + out.assertFieldExists("params_user_password"); + out.assertFieldEquals("params_user_password", "[FILTERED]"); + + out.assertFieldExists("params_empty"); + out.assertFieldEquals("params_empty", ""); + + out.assertFieldExists("params_null"); + out.assertNullField("params_null"); + + out.assertFieldExists("params_integer"); + out.assertFieldEquals("params_integer", 7); + + System.out.println(out); + } } From de5b689f1540855a6235f0c9fb4ce9119b1ed0f0 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 26 Mar 2018 09:48:53 +0200 Subject: [PATCH 06/35] Adapt Kafka connect sources into logisland structured streaming --- .../logisland/record/StandardRecord.java | 5 +- .../validator/StandardValidators.java | 87 ++++-- .../logisland-spark_2_1-engine/pom.xml | 19 ++ .../LogIslandRecordConverter.java | 123 ++++++++ .../source/KafkaConnectStreamSource.java | 186 ++++++++++++ .../KafkaConnectStreamSourceProvider.java | 75 +++++ .../source/SharedSourceTaskContext.java | 145 ++++++++++ .../kafkaconnect/source/SourceThread.java | 90 ++++++ .../logisland/stream/spark/package.scala | 268 +++++++++++------- .../spark/structured/StructuredStream.scala | 2 + ...nsoleStructuredStreamProviderService.scala | 3 +- ...afkaConnectStructuredProviderService.scala | 126 ++++++++ .../StructuredStreamProviderService.scala | 27 +- .../logisland/engine/KafkaConnectTest.java | 76 +++++ .../engine/kc/BinarySourceConnector.java | 133 +++++++++ .../logisland/engine/kc/BinarySourceTask.java | 151 ++++++++++ .../resources/conf/kafka-connect-stream.yml | 96 +++++++ .../serializer/BytesArraySerializer.java | 17 +- .../logisland/serializer/JsonSerializer.java | 16 +- .../serializer/StringSerializer.java | 25 +- .../logisland/processor/NormalizeFields.java | 2 +- 21 files changed, 1511 insertions(+), 161 deletions(-) create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/LogIslandRecordConverter.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSourceProvider.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SharedSourceTaskContext.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SourceThread.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/KafkaConnectTest.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml diff --git a/logisland-api/src/main/java/com/hurence/logisland/record/StandardRecord.java b/logisland-api/src/main/java/com/hurence/logisland/record/StandardRecord.java index 57d688d82..2d8c494f9 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/record/StandardRecord.java +++ b/logisland-api/src/main/java/com/hurence/logisland/record/StandardRecord.java @@ -65,6 +65,7 @@ public StandardRecord(String type) { } public StandardRecord(Record toClone) { + this(); this.setType(toClone.getType()); this.setTime(toClone.getTime()); this.setId(UUID.randomUUID().toString()); @@ -159,7 +160,9 @@ public Record addFields(Map fields) { @Override public Record setType(String type) { - this.setField(FieldDictionary.RECORD_TYPE, FieldType.STRING, type); + if (type != null) { + this.setField(FieldDictionary.RECORD_TYPE, FieldType.STRING, type); + } return this; } diff --git a/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java b/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java index 812ee53c0..7004f30ce 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java +++ b/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java @@ -1,12 +1,12 @@ /** * Copyright (C) 2016 Hurence (support@hurence.com) - * + *

* 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 - * + *

+ * 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. @@ -20,17 +20,49 @@ import java.net.URI; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; -import java.util.Arrays; -import java.util.Objects; -import java.util.TimeZone; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.Arrays; import java.util.Locale; +import java.util.Objects; +import java.util.TimeZone; import java.util.regex.Pattern; public class StandardValidators { + /** + * Validator for java class descending for a base class. + */ + private static final class TypeValidator implements Validator { + + private final Class clz; + + + public TypeValidator(Class clz) { + this.clz = clz; + } + + @Override + public ValidationResult validate(String subject, String input) { + String reason = null; + try { + Class c = Class.forName(input); + if (!clz.isAssignableFrom(c)) { + reason = c.getCanonicalName() + " does not inherit from " + input; + } + } catch (ClassNotFoundException e) { + reason = "Could not find class " + input; + } + return new ValidationResult.Builder().subject(subject).input(input).explanation(reason).valid(reason == null).build(); + } + } + + + public static final Validator TYPE_VALIDATOR(Class clz) { + return new TypeValidator(clz); + } + public static final Validator DOUBLE_VALIDATOR = new Validator() { @Override public ValidationResult validate(final String subject, final String value) { @@ -72,7 +104,7 @@ public ValidationResult validate(final String subject, final String value) { String reason = null; try { - if (value==null) { + if (value == null) { reason = "null is not a valid integer"; } else { final int intVal = Integer.parseInt(value); @@ -95,7 +127,7 @@ public ValidationResult validate(final String subject, final String value) { String reason = null; try { - if (value==null) { + if (value == null) { reason = "null is not a valid integer"; } else { final long longVal = Long.parseLong(value); @@ -138,7 +170,7 @@ public ValidationResult validate(final String subject, final String value) { String reason = null; try { - if (value==null) { + if (value == null) { reason = "null is not a valid integer"; } else { Integer.parseInt(value); @@ -158,7 +190,7 @@ public ValidationResult validate(final String subject, final String value) { String reason = null; try { - if (value==null) { + if (value == null) { reason = "null is not a valid long"; } else { Long.parseLong(value); @@ -178,7 +210,7 @@ public ValidationResult validate(final String subject, final String value) { String reason = null; try { - if (value==null) { + if (value == null) { reason = "null is not a valid integer"; } else { final int intVal = Integer.parseInt(value); @@ -255,7 +287,7 @@ public ValidationResult validate(final String subject, final String value) { String reason = String.format("'%s' is not a supported language tag", value); - for (String tag: Locale.getISOLanguages()) { + for (String tag : Locale.getISOLanguages()) { if (tag.equals(value)) reason = null; } return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); @@ -294,6 +326,7 @@ public ValidationResult validate(final String subject, final String value) { return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); } }; + // // // FACTORY METHODS FOR VALIDATORS @@ -318,8 +351,6 @@ public ValidationResult validate(final String subject, final String input) { } - - public static Validator createRegexMatchingValidator(final Pattern pattern) { return new Validator() { @Override @@ -338,7 +369,6 @@ public ValidationResult validate(final String subject, final String input) { } - public static Validator createLongValidator(final long minimum, final long maximum, final boolean inclusive) { return new Validator() { @Override @@ -362,8 +392,6 @@ public ValidationResult validate(final String subject, final String input) { } - - public static class StringLengthValidator implements Validator { private final int minimum; private final int maximum; @@ -377,17 +405,17 @@ public StringLengthValidator(int minimum, int maximum) { public ValidationResult validate(final String subject, final String value) { if (value.length() < minimum || value.length() > maximum) { return new ValidationResult.Builder() - .subject(subject) - .valid(false) - .input(value) - .explanation(String.format("String length invalid [min: %d, max: %d]", minimum, maximum)) - .build(); + .subject(subject) + .valid(false) + .input(value) + .explanation(String.format("String length invalid [min: %d, max: %d]", minimum, maximum)) + .build(); } else { return new ValidationResult.Builder() - .valid(true) - .input(value) - .subject(subject) - .build(); + .valid(true) + .input(value) + .subject(subject) + .build(); } } } @@ -404,7 +432,7 @@ public FileExistsValidator(final boolean allowExpressionLanguage) { } @Override - public ValidationResult validate(final String subject, final String value ) { + public ValidationResult validate(final String subject, final String value) { final String substituted = value; @@ -472,8 +500,7 @@ public ValidationResult validate(final String subject, final String value) { try { Enum.valueOf(this.enumClass, value); builder.valid(true); - } - catch(final Exception e) { + } catch (final Exception e) { builder.explanation(e.getLocalizedMessage()).valid(false); } diff --git a/logisland-engines/logisland-spark_2_1-engine/pom.xml b/logisland-engines/logisland-spark_2_1-engine/pom.xml index 192d14b38..868f1c7df 100644 --- a/logisland-engines/logisland-spark_2_1-engine/pom.xml +++ b/logisland-engines/logisland-spark_2_1-engine/pom.xml @@ -96,6 +96,24 @@ http://www.w3.org/2001/XMLSchema-instance "> + + org.apache.kafka + connect-api + ${kafka.version} + + + org.apache.kafka + connect-runtime + ${kafka.version} + + + org.apache.kafka + connect-json + ${kafka.version} + + + + com.fasterxml.jackson.core jackson-core @@ -123,6 +141,7 @@ http://www.w3.org/2001/XMLSchema-instance "> junit + org.apache.kafka kafka_${scala.binary.version} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/LogIslandRecordConverter.java b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/LogIslandRecordConverter.java new file mode 100644 index 000000000..bbdb66287 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/LogIslandRecordConverter.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.util.kafkaconnect; + +import com.hurence.logisland.record.*; +import com.hurence.logisland.serializer.RecordSerializer; +import com.hurence.logisland.serializer.SerializerProvider; +import org.apache.kafka.connect.data.ConnectSchema; +import org.apache.kafka.connect.data.Schema; +import org.apache.kafka.connect.data.SchemaAndValue; +import org.apache.kafka.connect.data.Struct; +import org.apache.kafka.connect.errors.DataException; +import org.apache.kafka.connect.storage.Converter; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Map; + +public class LogIslandRecordConverter implements Converter { + + private static final String PROPERTY_RECORD_SERIALIZER = "record.serializer"; + public static final String PROPERTY_AVRO_SCHEMA = "avro.schema"; + + private RecordSerializer recordSerializer; + + + @Override + public void configure(Map configs, boolean isKey) { + recordSerializer = SerializerProvider.getSerializer((String) configs.get(PROPERTY_RECORD_SERIALIZER), (String) configs.get(PROPERTY_AVRO_SCHEMA)); + } + + @Override + public byte[] fromConnectData(String topic, Schema schema, Object value) { + try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + recordSerializer.serialize(baos, + new StandardRecord("kafka_connect").setField(toFieldRecursive(FieldDictionary.RECORD_VALUE, schema, value))); + return baos.toByteArray(); + } catch (IOException ioe) { + throw new DataException("Unexpected IO Exception occurred while serializing data [topic " + topic + "]", ioe); + } + + } + + @Override + public SchemaAndValue toConnectData(String topic, byte[] value) { + return null; + } + + private Field toFieldRecursive(String name, Schema schema, Object value) { + try { + final Schema.Type schemaType; + if (schema == null) { + schemaType = ConnectSchema.schemaType(value.getClass()); + if (schemaType == null) + throw new DataException("Java class " + value.getClass() + " does not have corresponding schema type."); + } else { + schemaType = schema.type(); + } + switch (schemaType) { + case INT8: + case INT16: + case INT32: + return new Field(name, FieldType.INT, value); + case INT64: + return new Field(name, FieldType.LONG, value); + case FLOAT32: + case FLOAT64: + return new Field(name, FieldType.FLOAT, value); + case BOOLEAN: + return new Field(name, FieldType.BOOLEAN, value); + case STRING: + return new Field(name, FieldType.STRING, value); + case BYTES: + byte[] bytes = null; + if (value instanceof byte[]) { + bytes = (byte[]) value; + } else if (value instanceof ByteBuffer) { + bytes = ((ByteBuffer) value).array(); + } else { + throw new DataException("Invalid type for bytes type: " + value.getClass()); + } + return new Field(name, FieldType.BYTES, bytes); + case ARRAY: { + return new Field(name, FieldType.ARRAY, value); + } + case MAP: { + return new Field(name, FieldType.MAP, value); + } + case STRUCT: { + Struct struct = (Struct) value; + + if (struct.schema() != schema) { + throw new DataException("Mismatching schema."); + } + Record ret = new StandardRecord(); + struct.schema().fields().forEach(field -> ret.setField(toFieldRecursive(field.name(), field.schema(), struct.get(field)))); + return new Field(name, FieldType.RECORD, ret); + + } + } + + throw new DataException("Couldn't convert " + value + " to JSON."); + } catch (ClassCastException e) { + throw new DataException("Invalid type for " + schema.type() + ": " + value.getClass()); + } + } +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java new file mode 100644 index 000000000..b70d73487 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.util.kafkaconnect.source; + + +import com.hurence.logisland.stream.StreamProperties; +import org.apache.kafka.connect.connector.ConnectorContext; +import org.apache.kafka.connect.json.JsonConverter; +import org.apache.kafka.connect.source.SourceConnector; +import org.apache.kafka.connect.source.SourceTask; +import org.apache.kafka.connect.storage.*; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SQLContext; +import org.apache.spark.sql.catalyst.expressions.GenericRow; +import org.apache.spark.sql.execution.streaming.LongOffset; +import org.apache.spark.sql.execution.streaming.Offset; +import org.apache.spark.sql.execution.streaming.Source; +import org.apache.spark.sql.types.DataTypes; +import org.apache.spark.sql.types.Metadata; +import org.apache.spark.sql.types.StructField; +import org.apache.spark.sql.types.StructType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import scala.Option; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; + +/** + * Kafka connect to spark sql streaming bridge. + * + * @author amarziali + */ +public class KafkaConnectStreamSource implements Source { + + private final static Logger LOGGER = LoggerFactory.getLogger(KafkaConnectStreamSource.class); + /** + * The Schema used for this source. + */ + public final static StructType SCHEMA = new StructType(new StructField[] { + new StructField(StreamProperties.KAFKA_CONNECT_CONNECTOR_PROPERTIES().getName(), + DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), + new StructField(StreamProperties.KAFKA_CONNECT_KEY_CONVERTER().getName(), + DataTypes.StringType, false, Metadata.empty()), + new StructField(StreamProperties.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName(), + DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), + new StructField(StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER().getName(), + DataTypes.StringType, false, Metadata.empty()), + new StructField(StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName(), + DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), + new StructField(StreamProperties.KAFKA_CONNECT_MAX_TASKS().getName(), + DataTypes.createMapType(DataTypes.IntegerType, DataTypes.StringType), false, Metadata.empty()) + }); + /** + * The schema used to represent the outgoing dataframe. + */ + public final static StructType DATA_SCHEMA = new StructType(new StructField[]{ + new StructField("topic", DataTypes.StringType, false, Metadata.empty()), + new StructField("partition", DataTypes.IntegerType, true, Metadata.empty()), + new StructField("key", DataTypes.BinaryType, true, Metadata.empty()), + new StructField("value", DataTypes.BinaryType, false, Metadata.empty()) + + }); + + private final SourceConnector connector; + private final ConnectorContext connectorContext; + private final ExecutorService executorService; + private final List sourceThreads = new ArrayList<>(); + private final OffsetBackingStore offsetBackingStore; + + private final SharedSourceTaskContext sharedSourceTaskContext; + private final SQLContext sqlContext; + private final Converter keyConverter; + private final Converter valueConverter; + + + public KafkaConnectStreamSource(SQLContext sqlContext, + Map connectorProperties, + Converter keyConverter, + Converter valueConverter, + int maxTasks, + Class connectorClass) throws Exception { + this.sqlContext = sqlContext; + connector = connectorClass.newInstance(); + this.keyConverter = keyConverter; + this.valueConverter = valueConverter; + //handle task configurations + + //TODO: handle reconfiguration + connectorContext = new ConnectorContext() { + @Override + public void requestTaskReconfiguration() { + //do nothing + } + + @Override + public void raiseError(Exception e) { + LOGGER.error("Connector " + connectorClass.getCanonicalName() + " raised error : " + e.getMessage(), e); + } + }; + LOGGER.info("Starting connector {}", connectorClass.getCanonicalName()); + connector.initialize(connectorContext); + connector.start(connectorProperties); + offsetBackingStore = new MemoryOffsetBackingStore(); + offsetBackingStore.start(); + //TODO: add different storage here + JsonConverter internalConverter = new JsonConverter(); + sharedSourceTaskContext = new SharedSourceTaskContext( + new OffsetStorageReaderImpl(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter), + new OffsetStorageWriter(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter)); + //create tasks + Class taskClass = (Class) connector.taskClass(); + List> configs = connector.taskConfigs(maxTasks); + LOGGER.info("Starting {} tasks for connector {}", configs.size(), connectorClass.getCanonicalName()); + executorService = Executors.newFixedThreadPool(configs.size()); + for (Map cfg : configs) { + SourceTask t = taskClass.newInstance(); + SourceThread st = new SourceThread(t, sqlContext, cfg, sharedSourceTaskContext); + executorService.execute(st.start()); + sourceThreads.add(st); + } + } + + @Override + public StructType schema() { + return SCHEMA; + } + + @Override + public Option getOffset() { + Optional offset = sharedSourceTaskContext.lastOffset(); + return offset.isPresent() ? Option.apply(LongOffset.apply(offset.get())) : Option.empty(); + + } + + + @Override + public Dataset getBatch(Option start, Offset end) { + return sqlContext.createDataFrame( + sharedSourceTaskContext.read(start.isDefined() ? Optional.of(start.get()) : Optional.empty(), end) + .stream() + .map(record -> new GenericRow(new Object[]{ + record.topic(), + record.kafkaPartition(), + keyConverter.fromConnectData(record.topic(), record.keySchema(), record.key()), + valueConverter.fromConnectData(record.topic(), record.valueSchema(), record.value()) + })).collect(Collectors.toList()), + DATA_SCHEMA); + } + + @Override + public void commit(Offset end) { + sharedSourceTaskContext.commit(end); + } + + @Override + public void stop() { + LOGGER.info("Stopping connector {}", connector.getClass().getCanonicalName()); + executorService.shutdownNow(); + sourceThreads.forEach(SourceThread::stop); + offsetBackingStore.stop(); + connector.stop(); + } +} + diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSourceProvider.java b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSourceProvider.java new file mode 100644 index 000000000..aa347bf27 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSourceProvider.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.util.kafkaconnect.source; + +import com.hurence.logisland.stream.StreamProperties; +import org.apache.kafka.connect.source.SourceConnector; +import org.apache.kafka.connect.storage.Converter; +import org.apache.spark.sql.SQLContext; +import org.apache.spark.sql.execution.streaming.Source; +import org.apache.spark.sql.sources.StreamSourceProvider; +import org.apache.spark.sql.types.StructType; +import scala.Option; +import scala.Tuple2; +import scala.collection.immutable.Map; + +import java.io.IOException; +import java.io.StringReader; +import java.util.Properties; +import java.util.stream.Collectors; + +public class KafkaConnectStreamSourceProvider implements StreamSourceProvider { + + private Converter createConverter(Map parameters, String classKey, String propertyKey) + throws ClassNotFoundException, IllegalAccessException, InstantiationException, IOException { + Converter ret = (Converter) Class.forName(parameters.get(classKey).get()).newInstance(); + ret.configure(propertiesToMap(parameters.get(propertyKey).get()), false); + return ret; + } + + private java.util.Map propertiesToMap(String propertiesAsString) throws IOException { + Properties props = new Properties(); + props.load(new StringReader(propertiesAsString)); + return props.entrySet().stream().collect(Collectors.toMap(e -> e.getKey().toString(), e -> e.getValue().toString())); + } + + @Override + public Source createSource(SQLContext sqlContext, String metadataPath, Option schema, String providerName, Map parameters) { + try { + Converter keyConverter = createConverter(parameters, StreamProperties.KAFKA_CONNECT_KEY_CONVERTER().getName(), + StreamProperties.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName()); + Converter valueConverter = createConverter(parameters, StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER().getName(), + StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName()); + return new KafkaConnectStreamSource(sqlContext, + propertiesToMap(parameters.get(StreamProperties.KAFKA_CONNECT_CONNECTOR_PROPERTIES().getName()).get()), + keyConverter, + valueConverter, + Integer.parseInt(parameters.get(StreamProperties.KAFKA_CONNECT_MAX_TASKS().getName()).get()), + (Class) Class.forName(parameters.get(StreamProperties.KAFKA_CONNECT_CONNECTOR_CLASS().getName()).get())); + } catch (Exception e) { + throw new IllegalArgumentException("Unable to create kafka connect stream source", e); + } + + + } + + @Override + public Tuple2 sourceSchema(SQLContext sqlContext, Option schema, String providerName, Map parameters) { + return Tuple2.apply(providerName, KafkaConnectStreamSource.DATA_SCHEMA); + } +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SharedSourceTaskContext.java b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SharedSourceTaskContext.java new file mode 100644 index 000000000..1b7f5673a --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SharedSourceTaskContext.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.util.kafkaconnect.source; + +import org.apache.kafka.connect.source.SourceRecord; +import org.apache.kafka.connect.source.SourceTask; +import org.apache.kafka.connect.source.SourceTaskContext; +import org.apache.kafka.connect.storage.OffsetStorageReader; +import org.apache.kafka.connect.storage.OffsetStorageWriter; +import org.apache.spark.sql.execution.streaming.Offset; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import scala.Tuple3; + +import java.util.*; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +public class SharedSourceTaskContext implements SourceTaskContext { + + private static final Logger LOGGER = LoggerFactory.getLogger(SharedSourceTaskContext.class); + + + private final OffsetStorageReader offsetStorageReader; + private final OffsetStorageWriter offsetStorageWriter; + private final Deque> buffer = new LinkedList<>(); + private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); + + + public SharedSourceTaskContext(OffsetStorageReader offsetStorageReader, OffsetStorageWriter offsetStorageWriter) { + this.offsetStorageReader = offsetStorageReader; + this.offsetStorageWriter = offsetStorageWriter; + + } + + @Override + public OffsetStorageReader offsetStorageReader() { + return offsetStorageReader; + } + + public Optional lastOffset() { + Lock lock = rwLock.readLock(); + try { + lock.lock(); + return Optional.ofNullable(buffer.isEmpty() ? null : + new Long(buffer.getLast()._1().sourceOffset().hashCode())); + } finally { + lock.unlock(); + } + } + + public Collection read(Optional from, Offset to) { + Lock lock = rwLock.readLock(); + try { + lock.lock(); + boolean started = false; + Collection ret = new ArrayList<>(); + for (Tuple3 current : buffer) { + Offset lo = current._2(); + if (started || !from.isPresent() || from.get().equals(lo)) { + started = true; + ret.add(current._1()); + } + if (to.equals(lo)) { + break; + } + } + return ret; + } finally { + lock.unlock(); + + } + } + + public void offer(SourceRecord record, Offset offset, SourceTask emitter) { + buffer.addLast(Tuple3.apply(record, offset, emitter)); + } + + public void commit(Offset endOffset) { + Lock lock = rwLock.readLock(); + try { + lock.lock(); + Tuple3 sr = buffer.stream() + .filter(item -> endOffset.equals(item._2())) + .findFirst().get(); + offsetStorageWriter.offset(sr._1().sourcePartition(), sr._1().sourceOffset()); + if (offsetStorageWriter.beginFlush()) { + offsetStorageWriter.doFlush((error, result) -> { + if (error != null) { + Lock ll = rwLock.writeLock(); + try { + ll.lock(); + while (!buffer.isEmpty()) { + Tuple3 current = buffer.removeFirst(); + if (current._3() != null) { + try { + current._3().commitRecord(current._1()); + } catch (InterruptedException e) { + LOGGER.warn("Interrupted while committing", e); + } + } + if (endOffset.equals(current._2())) { + break; + } + } + } finally { + ll.unlock(); + } + } else { + LOGGER.error("Unable to commit records till source offset " + endOffset, error); + } + }); + } + } finally { + lock.unlock(); + } + + } + + public void clean() { + Lock lock = rwLock.writeLock(); + try { + lock.lock(); + buffer.clear(); + } finally { + lock.unlock(); + } + } +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SourceThread.java b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SourceThread.java new file mode 100644 index 000000000..fc3093722 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SourceThread.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.util.kafkaconnect.source; + +import org.apache.kafka.connect.source.SourceRecord; +import org.apache.kafka.connect.source.SourceTask; +import org.apache.spark.sql.SQLContext; +import org.apache.spark.sql.execution.streaming.LongOffset; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Source polling thread. + */ +class SourceThread implements Runnable { + + private static final Logger LOGGER = LoggerFactory.getLogger(SourceTask.class); + + private final SourceTask task; + private final SQLContext sqlContext; + private final Map config; + private final SharedSourceTaskContext sharedSourceTaskContext; + private final AtomicBoolean running = new AtomicBoolean(false); + + + public SourceThread(SourceTask task, SQLContext sqlContext, Map config, SharedSourceTaskContext sharedSourceTaskContext) { + this.sqlContext = sqlContext; + this.task = task; + this.config = Collections.unmodifiableMap(config); + this.sharedSourceTaskContext = sharedSourceTaskContext; + task.initialize(sharedSourceTaskContext); + } + + @Override + public void run() { + while (running.get()) { + try { + List records = task.poll(); + if (records != null) { + records.forEach(sourceRecord -> sharedSourceTaskContext.offer(sourceRecord, LongOffset.apply(sourceRecord.sourceOffset().hashCode()), task)); + } + } catch (InterruptedException ie) { + break; + } catch (Exception e) { + LOGGER.warn("Unexpected error occurred while polling task " + task.getClass().getCanonicalName(), e); + } + } + } + + public SourceThread start() { + try { + task.start(config); + running.set(true); + } catch (Throwable t) { + LOGGER.error("Unable to start task " + task.getClass().getCanonicalName(), t); + try { + task.stop(); + } catch (Throwable tt) { + //swallow + } + } + + return this; + } + + public void stop() { + running.set(false); + + } +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala index 5b13b878c..c4adf05b0 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala @@ -4,6 +4,8 @@ import com.hurence.logisland.component.{AllowableValue, PropertyDescriptor} import com.hurence.logisland.serializer._ import com.hurence.logisland.stream.spark.structured.provider.StructuredStreamProviderService import com.hurence.logisland.validator.StandardValidators +import org.apache.kafka.connect.connector.Connector +import org.apache.kafka.connect.storage.Converter /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -270,97 +272,97 @@ object StreamProperties { .build - ////////////////////////////////////// - // MQTT options - ////////////////////////////////////// - - val MQTT_BROKER_URL: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.broker.url") - .description("brokerUrl A url MqttClient connects to. Set this or path as the url of the Mqtt Server. e.g. tcp://localhost:1883") - .addValidator(StandardValidators.URL_VALIDATOR) - .defaultValue("tcp://localhost:1883") - .required(false) - .build - - val MQTT_PERSISTENCE: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.persistence") - .description("persistence By default it is used for storing incoming messages on disk. " + - "If memory is provided as value for this option, then recovery on restart is not supported.") - .defaultValue("memory") - .required(false) - .build - - val MQTT_TOPIC: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.topic") - .description("Topic MqttClient subscribes to.") - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .required(true) - .build - - val MQTT_CLIENTID: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.client.id") - .description("clientID this client is associated. Provide the same value to recover a stopped client.") - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .required(true) - .build - - val MQTT_QOS: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.qos") - .description(" QoS The maximum quality of service to subscribe each topic at.Messages published at a lower " + - "quality of service will be received at the published QoS.Messages published at a higher quality of " + - "service will be received using the QoS specified on the subscribe") - .addValidator(StandardValidators.INTEGER_VALIDATOR) - .defaultValue("0") - .required(false) - .build - - val MQTT_USERNAME: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.username") - .description(" username Sets the user name to use for the connection to Mqtt Server. " + - "Do not set it, if server does not need this. Setting it empty will lead to errors.") - .required(false) - .build - - val MQTT_PASSWORD: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.password") - .description("password Sets the password to use for the connection") - .required(false) - .build - - val MQTT_CLEAN_SESSION: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.clean.session") - .description("cleanSession Setting it true starts a clean session, removes all checkpointed messages by " + - "a previous run of this source. This is set to false by default.") - .addValidator(StandardValidators.BOOLEAN_VALIDATOR) - .defaultValue("true") - .required(false) - .build - - val MQTT_CONNECTION_TIMEOUT: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.connection.timeout") - .description("connectionTimeout Sets the connection timeout, a value of 0 is interpreted as " + - "wait until client connects. See MqttConnectOptions.setConnectionTimeout for more information") - .addValidator(StandardValidators.INTEGER_VALIDATOR) - .defaultValue("5000") - .required(false) - .build - - val MQTT_KEEP_ALIVE: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.keep.alive") - .description("keepAlive Same as MqttConnectOptions.setKeepAliveInterval.") - .addValidator(StandardValidators.INTEGER_VALIDATOR) - .defaultValue("5000") - .required(false) - .build - - - val MQTT_VERSION: PropertyDescriptor = new PropertyDescriptor.Builder() - .name("mqtt.version") - .description("mqttVersion Same as MqttConnectOptions.setMqttVersion") - .addValidator(StandardValidators.INTEGER_VALIDATOR) - .defaultValue("5000") - .required(false) - .build + ////////////////////////////////////// + // MQTT options + ////////////////////////////////////// + + val MQTT_BROKER_URL: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.broker.url") + .description("brokerUrl A url MqttClient connects to. Set this or path as the url of the Mqtt Server. e.g. tcp://localhost:1883") + .addValidator(StandardValidators.URL_VALIDATOR) + .defaultValue("tcp://localhost:1883") + .required(false) + .build + + val MQTT_PERSISTENCE: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.persistence") + .description("persistence By default it is used for storing incoming messages on disk. " + + "If memory is provided as value for this option, then recovery on restart is not supported.") + .defaultValue("memory") + .required(false) + .build + + val MQTT_TOPIC: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.topic") + .description("Topic MqttClient subscribes to.") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .required(true) + .build + + val MQTT_CLIENTID: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.client.id") + .description("clientID this client is associated. Provide the same value to recover a stopped client.") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .required(true) + .build + + val MQTT_QOS: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.qos") + .description(" QoS The maximum quality of service to subscribe each topic at.Messages published at a lower " + + "quality of service will be received at the published QoS.Messages published at a higher quality of " + + "service will be received using the QoS specified on the subscribe") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("0") + .required(false) + .build + + val MQTT_USERNAME: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.username") + .description(" username Sets the user name to use for the connection to Mqtt Server. " + + "Do not set it, if server does not need this. Setting it empty will lead to errors.") + .required(false) + .build + + val MQTT_PASSWORD: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.password") + .description("password Sets the password to use for the connection") + .required(false) + .build + + val MQTT_CLEAN_SESSION: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.clean.session") + .description("cleanSession Setting it true starts a clean session, removes all checkpointed messages by " + + "a previous run of this source. This is set to false by default.") + .addValidator(StandardValidators.BOOLEAN_VALIDATOR) + .defaultValue("true") + .required(false) + .build + + val MQTT_CONNECTION_TIMEOUT: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.connection.timeout") + .description("connectionTimeout Sets the connection timeout, a value of 0 is interpreted as " + + "wait until client connects. See MqttConnectOptions.setConnectionTimeout for more information") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("5000") + .required(false) + .build + + val MQTT_KEEP_ALIVE: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.keep.alive") + .description("keepAlive Same as MqttConnectOptions.setKeepAliveInterval.") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("5000") + .required(false) + .build + + + val MQTT_VERSION: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("mqtt.version") + .description("mqttVersion Same as MqttConnectOptions.setMqttVersion") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("5000") + .required(false) + .build val READ_TOPICS: PropertyDescriptor = new PropertyDescriptor.Builder() .name("read.topics") @@ -374,7 +376,16 @@ object StreamProperties { .description("the serializer to use") .required(true) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .allowableValues(KRYO_SERIALIZER, JSON_SERIALIZER, AVRO_SERIALIZER, BYTESARRAY_SERIALIZER, NO_SERIALIZER,KURA_PROTOCOL_BUFFER_SERIALIZER) + .allowableValues(KRYO_SERIALIZER, JSON_SERIALIZER, AVRO_SERIALIZER, BYTESARRAY_SERIALIZER, NO_SERIALIZER, KURA_PROTOCOL_BUFFER_SERIALIZER) + .defaultValue(NO_SERIALIZER.getValue) + .build + + val READ_TOPICS_KEY_SERIALIZER: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("read.topics.key.serializer") + .description("The key serializer to use") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues(KRYO_SERIALIZER, JSON_SERIALIZER, NO_SERIALIZER) .defaultValue(NO_SERIALIZER.getValue) .build @@ -402,6 +413,15 @@ object StreamProperties { .defaultValue(NO_SERIALIZER.getValue) .build + val WRITE_TOPICS_KEY_SERIALIZER: PropertyDescriptor = new PropertyDescriptor.Builder() + .name("write.topics.key.serializer") + .description("The key serializer to use") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues(KRYO_SERIALIZER, JSON_SERIALIZER, AVRO_SERIALIZER, BYTESARRAY_SERIALIZER, NO_SERIALIZER, KURA_PROTOCOL_BUFFER_SERIALIZER) + .defaultValue(NO_SERIALIZER.getValue) + .build + val WRITE_TOPICS_CLIENT_SERVICE: PropertyDescriptor = new PropertyDescriptor.Builder() .name("write.topics.client.service") .description("the controller service that gives connection information") @@ -410,11 +430,6 @@ object StreamProperties { .build - - - - - ////////////////////////////////////// // HDFS options ////////////////////////////////////// @@ -489,4 +504,63 @@ object StreamProperties { .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .defaultValue("aggregation") .build + + ////////////////////////////////////// + // Kafka Connect options + ////////////////////////////////////// + val KAFKA_CONNECT_CONNECTOR_CLASS = new PropertyDescriptor.Builder() + .name("kc.connector.class") + .description("The class canonical name of the kafka connector to use.") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Connector])) + .build + + val KAFKA_CONNECT_CONNECTOR_PROPERTIES = new PropertyDescriptor.Builder() + .name("kc.connector.properties") + .description("The properties (key=value) for the connector.") + .required(false) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build + + val KAFKA_CONNECT_MAX_TASKS = new PropertyDescriptor.Builder() + .name("kc.worker.tasks.max") + .description("Max number of threads for this connector") + .required(true) + .defaultValue("1") + .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) + .build + + val KAFKA_CONNECT_KEY_CONVERTER = new PropertyDescriptor.Builder() + .name("kc.data.key.converter") + .description("Key converter class") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Converter])) + .build + + val KAFKA_CONNECT_VALUE_CONVERTER = new PropertyDescriptor.Builder() + .name("kc.data.value.converter") + .description("Value converter class") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Converter])) + .build + + val KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES = new PropertyDescriptor.Builder() + .name("kc.data.key.converter.properties") + .description("Key converter properties") + .required(true) + .defaultValue("") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build + + val KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES = new PropertyDescriptor.Builder() + .name("kc.data.value.converter.properties") + .description("Value converter properties") + .required(true) + .defaultValue("") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build + } diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/StructuredStream.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/StructuredStream.scala index a35034980..e3ed44886 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/StructuredStream.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/StructuredStream.scala @@ -58,9 +58,11 @@ class StructuredStream extends AbstractRecordStream with SparkRecordStream { descriptors.add(READ_TOPICS) descriptors.add(READ_TOPICS_CLIENT_SERVICE) descriptors.add(READ_TOPICS_SERIALIZER) + descriptors.add(READ_TOPICS_KEY_SERIALIZER) descriptors.add(WRITE_TOPICS) descriptors.add(WRITE_TOPICS_CLIENT_SERVICE) descriptors.add(WRITE_TOPICS_SERIALIZER) + descriptors.add(WRITE_TOPICS_KEY_SERIALIZER) descriptors.add(LOGISLAND_AGENT_HOST) descriptors.add(LOGISLAND_AGENT_PULL_THROTTLING) diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/ConsoleStructuredStreamProviderService.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/ConsoleStructuredStreamProviderService.scala index 3f3fd5655..31265036e 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/ConsoleStructuredStreamProviderService.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/ConsoleStructuredStreamProviderService.scala @@ -84,8 +84,7 @@ class ConsoleStructuredStreamProviderService extends AbstractControllerService w val df2 = df - .map(r => (r.getField(FieldDictionary.RECORD_NAME).asString(), r.getField(FieldDictionary.RECORD_VALUE).asString())) - .toDF("metric", "value") + .writeStream .format("console") .start() diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala new file mode 100644 index 000000000..a55013c18 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.stream.spark.structured.provider + +import java.util +import java.util.Collections + +import com.hurence.logisland.annotation.lifecycle.OnEnabled +import com.hurence.logisland.component.{InitializationException, PropertyDescriptor} +import com.hurence.logisland.controller.{AbstractControllerService, ControllerServiceInitializationContext} +import com.hurence.logisland.record.{FieldDictionary, FieldType, Record, StandardRecord} +import com.hurence.logisland.stream.StreamContext +import com.hurence.logisland.stream.StreamProperties._ +import org.apache.spark.sql.types.BinaryType +import org.apache.spark.sql.{Dataset, SparkSession} + +class KafkaConnectStructuredProviderService extends AbstractControllerService with StructuredStreamProviderService { + + var connectorProperties = "" + var keyConverter = "" + var valueConverter = "" + var keyConverterProperties = "" + var valueConverterProperties = "" + var maxConfigurations = 1 + var delegateConnectorClass = "" + + + @OnEnabled + @throws[InitializationException] + override def init(context: ControllerServiceInitializationContext): Unit = { + this.synchronized { + try { + delegateConnectorClass = context.getProperty(KAFKA_CONNECT_CONNECTOR_CLASS) + connectorProperties = context.getProperty(KAFKA_CONNECT_CONNECTOR_PROPERTIES) + valueConverter = context.getProperty(KAFKA_CONNECT_VALUE_CONVERTER) + valueConverterProperties = context.getProperty(KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES) + keyConverter = context.getProperty(KAFKA_CONNECT_KEY_CONVERTER) + keyConverterProperties = context.getProperty(KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES) + maxConfigurations = (context getPropertyValue KAFKA_CONNECT_MAX_TASKS).asInteger() + + } catch { + case e: Exception => + throw new InitializationException(e) + } + } + } + + + /** + * Allows subclasses to register which property descriptor objects are + * supported. + * + * @return PropertyDescriptor objects this processor currently supports + */ + override def getSupportedPropertyDescriptors() = { + val descriptors: util.List[PropertyDescriptor] = new util.ArrayList[PropertyDescriptor] + descriptors.add(KAFKA_CONNECT_CONNECTOR_CLASS) + descriptors.add(KAFKA_CONNECT_CONNECTOR_PROPERTIES) + descriptors.add(KAFKA_CONNECT_KEY_CONVERTER) + descriptors.add(KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES) + descriptors.add(KAFKA_CONNECT_VALUE_CONVERTER) + descriptors.add(KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES) + descriptors.add(KAFKA_CONNECT_MAX_TASKS) + Collections.unmodifiableList(descriptors) + } + + + /** + * create a streaming DataFrame that represents data received + * + * @param spark + * @param streamContext + * @return DataFrame currently loaded + */ + override def read(spark: SparkSession, streamContext: StreamContext) = { + + import spark.implicits._ + implicit val myObjEncoder = org.apache.spark.sql.Encoders.kryo[Record] + + getLogger.info(s"Connecting kafka-connect source $delegateConnectorClass") + + spark.readStream + .format("com.hurence.logisland.util.kafkaconnect.source.KafkaConnectStreamSourceProvider") + .option(KAFKA_CONNECT_CONNECTOR_PROPERTIES.getName, connectorProperties) + .option(KAFKA_CONNECT_KEY_CONVERTER.getName, keyConverter) + .option(KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES.getName, keyConverterProperties) + .option(KAFKA_CONNECT_VALUE_CONVERTER.getName, valueConverter) + .option(KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES.getName, valueConverterProperties) + .option(KAFKA_CONNECT_MAX_TASKS.getName, maxConfigurations) + .option(KAFKA_CONNECT_CONNECTOR_CLASS.getName, delegateConnectorClass) + .load() + //Topic, Partition, + .as[(String, Int, Array[Byte], Array[Byte])] + .map(r => + new StandardRecord("kafka_connect") + .setField(FieldDictionary.RECORD_KEY, FieldType.BYTES, r._3) + .setField(FieldDictionary.RECORD_VALUE, FieldType.BYTES, r._4)) + } + + + /** + * create a streaming DataFrame that represents data received + * + * @param streamContext + * @return DataFrame currently loaded + */ + override def write(df: Dataset[Record], streamContext: StreamContext) = { + df + } + +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala index b40c75d48..56288a66b 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala @@ -4,7 +4,7 @@ import java.io.{ByteArrayInputStream, ByteArrayOutputStream} import java.util import com.hurence.logisland.controller.ControllerService -import com.hurence.logisland.record.{FieldDictionary, Record} +import com.hurence.logisland.record.{Field, FieldDictionary, FieldType, Record} import com.hurence.logisland.serializer.{RecordSerializer, SerializerProvider} import com.hurence.logisland.stream.StreamContext import com.hurence.logisland.stream.StreamProperties._ @@ -79,6 +79,10 @@ trait StructuredStreamProviderService extends ControllerService { streamContext.getPropertyValue(READ_TOPICS_SERIALIZER).asString, streamContext.getPropertyValue(AVRO_INPUT_SCHEMA).asString) + val keySerializer = SerializerProvider.getSerializer( + streamContext.getPropertyValue(READ_TOPICS_KEY_SERIALIZER).asString, + null) + val pipelineMetricPrefix = streamContext.getIdentifier /*+ ".partition" + partitionId*/ + "." val pipelineTimerContext = UserMetricsSystem.timer(pipelineMetricPrefix + "Pipeline.processing_time_ms").time() @@ -87,7 +91,7 @@ trait StructuredStreamProviderService extends ControllerService { // convert to logisland records val incomingEvents = iterator.toList .flatMap(r => { - var processingRecords: util.Collection[Record] = deserializeRecords(serializer, r).toList + var processingRecords: util.Collection[Record] = deserializeRecords(serializer, keySerializer, r).toList // loop over processor chain streamContext.getProcessContexts.foreach(processorContext => { @@ -189,17 +193,28 @@ trait StructuredStreamProviderService extends ControllerService { bytes } - // TODO handle key also - protected def deserializeRecords(serializer: RecordSerializer, r: Record) = { + private def doDeserialize(serializer: RecordSerializer, field: Field) : Record = { + val f = field.getRawValue + val s = if (f.isInstanceOf[String]) f.asInstanceOf[String].getBytes else f; + val bais = new ByteArrayInputStream(s.asInstanceOf[Array[Byte]]) try { - val bais = new ByteArrayInputStream(r.getField(FieldDictionary.RECORD_VALUE).getRawValue.asInstanceOf[Array[Byte]]) - val deserialized = serializer.deserialize(bais) + serializer.deserialize(bais) + } finally { bais.close() + } + } + protected def deserializeRecords(serializer: RecordSerializer, keySerializer:RecordSerializer, r: Record) = { + try { + val deserialized = doDeserialize(serializer, r.getField(FieldDictionary.RECORD_VALUE)) // copy root record field if(r.hasField(FieldDictionary.RECORD_NAME)) deserialized.setField(r.getField(FieldDictionary.RECORD_NAME)) + if(r.hasField(FieldDictionary.RECORD_KEY) && r.getField(FieldDictionary.RECORD_KEY).getRawValue != null) + deserialized.setField(FieldDictionary.RECORD_KEY, FieldType.RECORD, + doDeserialize(keySerializer, r.getField(FieldDictionary.RECORD_KEY))) + Some(deserialized) } catch { case t: Throwable => diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/KafkaConnectTest.java b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/KafkaConnectTest.java new file mode 100644 index 000000000..4ee8c8665 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/KafkaConnectTest.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.engine; + +import com.hurence.logisland.component.ComponentFactory; +import com.hurence.logisland.config.ConfigReader; +import com.hurence.logisland.config.LogislandConfiguration; +import com.hurence.logisland.util.spark.SparkUtils; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Optional; + + +public class KafkaConnectTest { + private static Logger logger = LoggerFactory.getLogger(KafkaConnectTest.class); + + private static final String JOB_CONF_FILE = "/conf/kafka-connect-stream.yml"; + + @Test + public void remoteTest() { + + + logger.info("starting StreamProcessingRunner"); + + Optional engineInstance = Optional.empty(); + try { + + String configFile = KafkaConnectTest.class.getResource(JOB_CONF_FILE).getPath(); + + // load the YAML config + LogislandConfiguration sessionConf = ConfigReader.loadConfig(configFile); + + // instantiate engine and all the processor from the config + engineInstance = ComponentFactory.getEngineContext(sessionConf.getEngine()); + assert engineInstance.isPresent(); + assert engineInstance.get().isValid(); + + logger.info("starting Logisland session version {}", sessionConf.getVersion()); + logger.info(sessionConf.getDocumentation()); + } catch (Exception e) { + logger.error("unable to launch runner : {}", e); + } + + try { + // start the engine + EngineContext engineContext = engineInstance.get(); + engineInstance.get().getEngine().start(engineContext); + } catch (Exception e) { + logger.error("something went bad while running the job : {}", e); + System.exit(-1); + } + + + + + + + } + +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java new file mode 100644 index 000000000..09ba4fcac --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.engine.kc; + +import org.apache.kafka.common.config.ConfigDef; +import org.apache.kafka.common.utils.AppInfoParser; +import org.apache.kafka.connect.connector.Task; +import org.apache.kafka.connect.errors.ConnectException; +import org.apache.kafka.connect.source.SourceConnector; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * BinarySourceConnector implements the connector interface + * to write on Kafka binary files + * + * @author Alex Piermatteo + */ +public class BinarySourceConnector extends SourceConnector { + + + public static final String SCHEMA_NAME = "schema.name"; + public static final String TOPIC = "topic"; + public static final String FILE_PATH = "filename.path"; + + private String schema_name; + private String topic; + private String filename_path; + + + /** + * Get the version of this connector. + * + * @return the version, formatted as a String + */ + @Override + public String version() { + return AppInfoParser.getVersion(); + } + + + /** + * Start this Connector. This method will only be called on a clean Connector, i.e. it has + * either just been instantiated and initialized or {@link #stop()} has been invoked. + * + * @param props configuration settings + */ + @Override + public void start(Map props) { + + schema_name = props.get(SCHEMA_NAME); + if (schema_name == null || schema_name.isEmpty()) + throw new ConnectException("missing schema.name"); + topic = props.get(TOPIC); + if (topic == null || topic.isEmpty()) + throw new ConnectException("missing topic"); + + filename_path = props.get(FILE_PATH); + if (filename_path == null || filename_path.isEmpty()) + throw new ConnectException("missing filename.path"); + + + } + + + /** + * Returns the Task implementation for this Connector. + * + * @return tha Task implementation Class + */ + @Override + public Class taskClass() { + return BinarySourceTask.class; + } + + + /** + * Returns a set of configurations for the Task based on the current configuration. + * It always creates a single set of configurations. + * + * @param maxTasks maximum number of configurations to generate + * @return configurations for the Task + */ + @Override + public List> taskConfigs(int maxTasks) { + ArrayList> configs = new ArrayList<>(); + for (int i = 0; i < maxTasks; i++) { + Map config = new HashMap<>(); + + config.put(FILE_PATH, filename_path); + config.put(SCHEMA_NAME, schema_name); + config.put(TOPIC, topic); + configs.add(config); + } + return configs; + } + + + /** + * Stop this connector. + */ + @Override + public void stop() { + + } + + @Override + public ConfigDef config() { + return new ConfigDef() + .define(FILE_PATH, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "File Path") + .define(SCHEMA_NAME, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "Schema name") + .define(TOPIC, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "Output topic"); + } + +} \ No newline at end of file diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java new file mode 100644 index 000000000..fb0e330f4 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.engine.kc; + +import org.apache.kafka.common.errors.InterruptException; +import org.apache.kafka.connect.data.Schema; +import org.apache.kafka.connect.data.SchemaBuilder; +import org.apache.kafka.connect.data.Struct; +import org.apache.kafka.connect.errors.ConnectException; +import org.apache.kafka.connect.source.SourceRecord; +import org.apache.kafka.connect.source.SourceTask; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + + +/** + * BinarySourceTask is a Task that reads changes from a directory for storage + * new binary detected files in Kafka. + * + * @author Alex Piermatteo + */ +public class BinarySourceTask extends SourceTask { + private final static Logger log = LoggerFactory.getLogger(BinarySourceTask.class); + + private static Schema schema = null; + private String schemaName; + private String topic; + private String filename_path; + private boolean ran = false; + + + @Override + public String version() { + return new BinarySourceConnector().version(); + } + + /** + * Start the Task. Handles configuration parsing and one-time setup of the Task. + * + * @param props initial configuration + */ + @Override + public void start(Map props) { + + schemaName = props.get(BinarySourceConnector.SCHEMA_NAME); + if (schemaName == null) + throw new ConnectException("config schema.name null"); + topic = props.get(BinarySourceConnector.TOPIC); + if (topic == null) + throw new ConnectException("config topic null"); + + filename_path = props.get(BinarySourceConnector.FILE_PATH); + if (filename_path == null || filename_path.isEmpty()) + throw new ConnectException("missing filename.path"); + + + log.trace("Creating schema"); + schema = SchemaBuilder + .struct().name(schemaName) + .field("name", Schema.OPTIONAL_STRING_SCHEMA) + .field("binary", Schema.OPTIONAL_BYTES_SCHEMA) + .build(); + } + + + /** + * Poll this BinarySourceTask for new records. + * + * @return a list of source records + * @throws InterruptedException + */ + @Override + public List poll() throws InterruptException { + if (!ran) { + ran = true; + List records = new ArrayList<>(); + + File file = new File(filename_path); + // creates the record + // no need to save offsets + SourceRecord record = create_binary_record(file); + records.add(record); + this.stop(); + + + return records; + } + return null; + } + + + /** + * Create a new SourceRecord from a File + * + * @return a source records + */ + private SourceRecord create_binary_record(File file) { + + byte[] data = null; + try { + //transform file to byte[] + Path path = Paths.get(file.getPath()); + data = Files.readAllBytes(path); + log.error(String.valueOf(data.length)); + } catch (IOException e) { + e.printStackTrace(); + } + + // creates the structured message + Struct messageStruct = new Struct(schema); + messageStruct.put("name", file.getName()); + messageStruct.put("binary", data); + // creates the record + // no need to save offsets + return new SourceRecord(Collections.singletonMap("file_binary", 0), Collections.singletonMap("0", 0), topic, 0, messageStruct.schema(), messageStruct); + } + + + /** + * Signal this SourceTask to stop. + */ + @Override + public void stop() { + } + +} \ No newline at end of file diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml new file mode 100644 index 000000000..e5a94d5c7 --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml @@ -0,0 +1,96 @@ +version: 0.12.2 +documentation: LogIsland future factory job + +engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Index some apache logs with logisland + configuration: + spark.app.name: FutureFactory + spark.master: local[*] + spark.driver.memory: 512M + spark.driver.cores: 1 + spark.executor.memory: 512M + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + #spark.serializer: org.apache.spark.serializer.JavaSerializer + spark.streaming.batchDuration: 2000 + spark.streaming.backpressure.enabled: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 10000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4040 + + controllerServiceConfigurations: + + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaConnectStructuredProviderService + configuration: + kc.data.value.converter: com.hurence.logisland.util.kafkaconnect.LogIslandRecordConverter + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + kc.data.key.converter.properties: | + schemas.enable=false + kc.data.key.converter: org.apache.kafka.connect.json.JsonConverter + kc.worker.tasks.max: 1 + kc.connector.class: com.hurence.logisland.engine.kc.BinarySourceConnector + kc.connector.properties: | + schema.name=test + topic=test + filename.path=/Users/amarziali/nasa.txt + - controllerService: console_service + component: com.hurence.logisland.stream.spark.structured.provider.ConsoleStructuredStreamProviderService + + streamConfigurations: + + # indexing stream + - stream: indexing_stream + component: com.hurence.logisland.stream.spark.structured.StructuredStream + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.JsonSerializer + read.topics.client.service: kc_source_service + write.topics: /a/out + write.topics.serializer: none + write.topics.client.service: console_service + + processorConfigurations: + + + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "extract from root record" + configuration: + keep.root.record: false + copy.root.record.fields: true + leaf.record.type: record_value + + - processor: create_aliases + component: com.hurence.logisland.processor.NormalizeFields + type: processor + documentation: "creates an alias tagname/record_name. record_name will be used as metric name into Chronix" + configuration: + conflict.resolution.policy: do_nothing + record_name: name + record_value: binary + record_key: name + + - processor: stream_debugger + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json \ No newline at end of file diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/BytesArraySerializer.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/BytesArraySerializer.java index 1e17a5034..7675f6f94 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/BytesArraySerializer.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/BytesArraySerializer.java @@ -31,20 +31,24 @@ package com.hurence.logisland.serializer; -import com.hurence.logisland.record.FieldDictionary; -import com.hurence.logisland.record.FieldType; -import com.hurence.logisland.record.Record; -import com.hurence.logisland.record.StandardRecord; +import com.hurence.logisland.record.*; import org.apache.commons.io.IOUtils; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class BytesArraySerializer implements RecordSerializer { - /* TODO */ public void serialize(OutputStream objectDataOutput, Record record) { - throw new RuntimeException("BytesArraySerializer serialize method not implemented yet"); + Field f = record.getField(FieldDictionary.RECORD_VALUE); + if (f != null && f.isSet() && f.getType().equals(FieldType.BYTES)) { + try { + objectDataOutput.write((byte[])record.getField(FieldDictionary.RECORD_VALUE).getRawValue()); + } catch (IOException ioe) { + throw new RecordSerializationException(ioe.getMessage(), ioe.getCause()); + } + } } public Record deserialize(InputStream objectDataInput) { @@ -54,7 +58,6 @@ public Record deserialize(InputStream objectDataInput) { record.setField(FieldDictionary.RECORD_VALUE, FieldType.BYTES, bytes); return record; } catch (Throwable t) { - // t.printStackTrace(); throw new RecordSerializationException(t.getMessage(), t.getCause()); } } diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java index d7fa0d535..c51befe3f 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java @@ -246,11 +246,17 @@ public Record deserialize(JsonParser jp, DeserializationContext ctxt) throws IOE } } - Record record = new StandardRecord(type); - record.setId(id); - record.setType(type); - record.setTime(creationDate); - record.setFields(fields); + Record record = new StandardRecord(); + if (id != null) { + record.setId(id); + } + if (type != null) { + record.setType(type); + } + if (creationDate != null) { + record.setTime(creationDate); + } + record.addFields(fields); return record; diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/StringSerializer.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/StringSerializer.java index 6c82b8311..bee772dc4 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/StringSerializer.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/StringSerializer.java @@ -1,12 +1,12 @@ /** * Copyright (C) 2016 Hurence (support@hurence.com) - * + *

* 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 - * + *

+ * 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. @@ -31,20 +31,18 @@ package com.hurence.logisland.serializer; +import com.hurence.logisland.record.FieldDictionary; +import com.hurence.logisland.record.FieldType; import com.hurence.logisland.record.Record; import com.hurence.logisland.record.StandardRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.io.IOUtils; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class StringSerializer implements RecordSerializer { - - private static Logger logger = LoggerFactory.getLogger(StringSerializer.class); - - + @Override public void serialize(OutputStream out, Record record) throws RecordSerializationException { @@ -60,8 +58,11 @@ public void serialize(OutputStream out, Record record) throws RecordSerializatio @Override public Record deserialize(InputStream in) throws RecordSerializationException { - - throw new RuntimeException("not implemented yet"); + try { + return new StandardRecord().setField(FieldDictionary.RECORD_VALUE, FieldType.STRING, IOUtils.toString(in)); + } catch (IOException ioe) { + throw new RecordSerializationException(ioe.getMessage(), ioe); + } } } \ No newline at end of file diff --git a/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/NormalizeFields.java b/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/NormalizeFields.java index 762871fe5..f2a81c45c 100644 --- a/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/NormalizeFields.java +++ b/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/NormalizeFields.java @@ -53,7 +53,7 @@ public class NormalizeFields extends AbstractProcessor { public static final PropertyDescriptor CONFLICT_RESOLUTION_POLICY = new PropertyDescriptor.Builder() .name("conflict.resolution.policy") - .description("waht to do when a field with the same name already exists ?") + .description("what to do when a field with the same name already exists ?") .required(true) .defaultValue(DO_NOTHING.getValue()) .allowableValues(DO_NOTHING, OVERWRITE_EXISTING, KEEP_ONLY_OLD_FIELD, KEEP_BOTH_FIELDS) From 84204e9023501aa56d283511dd63756651f0dede Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Tue, 27 Mar 2018 09:37:43 +0200 Subject: [PATCH 07/35] Do some cleanup Implement missing sink part of structured stream. So some E2E testing --- logisland-assembly/pom.xml | 7 ++ .../logisland-spark_2_1-engine/pom.xml | 18 +++- .../source/KafkaConnectStreamSource.java | 6 +- ...KafkaStructuredStreamProviderService.scala | 93 ++++++++++-------- .../StructuredStreamProviderService.scala | 82 +++++++++------- .../resources/conf/kafka-connect-stream.yml | 95 +++++++++++++------ .../src/test/resources/git.properties | 0 .../src/test/resources/logback.xml | 57 +++++++++++ .../serializer/SerializerProvider.java | 3 + 9 files changed, 252 insertions(+), 109 deletions(-) create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/resources/git.properties create mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/resources/logback.xml diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index d2255ff30..3a4b731f0 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -229,6 +229,13 @@ com.hurence.logisland logisland-agent + + + com.eneco + kafka-connect-ftp + 0.1.4 + + diff --git a/logisland-engines/logisland-spark_2_1-engine/pom.xml b/logisland-engines/logisland-spark_2_1-engine/pom.xml index 868f1c7df..6df927b21 100644 --- a/logisland-engines/logisland-spark_2_1-engine/pom.xml +++ b/logisland-engines/logisland-spark_2_1-engine/pom.xml @@ -57,10 +57,7 @@ http://www.w3.org/2001/XMLSchema-instance "> org.slf4j slf4j-api - - ch.qos.logback - logback-classic - + com.groupon.dse spark-metrics @@ -112,7 +109,18 @@ http://www.w3.org/2001/XMLSchema-instance "> ${kafka.version} - + + + com.eneco + kafka-connect-ftp + 0.1.4 + test + + + com.hurence.logisland + logisland-excel-plugin + test + com.fasterxml.jackson.core diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java index b70d73487..943070884 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java @@ -39,10 +39,7 @@ import org.slf4j.LoggerFactory; import scala.Option; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.stream.Collectors; @@ -126,6 +123,7 @@ public void raiseError(Exception e) { offsetBackingStore.start(); //TODO: add different storage here JsonConverter internalConverter = new JsonConverter(); + internalConverter.configure(Collections.singletonMap("schemas.enable", "false"), false); sharedSourceTaskContext = new SharedSourceTaskContext( new OffsetStorageReaderImpl(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter), new OffsetStorageWriter(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter)); diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala index 700104aa9..f08932c3d 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala @@ -1,3 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.stream.spark.structured.provider import java.util @@ -10,50 +27,28 @@ import com.hurence.logisland.record.{FieldDictionary, FieldType, Record, Standar import com.hurence.logisland.stream.StreamContext import com.hurence.logisland.stream.StreamProperties._ import com.hurence.logisland.util.kafka.KafkaSink -import com.hurence.logisland.util.spark.{ControllerServiceLookupSink, RestJobsApiClientSink} import kafka.admin.AdminUtils import kafka.utils.ZkUtils import org.apache.kafka.clients.consumer.ConsumerConfig import org.apache.kafka.clients.producer.ProducerConfig import org.apache.kafka.common.security.JaasUtils import org.apache.kafka.common.serialization.{ByteArrayDeserializer, ByteArraySerializer} -import org.apache.spark.broadcast.Broadcast -import org.apache.spark.sql.{DataFrame, Dataset, SparkSession} -import org.slf4j.LoggerFactory +import org.apache.spark.sql.{Dataset, ForeachWriter, SparkSession} + -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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. - */ class KafkaStructuredStreamProviderService() extends AbstractControllerService with StructuredStreamProviderService { - // private val logger = LoggerFactory.getLogger(this.getClass) + // private val logger = LoggerFactory.getLogger(this.getClass) var appName = "" - var kafkaSink: Broadcast[KafkaSink] = _ - var restApiSink: Broadcast[RestJobsApiClientSink] = _ - var controllerServiceLookupSink: Broadcast[ControllerServiceLookupSink] = _ - - - + var kafkaSinkParams : Map[String, Object] = _ + var kafkaParams : Map[String, Object] = _ // Define the Kafka parameters, broker list must be specified var inputTopics = Set[String]() - var outputTopics = Set[String]() - var errorTopics = Set[String]() - var metricsTopics = Set[String]() + var outputTopics = Set[String]() + var errorTopics = Set[String]() + var metricsTopics = Set[String]() var topicAutocreate = true var topicDefaultPartitions = 3 var topicDefaultReplicationFactor = 1 @@ -85,11 +80,11 @@ class KafkaStructuredStreamProviderService() extends AbstractControllerService w kafkaBatchSize = context.getPropertyValue(KAFKA_BATCH_SIZE).asString kafkaLingerMs = context.getPropertyValue(KAFKA_LINGER_MS).asString - kafkaAcks = context.getPropertyValue(KAFKA_ACKS).asString - kafkaOffset = context.getPropertyValue(KAFKA_MANUAL_OFFSET_RESET).asString + kafkaAcks = context.getPropertyValue(KAFKA_ACKS).asString + kafkaOffset = context.getPropertyValue(KAFKA_MANUAL_OFFSET_RESET).asString - val kafkaSinkParams = Map( + kafkaSinkParams = Map( ProducerConfig.BOOTSTRAP_SERVERS_CONFIG -> brokerList, ProducerConfig.CLIENT_ID_CONFIG -> appName, ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG -> classOf[ByteArraySerializer].getCanonicalName, @@ -101,8 +96,6 @@ class KafkaStructuredStreamProviderService() extends AbstractControllerService w ProducerConfig.RETRY_BACKOFF_MS_CONFIG -> "1000", ProducerConfig.RECONNECT_BACKOFF_MS_CONFIG -> "1000") - // kafkaSink = spark.sparkContext.broadcast(KafkaSink(kafkaSinkParams)) - // TODO deprecate topic creation here (must be done through the agent) if (topicAutocreate) { @@ -114,7 +107,7 @@ class KafkaStructuredStreamProviderService() extends AbstractControllerService w } - val kafkaParams = Map[String, Object]( + kafkaParams = Map[String, Object]( ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG -> brokerList, ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG -> classOf[ByteArrayDeserializer], ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG -> classOf[ByteArrayDeserializer], @@ -134,6 +127,7 @@ class KafkaStructuredStreamProviderService() extends AbstractControllerService w } } } + /** * create a streaming DataFrame that represents data received * @@ -160,7 +154,7 @@ class KafkaStructuredStreamProviderService() extends AbstractControllerService w new StandardRecord("kura_metric") .setField(FieldDictionary.RECORD_KEY, FieldType.BYTES, r._1) .setField(FieldDictionary.RECORD_VALUE, FieldType.BYTES, r._2) - } ) + }) /* df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)") .as[(String, String)]*/ @@ -229,8 +223,31 @@ class KafkaStructuredStreamProviderService() extends AbstractControllerService w * @return DataFrame currently loaded */ override def write(df: Dataset[Record], streamContext: StreamContext) = { + //implicit val myObjEncoder = org.apache.spark.sql.Encoders.tuple(Encoders.BINARY, Encoders.BINARY) + val writer = new ForeachWriter[Record] { + var sender: KafkaSink = _ + override def open(partitionId: Long, version: Long) = { + sender = KafkaSink(kafkaSinkParams) + true + } + + override def process(value: Record) = { + sender.send(outputTopics.mkString(","), + value.getField(FieldDictionary.RECORD_KEY).getRawValue().asInstanceOf[Array[Byte]], + value.getField(FieldDictionary.RECORD_VALUE).getRawValue().asInstanceOf[Array[Byte]]) + } - df + override def close(errorOrNull: Throwable) = { + if (errorOrNull != null) { + logger.error("Error occurred", errorOrNull) + } + } + } + + df + .writeStream + .foreach(writer) + .start() } } diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala index 56288a66b..1eff82a64 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/StructuredStreamProviderService.scala @@ -4,7 +4,7 @@ import java.io.{ByteArrayInputStream, ByteArrayOutputStream} import java.util import com.hurence.logisland.controller.ControllerService -import com.hurence.logisland.record.{Field, FieldDictionary, FieldType, Record} +import com.hurence.logisland.record._ import com.hurence.logisland.serializer.{RecordSerializer, SerializerProvider} import com.hurence.logisland.stream.StreamContext import com.hurence.logisland.stream.StreamProperties._ @@ -149,53 +149,62 @@ trait StructuredStreamProviderService extends ControllerService { // make sure controller service lookup won't be serialized !! streamContext.addControllerServiceLookup(null) - /* val spark = SparkSession.builder().getOrCreate() - import spark.implicits._ - implicit val myObjEncoder = org.apache.spark.sql.Encoders.kryo[Record] + // create serializer + val serializer = SerializerProvider.getSerializer( + streamContext.getPropertyValue(WRITE_TOPICS_SERIALIZER).asString, + streamContext.getPropertyValue(AVRO_OUTPUT_SCHEMA).asString) + // create serializer + val keySerializer = SerializerProvider.getSerializer( + streamContext.getPropertyValue(WRITE_TOPICS_KEY_SERIALIZER).asString, null) + // do the parallel processing + implicit val myObjEncoder = org.apache.spark.sql.Encoders.kryo[Record] + val df2 = df. + mapPartitions(record => + record.map(record => serializeRecords(serializer, keySerializer, record))) + write(df2, streamContext) - // do the parallel processing - df.mapPartitions(partition => { + } - // create serializer - val serializer = SerializerProvider.getSerializer( - streamContext.getPropertyValue(WRITE_TOPICS_SERIALIZER).asString, - streamContext.getPropertyValue(AVRO_OUTPUT_SCHEMA).asString) - partition.toList - .flatMap(r => serializeRecords(serializer, r)) - .iterator - })*/ + protected def serializeRecords(valueSerializer: RecordSerializer, keySerializer: RecordSerializer, record: Record) = { - write(df, streamContext) + try { + val ret = new StandardRecord() + .setField(FieldDictionary.RECORD_VALUE, FieldType.BYTES, doSerialize(valueSerializer, record)) + val fieldKey = record.getField(FieldDictionary.RECORD_KEY); + if (fieldKey != null) { + ret.setField(FieldDictionary.RECORD_KEY, FieldType.BYTES, doSerialize(keySerializer, new StandardRecord().setField(fieldKey))) + } else { + ret.setField(FieldDictionary.RECORD_KEY, FieldType.NULL, null) - } + } + ret + } catch { + case t: Throwable => + logger.error(s"exception while serializing events ${t.getMessage}") + null + } - protected def serializeRecords(serializer: RecordSerializer, record: Record): Array[Byte] = { + } - // messages are serialized with kryo first + private def doSerialize(serializer: RecordSerializer, record: Record): Array[Byte] = { val baos: ByteArrayOutputStream = new ByteArrayOutputStream serializer.serialize(baos, record) - - // and then converted to KeyedMessage - val key = if (record.hasField(FieldDictionary.RECORD_ID)) - record.getField(FieldDictionary.RECORD_ID).asString() - else - "" - val bytes = baos.toByteArray baos.close() - bytes + + } - private def doDeserialize(serializer: RecordSerializer, field: Field) : Record = { + private def doDeserialize(serializer: RecordSerializer, field: Field): Record = { val f = field.getRawValue - val s = if (f.isInstanceOf[String]) f.asInstanceOf[String].getBytes else f; + val s = if (f.isInstanceOf[String]) f.asInstanceOf[String].getBytes else f; val bais = new ByteArrayInputStream(s.asInstanceOf[Array[Byte]]) try { serializer.deserialize(bais) @@ -204,18 +213,25 @@ trait StructuredStreamProviderService extends ControllerService { } } - protected def deserializeRecords(serializer: RecordSerializer, keySerializer:RecordSerializer, r: Record) = { + protected def deserializeRecords(serializer: RecordSerializer, keySerializer: RecordSerializer, r: Record) = { try { val deserialized = doDeserialize(serializer, r.getField(FieldDictionary.RECORD_VALUE)) // copy root record field - if(r.hasField(FieldDictionary.RECORD_NAME)) + if (r.hasField(FieldDictionary.RECORD_NAME)) deserialized.setField(r.getField(FieldDictionary.RECORD_NAME)) - if(r.hasField(FieldDictionary.RECORD_KEY) && r.getField(FieldDictionary.RECORD_KEY).getRawValue != null) - deserialized.setField(FieldDictionary.RECORD_KEY, FieldType.RECORD, - doDeserialize(keySerializer, r.getField(FieldDictionary.RECORD_KEY))) + if (r.hasField(FieldDictionary.RECORD_KEY) && r.getField(FieldDictionary.RECORD_KEY).getRawValue != null) { + val deserializedKey = doDeserialize(keySerializer, r.getField(FieldDictionary.RECORD_KEY)).asInstanceOf[Record] + if (deserializedKey.hasField(FieldDictionary.RECORD_VALUE) && deserializedKey.getField(FieldDictionary.RECORD_VALUE).getRawValue != null) { + val f = deserializedKey.getField(FieldDictionary.RECORD_VALUE) + deserialized.setField(FieldDictionary.RECORD_KEY, f.getType, f.getRawValue) + } else { + logger.warn("Unable to serialize key for record $r with serializer $keySerializer") + } + } Some(deserialized) + } catch { case t: Throwable => logger.error(s"exception while deserializing events ${t.getMessage}") diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml index e5a94d5c7..3c09375ec 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml +++ b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml @@ -6,7 +6,7 @@ engine: type: engine documentation: Index some apache logs with logisland configuration: - spark.app.name: FutureFactory + spark.app.name: CMACGM spark.master: local[*] spark.driver.memory: 512M spark.driver.cores: 1 @@ -20,7 +20,6 @@ engine: spark.yarn.executor.failuresValidityInterval: 1h spark.task.maxFailures: 8 spark.serializer: org.apache.spark.serializer.KryoSerializer - #spark.serializer: org.apache.spark.serializer.JavaSerializer spark.streaming.batchDuration: 2000 spark.streaming.backpressure.enabled: false spark.streaming.blockInterval: 500 @@ -42,55 +41,93 @@ engine: record.serializer=com.hurence.logisland.serializer.KryoSerializer kc.data.key.converter.properties: | schemas.enable=false - kc.data.key.converter: org.apache.kafka.connect.json.JsonConverter + kc.data.key.converter: org.apache.kafka.connect.storage.StringConverter kc.worker.tasks.max: 1 - kc.connector.class: com.hurence.logisland.engine.kc.BinarySourceConnector + kc.connector.class: com.eneco.trading.kafka.connect.ftp.source.FtpSourceConnector kc.connector.properties: | - schema.name=test - topic=test - filename.path=/Users/amarziali/nasa.txt - - controllerService: console_service - component: com.hurence.logisland.stream.spark.structured.provider.ConsoleStructuredStreamProviderService + ftp.address=localhost:8021 + ftp.user=test + ftp.password=test + ftp.refresh=PT5S + ftp.file.maxage=P1D + ftp.keystyle=string + ftp.monitor.update=/*.xls*:in_source - streamConfigurations: + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 - # indexing stream + streamConfigurations: + ################ indexing stream ############### - stream: indexing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: a processor that converts raw excel file content into structured log records + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + processorConfigurations: + # do something useful here + - processor: stream_debugger + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json + + + ######### parsing stream ############## + - stream: parsing_stream_source component: com.hurence.logisland.stream.spark.structured.StructuredStream configuration: read.topics: /a/in read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer - read.topics.key.serializer: com.hurence.logisland.serializer.JsonSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.StringSerializer read.topics.client.service: kc_source_service - write.topics: /a/out - write.topics.serializer: none - write.topics.client.service: console_service - + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.StringSerializer + write.topics.client.service: kafka_out_service processorConfigurations: - - - processor: flatten component: com.hurence.logisland.processor.FlatMap type: processor documentation: "extract from root record" configuration: - keep.root.record: false + keep.root.record: true copy.root.record.fields: true leaf.record.type: record_value - - processor: create_aliases component: com.hurence.logisland.processor.NormalizeFields type: processor documentation: "creates an alias tagname/record_name. record_name will be used as metric name into Chronix" configuration: conflict.resolution.policy: do_nothing - record_name: name - record_value: binary - record_key: name - - - processor: stream_debugger - component: com.hurence.logisland.processor.DebugStream - type: processor - documentation: debug records + source_file_name: record_key + - processor: excel_parser + component: com.hurence.logisland.processor.excel.ExcelExtract + type: parser + documentation: a parser that produce events from an excel file configuration: - event.serializer: json \ No newline at end of file + record.type: cma1 + skip.rows: 1 + field.row.header: 0 \ No newline at end of file diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/git.properties b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/git.properties new file mode 100644 index 000000000..e69de29bb diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/logback.xml b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/logback.xml new file mode 100644 index 000000000..3ea52dc9f --- /dev/null +++ b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/logback.xml @@ -0,0 +1,57 @@ + + + + + + + System.err + + %d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/SerializerProvider.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/SerializerProvider.java index a83eb7196..05daccd3a 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/SerializerProvider.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/SerializerProvider.java @@ -28,6 +28,7 @@ public class SerializerProvider { private static String JSON_SERIALIZER = JsonSerializer.class.getName(); private static String KRYO_SERIALIZER = KryoSerializer.class.getName(); private static String BYTES_ARRAY_SERIALIZER = BytesArraySerializer.class.getName(); + private static String STRING_SERIALIZER = StringSerializer.class.getName(); private static String NOOP_SERIALIZER = NoopSerializer.class.getName(); private static String KURA_PROTOBUF_SERIALIZER = KuraProtobufSerializer.class.getName(); @@ -53,6 +54,8 @@ public static RecordSerializer getSerializer(final String inSerializerClass, fin return new BytesArraySerializer(); } else if (inSerializerClass.equals(KURA_PROTOBUF_SERIALIZER)) { return new KuraProtobufSerializer(); + } else if (inSerializerClass.equals(STRING_SERIALIZER)) { + return new StringSerializer(); } else { return new NoopSerializer(); } From 79b3aafc2b6bab66a26397880b8f0b835586ebc8 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Wed, 28 Mar 2018 01:16:18 +0200 Subject: [PATCH 08/35] Improve javadoc. Move Kafka Connect stuff to dedicated module Make connectors bundle to shade every plugin needed by a deployments separately from the rest of the core code. --- logisland-assembly/pom.xml | 8 + .../logisland-connect-spark/pom.xml | 130 ++++++++ .../converter}/LogIslandRecordConverter.java | 39 ++- .../source/KafkaConnectStreamSource.java | 303 ++++++++++++++++++ .../KafkaConnectStreamSourceProvider.java | 48 ++- .../source/SharedSourceTaskContext.java | 50 ++- .../connect}/source/SourceThread.java | 24 +- ...afkaConnectStructuredProviderService.scala | 136 ++++++++ .../stream/spark/provider/package.scala | 120 +++++++ .../logisland/connect}/KafkaConnectTest.java | 27 +- .../logisland/connect/fake/FakeConnector.java | 106 ++++++ .../resources/conf/kafka-connect-stream.yml | 37 +-- .../src/test/resources/logback.xml | 0 .../logisland-connectors-bundle/pom.xml | 69 ++++ .../src/main}/resources/git.properties | 0 logisland-connect/pom.xml | 40 +++ logisland-documentation/components.rst | 2 +- .../logisland-spark_2_1-engine/pom.xml | 29 -- .../source/KafkaConnectStreamSource.java | 184 ----------- .../logisland/stream/spark/package.scala | 58 ---- ...afkaConnectStructuredProviderService.scala | 126 -------- .../engine/kc/BinarySourceConnector.java | 133 -------- .../logisland/engine/kc/BinarySourceTask.java | 151 --------- .../src/main/resources/docs/components.rst | 2 +- logisland-framework/logisland-utils/pom.xml | 1 + pom.xml | 30 +- 26 files changed, 1100 insertions(+), 753 deletions(-) create mode 100644 logisland-connect/logisland-connect-spark/pom.xml rename {logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect => logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter}/LogIslandRecordConverter.java (73%) create mode 100644 logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java rename {logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect => logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect}/source/KafkaConnectStreamSourceProvider.java (55%) rename {logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect => logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect}/source/SharedSourceTaskContext.java (75%) rename {logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect => logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect}/source/SourceThread.java (79%) create mode 100644 logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/KafkaConnectStructuredProviderService.scala create mode 100644 logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/package.scala rename {logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine => logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect}/KafkaConnectTest.java (73%) create mode 100644 logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/fake/FakeConnector.java rename {logisland-engines/logisland-spark_2_1-engine => logisland-connect/logisland-connect-spark}/src/test/resources/conf/kafka-connect-stream.yml (80%) rename {logisland-engines/logisland-spark_2_1-engine => logisland-connect/logisland-connect-spark}/src/test/resources/logback.xml (100%) create mode 100644 logisland-connect/logisland-connectors-bundle/pom.xml rename {logisland-engines/logisland-spark_2_1-engine/src/test => logisland-connect/logisland-connectors-bundle/src/main}/resources/git.properties (100%) create mode 100644 logisland-connect/pom.xml delete mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java delete mode 100644 logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala delete mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java delete mode 100644 logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index 3a4b731f0..836ccfd6c 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -179,6 +179,14 @@ com.hurence.logisland logisland-excel-plugin + + com.hurence.logisland + logisland-connect-spark + + + com.hurence.logisland + logisland-connectors-bundle + + + org.apache.spark + spark-core_${scala.binary.version} + + + org.apache.spark + spark-sql_${scala.binary.version} + + + org.apache.spark + spark-streaming_${scala.binary.version} + + + org.apache.spark + spark-streaming-kafka-0-10_${scala.binary.version} + + + org.apache.spark + spark-sql-kafka-0-10_${scala.binary.version} + + + + + + junit + junit + test + + + + + + + net.alchim31.maven + scala-maven-plugin + 3.2.2 + + + scala-compile-first + process-resources + + compile + + + + scala-test-compile-first + process-test-resources + + testCompile + + + + attach-scaladocs + verify + + doc-jar + + + + + ${scala.binary.version} + ${scala.version} + incremental + false + + -unchecked + -deprecation + + + -Xms64m + -Xms1024m + -Xmx1024m + -XX:MaxMetaspaceSize=${MaxPermGen} + + + -source + ${maven.compiler.source} + -target + ${maven.compiler.source} + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/LogIslandRecordConverter.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java similarity index 73% rename from logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/LogIslandRecordConverter.java rename to logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java index bbdb66287..15143fbab 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/LogIslandRecordConverter.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java @@ -1,25 +1,26 @@ /* - * Copyright (C) 2018 Hurence (support@hurence.com) + * * Copyright (C) 2018 Hurence (support@hurence.com) * - * 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 + * 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, + * 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 com.hurence.logisland.util.kafkaconnect; +package com.hurence.logisland.connect.converter; import com.hurence.logisland.record.*; import com.hurence.logisland.serializer.RecordSerializer; import com.hurence.logisland.serializer.SerializerProvider; +import com.hurence.logisland.stream.StreamProperties; import org.apache.kafka.connect.data.ConnectSchema; import org.apache.kafka.connect.data.Schema; import org.apache.kafka.connect.data.SchemaAndValue; @@ -34,22 +35,40 @@ public class LogIslandRecordConverter implements Converter { + /** + * Record serializer class (instance of {@link com.hurence.logisland.serializer.RecordSerializer}) + */ private static final String PROPERTY_RECORD_SERIALIZER = "record.serializer"; - public static final String PROPERTY_AVRO_SCHEMA = "avro.schema"; + /** + * Avro schema to use (only apply to {@link com.hurence.logisland.serializer.AvroSerializer}) + */ + private static final String PROPERTY_AVRO_SCHEMA = "avro.schema"; + + /** + * The record type to use. If not provided {@link LogIslandRecordConverter#PROPERTY_RECORD_TYPE} will be used. + */ + private static final String PROPERTY_RECORD_TYPE = StreamProperties.RECORD_TYPE().getName(); + + /** + * The default type for logisland {@link Record} created by this converter. + */ + private static final String DEFAULT_RECORD_TYPE = "kafka_connect"; private RecordSerializer recordSerializer; + private String recordType; @Override public void configure(Map configs, boolean isKey) { recordSerializer = SerializerProvider.getSerializer((String) configs.get(PROPERTY_RECORD_SERIALIZER), (String) configs.get(PROPERTY_AVRO_SCHEMA)); + recordType = ((Map) configs).getOrDefault(PROPERTY_RECORD_TYPE, DEFAULT_RECORD_TYPE).toString(); } @Override public byte[] fromConnectData(String topic, Schema schema, Object value) { try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { recordSerializer.serialize(baos, - new StandardRecord("kafka_connect").setField(toFieldRecursive(FieldDictionary.RECORD_VALUE, schema, value))); + new StandardRecord(recordType).setField(toFieldRecursive(FieldDictionary.RECORD_VALUE, schema, value))); return baos.toByteArray(); } catch (IOException ioe) { throw new DataException("Unexpected IO Exception occurred while serializing data [topic " + topic + "]", ioe); @@ -59,7 +78,7 @@ public byte[] fromConnectData(String topic, Schema schema, Object value) { @Override public SchemaAndValue toConnectData(String topic, byte[] value) { - return null; + throw new UnsupportedOperationException("Not yet implemented! Please try later on ;-)"); } private Field toFieldRecursive(String name, Schema schema, Object value) { diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java new file mode 100644 index 000000000..946378c71 --- /dev/null +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java @@ -0,0 +1,303 @@ +/* + * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.connect.source; + + +import com.hurence.logisland.stream.StreamProperties; +import com.hurence.logisland.stream.spark.StreamOptions; +import org.apache.kafka.connect.connector.ConnectorContext; +import org.apache.kafka.connect.errors.DataException; +import org.apache.kafka.connect.json.JsonConverter; +import org.apache.kafka.connect.source.SourceConnector; +import org.apache.kafka.connect.source.SourceTask; +import org.apache.kafka.connect.storage.Converter; +import org.apache.kafka.connect.storage.OffsetBackingStore; +import org.apache.kafka.connect.storage.OffsetStorageReaderImpl; +import org.apache.kafka.connect.storage.OffsetStorageWriter; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Row; +import org.apache.spark.sql.SQLContext; +import org.apache.spark.sql.catalyst.expressions.GenericRow; +import org.apache.spark.sql.execution.streaming.LongOffset; +import org.apache.spark.sql.execution.streaming.Offset; +import org.apache.spark.sql.execution.streaming.Source; +import org.apache.spark.sql.types.DataTypes; +import org.apache.spark.sql.types.Metadata; +import org.apache.spark.sql.types.StructField; +import org.apache.spark.sql.types.StructType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import scala.Option; + +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; + +/** + * Kafka connect to spark sql streaming bridge. + * + * @author amarziali + */ +public class KafkaConnectStreamSource implements Source { + + private final static Logger LOGGER = LoggerFactory.getLogger(KafkaConnectStreamSource.class); + + /** + * The Schema used for this source. + */ + public final static StructType SCHEMA = new StructType(new StructField[]{ + new StructField(StreamOptions.KAFKA_CONNECT_CONNECTOR_PROPERTIES().getName(), + DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), + new StructField(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER().getName(), + DataTypes.StringType, false, Metadata.empty()), + new StructField(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName(), + DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), + new StructField(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER().getName(), + DataTypes.StringType, false, Metadata.empty()), + new StructField(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName(), + DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), + new StructField(StreamOptions.KAFKA_CONNECT_MAX_TASKS().getName(), + DataTypes.createMapType(DataTypes.IntegerType, DataTypes.StringType), false, Metadata.empty()) + }); + /** + * The schema used to represent the outgoing dataframe. + */ + public final static StructType DATA_SCHEMA = new StructType(new StructField[]{ + new StructField("topic", DataTypes.StringType, false, Metadata.empty()), + new StructField("partition", DataTypes.IntegerType, true, Metadata.empty()), + new StructField("key", DataTypes.BinaryType, true, Metadata.empty()), + new StructField("value", DataTypes.BinaryType, false, Metadata.empty()) + + }); + + + private final SourceConnector connector; + private ExecutorService executorService; + private final List sourceThreads = new ArrayList<>(); + private final OffsetBackingStore offsetBackingStore; + private final AtomicBoolean startWatch = new AtomicBoolean(false); + + private final SharedSourceTaskContext sharedSourceTaskContext; + private final SQLContext sqlContext; + private final Converter keyConverter; + private final Converter valueConverter; + private final int maxTasks; + + + /** + * Base constructor. Should be called by {@link KafkaConnectStreamSourceProvider} + * + * @param sqlContext the spark sql context. + * @param connectorProperties the connector related properties. + * @param keyConverter the converter for the data key + * @param valueConverter the converter for the data body + * @param offsetBackingStore the backing store implementation (can be in-memory, file based, kafka based, etc...) + * @param maxTasks the maximum theoretical number of tasks this source should spawn. + * @param connectorClass the class of kafka connect source connector to wrap. + * = + */ + public KafkaConnectStreamSource(SQLContext sqlContext, + Map connectorProperties, + Converter keyConverter, + Converter valueConverter, + OffsetBackingStore offsetBackingStore, + int maxTasks, + Class connectorClass) { + try { + this.sqlContext = sqlContext; + this.maxTasks = maxTasks; + //instantiate connector + connector = connectorClass.newInstance(); + //create converters + this.keyConverter = keyConverter; + this.valueConverter = valueConverter; + final Converter internalConverter = createInternalConverter(); + + //Create the connector context + final ConnectorContext connectorContext = new ConnectorContext() { + @Override + public void requestTaskReconfiguration() { + try { + stopAllThreads(); + startAllThreads(); + } catch (Throwable t) { + LOGGER.error("Unable to reconfigure tasks for connector " + connectorName(), t); + } + } + + @Override + public void raiseError(Exception e) { + LOGGER.error("Connector " + connectorName() + " raised error : " + e.getMessage(), e); + } + }; + + LOGGER.info("Starting connector {}", connectorClass.getCanonicalName()); + connector.initialize(connectorContext); + connector.start(connectorProperties); + this.offsetBackingStore = offsetBackingStore; + offsetBackingStore.start(); + sharedSourceTaskContext = new SharedSourceTaskContext( + new OffsetStorageReaderImpl(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter), + new OffsetStorageWriter(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter)); + + //create and start tasks + startAllThreads(); + } catch (IllegalAccessException | InstantiationException e) { + try { + stopAllThreads(); + } catch (Throwable t) { + LOGGER.error("Unable to properly stop threads of connector " + connectorName(), t); + } + throw new DataException("Unable to create connector " + connectorName(), e); + } + + } + + /** + * Create all the {@link Runnable} workers needed to host the source threads. + * + * @return + * @throws IllegalAccessException if task instantiation fails. + * @throws InstantiationException if task instantiation fails. + */ + private List createThreadTasks() throws IllegalAccessException, InstantiationException { + Class taskClass = (Class) connector.taskClass(); + List> configs = connector.taskConfigs(maxTasks); + List ret = new ArrayList<>(); + LOGGER.info("Creating {} tasks for connector {}", configs.size(), connectorName()); + for (Map conf : configs) { + //create the task + final SourceThread t = new SourceThread(taskClass, conf, sharedSourceTaskContext); + ret.add(t); + } + return ret; + } + + /** + * Start all threads. + * + * @throws IllegalAccessException if task instantiation fails. + * @throws InstantiationException if task instantiation fails. + */ + private void startAllThreads() throws IllegalAccessException, InstantiationException { + if (!startWatch.compareAndSet(false, true)) { + throw new IllegalStateException("Connector is already started"); + } + //Give a meaningful name to thread belonging to this connector + final ThreadGroup threadGroup = new ThreadGroup(connector.getClass().getSimpleName()); + final List sourceThreads = createThreadTasks(); + //Configure a new executor service ] + executorService = Executors.newFixedThreadPool(sourceThreads.size(), r -> new Thread(threadGroup, r)); + createThreadTasks().forEach(st -> { + executorService.execute(st.start()); + sourceThreads.add(st); + }); + } + + + /** + * Create a converter to be used to translate internal data. + * Child classes can override this method to provide alternative converters. + * + * @return an instance of {@link Converter} + */ + protected Converter createInternalConverter() { + JsonConverter internalConverter = new JsonConverter(); + internalConverter.configure(Collections.singletonMap("schemas.enable", "false"), false); + return internalConverter; + } + + /** + * Gets the connector name used by this stream source. + * + * @return + */ + private String connectorName() { + return connector.getClass().getCanonicalName(); + } + + + @Override + public StructType schema() { + return SCHEMA; + } + + @Override + public Option getOffset() { + Optional offset = sharedSourceTaskContext.lastOffset(); + return offset.isPresent() ? Option.apply(LongOffset.apply(offset.get())) : Option.empty(); + + } + + + @Override + public Dataset getBatch(Option start, Offset end) { + return sqlContext.createDataFrame( + sharedSourceTaskContext.read(start.isDefined() ? Optional.of(start.get()) : Optional.empty(), end) + .stream() + .map(record -> new GenericRow(new Object[]{ + record.topic(), + record.kafkaPartition(), + keyConverter.fromConnectData(record.topic(), record.keySchema(), record.key()), + valueConverter.fromConnectData(record.topic(), record.valueSchema(), record.value()) + })).collect(Collectors.toList()), + DATA_SCHEMA); + } + + @Override + public void commit(Offset end) { + sharedSourceTaskContext.commit(end); + } + + /** + * Stops every threads running and serving for this connector. + */ + private void stopAllThreads() { + LOGGER.info("Stopping every threads for connector {}", connectorName()); + while (!sourceThreads.isEmpty()) { + try { + sourceThreads.remove(0).stop(); + } catch (Throwable t) { + LOGGER.warn("Error occurring while stopping a thread of connector " + connectorName(), t); + } + } + } + + @Override + public void stop() { + if (!startWatch.compareAndSet(true, false)) { + throw new IllegalStateException("Connector is not started"); + } + LOGGER.info("Stopping connector {}", connectorName()); + stopAllThreads(); + offsetBackingStore.stop(); + connector.stop(); + } + + /** + * Check the stream source state. + * + * @return + */ + public boolean isRunning() { + return startWatch.get(); + } +} + diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSourceProvider.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java similarity index 55% rename from logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSourceProvider.java rename to logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java index aa347bf27..9b41e0c84 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSourceProvider.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java @@ -15,11 +15,15 @@ * */ -package com.hurence.logisland.util.kafkaconnect.source; +package com.hurence.logisland.connect.source; -import com.hurence.logisland.stream.StreamProperties; +import com.hurence.logisland.stream.spark.StreamOptions; +import org.apache.kafka.common.config.ConfigDef; +import org.apache.kafka.connect.runtime.WorkerConfig; +import org.apache.kafka.connect.runtime.distributed.DistributedConfig; +import org.apache.kafka.connect.runtime.standalone.StandaloneConfig; import org.apache.kafka.connect.source.SourceConnector; -import org.apache.kafka.connect.storage.Converter; +import org.apache.kafka.connect.storage.*; import org.apache.spark.sql.SQLContext; import org.apache.spark.sql.execution.streaming.Source; import org.apache.spark.sql.sources.StreamSourceProvider; @@ -33,6 +37,12 @@ import java.util.Properties; import java.util.stream.Collectors; +/** + * A {@link StreamSourceProvider} capable of creating spark {@link com.hurence.logisland.stream.spark.structured.StructuredStream} + * enabled kafka sources. + * + * @author amarziali + */ public class KafkaConnectStreamSourceProvider implements StreamSourceProvider { private Converter createConverter(Map parameters, String classKey, String propertyKey) @@ -51,16 +61,34 @@ private java.util.Map propertiesToMap(String propertiesAsString) @Override public Source createSource(SQLContext sqlContext, String metadataPath, Option schema, String providerName, Map parameters) { try { - Converter keyConverter = createConverter(parameters, StreamProperties.KAFKA_CONNECT_KEY_CONVERTER().getName(), - StreamProperties.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName()); - Converter valueConverter = createConverter(parameters, StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER().getName(), - StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName()); + Converter keyConverter = createConverter(parameters, StreamOptions.KAFKA_CONNECT_KEY_CONVERTER().getName(), + StreamOptions.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName()); + Converter valueConverter = createConverter(parameters, StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER().getName(), + StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName()); + //create the right backing store + OffsetBackingStore offsetBackingStore = null; + WorkerConfig workerConfig = new WorkerConfig(new ConfigDef(), + propertiesToMap(parameters.get(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE_PROPERTIES().getName()).get())); + String bs = parameters.get(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE().getName()).get(); + if (StreamOptions.FILE_BACKING_STORE().getValue().equals(bs)) { + offsetBackingStore = new FileOffsetBackingStore(); + } else if (StreamOptions.MEMORY_BACKING_STORE().getValue().equals(bs)) { + offsetBackingStore = new MemoryOffsetBackingStore(); + } else if (StreamOptions.KAFKA_BACKING_STORE().getValue().equals(bs)) { + offsetBackingStore = new KafkaOffsetBackingStore(); + } else { + throw new IllegalArgumentException(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE().getName() + + " must be set!"); + } + + offsetBackingStore.configure(workerConfig); return new KafkaConnectStreamSource(sqlContext, - propertiesToMap(parameters.get(StreamProperties.KAFKA_CONNECT_CONNECTOR_PROPERTIES().getName()).get()), + propertiesToMap(parameters.get(StreamOptions.KAFKA_CONNECT_CONNECTOR_PROPERTIES().getName()).get()), keyConverter, valueConverter, - Integer.parseInt(parameters.get(StreamProperties.KAFKA_CONNECT_MAX_TASKS().getName()).get()), - (Class) Class.forName(parameters.get(StreamProperties.KAFKA_CONNECT_CONNECTOR_CLASS().getName()).get())); + offsetBackingStore, + Integer.parseInt(parameters.get(StreamOptions.KAFKA_CONNECT_MAX_TASKS().getName()).get()), + (Class) Class.forName(parameters.get(StreamOptions.KAFKA_CONNECT_CONNECTOR_CLASS().getName()).get())); } catch (Exception e) { throw new IllegalArgumentException("Unable to create kafka connect stream source", e); } diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SharedSourceTaskContext.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java similarity index 75% rename from logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SharedSourceTaskContext.java rename to logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java index 1b7f5673a..76ec07f0d 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SharedSourceTaskContext.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java @@ -15,7 +15,7 @@ * */ -package com.hurence.logisland.util.kafkaconnect.source; +package com.hurence.logisland.connect.source; import org.apache.kafka.connect.source.SourceRecord; import org.apache.kafka.connect.source.SourceTask; @@ -32,6 +32,11 @@ import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; +/** + * A {@link SourceTaskContext} shared among all task spawned by a connector. + *

+ * An instance of this class is regularly polled by spark structured stream engine. + */ public class SharedSourceTaskContext implements SourceTaskContext { private static final Logger LOGGER = LoggerFactory.getLogger(SharedSourceTaskContext.class); @@ -43,6 +48,12 @@ public class SharedSourceTaskContext implements SourceTaskContext { private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); + /** + * Create a new instance. + * + * @param offsetStorageReader the offset reader (managed by creating class). + * @param offsetStorageWriter the offset writer (managed by the creating class) + */ public SharedSourceTaskContext(OffsetStorageReader offsetStorageReader, OffsetStorageWriter offsetStorageWriter) { this.offsetStorageReader = offsetStorageReader; this.offsetStorageWriter = offsetStorageWriter; @@ -54,6 +65,11 @@ public OffsetStorageReader offsetStorageReader() { return offsetStorageReader; } + /** + * Fetch last offset available. + * + * @return + */ public Optional lastOffset() { Lock lock = rwLock.readLock(); try { @@ -65,6 +81,13 @@ public Optional lastOffset() { } } + /** + * Read the received data according to provided offsets. + * + * @param from the optional starting offset. If missing data will be fetched since the beginning of available one. + * @param to the mandatory ending offset. + * @return the {@link SourceRecord} that have been read. + */ public Collection read(Optional from, Offset to) { Lock lock = rwLock.readLock(); try { @@ -88,10 +111,28 @@ public Collection read(Optional from, Offset to) { } } + /** + * Enqueue a new record emitted by a {@link SourceTask} + * + * @param record the {@link SourceRecord} coming from the connector + * @param offset the corresponding {@link Offset} + * @param emitter the record emitter. + */ public void offer(SourceRecord record, Offset offset, SourceTask emitter) { - buffer.addLast(Tuple3.apply(record, offset, emitter)); + Lock lock = rwLock.writeLock(); + try { + lock.lock(); + buffer.addLast(Tuple3.apply(record, offset, emitter)); + } finally { + lock.unlock(); + } } + /** + * Confirms that data read since offset endOffset has been successfully handled by the streaming engine. + * + * @param endOffset the last offset read and committed by the spark engine. + */ public void commit(Offset endOffset) { Lock lock = rwLock.readLock(); try { @@ -102,7 +143,7 @@ public void commit(Offset endOffset) { offsetStorageWriter.offset(sr._1().sourcePartition(), sr._1().sourceOffset()); if (offsetStorageWriter.beginFlush()) { offsetStorageWriter.doFlush((error, result) -> { - if (error != null) { + if (error == null) { Lock ll = rwLock.writeLock(); try { ll.lock(); @@ -133,6 +174,9 @@ public void commit(Offset endOffset) { } + /** + * Clean up buffered data. + */ public void clean() { Lock lock = rwLock.writeLock(); try { diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SourceThread.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SourceThread.java similarity index 79% rename from logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SourceThread.java rename to logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SourceThread.java index fc3093722..2ac710288 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/SourceThread.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SourceThread.java @@ -15,11 +15,10 @@ * */ -package com.hurence.logisland.util.kafkaconnect.source; +package com.hurence.logisland.connect.source; import org.apache.kafka.connect.source.SourceRecord; import org.apache.kafka.connect.source.SourceTask; -import org.apache.spark.sql.SQLContext; import org.apache.spark.sql.execution.streaming.LongOffset; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,15 +36,20 @@ class SourceThread implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(SourceTask.class); private final SourceTask task; - private final SQLContext sqlContext; private final Map config; private final SharedSourceTaskContext sharedSourceTaskContext; private final AtomicBoolean running = new AtomicBoolean(false); - public SourceThread(SourceTask task, SQLContext sqlContext, Map config, SharedSourceTaskContext sharedSourceTaskContext) { - this.sqlContext = sqlContext; - this.task = task; + /** + * Construct a new instance. + * + * @param taskClass The task to execute. + * @param config the task configuration + * @param sharedSourceTaskContext the shared task context. + */ + public SourceThread(Class taskClass, Map config, SharedSourceTaskContext sharedSourceTaskContext) throws IllegalAccessException, InstantiationException { + this.task = taskClass.newInstance(); this.config = Collections.unmodifiableMap(config); this.sharedSourceTaskContext = sharedSourceTaskContext; task.initialize(sharedSourceTaskContext); @@ -67,6 +71,11 @@ public void run() { } } + /** + * Start the worker. + * + * @return itself + */ public SourceThread start() { try { task.start(config); @@ -83,6 +92,9 @@ public SourceThread start() { return this; } + /** + * Tell the work loop to end any activity ASAP. + */ public void stop() { running.set(false); diff --git a/logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/KafkaConnectStructuredProviderService.scala b/logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/KafkaConnectStructuredProviderService.scala new file mode 100644 index 000000000..bfeb7a4fb --- /dev/null +++ b/logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/KafkaConnectStructuredProviderService.scala @@ -0,0 +1,136 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.stream.spark.provider + +import java.util +import java.util.Collections + +import com.hurence.logisland.annotation.lifecycle.OnEnabled +import com.hurence.logisland.component.{InitializationException, PropertyDescriptor} +import com.hurence.logisland.controller.{AbstractControllerService, ControllerServiceInitializationContext} +import com.hurence.logisland.record.{FieldDictionary, FieldType, Record, StandardRecord} +import com.hurence.logisland.stream.StreamContext +import com.hurence.logisland.stream.spark.StreamOptions +import com.hurence.logisland.stream.spark.structured.provider.StructuredStreamProviderService +import org.apache.spark.sql.{Dataset, SparkSession} + +class KafkaConnectStructuredProviderService extends AbstractControllerService with StructuredStreamProviderService { + + var connectorProperties = "" + var keyConverter = "" + var valueConverter = "" + var keyConverterProperties = "" + var valueConverterProperties = "" + var maxConfigurations = 1 + var delegateConnectorClass = "" + var offsetBackingStore = "" + var offsetBackingStoreProperties = "" + + + @OnEnabled + @throws[InitializationException] + override def init(context: ControllerServiceInitializationContext): Unit = { + this.synchronized { + try { + delegateConnectorClass = context.getPropertyValue(StreamOptions.KAFKA_CONNECT_CONNECTOR_CLASS).asString() + connectorProperties = context.getPropertyValue(StreamOptions.KAFKA_CONNECT_CONNECTOR_PROPERTIES).asString() + valueConverter = context.getPropertyValue(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER).asString() + valueConverterProperties = context.getPropertyValue(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES).asString() + keyConverter = context.getPropertyValue(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER).asString() + keyConverterProperties = context.getPropertyValue(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES).asString() + maxConfigurations = (context getPropertyValue StreamOptions.KAFKA_CONNECT_MAX_TASKS).asInteger() + offsetBackingStore = (context getPropertyValue StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE).asString() + offsetBackingStoreProperties = context.getPropertyValue(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE_PROPERTIES).asString() + } catch { + case e: Exception => + throw new InitializationException(e) + } + } + } + + + /** + * Allows subclasses to register which property descriptor objects are + * supported. + * + * @return PropertyDescriptor objects this processor currently supports + */ + override def getSupportedPropertyDescriptors() = { + val descriptors: util.List[PropertyDescriptor] = new util.ArrayList[PropertyDescriptor] + descriptors.add(StreamOptions.KAFKA_CONNECT_CONNECTOR_CLASS) + descriptors.add(StreamOptions.KAFKA_CONNECT_CONNECTOR_PROPERTIES) + descriptors.add(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER) + descriptors.add(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES) + descriptors.add(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER) + descriptors.add(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES) + descriptors.add(StreamOptions.KAFKA_CONNECT_MAX_TASKS) + descriptors.add(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE) + descriptors.add(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE_PROPERTIES) + Collections.unmodifiableList(descriptors) + } + + + + /** + * create a streaming DataFrame that represents data received + * + * @param spark + * @param streamContext + * @return DataFrame currently loaded + */ + override def read(spark: SparkSession, streamContext: StreamContext) = { + + import spark.implicits._ + implicit val myObjEncoder = org.apache.spark.sql.Encoders.kryo[Record] + + getLogger.info(s"Connecting kafka-connect source $delegateConnectorClass") + spark.readStream + .format("com.hurence.logisland.connect.source.KafkaConnectStreamSourceProvider") + .option(StreamOptions.KAFKA_CONNECT_CONNECTOR_PROPERTIES.getName, connectorProperties) + .option(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER.getName, keyConverter) + .option(StreamOptions.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES.getName, keyConverterProperties) + .option(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER.getName, valueConverter) + .option(StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES.getName, valueConverterProperties) + .option(StreamOptions.KAFKA_CONNECT_MAX_TASKS.getName, maxConfigurations) + .option(StreamOptions.KAFKA_CONNECT_CONNECTOR_CLASS.getName, delegateConnectorClass) + .option(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE.getName, offsetBackingStore) + .option(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE_PROPERTIES.getName, offsetBackingStoreProperties) + + + .load() + //Topic, Partition, Key, Value + .as[(String, Int, Array[Byte], Array[Byte])] + .map(r => + new StandardRecord("kafka_connect") + .setField(FieldDictionary.RECORD_KEY, FieldType.BYTES, r._3) + .setField(FieldDictionary.RECORD_VALUE, FieldType.BYTES, r._4)) + } + + + /** + * create a streaming DataFrame that represents data to be written + * + * @param streamContext + * @return DataFrame currently loaded + */ + override def write(df: Dataset[Record], streamContext: StreamContext) = { + //TODO: Add sink support + df + } + +} diff --git a/logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/package.scala b/logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/package.scala new file mode 100644 index 000000000..0efa12304 --- /dev/null +++ b/logisland-connect/logisland-connect-spark/src/main/scala/com/hurence/logisland/stream/spark/provider/package.scala @@ -0,0 +1,120 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.stream.spark + +import com.hurence.logisland.component.{AllowableValue, PropertyDescriptor} +import com.hurence.logisland.validator.StandardValidators +import org.apache.kafka.connect.connector.Connector +import org.apache.kafka.connect.runtime.standalone.StandaloneConfig +import org.apache.kafka.connect.storage.Converter + +object StreamOptions { + + val MEMORY_BACKING_STORE = new AllowableValue("memory", "In memory backing store", + "Standalone in memory offset backing store. Not suitable for clustered deployments unless source is unique or stateless") + + val FILE_BACKING_STORE = new AllowableValue("file", "File based backing store", + "Standalone filesystem based offset backing store. " + + "You have to specify the property " + StandaloneConfig.OFFSET_STORAGE_FILE_FILENAME_CONFIG + " for the file path." + + "Not suitable for clustered deployments unless source is unique or standalone") + + val KAFKA_BACKING_STORE = new AllowableValue("kafka", "Kafka topic based backing store", + "Distributed kafka topic based offset backing store. " + + "See the javadoc of class org.apache.kafka.connect.storage.KafkaOffsetBackingStore for the configuration options." + + "This backing store is well suited for distributed deployments.") + + + ////////////////////////////////////// + // Kafka Connect options + ////////////////////////////////////// + + + val KAFKA_CONNECT_CONNECTOR_CLASS = new PropertyDescriptor.Builder() + .name("kc.connector.class") + .description("The class canonical name of the kafka connector to use.") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Connector])) + .build + + val KAFKA_CONNECT_CONNECTOR_PROPERTIES = new PropertyDescriptor.Builder() + .name("kc.connector.properties") + .description("The properties (key=value) for the connector.") + .required(false) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build + + val KAFKA_CONNECT_MAX_TASKS = new PropertyDescriptor.Builder() + .name("kc.worker.tasks.max") + .description("Max number of threads for this connector") + .required(true) + .defaultValue("1") + .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) + .build + + val KAFKA_CONNECT_KEY_CONVERTER = new PropertyDescriptor.Builder() + .name("kc.data.key.converter") + .description("Key converter class") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Converter])) + .build + + val KAFKA_CONNECT_VALUE_CONVERTER = new PropertyDescriptor.Builder() + .name("kc.data.value.converter") + .description("Value converter class") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Converter])) + .build + + val KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES = new PropertyDescriptor.Builder() + .name("kc.data.key.converter.properties") + .description("Key converter properties") + .required(false) + .defaultValue("") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build + + val KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES = new PropertyDescriptor.Builder() + .name("kc.data.value.converter.properties") + .description("Value converter properties") + .required(false) + .defaultValue("") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build + + + val KAFKA_CONNECT_OFFSET_BACKING_STORE = new PropertyDescriptor.Builder() + .name("kc.connector.offset.backing.store") + .required(false) + .description("The underlying backing store to be used.") + .defaultValue(MEMORY_BACKING_STORE.getValue) + .allowableValues(MEMORY_BACKING_STORE, FILE_BACKING_STORE, KAFKA_BACKING_STORE) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build() + + val KAFKA_CONNECT_OFFSET_BACKING_STORE_PROPERTIES = new PropertyDescriptor.Builder() + .name("kc.connector.offset.backing.store.properties") + .description("Properties to configure the offset backing store") + .required(false) + .defaultValue("") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build + +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/KafkaConnectTest.java b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java similarity index 73% rename from logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/KafkaConnectTest.java rename to logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java index 4ee8c8665..19d5fbf4f 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/KafkaConnectTest.java +++ b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java @@ -1,25 +1,28 @@ /* - * Copyright (C) 2018 Hurence (support@hurence.com) + * * Copyright (C) 2018 Hurence (support@hurence.com) * - * 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 + * 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, + * 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 com.hurence.logisland.engine; +package com.hurence.logisland.connect; import com.hurence.logisland.component.ComponentFactory; import com.hurence.logisland.config.ConfigReader; import com.hurence.logisland.config.LogislandConfiguration; -import com.hurence.logisland.util.spark.SparkUtils; +import com.hurence.logisland.engine.EngineContext; +import com.hurence.logisland.util.runner.TestRunner; +import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,12 +30,16 @@ import java.util.Optional; +/** + * End to end test. + */ public class KafkaConnectTest { private static Logger logger = LoggerFactory.getLogger(KafkaConnectTest.class); private static final String JOB_CONF_FILE = "/conf/kafka-connect-stream.yml"; @Test + @Ignore public void remoteTest() { @@ -62,8 +69,8 @@ public void remoteTest() { EngineContext engineContext = engineInstance.get(); engineInstance.get().getEngine().start(engineContext); } catch (Exception e) { - logger.error("something went bad while running the job : {}", e); - System.exit(-1); + Assert.fail("something went bad while running the job : " + e); + } diff --git a/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/fake/FakeConnector.java b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/fake/FakeConnector.java new file mode 100644 index 000000000..eae6b060d --- /dev/null +++ b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/fake/FakeConnector.java @@ -0,0 +1,106 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.connect.fake; + +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.kafka.common.config.ConfigDef; +import org.apache.kafka.connect.connector.Task; +import org.apache.kafka.connect.data.Schema; +import org.apache.kafka.connect.source.SourceConnector; +import org.apache.kafka.connect.source.SourceRecord; +import org.apache.kafka.connect.source.SourceTask; + +import java.util.*; +import java.util.concurrent.SynchronousQueue; + +public class FakeConnector extends SourceConnector { + + + public static class FakeTask extends SourceTask { + + private SynchronousQueue queue = new SynchronousQueue<>(); + private final Timer timer = new Timer(); + + + @Override + public void start(Map props) { + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + try { + queue.put(RandomStringUtils.randomAscii(30)); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }, 0, 500); + + } + + @Override + public List poll() throws InterruptedException { + + return Collections.singletonList(new SourceRecord(null , + Collections.singletonMap("offset", System.currentTimeMillis()), + "", + null, + Schema.STRING_SCHEMA, + queue.take())); + } + + + @Override + public void stop() { + timer.cancel(); + } + + @Override + public String version() { + return "1.0"; + } + } + + @Override + public String version() { + return "1.0"; + } + + @Override + public void start(Map props) { + } + + @Override + public Class taskClass() { + return FakeTask.class; + } + + @Override + public List> taskConfigs(int maxTasks) { + return Collections.singletonList(Collections.emptyMap()); + } + + @Override + public void stop() { + + } + + @Override + public ConfigDef config() { + return new ConfigDef(); + } +} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml b/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml similarity index 80% rename from logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml rename to logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml index 3c09375ec..81c53a936 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/kafka-connect-stream.yml +++ b/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml @@ -34,24 +34,20 @@ engine: controllerServiceConfigurations: - controllerService: kc_source_service - component: com.hurence.logisland.stream.spark.structured.provider.KafkaConnectStructuredProviderService + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService configuration: - kc.data.value.converter: com.hurence.logisland.util.kafkaconnect.LogIslandRecordConverter + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter kc.data.value.converter.properties: | record.serializer=com.hurence.logisland.serializer.KryoSerializer kc.data.key.converter.properties: | schemas.enable=false kc.data.key.converter: org.apache.kafka.connect.storage.StringConverter kc.worker.tasks.max: 1 - kc.connector.class: com.eneco.trading.kafka.connect.ftp.source.FtpSourceConnector + kc.connector.class: com.hurence.logisland.connect.fake.FakeConnector + kc.connector.offset.backing.store: memory kc.connector.properties: | - ftp.address=localhost:8021 - ftp.user=test - ftp.password=test - ftp.refresh=PT5S - ftp.file.maxage=P1D - ftp.keystyle=string - ftp.monitor.update=/*.xls*:in_source + foo=bar + dummy=a long string - controllerService: kafka_out_service component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService @@ -108,6 +104,12 @@ engine: write.topics.key.serializer: com.hurence.logisland.serializer.StringSerializer write.topics.client.service: kafka_out_service processorConfigurations: + - processor: stream_debugger2 + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json - processor: flatten component: com.hurence.logisland.processor.FlatMap type: processor @@ -116,18 +118,3 @@ engine: keep.root.record: true copy.root.record.fields: true leaf.record.type: record_value - - processor: create_aliases - component: com.hurence.logisland.processor.NormalizeFields - type: processor - documentation: "creates an alias tagname/record_name. record_name will be used as metric name into Chronix" - configuration: - conflict.resolution.policy: do_nothing - source_file_name: record_key - - processor: excel_parser - component: com.hurence.logisland.processor.excel.ExcelExtract - type: parser - documentation: a parser that produce events from an excel file - configuration: - record.type: cma1 - skip.rows: 1 - field.row.header: 0 \ No newline at end of file diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/logback.xml b/logisland-connect/logisland-connect-spark/src/test/resources/logback.xml similarity index 100% rename from logisland-engines/logisland-spark_2_1-engine/src/test/resources/logback.xml rename to logisland-connect/logisland-connect-spark/src/test/resources/logback.xml diff --git a/logisland-connect/logisland-connectors-bundle/pom.xml b/logisland-connect/logisland-connectors-bundle/pom.xml new file mode 100644 index 000000000..d9c6eb22e --- /dev/null +++ b/logisland-connect/logisland-connectors-bundle/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + com.hurence.logisland + logisland-connect + 0.12.2 + + jar + + logisland-connectors-bundle + + + + + + com.eneco + kafka-connect-ftp + 0.1.4 + + + + + + + org.immutables.tools + maven-shade-plugin + 4 + + + package-ftp-plugin + package + + shade + + + true + + + com.eneco:kafka-connect-ftp + commons-net:commons-net + commons-compress:commons-compress + + + + + + + + + + + org.apache.commons.net + ${logisland.shade.packageName}.kc.ftp.org.apache.commons.net + + + + + + + + + + + + diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/git.properties b/logisland-connect/logisland-connectors-bundle/src/main/resources/git.properties similarity index 100% rename from logisland-engines/logisland-spark_2_1-engine/src/test/resources/git.properties rename to logisland-connect/logisland-connectors-bundle/src/main/resources/git.properties diff --git a/logisland-connect/pom.xml b/logisland-connect/pom.xml new file mode 100644 index 000000000..4a3ae4658 --- /dev/null +++ b/logisland-connect/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + com.hurence.logisland + logisland + 0.12.2 + + pom + + logisland-connect + Kafka Connect Logisland Modules + + + logisland-connect-spark + logisland-connectors-bundle + + + + + org.apache.kafka + connect-api + ${kafka.version} + + + org.apache.kafka + connect-runtime + ${kafka.version} + + + org.apache.kafka + connect-json + ${kafka.version} + + + + + diff --git a/logisland-documentation/components.rst b/logisland-documentation/components.rst index 2640e4734..7e3c1bf96 100644 --- a/logisland-documentation/components.rst +++ b/logisland-documentation/components.rst @@ -887,7 +887,7 @@ In the list below, the names of required properties appear in **bold**. Any othe :header: "Name","Description","Allowable Values","Default Value","Sensitive","EL" :widths: 20,60,30,20,10,10 - "**conflict.resolution.policy**", "waht to do when a field with the same name already exists ?", "nothing to do (leave record as it was), overwrite existing field (if field already exist), keep only old field and delete the other (keep only old field and delete the other), keep old field and new one (creates an alias for the new field)", "do_nothing", "", "" + "**conflict.resolution.policy**", "what to do when a field with the same name already exists ?", "nothing to do (leave record as it was), overwrite existing field (if field already exist), keep only old field and delete the other (keep only old field and delete the other), keep old field and new one (creates an alias for the new field)", "do_nothing", "", "" Dynamic Properties __________________ diff --git a/logisland-engines/logisland-spark_2_1-engine/pom.xml b/logisland-engines/logisland-spark_2_1-engine/pom.xml index 6df927b21..d3b694152 100644 --- a/logisland-engines/logisland-spark_2_1-engine/pom.xml +++ b/logisland-engines/logisland-spark_2_1-engine/pom.xml @@ -93,35 +93,6 @@ http://www.w3.org/2001/XMLSchema-instance "> - - org.apache.kafka - connect-api - ${kafka.version} - - - org.apache.kafka - connect-runtime - ${kafka.version} - - - org.apache.kafka - connect-json - ${kafka.version} - - - - - com.eneco - kafka-connect-ftp - 0.1.4 - test - - - com.hurence.logisland - logisland-excel-plugin - test - - com.fasterxml.jackson.core jackson-core diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java b/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java deleted file mode 100644 index 943070884..000000000 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/java/com/hurence/logisland/util/kafkaconnect/source/KafkaConnectStreamSource.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) 2018 Hurence (support@hurence.com) - * - * 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 com.hurence.logisland.util.kafkaconnect.source; - - -import com.hurence.logisland.stream.StreamProperties; -import org.apache.kafka.connect.connector.ConnectorContext; -import org.apache.kafka.connect.json.JsonConverter; -import org.apache.kafka.connect.source.SourceConnector; -import org.apache.kafka.connect.source.SourceTask; -import org.apache.kafka.connect.storage.*; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Row; -import org.apache.spark.sql.SQLContext; -import org.apache.spark.sql.catalyst.expressions.GenericRow; -import org.apache.spark.sql.execution.streaming.LongOffset; -import org.apache.spark.sql.execution.streaming.Offset; -import org.apache.spark.sql.execution.streaming.Source; -import org.apache.spark.sql.types.DataTypes; -import org.apache.spark.sql.types.Metadata; -import org.apache.spark.sql.types.StructField; -import org.apache.spark.sql.types.StructType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import scala.Option; - -import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.stream.Collectors; - -/** - * Kafka connect to spark sql streaming bridge. - * - * @author amarziali - */ -public class KafkaConnectStreamSource implements Source { - - private final static Logger LOGGER = LoggerFactory.getLogger(KafkaConnectStreamSource.class); - /** - * The Schema used for this source. - */ - public final static StructType SCHEMA = new StructType(new StructField[] { - new StructField(StreamProperties.KAFKA_CONNECT_CONNECTOR_PROPERTIES().getName(), - DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), - new StructField(StreamProperties.KAFKA_CONNECT_KEY_CONVERTER().getName(), - DataTypes.StringType, false, Metadata.empty()), - new StructField(StreamProperties.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName(), - DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), - new StructField(StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER().getName(), - DataTypes.StringType, false, Metadata.empty()), - new StructField(StreamProperties.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName(), - DataTypes.createMapType(DataTypes.StringType, DataTypes.StringType), false, Metadata.empty()), - new StructField(StreamProperties.KAFKA_CONNECT_MAX_TASKS().getName(), - DataTypes.createMapType(DataTypes.IntegerType, DataTypes.StringType), false, Metadata.empty()) - }); - /** - * The schema used to represent the outgoing dataframe. - */ - public final static StructType DATA_SCHEMA = new StructType(new StructField[]{ - new StructField("topic", DataTypes.StringType, false, Metadata.empty()), - new StructField("partition", DataTypes.IntegerType, true, Metadata.empty()), - new StructField("key", DataTypes.BinaryType, true, Metadata.empty()), - new StructField("value", DataTypes.BinaryType, false, Metadata.empty()) - - }); - - private final SourceConnector connector; - private final ConnectorContext connectorContext; - private final ExecutorService executorService; - private final List sourceThreads = new ArrayList<>(); - private final OffsetBackingStore offsetBackingStore; - - private final SharedSourceTaskContext sharedSourceTaskContext; - private final SQLContext sqlContext; - private final Converter keyConverter; - private final Converter valueConverter; - - - public KafkaConnectStreamSource(SQLContext sqlContext, - Map connectorProperties, - Converter keyConverter, - Converter valueConverter, - int maxTasks, - Class connectorClass) throws Exception { - this.sqlContext = sqlContext; - connector = connectorClass.newInstance(); - this.keyConverter = keyConverter; - this.valueConverter = valueConverter; - //handle task configurations - - //TODO: handle reconfiguration - connectorContext = new ConnectorContext() { - @Override - public void requestTaskReconfiguration() { - //do nothing - } - - @Override - public void raiseError(Exception e) { - LOGGER.error("Connector " + connectorClass.getCanonicalName() + " raised error : " + e.getMessage(), e); - } - }; - LOGGER.info("Starting connector {}", connectorClass.getCanonicalName()); - connector.initialize(connectorContext); - connector.start(connectorProperties); - offsetBackingStore = new MemoryOffsetBackingStore(); - offsetBackingStore.start(); - //TODO: add different storage here - JsonConverter internalConverter = new JsonConverter(); - internalConverter.configure(Collections.singletonMap("schemas.enable", "false"), false); - sharedSourceTaskContext = new SharedSourceTaskContext( - new OffsetStorageReaderImpl(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter), - new OffsetStorageWriter(offsetBackingStore, connectorClass.getCanonicalName(), internalConverter, internalConverter)); - //create tasks - Class taskClass = (Class) connector.taskClass(); - List> configs = connector.taskConfigs(maxTasks); - LOGGER.info("Starting {} tasks for connector {}", configs.size(), connectorClass.getCanonicalName()); - executorService = Executors.newFixedThreadPool(configs.size()); - for (Map cfg : configs) { - SourceTask t = taskClass.newInstance(); - SourceThread st = new SourceThread(t, sqlContext, cfg, sharedSourceTaskContext); - executorService.execute(st.start()); - sourceThreads.add(st); - } - } - - @Override - public StructType schema() { - return SCHEMA; - } - - @Override - public Option getOffset() { - Optional offset = sharedSourceTaskContext.lastOffset(); - return offset.isPresent() ? Option.apply(LongOffset.apply(offset.get())) : Option.empty(); - - } - - - @Override - public Dataset getBatch(Option start, Offset end) { - return sqlContext.createDataFrame( - sharedSourceTaskContext.read(start.isDefined() ? Optional.of(start.get()) : Optional.empty(), end) - .stream() - .map(record -> new GenericRow(new Object[]{ - record.topic(), - record.kafkaPartition(), - keyConverter.fromConnectData(record.topic(), record.keySchema(), record.key()), - valueConverter.fromConnectData(record.topic(), record.valueSchema(), record.value()) - })).collect(Collectors.toList()), - DATA_SCHEMA); - } - - @Override - public void commit(Offset end) { - sharedSourceTaskContext.commit(end); - } - - @Override - public void stop() { - LOGGER.info("Stopping connector {}", connector.getClass().getCanonicalName()); - executorService.shutdownNow(); - sourceThreads.forEach(SourceThread::stop); - offsetBackingStore.stop(); - connector.stop(); - } -} - diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala index c4adf05b0..d07879bd9 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/package.scala @@ -4,8 +4,6 @@ import com.hurence.logisland.component.{AllowableValue, PropertyDescriptor} import com.hurence.logisland.serializer._ import com.hurence.logisland.stream.spark.structured.provider.StructuredStreamProviderService import com.hurence.logisland.validator.StandardValidators -import org.apache.kafka.connect.connector.Connector -import org.apache.kafka.connect.storage.Converter /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -505,62 +503,6 @@ object StreamProperties { .defaultValue("aggregation") .build - ////////////////////////////////////// - // Kafka Connect options - ////////////////////////////////////// - val KAFKA_CONNECT_CONNECTOR_CLASS = new PropertyDescriptor.Builder() - .name("kc.connector.class") - .description("The class canonical name of the kafka connector to use.") - .required(true) - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Connector])) - .build - - val KAFKA_CONNECT_CONNECTOR_PROPERTIES = new PropertyDescriptor.Builder() - .name("kc.connector.properties") - .description("The properties (key=value) for the connector.") - .required(false) - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .build - val KAFKA_CONNECT_MAX_TASKS = new PropertyDescriptor.Builder() - .name("kc.worker.tasks.max") - .description("Max number of threads for this connector") - .required(true) - .defaultValue("1") - .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) - .build - - val KAFKA_CONNECT_KEY_CONVERTER = new PropertyDescriptor.Builder() - .name("kc.data.key.converter") - .description("Key converter class") - .required(true) - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Converter])) - .build - - val KAFKA_CONNECT_VALUE_CONVERTER = new PropertyDescriptor.Builder() - .name("kc.data.value.converter") - .description("Value converter class") - .required(true) - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .addValidator(StandardValidators.TYPE_VALIDATOR(classOf[Converter])) - .build - - val KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES = new PropertyDescriptor.Builder() - .name("kc.data.key.converter.properties") - .description("Key converter properties") - .required(true) - .defaultValue("") - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .build - - val KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES = new PropertyDescriptor.Builder() - .name("kc.data.value.converter.properties") - .description("Value converter properties") - .required(true) - .defaultValue("") - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .build } diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala deleted file mode 100644 index a55013c18..000000000 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaConnectStructuredProviderService.scala +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2018 Hurence (support@hurence.com) - * - * 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 com.hurence.logisland.stream.spark.structured.provider - -import java.util -import java.util.Collections - -import com.hurence.logisland.annotation.lifecycle.OnEnabled -import com.hurence.logisland.component.{InitializationException, PropertyDescriptor} -import com.hurence.logisland.controller.{AbstractControllerService, ControllerServiceInitializationContext} -import com.hurence.logisland.record.{FieldDictionary, FieldType, Record, StandardRecord} -import com.hurence.logisland.stream.StreamContext -import com.hurence.logisland.stream.StreamProperties._ -import org.apache.spark.sql.types.BinaryType -import org.apache.spark.sql.{Dataset, SparkSession} - -class KafkaConnectStructuredProviderService extends AbstractControllerService with StructuredStreamProviderService { - - var connectorProperties = "" - var keyConverter = "" - var valueConverter = "" - var keyConverterProperties = "" - var valueConverterProperties = "" - var maxConfigurations = 1 - var delegateConnectorClass = "" - - - @OnEnabled - @throws[InitializationException] - override def init(context: ControllerServiceInitializationContext): Unit = { - this.synchronized { - try { - delegateConnectorClass = context.getProperty(KAFKA_CONNECT_CONNECTOR_CLASS) - connectorProperties = context.getProperty(KAFKA_CONNECT_CONNECTOR_PROPERTIES) - valueConverter = context.getProperty(KAFKA_CONNECT_VALUE_CONVERTER) - valueConverterProperties = context.getProperty(KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES) - keyConverter = context.getProperty(KAFKA_CONNECT_KEY_CONVERTER) - keyConverterProperties = context.getProperty(KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES) - maxConfigurations = (context getPropertyValue KAFKA_CONNECT_MAX_TASKS).asInteger() - - } catch { - case e: Exception => - throw new InitializationException(e) - } - } - } - - - /** - * Allows subclasses to register which property descriptor objects are - * supported. - * - * @return PropertyDescriptor objects this processor currently supports - */ - override def getSupportedPropertyDescriptors() = { - val descriptors: util.List[PropertyDescriptor] = new util.ArrayList[PropertyDescriptor] - descriptors.add(KAFKA_CONNECT_CONNECTOR_CLASS) - descriptors.add(KAFKA_CONNECT_CONNECTOR_PROPERTIES) - descriptors.add(KAFKA_CONNECT_KEY_CONVERTER) - descriptors.add(KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES) - descriptors.add(KAFKA_CONNECT_VALUE_CONVERTER) - descriptors.add(KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES) - descriptors.add(KAFKA_CONNECT_MAX_TASKS) - Collections.unmodifiableList(descriptors) - } - - - /** - * create a streaming DataFrame that represents data received - * - * @param spark - * @param streamContext - * @return DataFrame currently loaded - */ - override def read(spark: SparkSession, streamContext: StreamContext) = { - - import spark.implicits._ - implicit val myObjEncoder = org.apache.spark.sql.Encoders.kryo[Record] - - getLogger.info(s"Connecting kafka-connect source $delegateConnectorClass") - - spark.readStream - .format("com.hurence.logisland.util.kafkaconnect.source.KafkaConnectStreamSourceProvider") - .option(KAFKA_CONNECT_CONNECTOR_PROPERTIES.getName, connectorProperties) - .option(KAFKA_CONNECT_KEY_CONVERTER.getName, keyConverter) - .option(KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES.getName, keyConverterProperties) - .option(KAFKA_CONNECT_VALUE_CONVERTER.getName, valueConverter) - .option(KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES.getName, valueConverterProperties) - .option(KAFKA_CONNECT_MAX_TASKS.getName, maxConfigurations) - .option(KAFKA_CONNECT_CONNECTOR_CLASS.getName, delegateConnectorClass) - .load() - //Topic, Partition, - .as[(String, Int, Array[Byte], Array[Byte])] - .map(r => - new StandardRecord("kafka_connect") - .setField(FieldDictionary.RECORD_KEY, FieldType.BYTES, r._3) - .setField(FieldDictionary.RECORD_VALUE, FieldType.BYTES, r._4)) - } - - - /** - * create a streaming DataFrame that represents data received - * - * @param streamContext - * @return DataFrame currently loaded - */ - override def write(df: Dataset[Record], streamContext: StreamContext) = { - df - } - -} diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java deleted file mode 100644 index 09ba4fcac..000000000 --- a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceConnector.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (C) 2018 Hurence (support@hurence.com) - * - * 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 com.hurence.logisland.engine.kc; - -import org.apache.kafka.common.config.ConfigDef; -import org.apache.kafka.common.utils.AppInfoParser; -import org.apache.kafka.connect.connector.Task; -import org.apache.kafka.connect.errors.ConnectException; -import org.apache.kafka.connect.source.SourceConnector; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * BinarySourceConnector implements the connector interface - * to write on Kafka binary files - * - * @author Alex Piermatteo - */ -public class BinarySourceConnector extends SourceConnector { - - - public static final String SCHEMA_NAME = "schema.name"; - public static final String TOPIC = "topic"; - public static final String FILE_PATH = "filename.path"; - - private String schema_name; - private String topic; - private String filename_path; - - - /** - * Get the version of this connector. - * - * @return the version, formatted as a String - */ - @Override - public String version() { - return AppInfoParser.getVersion(); - } - - - /** - * Start this Connector. This method will only be called on a clean Connector, i.e. it has - * either just been instantiated and initialized or {@link #stop()} has been invoked. - * - * @param props configuration settings - */ - @Override - public void start(Map props) { - - schema_name = props.get(SCHEMA_NAME); - if (schema_name == null || schema_name.isEmpty()) - throw new ConnectException("missing schema.name"); - topic = props.get(TOPIC); - if (topic == null || topic.isEmpty()) - throw new ConnectException("missing topic"); - - filename_path = props.get(FILE_PATH); - if (filename_path == null || filename_path.isEmpty()) - throw new ConnectException("missing filename.path"); - - - } - - - /** - * Returns the Task implementation for this Connector. - * - * @return tha Task implementation Class - */ - @Override - public Class taskClass() { - return BinarySourceTask.class; - } - - - /** - * Returns a set of configurations for the Task based on the current configuration. - * It always creates a single set of configurations. - * - * @param maxTasks maximum number of configurations to generate - * @return configurations for the Task - */ - @Override - public List> taskConfigs(int maxTasks) { - ArrayList> configs = new ArrayList<>(); - for (int i = 0; i < maxTasks; i++) { - Map config = new HashMap<>(); - - config.put(FILE_PATH, filename_path); - config.put(SCHEMA_NAME, schema_name); - config.put(TOPIC, topic); - configs.add(config); - } - return configs; - } - - - /** - * Stop this connector. - */ - @Override - public void stop() { - - } - - @Override - public ConfigDef config() { - return new ConfigDef() - .define(FILE_PATH, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "File Path") - .define(SCHEMA_NAME, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "Schema name") - .define(TOPIC, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "Output topic"); - } - -} \ No newline at end of file diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java b/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java deleted file mode 100644 index fb0e330f4..000000000 --- a/logisland-engines/logisland-spark_2_1-engine/src/test/java/com/hurence/logisland/engine/kc/BinarySourceTask.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (C) 2018 Hurence (support@hurence.com) - * - * 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 com.hurence.logisland.engine.kc; - -import org.apache.kafka.common.errors.InterruptException; -import org.apache.kafka.connect.data.Schema; -import org.apache.kafka.connect.data.SchemaBuilder; -import org.apache.kafka.connect.data.Struct; -import org.apache.kafka.connect.errors.ConnectException; -import org.apache.kafka.connect.source.SourceRecord; -import org.apache.kafka.connect.source.SourceTask; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - - -/** - * BinarySourceTask is a Task that reads changes from a directory for storage - * new binary detected files in Kafka. - * - * @author Alex Piermatteo - */ -public class BinarySourceTask extends SourceTask { - private final static Logger log = LoggerFactory.getLogger(BinarySourceTask.class); - - private static Schema schema = null; - private String schemaName; - private String topic; - private String filename_path; - private boolean ran = false; - - - @Override - public String version() { - return new BinarySourceConnector().version(); - } - - /** - * Start the Task. Handles configuration parsing and one-time setup of the Task. - * - * @param props initial configuration - */ - @Override - public void start(Map props) { - - schemaName = props.get(BinarySourceConnector.SCHEMA_NAME); - if (schemaName == null) - throw new ConnectException("config schema.name null"); - topic = props.get(BinarySourceConnector.TOPIC); - if (topic == null) - throw new ConnectException("config topic null"); - - filename_path = props.get(BinarySourceConnector.FILE_PATH); - if (filename_path == null || filename_path.isEmpty()) - throw new ConnectException("missing filename.path"); - - - log.trace("Creating schema"); - schema = SchemaBuilder - .struct().name(schemaName) - .field("name", Schema.OPTIONAL_STRING_SCHEMA) - .field("binary", Schema.OPTIONAL_BYTES_SCHEMA) - .build(); - } - - - /** - * Poll this BinarySourceTask for new records. - * - * @return a list of source records - * @throws InterruptedException - */ - @Override - public List poll() throws InterruptException { - if (!ran) { - ran = true; - List records = new ArrayList<>(); - - File file = new File(filename_path); - // creates the record - // no need to save offsets - SourceRecord record = create_binary_record(file); - records.add(record); - this.stop(); - - - return records; - } - return null; - } - - - /** - * Create a new SourceRecord from a File - * - * @return a source records - */ - private SourceRecord create_binary_record(File file) { - - byte[] data = null; - try { - //transform file to byte[] - Path path = Paths.get(file.getPath()); - data = Files.readAllBytes(path); - log.error(String.valueOf(data.length)); - } catch (IOException e) { - e.printStackTrace(); - } - - // creates the structured message - Struct messageStruct = new Struct(schema); - messageStruct.put("name", file.getName()); - messageStruct.put("binary", data); - // creates the record - // no need to save offsets - return new SourceRecord(Collections.singletonMap("file_binary", 0), Collections.singletonMap("0", 0), topic, 0, messageStruct.schema(), messageStruct); - } - - - /** - * Signal this SourceTask to stop. - */ - @Override - public void stop() { - } - -} \ No newline at end of file diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/components.rst b/logisland-framework/logisland-resources/src/main/resources/docs/components.rst index 2640e4734..7e3c1bf96 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/components.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/components.rst @@ -887,7 +887,7 @@ In the list below, the names of required properties appear in **bold**. Any othe :header: "Name","Description","Allowable Values","Default Value","Sensitive","EL" :widths: 20,60,30,20,10,10 - "**conflict.resolution.policy**", "waht to do when a field with the same name already exists ?", "nothing to do (leave record as it was), overwrite existing field (if field already exist), keep only old field and delete the other (keep only old field and delete the other), keep old field and new one (creates an alias for the new field)", "do_nothing", "", "" + "**conflict.resolution.policy**", "what to do when a field with the same name already exists ?", "nothing to do (leave record as it was), overwrite existing field (if field already exist), keep only old field and delete the other (keep only old field and delete the other), keep old field and new one (creates an alias for the new field)", "do_nothing", "", "" Dynamic Properties __________________ diff --git a/logisland-framework/logisland-utils/pom.xml b/logisland-framework/logisland-utils/pom.xml index 70b915466..16025b2a2 100644 --- a/logisland-framework/logisland-utils/pom.xml +++ b/logisland-framework/logisland-utils/pom.xml @@ -104,6 +104,7 @@ junit junit + com.101tec zkclient diff --git a/pom.xml b/pom.xml index 28caa8875..95b14e141 100644 --- a/pom.xml +++ b/pom.xml @@ -123,7 +123,7 @@ central - Maven Repository https://repo1.maven.org/maven2 @@ -1251,6 +1251,24 @@ 2.6.6 2.5 + + logisland-connect + + + + + + com.hurence.logisland + logisland-connect-spark + ${project.version} + + + com.hurence.logisland + logisland-connectors-bundle + ${project.version} + + + @@ -1371,11 +1389,11 @@ - contrib-check From 2e3da08aa50aa0209e384e236bcadd0030e67ead Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Wed, 28 Mar 2018 15:32:21 +0200 Subject: [PATCH 09/35] Do better key serialization Properly handle 3rd party connectors bundle with dependency shading Properly handle standalone and distributed sources --- logisland-assembly/pom.xml | 7 - .../converter/LogIslandRecordConverter.java | 15 +- .../source/KafkaConnectStreamSource.java | 6 +- .../KafkaConnectStreamSourceProvider.java | 58 ++++- .../source/SharedSourceTaskContext.java | 5 +- .../connect/source/SourceThread.java | 7 +- .../logisland-connectors-bundle/pom.xml | 202 +++++++++++++----- ...KafkaStructuredStreamProviderService.scala | 1 + 8 files changed, 228 insertions(+), 73 deletions(-) diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index 836ccfd6c..f1808470d 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -237,13 +237,6 @@ com.hurence.logisland logisland-agent - - - com.eneco - kafka-connect-ftp - 0.1.4 - - diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java index 15143fbab..f238a518f 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java @@ -31,6 +31,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.ByteBuffer; +import java.util.HashMap; import java.util.Map; public class LogIslandRecordConverter implements Converter { @@ -56,12 +57,14 @@ public class LogIslandRecordConverter implements Converter { private RecordSerializer recordSerializer; private String recordType; + private boolean isKey; @Override public void configure(Map configs, boolean isKey) { recordSerializer = SerializerProvider.getSerializer((String) configs.get(PROPERTY_RECORD_SERIALIZER), (String) configs.get(PROPERTY_AVRO_SCHEMA)); recordType = ((Map) configs).getOrDefault(PROPERTY_RECORD_TYPE, DEFAULT_RECORD_TYPE).toString(); + this.isKey = isKey; } @Override @@ -127,9 +130,15 @@ private Field toFieldRecursive(String name, Schema schema, Object value) { if (struct.schema() != schema) { throw new DataException("Mismatching schema."); } - Record ret = new StandardRecord(); - struct.schema().fields().forEach(field -> ret.setField(toFieldRecursive(field.name(), field.schema(), struct.get(field)))); - return new Field(name, FieldType.RECORD, ret); + if (isKey) { + Map ret = new HashMap<>(); + struct.schema().fields().forEach(field -> ret.put(field.name(), toFieldRecursive(field.name(), field.schema(), struct.get(field)).getRawValue())); + return new Field(name, FieldType.MAP, ret); + } else { + Record ret = new StandardRecord(); + struct.schema().fields().forEach(field -> ret.setField(toFieldRecursive(field.name(), field.schema(), struct.get(field)))); + return new Field(name, FieldType.RECORD, ret); + } } } diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java index 946378c71..0a9e54d48 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java @@ -18,7 +18,6 @@ package com.hurence.logisland.connect.source; -import com.hurence.logisland.stream.StreamProperties; import com.hurence.logisland.stream.spark.StreamOptions; import org.apache.kafka.connect.connector.ConnectorContext; import org.apache.kafka.connect.errors.DataException; @@ -33,7 +32,6 @@ import org.apache.spark.sql.Row; import org.apache.spark.sql.SQLContext; import org.apache.spark.sql.catalyst.expressions.GenericRow; -import org.apache.spark.sql.execution.streaming.LongOffset; import org.apache.spark.sql.execution.streaming.Offset; import org.apache.spark.sql.execution.streaming.Source; import org.apache.spark.sql.types.DataTypes; @@ -241,8 +239,8 @@ public StructType schema() { @Override public Option getOffset() { - Optional offset = sharedSourceTaskContext.lastOffset(); - return offset.isPresent() ? Option.apply(LongOffset.apply(offset.get())) : Option.empty(); + Optional offset = sharedSourceTaskContext.lastOffset(); + return Option.apply(offset.orElse(null)); } diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java index 9b41e0c84..7c74ebfa1 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java @@ -45,10 +45,52 @@ */ public class KafkaConnectStreamSourceProvider implements StreamSourceProvider { - private Converter createConverter(Map parameters, String classKey, String propertyKey) + /** + * Configuration definition for {@link MemoryOffsetBackingStore} + */ + private static class MemoryConfig extends WorkerConfig { + public MemoryConfig(java.util.Map props) { + super(new ConfigDef(), props); + } + } + + /** + * Configuration definition for {@link FileOffsetBackingStore} + */ + private static class FileConfig extends WorkerConfig { + public FileConfig(java.util.Map props) { + super(new ConfigDef() + .define(StandaloneConfig.OFFSET_STORAGE_FILE_FILENAME_CONFIG, + ConfigDef.Type.STRING, + ConfigDef.Importance.HIGH, + "file to store offset data in") + , props); + } + } + + /** + * Configuration definition for {@link KafkaOffsetBackingStore} + */ + private static class KafkaConfig extends WorkerConfig { + public KafkaConfig(java.util.Map props) { + super(new ConfigDef() + .define(BOOTSTRAP_SERVERS_CONFIG, + ConfigDef.Type.LIST, + BOOTSTRAP_SERVERS_DEFAULT, + ConfigDef.Importance.HIGH, + BOOTSTRAP_SERVERS_DOC) + .define(DistributedConfig.OFFSET_STORAGE_TOPIC_CONFIG, + ConfigDef.Type.STRING, + ConfigDef.Importance.HIGH, + "kafka topic to store connector offsets in") + , props); + } + } + + private Converter createConverter(Map parameters, String classKey, String propertyKey, boolean isKey) throws ClassNotFoundException, IllegalAccessException, InstantiationException, IOException { Converter ret = (Converter) Class.forName(parameters.get(classKey).get()).newInstance(); - ret.configure(propertiesToMap(parameters.get(propertyKey).get()), false); + ret.configure(propertiesToMap(parameters.get(propertyKey).get()), isKey); return ret; } @@ -62,20 +104,24 @@ private java.util.Map propertiesToMap(String propertiesAsString) public Source createSource(SQLContext sqlContext, String metadataPath, Option schema, String providerName, Map parameters) { try { Converter keyConverter = createConverter(parameters, StreamOptions.KAFKA_CONNECT_KEY_CONVERTER().getName(), - StreamOptions.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName()); + StreamOptions.KAFKA_CONNECT_KEY_CONVERTER_PROPERTIES().getName(), true); Converter valueConverter = createConverter(parameters, StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER().getName(), - StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName()); + StreamOptions.KAFKA_CONNECT_VALUE_CONVERTER_PROPERTIES().getName(), false); //create the right backing store OffsetBackingStore offsetBackingStore = null; - WorkerConfig workerConfig = new WorkerConfig(new ConfigDef(), - propertiesToMap(parameters.get(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE_PROPERTIES().getName()).get())); + WorkerConfig workerConfig = null; + java.util.Map offsetBackingStoreProperties = + propertiesToMap(parameters.get(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE_PROPERTIES().getName()).get()); String bs = parameters.get(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE().getName()).get(); if (StreamOptions.FILE_BACKING_STORE().getValue().equals(bs)) { offsetBackingStore = new FileOffsetBackingStore(); + workerConfig = new FileConfig(offsetBackingStoreProperties); } else if (StreamOptions.MEMORY_BACKING_STORE().getValue().equals(bs)) { offsetBackingStore = new MemoryOffsetBackingStore(); + workerConfig = new MemoryConfig(offsetBackingStoreProperties); } else if (StreamOptions.KAFKA_BACKING_STORE().getValue().equals(bs)) { offsetBackingStore = new KafkaOffsetBackingStore(); + workerConfig = new KafkaConfig(offsetBackingStoreProperties); } else { throw new IllegalArgumentException(StreamOptions.KAFKA_CONNECT_OFFSET_BACKING_STORE().getName() + " must be set!"); diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java index 76ec07f0d..405df7059 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java @@ -70,12 +70,11 @@ public OffsetStorageReader offsetStorageReader() { * * @return */ - public Optional lastOffset() { + public Optional lastOffset() { Lock lock = rwLock.readLock(); try { lock.lock(); - return Optional.ofNullable(buffer.isEmpty() ? null : - new Long(buffer.getLast()._1().sourceOffset().hashCode())); + return Optional.ofNullable(buffer.isEmpty() ? null : buffer.getLast()._2()); } finally { lock.unlock(); } diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SourceThread.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SourceThread.java index 2ac710288..b9ced867a 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SourceThread.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SourceThread.java @@ -17,6 +17,7 @@ package com.hurence.logisland.connect.source; +import org.apache.commons.lang3.RandomUtils; import org.apache.kafka.connect.source.SourceRecord; import org.apache.kafka.connect.source.SourceTask; import org.apache.spark.sql.execution.streaming.LongOffset; @@ -26,6 +27,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -61,7 +63,10 @@ public void run() { try { List records = task.poll(); if (records != null) { - records.forEach(sourceRecord -> sharedSourceTaskContext.offer(sourceRecord, LongOffset.apply(sourceRecord.sourceOffset().hashCode()), task)); + + records.forEach(sourceRecord -> sharedSourceTaskContext.offer(sourceRecord, + LongOffset.apply(sourceRecord.sourceOffset().isEmpty() ? UUID.randomUUID().hashCode() :sourceRecord.sourceOffset().hashCode()), + task)); } } catch (InterruptedException ie) { break; diff --git a/logisland-connect/logisland-connectors-bundle/pom.xml b/logisland-connect/logisland-connectors-bundle/pom.xml index d9c6eb22e..9051094b8 100644 --- a/logisland-connect/logisland-connectors-bundle/pom.xml +++ b/logisland-connect/logisland-connectors-bundle/pom.xml @@ -12,58 +12,162 @@ logisland-connectors-bundle + + + + includeConnectFtp + + false + + withConnectFtp + + + + + + com.eneco + kafka-connect-ftp + 0.1.4 + + + + + + org.immutables.tools + maven-shade-plugin + 4 + + + package-ftp-source + package + + shade + + + true + + + com.eneco:kafka-connect-ftp + commons-net:commons-net + commons-compress:commons-compress + + + + + *:* + + META-INF/license/** + META-INF/* + META-INF/maven/** + LICENSE + NOTICE + /*.txt + build.properties + + + + + + + + + org.apache.commons.net + ${logisland.shade.packageName}.kc.ftp.org.apache.commons.net + + + - - - - com.eneco - kafka-connect-ftp - 0.1.4 - - + + + + + + + + + + includeConnectSimulator + + true + + !skipDefaultConnectors + - - - - org.immutables.tools - maven-shade-plugin - 4 - - - package-ftp-plugin - package - - shade - - - true - - - com.eneco:kafka-connect-ftp - commons-net:commons-net - commons-compress:commons-compress + + + + + com.github.jcustenborder.kafka.connect + kafka-connect-simulator + 0.1.118 + + + + + + org.immutables.tools + maven-shade-plugin + 4 + + + package-simulator-plugin + package + + shade + + + true + + + com.github.jcustenborder.kafka.connect:kafka-connect-simulator + + io.codearte.jfairy:jfairy + com.google.guava:guava + com.google.inject:guice + com.google.inject.extensions:guice-assistedinject + + + + + *:* + + META-INF/license/** + META-INF/* + META-INF/maven/** + LICENSE + NOTICE + /*.txt + build.properties + + + + + + + + + io.codearte.jfairy + + ${logisland.shade.packageName}.kc.simulator.io.codearte.jfairy + + + + com.google + ${logisland.shade.packageName}.kc.simulator.com.google + + + - - - - - - - - - - org.apache.commons.net - ${logisland.shade.packageName}.kc.ftp.org.apache.commons.net - - - - - - - - - + + + + + + + + diff --git a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala index f08932c3d..dda431978 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala +++ b/logisland-engines/logisland-spark_2_1-engine/src/main/scala/com/hurence/logisland/stream/spark/structured/provider/KafkaStructuredStreamProviderService.scala @@ -242,6 +242,7 @@ class KafkaStructuredStreamProviderService() extends AbstractControllerService w if (errorOrNull != null) { logger.error("Error occurred", errorOrNull) } + sender.producer.close(); } } From 0f9e1882a27808eaa258b915e112127e76e80185 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Wed, 28 Mar 2018 16:39:20 +0200 Subject: [PATCH 10/35] Tutorial documentation draft --- .../conf/logisland-kafka-connect.yml | 128 +++++++++ .../tutorials/integrate-kafka-connect.rst | 256 ++++++++++++++++++ 2 files changed, 384 insertions(+) create mode 100644 logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml b/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml new file mode 100644 index 000000000..91589adf6 --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml @@ -0,0 +1,128 @@ +version: 0.12.2 +documentation: LogIsland Kafka Connect Integration + +engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Use Kafka connectors with logisland + configuration: + spark.app.name: LogislandConnect + spark.master: local[*] + spark.driver.memory: 512M + spark.driver.cores: 1 + spark.executor.memory: 512M + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 2000 + spark.streaming.backpressure.enabled: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 10000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4040 + + controllerServiceConfigurations: + + # Our source service + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + documentation: A kafka source connector provider reading from its own source and providing structured streaming to the underlying layer + configuration: + # We will use the logisland record converter for both key and value + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + + kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.key.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + # Only one task to handle source input (unique) + kc.worker.tasks.max: 1 + # The kafka source connector to wrap (here we're using a simulator source) + kc.connector.class: com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector + # The properties for the connector (as per connector documentation) + kc.connector.properties: | + key.schema.fields=email + topic=simulator + value.schema.fields=email,firstName,middleName,lastName,telephoneNumber,dateOfBirth + # We are using a standalone source for testing. We can store processed offsets in memory + kc.connector.offset.backing.store: memory + + # Kafka sink configuration + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + + streamConfigurations: + ################ Indexing stream ############### + - stream: indexing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: "Concurrently process source incoming records. Source -> Kafka -> here" + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + processorConfigurations: + # We just print the received records (but you may do something more interesting!) + - processor: stream_debugger + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json + + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "Takes out data from record_value" + configuration: + keep.root.record: false + copy.root.record.fields: true + + diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst new file mode 100644 index 000000000..f02cbc438 --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst @@ -0,0 +1,256 @@ +Integrate Kafka Connect Sources & Sinks +======================================= + +In the following getting started tutorial, we'll focus on how to seamlessly integrate Kafka connect sources and sinks in logisland. + +We can call this functionality *Logisland connect*. + +.. note:: + + Be sure to know of to launch a logisland Docker environment by reading the `prerequisites <./prerequisites.html>`_ section + +1. Logisland job setup +---------------------- +The logisland job for this tutorial is already packaged in the tar.gz assembly and you can find it here for ElasticSearch : + +.. code-block:: sh + + docker exec -i -t logisland vim conf/index-apache-logs.yml + + + +We will start by explaining each part of the config file. + +========== +The engine +========== + +The first section configures the Spark engine (we will use a `KafkaStreamProcessingEngine <../plugins.html#kafkastreamprocessingengine>`_) to run in local mode. + +.. code-block:: yaml + + engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Index some apache logs with logisland + configuration: + spark.app.name: IndexApacheLogsDemo + spark.master: local[2] + spark.driver.memory: 1G + spark.driver.cores: 1 + spark.executor.memory: 2G + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 1000 + spark.streaming.backpressure.enabled: false + spark.streaming.unpersist: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 3000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4050 + +The `controllerServiceConfigurations` part is here to define all services that be shared by processors within the whole job. + +================== +The parsing stream +================== + +Here we are going to use a special processor (``KafkaConnectStructuredProviderService``) to use the kafka connect source as input for the structured stream defined below. + +For this example, we are going to use the source *com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector* that generates records containing fake personal data at rate of 100 messages/s. + + +.. code-block:: yaml + + # Our source service + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + documentation: A kafka source connector provider reading from its own source and providing structured streaming to the underlying layer + configuration: + # We will use the logisland record converter for both key and value + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + + kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.key.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + # Only one task to handle source input (unique) + kc.worker.tasks.max: 1 + # The kafka source connector to wrap (here we're using a simulator source) + kc.connector.class: com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector + # The properties for the connector (as per connector documentation) + kc.connector.properties: | + key.schema.fields=email + topic=simulator + value.schema.fields=email,firstName,middleName,lastName,telephoneNumber,dateOfBirth + # We are using a standalone source for testing. We can store processed offsets in memory + kc.connector.offset.backing.store: memory + +.. note:: + + The parameter **kc.connector.properties** contains the connector properties as you would have defined if you were using vanilla kafka connect. + + As well, we are using a *memory* offset backing store. In a distributed scenario, you may have chosen a *kafka* topic based one. + +Since each stream can be read and written, we are going to define as well a Kafka topic sink (``KafkaStructuredStreamProviderService``) that will be used as output for the structured stream defined below. + +.. code-block:: yaml + + # Kafka sink configuration + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +So that, we can now define the *parsing stream* using those source and sink + +.. code-block:: yaml + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``FlatMap`` processor takes out the value and key (required when using *StructuredStream* as source of records) + +.. code-block:: yaml + + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "Takes out data from record_value" + configuration: + keep.root.record: false + copy.root.record.fields: true + +=================== +The indexing stream +=================== + + +Inside this engine, you will run a Kafka stream of processing, so we set up input/output topics and Kafka/Zookeeper hosts. +Here the stream will read all the logs sent in ``logisland_raw`` topic and push the processing output into ``logisland_events`` topic. + +.. note:: + + We want to specify an Avro output schema to validate our output records (and force their types accordingly). + It's really for other streams to rely on a schema when processing records from a topic. + +We can define some serializers to marshall all records from and to a topic. + +.. code-block:: yaml + + - stream: parsing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: a processor that converts raw apache logs into structured log records + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +Within this stream, a ``DebugStream`` processor takes a log line as a String and computes a ``Record`` as a sequence of fields. + +.. code-block:: yaml + + processorConfigurations: + # We just print the received records (but you may do something more interesting!) + - processor: stream_debugger + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json + +This stream will process log entries as soon as they will be queued into `logisland_raw` Kafka topics, each log will be printed in the console and pushed back to Kafka in the ``logisland_events`` topic. + + + +2. Launch the script +-------------------- +Connect a shell to your logisland container to launch the following streaming jobs. + +.. code-block:: sh + + docker exec -i -t logisland bin/logisland.sh --conf conf/logisland-kafka-connect.yml + +3. Inject some Apache logs into the system +------------------------------------------ +Now we're going to send some logs to ``logisland_raw`` Kafka topic. + +We could setup a logstash or flume agent to load some apache logs into a kafka topic +but there's a super useful tool in the Kafka ecosystem : `kafkacat `_, +a *generic command line non-JVM Apache Kafka producer and consumer* which can be easily installed. + + +If you don't have your own httpd logs available, you can use some freely available log files from +`NASA-HTTP `_ web site access: + +- `Jul 01 to Jul 31, ASCII format, 20.7 MB gzip compressed `_ +- `Aug 04 to Aug 31, ASCII format, 21.8 MB gzip compressed `_ + +Let's send the first 500000 lines of NASA http access over July 1995 to LogIsland with kafkacat to ``logisland_raw`` Kafka topic + +.. code-block:: sh + + cd /tmp + wget ftp://ita.ee.lbl.gov/traces/NASA_access_log_Jul95.gz + gunzip NASA_access_log_Jul95.gz + head -500000 NASA_access_log_Jul95 | kafkacat -b sandbox:9092 -t logisland_raw + + +4. Monitor your spark jobs and Kafka topics +------------------------------------------- +Now go to `http://sandbox:4050/streaming/ `_ to see how fast Spark can process +your data + +.. image:: /_static/spark-job-monitoring.png + + +Another tool can help you to tweak and monitor your processing `http://sandbox:9000/ `_ + +.. image:: /_static/kafka-mgr.png + + From 7ee0acc2391e1941ac016bb25578714c2d7d94b9 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Wed, 28 Mar 2018 16:39:20 +0200 Subject: [PATCH 11/35] Tutorial documentation draft --- .../conf/logisland-kafka-connect.yml | 128 ++++++++++ .../tutorials/integrate-kafka-connect.rst | 232 ++++++++++++++++++ 2 files changed, 360 insertions(+) create mode 100644 logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml b/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml new file mode 100644 index 000000000..91589adf6 --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml @@ -0,0 +1,128 @@ +version: 0.12.2 +documentation: LogIsland Kafka Connect Integration + +engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Use Kafka connectors with logisland + configuration: + spark.app.name: LogislandConnect + spark.master: local[*] + spark.driver.memory: 512M + spark.driver.cores: 1 + spark.executor.memory: 512M + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 2000 + spark.streaming.backpressure.enabled: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 10000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4040 + + controllerServiceConfigurations: + + # Our source service + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + documentation: A kafka source connector provider reading from its own source and providing structured streaming to the underlying layer + configuration: + # We will use the logisland record converter for both key and value + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + + kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.key.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + # Only one task to handle source input (unique) + kc.worker.tasks.max: 1 + # The kafka source connector to wrap (here we're using a simulator source) + kc.connector.class: com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector + # The properties for the connector (as per connector documentation) + kc.connector.properties: | + key.schema.fields=email + topic=simulator + value.schema.fields=email,firstName,middleName,lastName,telephoneNumber,dateOfBirth + # We are using a standalone source for testing. We can store processed offsets in memory + kc.connector.offset.backing.store: memory + + # Kafka sink configuration + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + + streamConfigurations: + ################ Indexing stream ############### + - stream: indexing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: "Concurrently process source incoming records. Source -> Kafka -> here" + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + processorConfigurations: + # We just print the received records (but you may do something more interesting!) + - processor: stream_debugger + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json + + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "Takes out data from record_value" + configuration: + keep.root.record: false + copy.root.record.fields: true + + diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst new file mode 100644 index 000000000..62f3ae858 --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst @@ -0,0 +1,232 @@ +Integrate Kafka Connect Sources & Sinks +======================================= + +In the following getting started tutorial, we'll focus on how to seamlessly integrate Kafka connect sources and sinks in logisland. + +We can call this functionality *Logisland connect*. + +.. note:: + + Be sure to know of to launch a logisland Docker environment by reading the `prerequisites <./prerequisites.html>`_ section + +1. Logisland job setup +---------------------- +The logisland job for this tutorial is already packaged in the tar.gz assembly and you can find it here for ElasticSearch : + +.. code-block:: sh + + docker exec -i -t logisland vim conf/index-apache-logs.yml + + + +We will start by explaining each part of the config file. + +========== +The engine +========== + +The first section configures the Spark engine (we will use a `KafkaStreamProcessingEngine <../plugins.html#kafkastreamprocessingengine>`_) to run in local mode. + +.. code-block:: yaml + + engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Index some apache logs with logisland + configuration: + spark.app.name: IndexApacheLogsDemo + spark.master: local[2] + spark.driver.memory: 1G + spark.driver.cores: 1 + spark.executor.memory: 2G + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 1000 + spark.streaming.backpressure.enabled: false + spark.streaming.unpersist: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 3000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4050 + +The `controllerServiceConfigurations` part is here to define all services that be shared by processors within the whole job. + +================== +The parsing stream +================== + +Here we are going to use a special processor (``KafkaConnectStructuredProviderService``) to use the kafka connect source as input for the structured stream defined below. + +For this example, we are going to use the source *com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector* that generates records containing fake personal data at rate of 100 messages/s. + + +.. code-block:: yaml + + # Our source service + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + documentation: A kafka source connector provider reading from its own source and providing structured streaming to the underlying layer + configuration: + # We will use the logisland record converter for both key and value + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + + kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.key.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + # Only one task to handle source input (unique) + kc.worker.tasks.max: 1 + # The kafka source connector to wrap (here we're using a simulator source) + kc.connector.class: com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector + # The properties for the connector (as per connector documentation) + kc.connector.properties: | + key.schema.fields=email + topic=simulator + value.schema.fields=email,firstName,middleName,lastName,telephoneNumber,dateOfBirth + # We are using a standalone source for testing. We can store processed offsets in memory + kc.connector.offset.backing.store: memory + +.. note:: + + The parameter **kc.connector.properties** contains the connector properties as you would have defined if you were using vanilla kafka connect. + + As well, we are using a *memory* offset backing store. In a distributed scenario, you may have chosen a *kafka* topic based one. + +Since each stream can be read and written, we are going to define as well a Kafka topic sink (``KafkaStructuredStreamProviderService``) that will be used as output for the structured stream defined below. + +.. code-block:: yaml + + # Kafka sink configuration + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +So that, we can now define the *parsing stream* using those source and sink + +.. code-block:: yaml + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``FlatMap`` processor takes out the value and key (required when using *StructuredStream* as source of records) + +.. code-block:: yaml + + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "Takes out data from record_value" + configuration: + keep.root.record: false + copy.root.record.fields: true + +=================== +The indexing stream +=================== + + +Inside this engine, you will run a Kafka stream of processing, so we set up input/output topics and Kafka/Zookeeper hosts. +Here the stream will read all the logs sent in ``logisland_raw`` topic and push the processing output into ``logisland_events`` topic. + +.. note:: + + We want to specify an Avro output schema to validate our output records (and force their types accordingly). + It's really for other streams to rely on a schema when processing records from a topic. + +We can define some serializers to marshall all records from and to a topic. + +.. code-block:: yaml + + - stream: parsing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: a processor that converts raw apache logs into structured log records + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +Within this stream, a ``DebugStream`` processor takes a log line as a String and computes a ``Record`` as a sequence of fields. + +.. code-block:: yaml + + processorConfigurations: + # We just print the received records (but you may do something more interesting!) + - processor: stream_debugger + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json + +This stream will process log entries as soon as they will be queued into `logisland_raw` Kafka topics, each log will be printed in the console and pushed back to Kafka in the ``logisland_events`` topic. + + + +2. Launch the script +-------------------- +Connect a shell to your logisland container to launch the following streaming jobs. + +.. code-block:: sh + + docker exec -i -t logisland bin/logisland.sh --conf conf/logisland-kafka-connect.yml + + +4. Monitor your spark jobs and Kafka topics +------------------------------------------- +Now go to `http://sandbox:4050/streaming/ `_ to see how fast Spark can process +your data + +.. image:: /_static/spark-job-monitoring.png + + +Another tool can help you to tweak and monitor your processing `http://sandbox:9000/ `_ + +.. image:: /_static/kafka-mgr.png + + From 55d782edb86a09c5ba9e59a17fbdc05dae41e893 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Tue, 3 Apr 2018 09:16:31 +0200 Subject: [PATCH 12/35] Clean up --- .../logisland/connect/source/KafkaConnectStreamSource.java | 1 + .../connect/source/KafkaConnectStreamSourceProvider.java | 2 +- .../java/com/hurence/logisland/connect/KafkaConnectTest.java | 1 - .../src/test/resources/conf/kafka-connect-stream.yml | 5 ++--- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java index 0a9e54d48..25a288cd9 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSource.java @@ -285,6 +285,7 @@ public void stop() { } LOGGER.info("Stopping connector {}", connectorName()); stopAllThreads(); + sharedSourceTaskContext.clean(); offsetBackingStore.stop(); connector.stop(); } diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java index 7c74ebfa1..36b8e3417 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/KafkaConnectStreamSourceProvider.java @@ -136,7 +136,7 @@ public Source createSource(SQLContext sqlContext, String metadataPath, Option) Class.forName(parameters.get(StreamOptions.KAFKA_CONNECT_CONNECTOR_CLASS().getName()).get())); } catch (Exception e) { - throw new IllegalArgumentException("Unable to create kafka connect stream source", e); + throw new IllegalArgumentException("Unable to create kafka connect stream source: " + e.getMessage(), e); } diff --git a/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java index 19d5fbf4f..3a332311a 100644 --- a/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java +++ b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java @@ -39,7 +39,6 @@ public class KafkaConnectTest { private static final String JOB_CONF_FILE = "/conf/kafka-connect-stream.yml"; @Test - @Ignore public void remoteTest() { diff --git a/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml b/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml index 81c53a936..76158c0cc 100644 --- a/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml +++ b/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml @@ -6,7 +6,7 @@ engine: type: engine documentation: Index some apache logs with logisland configuration: - spark.app.name: CMACGM + spark.app.name: ConnectTest spark.master: local[*] spark.driver.memory: 512M spark.driver.cores: 1 @@ -115,6 +115,5 @@ engine: type: processor documentation: "extract from root record" configuration: - keep.root.record: true + keep.root.record: false copy.root.record.fields: true - leaf.record.type: record_value From c726028f3f7b342b395d5348de2899c0905af450 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Wed, 4 Apr 2018 14:06:38 +0200 Subject: [PATCH 13/35] Fix build (do not include agent) for hdp 2.5 profile Refactor metrics names as constants to avoid hardcoded stuff --- logisland-assembly/pom.xml | 17 ++--- .../util/spark/ProcessorMetrics.java | 71 ++++++++++--------- .../util/spark/ProcessorMetrics.java | 57 +++++++-------- .../StructuredStreamProviderService.scala | 8 ++- .../src/main/resources/components.json | 2 +- .../com/hurence/logisland/metrics/Names.java | 38 ++++++++++ logisland-framework/pom.xml | 7 -- 7 files changed, 118 insertions(+), 82 deletions(-) create mode 100644 logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/metrics/Names.java diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index f1808470d..ccf45cca9 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -179,14 +179,7 @@ com.hurence.logisland logisland-excel-plugin - - com.hurence.logisland - logisland-connect-spark - - - com.hurence.logisland - logisland-connectors-bundle - + diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java index 405df7059..51ff13f8d 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/source/SharedSourceTaskContext.java @@ -28,6 +28,7 @@ import scala.Tuple3; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -68,7 +69,7 @@ public OffsetStorageReader offsetStorageReader() { /** * Fetch last offset available. * - * @return + * @return the last available offset if any. */ public Optional lastOffset() { Lock lock = rwLock.readLock(); @@ -91,15 +92,19 @@ public Collection read(Optional from, Offset to) { Lock lock = rwLock.readLock(); try { lock.lock(); - boolean started = false; Collection ret = new ArrayList<>(); - for (Tuple3 current : buffer) { - Offset lo = current._2(); - if (started || !from.isPresent() || from.get().equals(lo)) { - started = true; - ret.add(current._1()); + while (!buffer.isEmpty()) { + Tuple3 current = buffer.removeFirst(); + ret.add(current._1()); + try { + if (current._3() != null) { + current._3().commitRecord(current._1()); + } + offsetStorageWriter.offset(current._1().sourcePartition(), current._1().sourceOffset()); + } catch (Throwable t) { + LOGGER.warn("Unable to properly commit offset " + current._2(), t); } - if (to.equals(lo)) { + if (to.equals(current._2())) { break; } } @@ -133,44 +138,21 @@ public void offer(SourceRecord record, Offset offset, SourceTask emitter) { * @param endOffset the last offset read and committed by the spark engine. */ public void commit(Offset endOffset) { - Lock lock = rwLock.readLock(); try { - lock.lock(); - Tuple3 sr = buffer.stream() - .filter(item -> endOffset.equals(item._2())) - .findFirst().get(); - offsetStorageWriter.offset(sr._1().sourcePartition(), sr._1().sourceOffset()); + if (offsetStorageWriter.beginFlush()) { offsetStorageWriter.doFlush((error, result) -> { if (error == null) { - Lock ll = rwLock.writeLock(); - try { - ll.lock(); - while (!buffer.isEmpty()) { - Tuple3 current = buffer.removeFirst(); - if (current._3() != null) { - try { - current._3().commitRecord(current._1()); - } catch (InterruptedException e) { - LOGGER.warn("Interrupted while committing", e); - } - } - if (endOffset.equals(current._2())) { - break; - } - } - } finally { - ll.unlock(); - } + LOGGER.info("Flushing till offset {} with result {}", endOffset, result); } else { LOGGER.error("Unable to commit records till source offset " + endOffset, error); + } - }); + }).get(30, TimeUnit.SECONDS); } - } finally { - lock.unlock(); + } catch (Exception e) { + LOGGER.error("Unable to commit records till source offset " + endOffset, e); } - } /** diff --git a/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java index 19d5fbf4f..3a332311a 100644 --- a/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java +++ b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java @@ -39,7 +39,6 @@ public class KafkaConnectTest { private static final String JOB_CONF_FILE = "/conf/kafka-connect-stream.yml"; @Test - @Ignore public void remoteTest() { diff --git a/logisland-connect/logisland-connect-spark/src/test/resources/logback.xml b/logisland-connect/logisland-connect-spark/src/test/resources/logback.xml index 3ea52dc9f..20a6c7a28 100644 --- a/logisland-connect/logisland-connect-spark/src/test/resources/logback.xml +++ b/logisland-connect/logisland-connect-spark/src/test/resources/logback.xml @@ -19,7 +19,6 @@ - System.err %d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n diff --git a/logisland-connect/logisland-connectors-bundle/pom.xml b/logisland-connect/logisland-connectors-bundle/pom.xml index 9051094b8..7a7b56962 100644 --- a/logisland-connect/logisland-connectors-bundle/pom.xml +++ b/logisland-connect/logisland-connectors-bundle/pom.xml @@ -167,6 +167,77 @@ + + + includeConnectBlockchain + + false + + withConnectBlockchain + + + + + + com.datamountaineer + kafka-connect-blockchain + 1.0.0 + + + + + + org.immutables.tools + maven-shade-plugin + 4 + + + package-blockchain-source + package + + shade + + + true + + + com.datamountaineer:kafka-connect-blockchain + org.codehaus.jackson:* + + + + + *:* + + META-INF/license/** + META-INF/* + META-INF/maven/** + LICENSE + NOTICE + /*.txt + build.properties + + + + + + + + + org.codehaus.jackson + ${logisland.shade.packageName}.kc.blockchain.org.codehaus.jackson + + + + + + + + + + + diff --git a/logisland-documentation/components.rst b/logisland-documentation/components.rst index 7e3c1bf96..b8e778012 100644 --- a/logisland-documentation/components.rst +++ b/logisland-documentation/components.rst @@ -429,6 +429,38 @@ Dynamic Properties allow the user to specify both the name and value of a proper ---------- +.. _com.hurence.logisland.processor.excel.ExcelExtract: + +ExcelExtract +------------ +Consumes a Microsoft Excel document and converts each worksheet's line to a structured record. The processor is assuming to receive raw excel file as input record. + +Class +_____ +com.hurence.logisland.processor.excel.ExcelExtract + +Tags +____ +excel, processor, poi + +Properties +__________ +In the list below, the names of required properties appear in **bold**. Any other properties (not in bold) are considered optional. The table also indicates any default values +. + +.. csv-table:: allowable-values + :header: "Name","Description","Allowable Values","Default Value","Sensitive","EL" + :widths: 20,60,30,20,10,10 + + "Sheets to Extract", "Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property is left blank then all of the sheets will be extracted from the Excel document. You can specify regular expressions. Any sheets not specified in this value will be ignored.", "", "", "", "" + "Columns To Skip", "Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.", "", "", "", "" + "Field names mapping", "The comma separated list representing the names of columns of extracted cells. Order matters! You should use either field.names either field.row.header but not both together.", "", "null", "", "" + "Number of Rows to Skip", "The row number of the first row to start processing.Use this to skip over rows of data at the top of your worksheet that are not part of the dataset.Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.", "", "0", "", "" + "record.type", "Default type of record", "", "excel_record", "", "" + "Use a row header as field names mapping", "If set, field names mapping will be extracted from the specified row number. You should use either field.names either field.row.header but not both together.", "", "null", "", "" + +---------- + .. _com.hurence.logisland.processor.hbase.FetchHBaseRow: FetchHBaseRow diff --git a/logisland-documentation/pom.xml b/logisland-documentation/pom.xml index d3f57ed49..2ed039b97 100644 --- a/logisland-documentation/pom.xml +++ b/logisland-documentation/pom.xml @@ -109,9 +109,12 @@ com.hurence.logisland logisland-useragent-plugin - - + + com.hurence.logisland + logisland-excel-plugin + + diff --git a/logisland-documentation/tutorials/integrate-kafka-connect.rst b/logisland-documentation/tutorials/integrate-kafka-connect.rst new file mode 100644 index 000000000..4a8a108b5 --- /dev/null +++ b/logisland-documentation/tutorials/integrate-kafka-connect.rst @@ -0,0 +1,259 @@ +Integrate Kafka Connect Sources & Sinks +======================================= + +In the following getting started tutorial, we'll focus on how to seamlessly integrate Kafka connect sources and sinks in logisland. + +We can call this functionality *Logisland connect*. + +.. note:: + + Be sure to know of to launch a logisland Docker environment by reading the `prerequisites <./prerequisites.html>`_ section + +1. Logisland job setup +---------------------- +The logisland job for this tutorial is already packaged in the tar.gz assembly and you can find it here for ElasticSearch : + +.. code-block:: sh + + docker exec -i -t logisland vim conf/logisland-kafka-connect.yml + + + +We will start by explaining each part of the config file. + +========== +The engine +========== + +The first section configures the Spark engine (we will use a `KafkaStreamProcessingEngine <../plugins.html#kafkastreamprocessingengine>`_) to run in local mode. + +.. code-block:: yaml + + engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Use Kafka connectors with logisland + configuration: + spark.app.name: LogislandConnect + spark.master: local[2] + spark.driver.memory: 1G + spark.driver.cores: 1 + spark.executor.memory: 2G + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 1000 + spark.streaming.backpressure.enabled: false + spark.streaming.unpersist: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 3000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4050 + +The `controllerServiceConfigurations` part is here to define all services that be shared by processors within the whole job. + +================== +The parsing stream +================== + +Here we are going to use a special processor (``KafkaConnectStructuredProviderService``) to use the kafka connect source as input for the structured stream defined below. + +For this example, we are going to use the source *com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector* that generates records containing fake personal data at rate of 100 messages/s. + + +.. code-block:: yaml + + # Our source service + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + documentation: A kafka source connector provider reading from its own source and providing structured streaming to the underlying layer + configuration: + # We will use the logisland record converter for both key and value + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + + kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.key.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + # Only one task to handle source input (unique) + kc.worker.tasks.max: 1 + # The kafka source connector to wrap (here we're using a simulator source) + kc.connector.class: com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector + # The properties for the connector (as per connector documentation) + kc.connector.properties: | + key.schema.fields=email + topic=simulator + value.schema.fields=email,firstName,middleName,lastName,telephoneNumber,dateOfBirth + # We are using a standalone source for testing. We can store processed offsets in memory + kc.connector.offset.backing.store: memory + +.. note:: + + The parameter **kc.connector.properties** contains the connector properties as you would have defined if you were using vanilla kafka connect. + + As well, we are using a *memory* offset backing store. In a distributed scenario, you may have chosen a *kafka* topic based one. + +Since each stream can be read and written, we are going to define as well a Kafka topic sink (``KafkaStructuredStreamProviderService``) that will be used as output for the structured stream defined below. + +.. code-block:: yaml + + # Kafka sink configuration + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +So that, we can now define the *parsing stream* using those source and sink + +.. code-block:: yaml + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``FlatMap`` processor takes out the value and key (required when using *StructuredStream* as source of records) + +.. code-block:: yaml + + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "Takes out data from record_value" + configuration: + keep.root.record: false + copy.root.record.fields: true + +=================== +The indexing stream +=================== + + +Inside this engine, you will run a Kafka stream of processing, so we set up input/output topics and Kafka/Zookeeper hosts. +Here the stream will read all the logs sent in ``logisland_raw`` topic and push the processing output into ``logisland_events`` topic. + +.. note:: + + We want to specify an Avro output schema to validate our output records (and force their types accordingly). + It's really for other streams to rely on a schema when processing records from a topic. + +We can define some serializers to marshall all records from and to a topic. + +.. code-block:: yaml + + + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``DebugStream`` processor takes a log line as a String and computes a ``Record`` as a sequence of fields. + +.. code-block:: yaml + + processorConfigurations: + # We just print the received records (but you may do something more interesting!) + - processor: stream_debugger + component: com.hurence.logisland.processor.DebugStream + type: processor + documentation: debug records + configuration: + event.serializer: json + +This stream will process log entries as soon as they will be queued into `logisland_raw` Kafka topics, each log will be printed in the console and pushed back to Kafka in the ``logisland_events`` topic. + + + +2. Launch the script +-------------------- +Connect a shell to your logisland container to launch the following streaming jobs. + +.. code-block:: sh + + docker exec -i -t logisland bin/logisland.sh --conf conf/logisland-kafka-connect.yml + + +3. Examine your console output +------------------------------ + +Since we put a *DebugStream* processor, messages produced by our source connectors are then output to the console in json. + +.. code-block:: json + + 18/04/06 11:17:06 INFO DebugStream: { + "id" : "9b17a9ac-97c4-44ef-9168-d298e8c53d42", + "type" : "kafka_connect", + "creationDate" : 1523006216376, + "fields" : { + "record_id" : "9b17a9ac-97c4-44ef-9168-d298e8c53d42", + "firstName" : "London", + "lastName" : "Marks", + "telephoneNumber" : "005-694-4540", + "record_key" : { + "email" : "londonmarks@fake.com" + }, + "middleName" : "Anna", + "dateOfBirth" : 836179200000, + "record_time" : 1523006216376, + "record_type" : "kafka_connect", + "email" : "londonmarks@fake.com" + } + } + + + +4. Monitor your spark jobs and Kafka topics +------------------------------------------- +Now go to `http://sandbox:4050/streaming/ `_ to see how fast Spark can process +your data + +.. image:: /_static/spark-job-monitoring.png + + +Another tool can help you to tweak and monitor your processing `http://sandbox:9000/ `_ + +.. image:: /_static/kafka-mgr.png + + diff --git a/logisland-framework/logisland-agent/src/main/resources/components.json b/logisland-framework/logisland-agent/src/main/resources/components.json index 6fa9e3b15..2e45c727e 100644 --- a/logisland-framework/logisland-agent/src/main/resources/components.json +++ b/logisland-framework/logisland-agent/src/main/resources/components.json @@ -10,6 +10,7 @@ {"name":"EnrichRecords","description":"Enrich input records with content indexed in datastore using multiget queries.\nEach incoming record must be possibly enriched with information stored in datastore. \nThe plugin properties are :\n- es.index (String) : Name of the datastore index on which the multiget query will be performed. This field is mandatory and should not be empty, otherwise an error output record is sent for this specific incoming record.\n- record.key (String) : Name of the field in the input record containing the id to lookup document in elastic search. This field is mandatory.\n- es.key (String) : Name of the datastore key on which the multiget query will be performed. This field is mandatory.\n- includes (ArrayList) : List of patterns to filter in (include) fields to retrieve. Supports wildcards. This field is not mandatory.\n- excludes (ArrayList) : List of patterns to filter out (exclude) fields to retrieve. Supports wildcards. This field is not mandatory.\n\nEach outcoming record holds at least the input record plus potentially one or more fields coming from of one datastore document.","component":"com.hurence.logisland.processor.datastore.EnrichRecords","type":"processor","tags":["datastore","enricher"],"properties":[{"name":"datastore.client.service","isRequired":true,"description":"The instance of the Controller Service to use for accessing datastore.","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"record.key","isRequired":false,"description":"The name of field in the input record containing the document id to use in ES multiget query","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"includes.field","isRequired":false,"description":"The name of the ES fields to include in the record.","defaultValue":"*","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"excludes.field","isRequired":false,"description":"The name of the ES fields to exclude.","defaultValue":"N/A","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"type.name","isRequired":false,"description":"The typle of record to look for","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"collection.name","isRequired":false,"description":"The name of the collection to look for","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true}]}, {"name":"EnrichRecordsElasticsearch","description":"Enrich input records with content indexed in elasticsearch using multiget queries.\nEach incoming record must be possibly enriched with information stored in elasticsearch. \nThe plugin properties are :\n- es.index (String) : Name of the elasticsearch index on which the multiget query will be performed. This field is mandatory and should not be empty, otherwise an error output record is sent for this specific incoming record.\n- record.key (String) : Name of the field in the input record containing the id to lookup document in elastic search. This field is mandatory.\n- es.key (String) : Name of the elasticsearch key on which the multiget query will be performed. This field is mandatory.\n- includes (ArrayList) : List of patterns to filter in (include) fields to retrieve. Supports wildcards. This field is not mandatory.\n- excludes (ArrayList) : List of patterns to filter out (exclude) fields to retrieve. Supports wildcards. This field is not mandatory.\n\nEach outcoming record holds at least the input record plus potentially one or more fields coming from of one elasticsearch document.","component":"com.hurence.logisland.processor.elasticsearch.EnrichRecordsElasticsearch","type":"processor","tags":["elasticsearch"],"properties":[{"name":"elasticsearch.client.service","isRequired":true,"description":"The instance of the Controller Service to use for accessing Elasticsearch.","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"record.key","isRequired":true,"description":"The name of field in the input record containing the document id to use in ES multiget query","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"es.index","isRequired":true,"description":"The name of the ES index to use in multiget query. ","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"es.type","isRequired":false,"description":"The name of the ES type to use in multiget query.","defaultValue":"default","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"es.includes.field","isRequired":false,"description":"The name of the ES fields to include in the record.","defaultValue":"*","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"es.excludes.field","isRequired":false,"description":"The name of the ES fields to exclude.","defaultValue":"N/A","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false}]}, {"name":"EvaluateJsonPath","description":"Evaluates one or more JsonPath expressions against the content of a FlowFile. The results of those expressions are assigned to Records Fields depending on configuration of the Processor. JsonPaths are entered by adding user-defined properties; the name of the property maps to the Field Name into which the result will be placed. The value of the property must be a valid JsonPath expression. A Return Type of 'auto-detect' will make a determination based off the configured destination. If the JsonPath evaluates to a JSON array or JSON object and the Return Type is set to 'scalar' the Record will be routed to error. A Return Type of JSON can return scalar values if the provided JsonPath evaluates to the specified value. If the expression matches nothing, Fields will be created with empty strings as the value ","component":"com.hurence.logisland.processor.EvaluateJsonPath","type":"processor","tags":["JSON","evaluate","JsonPath"],"dynamicProperties":[{"name":"A Record field","value":"A JsonPath expression","description":"will be set to any JSON objects that match the JsonPath. ","isExpressionLanguageSupported":false}]}, +{"name":"ExcelExtract","description":"Consumes a Microsoft Excel document and converts each worksheet's line to a structured record. The processor is assuming to receive raw excel file as input record.","component":"com.hurence.logisland.processor.excel.ExcelExtract","type":"processor","tags":["excel","processor","poi"],"properties":[{"name":"sheets","isRequired":false,"description":"Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property is left blank then all of the sheets will be extracted from the Excel document. You can specify regular expressions. Any sheets not specified in this value will be ignored.","defaultValue":"","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"skip.columns","isRequired":false,"description":"Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.","defaultValue":"","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"field.names","isRequired":false,"description":"The comma separated list representing the names of columns of extracted cells. Order matters! You should use either field.names either field.row.header but not both together.","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"skip.rows","isRequired":false,"description":"The row number of the first row to start processing.Use this to skip over rows of data at the top of your worksheet that are not part of the dataset.Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.","defaultValue":"0","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"record.type","isRequired":false,"description":"Default type of record","defaultValue":"excel_record","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"field.row.header","isRequired":false,"description":"If set, field names mapping will be extracted from the specified row number. You should use either field.names either field.row.header but not both together.","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false}]}, {"name":"FetchHBaseRow","description":"Fetches a row from an HBase table. The Destination property controls whether the cells are added as flow file attributes, or the row is written to the flow file content as JSON. This processor may be used to fetch a fixed row on a interval by specifying the table and row id directly in the processor, or it may be used to dynamically fetch rows by referencing the table and row id from incoming flow files.","component":"com.hurence.logisland.processor.hbase.FetchHBaseRow","type":"processor","tags":["hbase","scan","fetch","get","enrich"],"properties":[{"name":"hbase.client.service","isRequired":true,"description":"The instance of the Controller Service to use for accessing HBase.","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"table.name.field","isRequired":true,"description":"The field containing the name of the HBase Table to fetch from.","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"row.identifier.field","isRequired":true,"description":"The field containing the identifier of the row to fetch.","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"columns.field","isRequired":false,"description":"The field containing an optional comma-separated list of \":\" pairs to fetch. To return all columns for a given family, leave off the qualifier such as \",\".","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":true},{"name":"record.serializer","isRequired":false,"description":"the serializer needed to i/o the record in the HBase row","kryo serialization":"serialize events as json blocs","json serialization":"serialize events as json blocs","avro serialization":"serialize events as avro blocs","no serialization":"send events as bytes","defaultValue":"com.hurence.logisland.serializer.KryoSerializer","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"record.schema","isRequired":false,"description":"the avro schema definition for the Avro serialization","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"table.name.default","isRequired":false,"description":"The table table to use if table name field is not set","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false}]}, {"name":"FilterRecords","description":"Keep only records based on a given field value","component":"com.hurence.logisland.processor.FilterRecords","type":"processor","tags":["record","fields","remove","delete"],"properties":[{"name":"field.name","isRequired":true,"description":"the field name","defaultValue":"record_id","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"field.value","isRequired":true,"description":"the field value to keep","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false}]}, {"name":"FlatMap","description":"Converts each field records into a single flatten record\n...","component":"com.hurence.logisland.processor.FlatMap","type":"processor","tags":["record","fields","flatmap","flatten"],"properties":[{"name":"keep.root.record","isRequired":false,"description":"do we add the original record in","defaultValue":"true","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"copy.root.record.fields","isRequired":false,"description":"do we copy the original record fields into the flattened records","defaultValue":"true","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"leaf.record.type","isRequired":false,"description":"the new type for the flattened records if present","defaultValue":"","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"concat.fields","isRequired":false,"description":"comma separated list of fields to apply concatenation ex : $rootField/$leaffield","defaultValue":null,"isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"concat.separator","isRequired":false,"description":"returns $rootField/$leaf/field","defaultValue":"/","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false},{"name":"include.position","isRequired":false,"description":"do we add the original record position in","defaultValue":"true","isDynamic":false,"isSensitive":false,"isExpressionLanguageSupported":false}]}, diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/components.rst b/logisland-framework/logisland-resources/src/main/resources/docs/components.rst index 7e3c1bf96..b8e778012 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/components.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/components.rst @@ -429,6 +429,38 @@ Dynamic Properties allow the user to specify both the name and value of a proper ---------- +.. _com.hurence.logisland.processor.excel.ExcelExtract: + +ExcelExtract +------------ +Consumes a Microsoft Excel document and converts each worksheet's line to a structured record. The processor is assuming to receive raw excel file as input record. + +Class +_____ +com.hurence.logisland.processor.excel.ExcelExtract + +Tags +____ +excel, processor, poi + +Properties +__________ +In the list below, the names of required properties appear in **bold**. Any other properties (not in bold) are considered optional. The table also indicates any default values +. + +.. csv-table:: allowable-values + :header: "Name","Description","Allowable Values","Default Value","Sensitive","EL" + :widths: 20,60,30,20,10,10 + + "Sheets to Extract", "Comma separated list of Excel document sheet names that should be extracted from the excel document. If this property is left blank then all of the sheets will be extracted from the Excel document. You can specify regular expressions. Any sheets not specified in this value will be ignored.", "", "", "", "" + "Columns To Skip", "Comma delimited list of column numbers to skip. Use the columns number and not the letter designation. Use this to skip over columns anywhere in your worksheet that you don't want extracted as part of the record.", "", "", "", "" + "Field names mapping", "The comma separated list representing the names of columns of extracted cells. Order matters! You should use either field.names either field.row.header but not both together.", "", "null", "", "" + "Number of Rows to Skip", "The row number of the first row to start processing.Use this to skip over rows of data at the top of your worksheet that are not part of the dataset.Empty rows of data anywhere in the spreadsheet will always be skipped, no matter what this value is set to.", "", "0", "", "" + "record.type", "Default type of record", "", "excel_record", "", "" + "Use a row header as field names mapping", "If set, field names mapping will be extracted from the specified row number. You should use either field.names either field.row.header but not both together.", "", "null", "", "" + +---------- + .. _com.hurence.logisland.processor.hbase.FetchHBaseRow: FetchHBaseRow diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst b/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst new file mode 100644 index 000000000..c6ef45dff --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst @@ -0,0 +1,126 @@ + +Connectors +========== + +In this chapter we will present you how to integrate kafka connect connectors into logisland. + +.. contents:: Table of Contents + + +Introduction +------------ + +Logisland features the integration between `kafka connect `_ world and the spark structured streaming engine. + +In order to seamlessy integrate both world, we just wrapped out the kafka connectors interfaces (unplugging them from kafka) and let the run in a logisland spark managed container. Hence the name *"Logisland Connect"* :-) + + +This allows you to leverage the existing kafka connectors library to import data into a logisland pipeline without having the need to make use of any another middleware or ETL system. + +Scope & Roadmap +--------------- + +Today only kafka-connect sources are available. + +Sinks will be probably supported in future relases of logisland. + +.. note:: + Please note that kafka connect requires at least kafka 0.10.0.0. Logisland build for hadoop 2.4 / spark 1.6 is hence not supporting this feature. + + +Building +-------- + +Logisland comes with a connectors bundle but those connectors are not bundled by default. You are required to build logisland from sources in order to package the connectors you need into logisland uber jar. + +Actually when building with maven you need to pass some java properties depending on the connector(s) you would like to include. + +Please refer to the following table for the details: + + ++--------------------------+----------------------------------------------------------------------------------+------------------------------+ +| Connector | URL | Build flag | ++==========================+=========================+========================================================+==============================+ +| Simulator | https://github.com/jcustenborder/kafka-connect-simulator | None (Built in) | ++--------------------------+-------------------------+--------------------------------------------------------+------------------------------+ +| FTP | https://github.com/Eneco/kafka-connect-ftp | -DwithConnectFtp | ++--------------------------+----------------------------------------------------------------------------------+------------------------------+ +| Blockchain | https://github.com/Landoop/stream-reactor/tree/master/kafka-connect-blockchain | -DwithConnectBlockchain | ++--------------------------+----------------------------------------------------------------------------------+------------------------------+ + + +Configuring +----------- + +Once you have bundled the connectors you need, you are now ready to use them. + +Let's do it step by step. + +First of all we need to declare a *KafkaConnectStructuredProviderService* that will manage our connector in Logisland. +Along with this we need to put some configuration (In general you can always refer to kafka connect documentation to better understand the underlying architecture and how to configure a connector): + + ++-------------------------------------------+----------------------------------------------------------+ +| Property | Description | ++===========================================+==========================================================+ +| kc.connector.class | The class of the connector (Fully qualified name) | ++-------------------------------------------+----------------------------------------------------------+ +| kc.data.key.converter | The class of the converter to be used for the key. | +| | Please refer to `Chosing the right converter`_ section | ++-------------------------------------------+----------------------------------------------------------+ +| kc.data.key.converter.properties | The properties to be provided to the key converter | +| | | ++-------------------------------------------+----------------------------------------------------------+ +| kc.data.value.converter | The class of the converter to be used for the key. | +| | Please refer to `Chosing the right converter`_ section | ++-------------------------------------------+----------------------------------------------------------+ +| kc.data.value.converter.properties | The properties to be provided to the key converter | +| | | ++-------------------------------------------+----------------------------------------------------------+ +| kc.connector.properties | | ++-------------------------------------------+----------------------------------------------------------+ +| kc.worker.tasks.max | | ++-------------------------------------------+----------------------------------------------------------+ +| kc.connector.offset.backing.store | | ++-------------------------------------------+----------------------------------------------------------+ +| kc.data.value.converter | | ++-------------------------------------------+----------------------------------------------------------+ + + + +.. code-block:: yaml + + # Our source service + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + documentation: A kafka source connector provider reading from its own source and providing structured streaming to the underlying layer + configuration: + # We will use the logisland record converter for both key and value + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + + kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.key.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + # Only one task to handle source input (unique) + kc.worker.tasks.max: 1 + # The kafka source connector to wrap (here we're using a simulator source) + kc.connector.class: com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector + # The properties for the connector (as per connector documentation) + kc.connector.properties: | + key.schema.fields=email + topic=simulator + value.schema.fields=email,firstName,middleName,lastName,telephoneNumber,dateOfBirth + # We are using a standalone source for testing. We can store processed offsets in memory + kc.connector.offset.backing.store: memory + + +Chosing the right converter +--------------------------- + +blablablabla + +.. image:: /_static/logisland-workflow.cl --- \ No newline at end of file diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst index 62f3ae858..4a8a108b5 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/integrate-kafka-connect.rst @@ -15,7 +15,7 @@ The logisland job for this tutorial is already packaged in the tar.gz assembly a .. code-block:: sh - docker exec -i -t logisland vim conf/index-apache-logs.yml + docker exec -i -t logisland vim conf/logisland-kafka-connect.yml @@ -32,9 +32,9 @@ The first section configures the Spark engine (we will use a `KafkaStreamProcess engine: component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine type: engine - documentation: Index some apache logs with logisland + documentation: Use Kafka connectors with logisland configuration: - spark.app.name: IndexApacheLogsDemo + spark.app.name: LogislandConnect spark.master: local[2] spark.driver.memory: 1G spark.driver.cores: 1 @@ -174,22 +174,20 @@ We can define some serializers to marshall all records from and to a topic. .. code-block:: yaml - - stream: parsing_stream - component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing - type: stream - documentation: a processor that converts raw apache logs into structured log records + + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" configuration: - kafka.input.topics: logisland_raw - kafka.output.topics: logisland_events - kafka.error.topics: logisland_errors - kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer - kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer - kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer - kafka.metadata.broker.list: sandbox:9092 - kafka.zookeeper.quorum: sandbox:2181 - kafka.topic.autoCreate: true - kafka.topic.default.partitions: 4 - kafka.topic.default.replicationFactor: 1 + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + Within this stream, a ``DebugStream`` processor takes a log line as a String and computes a ``Record`` as a sequence of fields. @@ -217,6 +215,35 @@ Connect a shell to your logisland container to launch the following streaming jo docker exec -i -t logisland bin/logisland.sh --conf conf/logisland-kafka-connect.yml +3. Examine your console output +------------------------------ + +Since we put a *DebugStream* processor, messages produced by our source connectors are then output to the console in json. + +.. code-block:: json + + 18/04/06 11:17:06 INFO DebugStream: { + "id" : "9b17a9ac-97c4-44ef-9168-d298e8c53d42", + "type" : "kafka_connect", + "creationDate" : 1523006216376, + "fields" : { + "record_id" : "9b17a9ac-97c4-44ef-9168-d298e8c53d42", + "firstName" : "London", + "lastName" : "Marks", + "telephoneNumber" : "005-694-4540", + "record_key" : { + "email" : "londonmarks@fake.com" + }, + "middleName" : "Anna", + "dateOfBirth" : 836179200000, + "record_time" : 1523006216376, + "record_type" : "kafka_connect", + "email" : "londonmarks@fake.com" + } + } + + + 4. Monitor your spark jobs and Kafka topics ------------------------------------------- Now go to `http://sandbox:4050/streaming/ `_ to see how fast Spark can process From 8df72a9cda7e3948cf1a3ce14514c239e2a35905 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Tue, 10 Apr 2018 14:42:49 +0200 Subject: [PATCH 18/35] New tutorial on blockchain Finalize documentation --- .../logisland-connect-spark/pom.xml | 2 +- .../logisland/connect/KafkaConnectTest.java | 1 + .../_static/kibana-blockchain-dashboard.png | Bin 0 -> 487007 bytes .../_static/kibana-blockchain-records.png | Bin 0 -> 596894 bytes logisland-documentation/connectors.rst | 178 ++++++++++++ .../index-blockchain-transactions.rst | 274 ++++++++++++++++++ .../conf/index-blockchain-transactions.yml | 127 ++++++++ .../_static/kibana-blockchain-dashboard.png | Bin 0 -> 487007 bytes .../_static/kibana-blockchain-records.png | Bin 0 -> 596894 bytes .../src/main/resources/docs/connectors.rst | 112 +++++-- .../index-blockchain-transactions.rst | 274 ++++++++++++++++++ 11 files changed, 937 insertions(+), 31 deletions(-) create mode 100644 logisland-documentation/_static/kibana-blockchain-dashboard.png create mode 100644 logisland-documentation/_static/kibana-blockchain-records.png create mode 100644 logisland-documentation/connectors.rst create mode 100644 logisland-documentation/tutorials/index-blockchain-transactions.rst create mode 100644 logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/_static/kibana-blockchain-dashboard.png create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/_static/kibana-blockchain-records.png create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-blockchain-transactions.rst diff --git a/logisland-connect/logisland-connect-spark/pom.xml b/logisland-connect/logisland-connect-spark/pom.xml index 510e41e29..3c7a5721e 100644 --- a/logisland-connect/logisland-connect-spark/pom.xml +++ b/logisland-connect/logisland-connect-spark/pom.xml @@ -53,7 +53,7 @@ org.apache.spark spark-sql-kafka-0-10_${scala.binary.version} - + diff --git a/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java index 3a332311a..19d5fbf4f 100644 --- a/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java +++ b/logisland-connect/logisland-connect-spark/src/test/java/com/hurence/logisland/connect/KafkaConnectTest.java @@ -39,6 +39,7 @@ public class KafkaConnectTest { private static final String JOB_CONF_FILE = "/conf/kafka-connect-stream.yml"; @Test + @Ignore public void remoteTest() { diff --git a/logisland-documentation/_static/kibana-blockchain-dashboard.png b/logisland-documentation/_static/kibana-blockchain-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..03f6422df9e6b10d2f7e0c4635de55b7b1e70e60 GIT binary patch literal 487007 zcmb??1yEg2vNs{YgI(a_?(VL^-R>fCeA%=B-jd!}cmyXS-}%1a=^m)6p1pH&NYnYAPzt_p8~Iwo5@C{H)G&oA~b6>9oJj zyODJ_0g;Q-j~ZF8$PQ5_)|zk-2VrKU%#wHmYv2z%8$j%^>EP7&s-(0DG2-yz=Hd2{ zsP6Gc7Tvty%3FEq^*y%^L>yI^iU;?qO&IbA|2D_|1RV(24n=z&R*lchsCA#x0g@<2 ztl07z25#8$YJVJB~4uliv6tpFIBbOvW%d#XbqKgu^M3%PDUqb z9DNQ*Qxt{_yslJxOMHgjpZaJ}Hb#e|;Bc>e;u#IZqHf5eQ@(z4iU~N$+|*&JXOnVh z=pk^zfL%frdA!j1VpH0KnK80E#C;%?**ziknQ*Un8wQ&C-T=y5X%$7GLNyZ?h2Nx0 zB@=_)B)0LQUf9GFEsWRk%IKTVljEk5%1&U==ka?gv96Y4E>0TtZbb7yhhLBZ{&0mg zg@K1eA7ObtalN`7WSIUyz)8Y*8*mn4-$}+bhyCG%-U$*U+6u};yWut=(?(Vp7xW5hRhjSa`|MrshqqhSP6c*5@Xv8$-nO-AwC89&| zr{{B>LA*bc=Cz?Z3sSz}*~S)1Hh>2%7IpznH+Y4JfG@zc$Is-RKHWi-^MiADX}8Ey zk#7#Z-3L(HpARjZJIJlupLLKIH;oM`URxM{k3m^=MK5=4GvJ%axe^ta*wzs)9ZB$F z;9{hr5`yeDu2nCj@rQ%ir>~6dE6yFayLnC|WNf%yQLG2$4fbn*6{t+L+nQ*usJt}2 zq}JQv-nO5?K>GbexNX=_TRba#PdtIQNlx=pzi{u@FARR_RW{o-#gXPR!H0o5#e#g5 z53)^R)`IDWJAYsml$MsNxwO`qcFcKtxZdP6E`SjB>wo?jjB@I7ttN)1Kni(0%9(q7 zwllYd7za8PCGdqHrTW17L#l4dPldc;s2D)8Izm?cLbwkgVj>U?)QtO7-18OaZ!_dc zk%j;a5LW!G9(0=vX#>Uk%dQ3)4&=U?C}qXvA+ZAZfoOwQ_)sgjJk=9O)3;4&HS5syG1& z|B(I=CAvsiDTS54R<5z4+bkiXi18G)1rN{1F^SY%+9}5d__aumT*^s=1D6H_pYS_l z2$cb>G-k8VR%1FkfXu)&6C4L2ZO=#zO$CzmH&!2v;~vl2ST59(ZP`_%ss%+pr2Q?{ ziwAc&y@2xp+zXX^wP)h>P(SiX*vC)Wfs_Gql4ONwW&n6N(_r1;-ryMr1sAk+)NoPg zse}V)uoZwgh$~c6cvZH7vI)Q&9vl8b29QcMk-4G}OW-QhQ6{z|wPZZxI)pFFxcMRl z8kQWEqSmAaNfoN*sunj$9HvcU6q!qZG-0pfUP{E1+KV?&)QERW$QVu?THE;$!PB3x zB^O>~q6kzPp>|1{N%BhK92ps*7$F!zOAZ-9NFGfF)8?r8mOjV-_|lkHSDIL+d?anf z-k9u}@%T-=05th*G2EcDEUkrjN_P6;Gzea|UoWJxM+KCtTsEESD7KqS1DeyB(|7q{ z)oJzp=*yhUj}9vnb_Dhm90}V_t)gYr#tf^MBWD+hTgh9STfi;<(f(|XbsQTVTOgY| zjtrZtMdqx#?BGGMGcZd=Uv@)EQ0{!5%u36uj-8b)k{xX6YH??2X%Rgav5;P*R_3Bw z9vQ$)hh-xUG{)G5*oNLtYzk=V;?VaBam~8JI0f?*I6phz^N8`>@+`Or9J06sIkUPf z9B>@1FZABp+)x~i&93CTX;r%=?NL=LttyEXAVvKwh&@_4kT{;0+Q{=$>e~1a#k)UzD{u9=DPNa8!?K#hw z2$*Ww!da=A$~ar?rI}qgr4-rw9tf3d+Sd8VZ&lR(6->miZgZ7eiMt7de-^aEv)9JbtG$pBi`av~ZblpE$Q1 zmu_;c*Z!(qx@4rprL0mZnqfCjcdEID+^5)IFt#1M8nnaq8VxyP={Ef?lQD{^!Ko2$ zon;-H@m)J&g`zp*Ed5OBjQq@;AC}+)0Ro>EpMd92&pl6qi|3iqaoQQ{*oEt_Dckqk zt}$LGwp(MD>t}1by*E;qOM5fB)+eKvl~+DH=0}6qE4$#|8_R;de${W~5TOuKzc&5B zbPDr)>efU+EPy8ZB5ENjI;JY>4bdVQ7k>*!3u7O-iM*sW6)_u~v)qAP(}#@FDnoFz z8?K=Ja~YGBrmUveVu3@3gOvOAC+D7fIBUw)NTyg6F*fl)N!Oj_p(mvjCDwf3EXhnP z_FBiS8H>S#)~QqGn>0&iFQfH-=)S6m4qS5#%4q9Ijp!UaeY7_LVx~N{Jle0aTkU-a zQl3&hg~cYyj^0;QJFik-66Y0;vQJoA9j>COQ&i04xH;AAt>$M7W>ibQ7URnj7m^j8 zNIm=x-%}mSzs_m)5nvH?@m+zOfsz3_GkylOc%hmq?d5O4g4EI}*Wq>zFOoW#d(L zUi<}}?t+VqYj0brN&0qpu)LG5lP?Bq#MdGjNHfTo>_mw5xQ{qc(YkU{a#<1sgqGHK zRszrEFV%DO1N6xfjWJa`;@nL;i+?Vkw_hr^=GV~s#+-S0V5H;~*~T-kIS+h(1YwjG`JTgHtw zysI-?aNKWyv)?r$ERa^Yt%tRJJ>J{N&~0{a&fXaR`SK{go)yrBaE^M0v8K_ce<$?z zW$t{wYr(D672gNz{$i^jO~Q@PiLlE%;d;jjoKVtGVmc9(J;&$fxjv1y>h#cGh`Gkt z&j{m*@TT}?JVRTq5&C-bbZw+>qz|?pKJM<4UO(t8^X0v>)%H_;3vydJhhE3@nS7~v zDtH>aQ-I6KM*RIO`>6BU|0r|4P*V+tu7`o?$Agpb#rS3LWo8=Uz8nWa3jlF5dhyC6 zb;*&4kngTAf_kr@dFh)NNekgplc3uRs)RTR?KdKhI)(8+;UPGNQ8eF=XCdRZ9G8#K zRK4#Z_Qt~VHim#G!}e!P=TF2lZfj%b#N*CS^0yK^@6UfFGm;Sft%$QVKZ&NCB9Vx_qbU(P0~-Sq zi2yti5fPuGi5ZWwsQ7=8zrXR5SU5X7@GvsExw$d8u`<{@nlmzUb8|B?u`sf*(7%_U zck-}vHgu=Ab0Yma$baLAnmQRfS~@se+S?KRg==VJ@8Zl)Lh@Hd|MUBMJ5Aj!|51~j z(|@t`&LHDoIgHEKM8BxIe>mxY^H!T{1;5Qu$R-#l<8=Gy z!lh55Ge~dA#G&IbS$(M~R)3~ao^^*BxhW2#Vu2$Wi|j+V1<;0Y3E9#Swa%$hvn44) z0=i*qDQHBdpel^Cd_}gLx}8`uv0vA4(orQX@6mAT8tcG|MxVX z0+No6bMp_vzdw8Yy+wK43;!W?M`J=Y$ZLgz(f|Ks@E%O=aC4yK{dic?vYVof0tDWj zBLq5)|1aUU1j8mJCl9w`vsoxgwi@MmNVY68|No8b0GY&JgM@xjx5o>;=iu$fizYe? z#F{qW+O8>)jE6UlCjCdhS|15T{Va~Wyx4d?c^;0fHF=_D^G3c`(!rxxUEJQtlpHnf znpzN=yMuQoYVr=2&P8q0%M3!?jXrRAS<~e3`E(1BN61co%zWI~u~RFU?d8kj$w?kJ zSzwDPz{W9U&SUWGG|F^i^=*a$J_c?0e~IZIbB9)#e^>D*S`FJEx6Hr>y)11i z6Qtr(z(v7H^c>am&gV&H)Y$P6(cim!vyVOkndghxS@htss{05yca)2#KfDSqVQuKh zl4D+E5x*Pb7%*xdnm2qSudW>Nc${HfTwJc+s=Hosl$4ahVq(N6viai^5(3Zt-k!AP z-#P?!m$fqpw_oO{G+Tk8U6;fhw(t~)kuP8diE;kFI_^&!#UGaJ+%fQiZ&K$^fSAOA zwyh0Mv8-&7eY5x9hS4(P2PKoLT@v(KkHnC@{TTJlHPU^QGZJV1H~LBbeA=qEJDQu5 zd5->toU_&F{g|h4Z7j1G{J>xevg_4-LZiJiM$@|jWoTm7s&aLtx4WGEA7OH3Jrs53 z`p;(W=RmV9iQTiVyd!JD9-iATM{&V>$VZ5SH9jja7AHh-#<&6Umsrev%Pd6o=sF)svImSA^7vmbccUH`_ZAt zp<3Xs!956Lkh-^(lK9*7_WToRlwrd$5i$iKPackzNm^O@1^a%>I-q zx|a?k<)8Kadzo%ixxz5Z)7|OHWvt)x$J^W6Y|E~bx>1K-L{5X9q4<`)bZfpfjt9eD zRP@&gJxN{1-*VWJh^<|=j=#Tn-B{VvvkWX~6qpR!oxI#TOusNC;#mcerybB)=@6ETw}QsqN|BDOX_T74A631@ABZeJScK#A=!67+8J5K6gJtgF zI>2i}mOx4|Jb&%DZ-0#1!Oh~;3%URB7BHJf9R|0FQGV{uEsc~_=!p>%oM(A}7NzgU zPji1Zoc3?CUq;8Hzr>u z)Cui~S>J{)_w?=S^kMo_r9M?QnvhjPtyV z;4OVo8#uo`KjAUO;!z?p0*7?UO$d;Xs4_`8A|O%!ZK|qj<-t8L<)B*Ii7#(m>dkkC z9v>m+H>@U1hL+#+ZR7n#ka80K50=KUG+b!n+dY#$7y`w~%+Bs4yB`|;Maf(W8wdqx z(@Y2HLi7q(l{ceaGG%^wmvk%~0P~%RPD$xJ=2}0(nRBS(`*e?~cJJoX%bhK-r9hJ1 z3!$pynwv3}@?eZe`(Vu^-<=-R#`7fvF&I%m^@QO|qe(T-L6Dj58X(TqI49S~I~8ek zWTeKh7kZHF6D@~*-DJDbAOoM@R-p0De8wg|?`B?i`0PUiJt_ynSS9&f-9kQW7bV;n zW<$edd*|nR%yPtB5gecZ>(8Yi&uvP3qmzaWIHLTT1LSH_ZsnHUuU23}36dQ(dMaTG z>(y4Y%ip{uyQ(_gsP?4mnJmDrr`eBz7gP`9*zP96(4H{YV(J$QKTD#iNb(+})hs$g zg7;$bA0WcH?tpNw`l~WkfZB-Qz31#c2(uc)yw)!v6aQjwBjiOYG@$2dC%!&EO#~o_ zrIx9ml$f(?2!o{$(_E5@`y|;{n5k?G3bJHk=q#|sJpKKpevXGyLSm2Ki z6p5IAQP%bTQ%*xh>|Fa{dYjI2=hO4^d@;g2Utp&R;oO;CWTqU3<12|IA5S$#e?cmp zXl#^6_-}IiQ#A_)5QE=tvWB8AJ-svBYs>T1=+{AfHzIm^dUu5{KiPomaiQwKDyZ*d z8LZWJ^Q+9SLuZf`>pRTN2Pwf7*k~vlv*6KJ>7DVhAl0o(ayD>IRo|Y*e7-7&l|^sK zhGdZ#^Y$vR|NcjO7a3*)T=Q`}$5$kAFf!d;)#`VJ>qbZZ%vlMbk&d9fp~2~^aK)-7 z9i#gszm|e$5wX{mMZ?K56QQ);SodDgS$)EyVIq@{Y#=-P2s<1Rf_jzsp~iS@Q5&3b z-B5y0={1(M`)$&AvM>*+1?n2#3<*y;^1?B~oF*?N<_N5KReFW3B~RN=1?h{C$Fb78 zQhVjc-qPRZY_-3A24&)|d(2`V%;+finepM2T$NpN(6^IQ;dfoF{eG;4_uqp+SUW8! z-Jx}r)ds!e(qpyT<|lENX^soI>S*me;>!`7D^Ko$W_Jsf0@-nsI`8VFwardHPW3QD zyVySAl}$3YM)#v_oZoBa3EKL$qMBx4ggwNQ7pdSpMCPM64Lg(lPPY|&Na8>qmx4)rKGuP+&{YsD@X$|>HPcMZ zVyOZYX+aTPCcgJ{&?7jLLyR$m?dF&&i-W1N7#F^#FuJ)I5OzZ5dJg-4c4hy(TWvst zY;3!hoV5g6i}v-AB={x>sCWTxqa!Rd$K_?Afo3JgjGY;@!q${w%L*(|s1i)!cIiwC zC`MeGY>e8RxVT8vwIvF=VV@&S+ehRgE>$N9Xj1(;` zXk&0_YTP%qX0;yy%pNXJ*R?hUB!y8}+)&qcwuC9$eS8gb*Fq%M$JJc~Xq57znwl~Z zL0UNj`#F9w8*i`RiwE@bpITA)7UsvDK2Ib(JUIBgu6?QczTxTVIGKDN%1-%yNO)W* z;59cwGMRmPr&$s|SERypx~W2+w)pQI=+t9uTWc(qtiqR8_D1@cM?HB*Ssp`cG{5P8 z_LC4du|98PelbmMSC*0!1=OX=3H{y`Pfx1%L}vg+ZB-jd-SDn~ZfK)Cn5YR~9*GhvC{xeMnZld1uq_{$0>km+z7=ZbT4~oxRd9MPD;M56T6$p~ z)zAyVh#d(t(6jAxHJ03fRHBw>`}q2ZOeNb_2VV4(@*1R30>C)YAv4oA+}SA7iSo3~ zdqnmnO7n&t2^ZUhx*>^#Df!PWsP@lkheJ5xLVdk{pFEs2L`uJeohr1g`)vAZB$$rK(Ord<@R-;F)GB*9`_4K@F}J&?mzUzlH;>f z?_9ZepI-J!C%sx${yjzwYlI}?W8^g8I5?D?(c~)EEP{`0WB6%>Q!#6(i2EBj0XekK zjkI@2fn$TIPGqRk@p#Q`Bjje|6qby`9yRabBEvWMazUTEa1(NT&M#cSG9x1}wyO_r z6OKnO{M}HIU>kltLk6Zd+hI3UO|~OJDbS0Q@wGPFcQ4LnfeO)U<@P4pdMq6Uom_p=g;Db>v=c zNpZ$A`(SvRx4vUGr*Fx6TR^FsP^6#vaAFD*Xj-h(i2V}2R_`7OVEJeL{=Y5BfJn(- zC=8PE;-9giCC;S_FxQ0v&jPaqWx~T=CfKG!WKp;VnyWT3uySDm3fd9=L_bBEReyUJ z;pH>l%Q43Hm!?xt+ydX*8X3_$cOlV7QkJ83Z`ythM-_vHwmdN2?@9Q@)@WVVBwB3+ z?-8;wl`$swrrJ;Rl2}A?LHS$KGFC)fVnL)9f4`dmpjRz-oG>7`(A~KSPEjN#g&!qA zM$N=`?>BaZPAkBCB71JM)q0@{i`$XRuKiNn`Dj+Et2zsh-xJ;MX=USLGnCM(c}HP* zqOy72>gU2NLP-|#a&d?+_>SVvh4^-9IS_!6J$B^G5BlNTU89Q6%7U=eJdmN3!_d2G z&N+F%n}>`t(C!b(?R3zs8;@d14;N2Htta~CEQ^)#O+YCy8U*meOuTPXMDt68uq1$s zBMF|g22UX&+Dj5kN_=7|F(oZZ1%5*=GP!IMs=t>@VcDM=Kg;(UPJMHRnipuBCp$|# zlaa`Eq^8_->ZI|G!O9Fj@luu*cHFpBu9MZxjSONfrWgI0EkGVa@xregu`~fZ&`Uh~ zE^p)@a-rS9NZ4whR6aqUBt4+6$(hBc>8W#B zIYDke$_%nTRe$M*r1Nc5Z6mYZb6)-qOy|em60SF^EtgOlH?kq^aD9&ZipA-OVnovL zSWH%VXF%+z$L?wh=d!84!~>W)b`gM@F*gmIkE4PCoih?0zeF^JTD6<*;}O!Yr&Tko zOJZ>oY=1)(ZrDo|zDT?f)JJ(ecA{fM_-9&Bz3~0 zyAdvhJaF3wE2y~Qh?tK-paZ`x^=^q`TJu@j=5dGU*O>`$XedD)#`#}@wwVraws{*H z@Z^?id$1TQUP#jCI7>0Eh3O;ow8CxGdIGU-m2$r}#5}f`Y7s7sP2UwU72b6PE_eN0 zB)z+%ZkQ~90!DJMZrFP9F+bwL8IFQ2l}qOfkTRr#Kt@^yyDT{t6kgW9w_NH6gZAza zeFeSu11=nx)wa0#KOaX;G*6Q}WR18zYHC67cVyA~+r=!liv{ofm-#EH&LtRGhflcK zrGV8~>y~4EscOa8J?7>#B78l+yPhuW^mb|6pxh!kEcAA%DezS>(qw>!Z2>at84`qa zzHiIjZZ_!neARlIj(J;;5xkdz#c)U!%eB_fA6kc7crVeJr zC&)zm7p|?zb=WlDpjcuAxuraig;gDFWk-M&;~|Eqn*}@V@`vC(y$bo%xC@*56B3^z zb%S6nHOXLxP{cejQ5S37cRF-Xka? z8=#x)OY<}^*>uAO-P=+|QucK+pik|hE?0Ut{?u;OrTWoxp+@57n{6dG%>d2*Y5B$m z8%``M4bC`QL%(9%z9+n^39^VCRTAGItWd5yE@Yw6WK%63T1)Iw0Pr%ND%O>d)9}8( zbrw91G^=x$@A+di7gs;`qxIdpA&7qo*e9qTD;ueYp&|9EM>E*{%;|^V*b5)M( zd59of=3~$4pmo zxmn0JaifPulwqO2N2RS*ayvB^uYZD`aVPJ`iG_0usx*dKb=Ot++|e0ojh!iY3nh&_Gf(THzg=#RVV*D-VokzJym@p^ zT6R8nK+;DIKStOUI(;oiKO(>vz)#sVK+Uc9C!z)ki>yDxojnss7iM(C`)xI<)(2Oq zvjqNJJx4@jkjc4#F;`y~_${M4vcI&jTz95Q@cxdD2Fd%ITWnT;*DRmpgr^R6xHgPV zT?!!lt=U?3 za@pZnVz$_xG#I@V0I5^Wh2c_<}zYYHXey@(i)@NNlGE3}Xq{PcP7GFht2! z-p;21Nru=%SR5!y;?NBx#S;Up>|8qXw`UN^x7b^hy9M=qhD6C=ddc=>azd}B?a4!N z=hF;f7lw#VlX-)MHZiJYKLGzh-M6TH^WW(Kc^Z*$7NQsrE03@Maq%beeJlxb%6RYQ7YKu zN><+YQ8_+6(;t>mt;_`Ov7Sa1?}zAamz7fW<2fF7NDJAOU>Y4RZ|*HVy@b@9RIUo) zv%4f8oQ6;7sz%fnz>^#cKj1Ol^9Ea99Suf%{oB*AQsH$D9zv?&K7LD)4croX1tqXUf)}j>~KPI2$`6NL6#n zW)FPy+->-#`Ffay6ZNoF^IKZ52ni}@>}5;^!j?r?8evMBD7n#RHkV!j0n@tY2G?G@ zKSExx3Ztc_+y(>`=0|TIryV}^7b&kHNaVapig_n3epPH+14SgxcHCemFle__R?>(Z zKAD#ODC_lTr4LPXFhWrdrA*XsPEy%ooGma?fRnyUxOEQ4#@|Gp3TtaZCgDY}k6Z!0 zB(ah_x2lTmDFeah8?n*2oJXzE(d0^3Nz@L@mBfOAgrP|IJ=MOqw325H+YlZ0UZ;%< z4KmMvU<8F+U7P557VN)yl4yaVaHA_eBoC>Cv{R$)6W4bcq%Q$nZ(og6y>~@Kt5pkc z3Ybs0;IhE)h8@-|@{uNn+%2!qeeCehrbUh@|0Jey6|C9ny8_>2*L12P0UtLp{Cr72 zzw~t{tz!71|tJ#d}??2;`?bpkQq7XfWL4i@7zHM*#(tj42mYa zdyliJ%t)QcaM7Yqzbx1x`x{D!KFR=}Es~11n*2+*ueXv@y4lC+DePJ}DJ&K;sM_pA z6!PcEw@0Pt9vyUoRBx>TQ6&d!jNkC64+2Y34~)q}ZZ`94$Fy_BWsv`8-I;$Ihf?-Bc94G5kP179=ladCc&K6z=R7YuUoq)-`B5syQ|sGrQcLX zz+nKHvYxX8(5449k1JJ}Yu`(!EMLF2LCnpXZH3DHDrA-__RxKy4AFc}Fq+e@C$ffJ zpx-?Jw0+Is>S7`kbHvXDpQ_YPc{m|)$SlMd3xewWNRgqQBv%&#g0p8Rh^fV`N5@Re z$wsb!`z1y3S1CvFQ>-ROONr1qnP6@RY;oxCnl-93c$O6k5GkB}^uLk7BY&pVLe zr)0JvpkI$8dutL)M6z8c{-io%l&a%VD^p{-bmL)lN?Am;e)~Z{&_!H9+5|bhx2Sbu z(>b&|GwgJS7fT^9dtYj!o^K$r7=Da#*_{M_Z0_~S+m`(9>;VEpU$wX7Xotj;jEJ56 z-QT=AcxezZHzs#G&bMQiY~5u#7?E;-YhgG8&{`zB9ZMIxijjz8HE-k_aQ7`CW)vs1 z)W<8{-|s=)QFfngBUW_(NjQ;cw%1k}OF4En(>{R4t4VnKay{2c*db2(WS*-l2X7jB zciHv*c@v7%X}&a%#c0f z>f=B`KTq+uya7CFUEO&&R=@P9PophF@MEER3;6p2ydf;?u}w@ouKg+nFx_Lh*R2zR z1CCl{&OLimE%B4(n8iqK^IvY(@qC5)V|3kLKZQT`R`p#Qcf~#nsx4i`JNF{q&qXhr zT+z9e!t`}vdJckQU|PM7w?$q_U0_mN_n9Lyk;whUc- zT2O37{{XVyUdgl?It8P40Q1K&1b!2@jd{h@dfAli)7OBV&=fD8!kcdd3wbCVzS=k z>q~4o8PW$P&MEbm#%aU%d^0gT)V;KeU77W%UH6Kh>bpV_a~8IXIbry9Bv;gfe{I?4 zKb7{?4`+&vkY^u>8cVPWjiWsecJFsp60L6L!A)E+dy#zwMR!KKXAOrmQRX!X^Y9p}-ZB@^QnK9BcYd7W&+GA!>L7SXY!`d4c; z!b`*wBrmz0ETXcSkBd4tTnAzdUwL3)=RZ!oJuB$At+^CmEjL)Axt_0AZg|~qhGv+~ z>7YlDukj+I0b&i#p1n<@uJNo9l@u2JzhW)eGQzt`JJRoqpbe$x;28ErWyWBCjQL|( zhh(E}7EGL25nmjK_p7`k+$T%d-y~+Pg@ksQjAea~MI7twprQ%g$q9a^f!fEi;?Kg) zv~wO9L6{JimFpv1NpoJyNT$k^aZehZEYAG&sV0h(_JC-7PAU~K@^w_7yw?v#d-8%XIkI*r!gbVR+O`?5peo`Tu2x?B^Jq^y z^O>ocrYFaQglJ^tbRdka0LgslNLEPcabir8H9AH+aXwop`Quj}%#}8yZozEe&X^i- zhZ}CJ|Ed^5&ZXe{N#^vv^TZG>N`#oxRL(jQJ_!ocVN*XE(wSVdXmnh1&QR!{pi}m6 zp=tDdK@5#Bzwb>3S#P~%XEhm)24Xnd~+AX zCG)0=5!+ha8o(M2Z-4HhbT|y|I*yyx(UluWF@6*O63gF!DY% zm;hSCjP%jhajqsb}Ed zn=H?dAJ-}vdWIh#CTV#;Y$VLBF?J0wpL&U?B3HCl=A2ESq#rl$B(BHn#tB_!-yeM* znSh(%Nq~Ja7Zk?aOrc`Kv@4)2>IfzK_BJ0|$EpQMhM86KC)?zP4Q@BU>FpVXbwi`V z&w7*0aO}ZyXzD>W3j#Lx$u5f)4!q?TpYi%$Srs#*$QX8UAW3= zH26OEd|}bAB6ts48mh+1bGhx|xyHGe98V<(Uq1#xX+B#aAPEZ_iRC@)w9`wz9$-H! zH~!9KJ_o189}(S+kE)nVpuSLkxZID8pkg-vMs}r9z8uVN8sPIJ66jpjk2COL2>j9J>DIff4^3XoOii>g$z9?3 z{Nndaa5ZDTnbn`-n`G8ApYh!<1%7+Tgu8wInn~wq!{uN0-N`xLbrw1CtBkT=`t!n{ zNA_(++kWnR)xeNO4kzI@N3ggJ z%G{u}+&sEm zN;?_y4uho-A4t9U^fy=y{tKDGEQT${_J&Eu0K5(oP+*xS>T2jUAd8h~p&0G}RwC zNq+l5my}y-e5h@IG&efzLs!8f`tI`X;RP_^7zX!~5t%|Hi_n8Wf>cc~QfWWKg3F9( zM329TV_kh;d?olEaqYME>Boor%qH^%y^w+Fs@jP5*x;m%J|d?puGWrl?<`SdPkhXR z!p9^QBBZP#N2lRVcz&c|sYlhi;vesyQZeScDE>s9r-j-Ue}&2K9qxIk5=JKk0L7eT zggmVX`v!`L4sps?^^q#aUR!6y_U7j1hQ`L`9yT0D>07SHd2g+c!&4`p>1+$yO@;y9 zPp8dw&95&{##?>i^F)E|z!2(MGKVaA1S)TnThC6bTb|F``}F-pgGXc$DIo_uebZbR zP=XzU)dH%9T11Arl46zNqE#lkAd3YpNkit^7I^bg!Wh*Vv8rL7J8#V6MZJjzrqi7K z7VfBESsAHVLpSmb)IB0p6KY2S`aP?={wV~}&LAj%8-;i~ewOj-M!U7f4Gfa5wIW3k6>lfIFY5S+E~tHy0NZNxfN3d z2U>74y|}T6tBK+bIN)-O`#3Bxq-C;$JsEY=`(lON0d_02o(Y|_si6e`JX8Ay6!T0Gl+EhE=6sci`gc}b%J1si?0_-msM!a6LR@u zI(*=ZV-$dSb516%YltZC zt!@D*#5|*Vx=!&yn*R{!Tb*Wfk=g$)Vn0x79mQlL>{RFdS|0x~epc7PX$y^RL#aTU z=G+G#$XGSj~EZ#9c4zLHhbtXrfb-sl6E>RR0>WBHK7g zL{=z)o-QbxzuM;K00B1rG2c?{g#}f9-UMob4!6&txU8hZpxC@y;U+Z*bIS_Z14HE*ua$@Fc*g9!+|tbuiUd=)&h zeJYHMy_4n9_c$@9{Z1f-jEb51NuBMHoPTi?G1mu`%FmdgV{*PQhs^yj=i8-QA*q1) zefJW%%+{#X5*$b%o9XrgS-7D3f`-wllSio{l<}o;F{yQ$nxd@w_PmYwPK`4e<;@rK z?yH>YVsvg=cvZtJD<7GA&hY+XP4!X(4avdb3c7oQ`HzFVeT*iJp#uRMtSt370K)qb%B0a{8dHjV&DfHYE zC#jopI7*Celxb4v3wDe>X}RUd`Q@QXYQp^jofZ(%Zl=Vj0}L1q1FH2xM-5ItLDkM! z0+jj7;mfF+Ey3n0S?o!AX0_jR>1-X;6~*FA`>D~UQRtH_ckdd9yxN4#zcbrXPkUki zwgy*{qZZy}ej<%EA??U9$ePrM?wM<)nxD0hH+tyWNoe%^`o4x@Hs9@YRKc}Da;?C?+FZ1v+6RdC8CE%A^j%%tGz8DYUr@Sb6;!6 zPOT-_CVUQk+Rg22S>$i>x;EF-o)mg*=b@#grLb_+qkvaY?n^+r41=E6DLWpQgOKZL zkqjoCW{r>l@@?#*U@&5u(5YUTKE+4tD&t69G6v9Qwvc+uZIfdj(u&^5mw5HA;mp~a zB2Z60l^2%D3gNanzyFu5#R@Z7*=iTV&;?dEh6IZvOF*FX=>*+t;{);3vW;AW+0t#d zMG13S9UZPuaHkxy1m5*d#w_8g!b`wpD)bTZO-;JHaZla4VG8qFiOH!&b-jC#2p-e-@yvei?!L@bXTaCmu z8wJ^PXgiwLX`SQMZ|l|~zuFC;IpNL$4ml>!W@wuvmU0v+A#V}1_!?-ox1uSH+SJfc z1RWs>TGZ~dCBb7(*2nkOh3!)2#plp_A%d0joWYt57!6z&mF--T!-gmC(RD#Sf=0sj zpyy_Gah4h&ck0?r#Lmrl^Hd*#71jDMWIkSvWy{N9T z{j=>aqc@0Whk!xe++9rSpM&1a+3zPUyIO>=2e#e!#wHwONl?V+yZ!8%kj@bI=s0ZX zdSl*_`HlA$i6!HpHqC2yV@>bt`AQCg$+r`y)_93t%A|CBK$vu`Ujg#yXV^rgxM;qJeqO~kleT3 zPbR2(E(=D_Nt1GP2lMzz6ScwujcgE@ijRVA7gyN3^7eHMZ%GEadT!uTO!wDl8XuBX zBj8vWtFA09^{$j%SfT>IEdk|ws2kzkO8R)8kK%SWN;U!vZd6t*0Y3x5^oum1JZ4fK zC^oQSDow~Ao9mJf{`4=3*NGy`kL#o>Qzv{mzO}+caE#&Sdst z11!{O0U>aP7V3t35OsBFep{eKnk9hGL3DSLrtqbVTxEpsg*&T6om!|B$ zO+!t!i08j#-f}Df`B#&hokyx%-e`{iR{KKLQ3RFfs#+Z%(CG*CIllvCqEL^5ze6zv zR-{gFfTB5tE4%IO-^i2Fkrpcp${D(dE}uodxeGKrn)VHt|BGe7AI^L5(*e}(9tJnn zR9~T$BiZP{p`a8gZTDr^B!=ByLj)sb$0yT#vC=>NP~tkt8NkGT8L{_|^BJ&ui28kg zTB%K3*k*K!cH!y`6hz3gG`!CG(pG(~#@*d0uH)i{SHgRju)M*w$&=g6Q%&)F~5BU<-O zi>fOkk4G8^+71b!W$8v}Xne+VvG#!Z+Hq2h`1Y{S^&0X9etRW+_T9~DW-nXN_v^5! z0)nrjPqKe4H)oVH9HLK%X4L>yrxJ1;4x zPB{k2LW=YySDJH;9%teI5cZZ)ZS`Hd?_G*}arYK?*B}K-ad#-eCAe#G_ZIi!!QE+b zio1IW5~L6yIEVXv-#x}2XYcczFYCkllCiQzX67~L@4Eixu#`b2b)@eK3|hGb=-SG3 zy29Ju4JLWAbV~F@7vtb=A94Kty1dw@5I-uLv-&Uyl^qoWcsMr9m^hB>#5|fRzZ$@W z*x5mTG|&v-YDa$x@vI)nb<*RfQjYbR4I31bqZ+5P@%spD_xq!JP2$=kNOI9Zf&=oEOdV)E4tOA)`k!)`Nmn-EcIs)1bMHQby+@m)&}aa$TuU7<7@%bfq(E zU}_lOQQL2uoWk>3rER*i}v|fF(xP3C)#55is9I6YekvXF? z2?7c09Q=VwJKC$gd*c0j80J2e`=%h)U3ysgs;qnhp*7BeYgfgM&iIpV}ps8)vq7gIE&ivP9%k)Tb4mw zla&|gIdkIQntD;JACNWXU6e}XnUO?971Ilf@~;layRDLi=Hzjmr%LVxb6W{^J2@)` zzZ?pT8<&uQvCJ^tFlyO1aTo-s0fAy1HPeq^)xU@N_5?bV^cUIrSjFrpp@8388{sb^ z?=$sK@xvfiJ8l+QUgPB7qejk=uyqM^8Lyy`nW26{zIcOw@}yxLGkW|tk*Hpn`)uf+ za9?V~8rvv($;7obipt)JZmx!6VZ|`YEAIPxH{YIPQU6ftAtF7*7E{f+dqvWScGSh| zjs-OIL@9THZ=&w%L~E9%5T5XVYgLwnK^CrLENkv%O7=d>`teA2m=k3YCrv-1=WO;; z!NuFvu^G>TEiK-y;-V`O6=JEkTU{FvoFj7%5#igRCY?TGaknq=8i>Pg&$-Rp+;TmC zmyz^7_{?1{)>*&jA!ed<)C`-2TTUjk*JX!6n()6e`BTAeS(K>G*yaTeV`!+B&~z?F=^j2ejMQkjG-=h8ye;$E>3PUgubNKP^T&uD z#1h@@U`qfXhPn5oSi%s{F&znoA{*olfoQo5^aCqlaa2V(;C^%nU* zE!yP~{h8M8(FNMN_*7mIH9)UNlJW>k&)2JUjSLgu!T3a~tW04P2H)4B_j*u8wTt)W zG-GikO_uJ#9hO&z`eVtE+qsS}9;EEdG}EqgG5H~SG|p`A81S;nVsWsb^|NEEYz>zb z=M;!&P}fg-WmSrGFz(;|&q`ICi>~eoRiI5m7;OnxQT7M-58UasMAwzxhKd2R;wu?k zLUNr9hN>3&`Bj-Lo-cSw-TrtBe35&v8@oyUYSaq0#Xzjdl!c!T4P=KT2>Qe7&;VB@xp`a%Z7IFl125Vaag)_p zf6(=S)^PL&5AeX^NRI$BbC<4O6fLZ!Vt3I+l}*0#)FXNtMXxP;v}pnyL|k}xe+|8u zk#FGVx;k0Gf88Qnu_Z}LyD_sdE1f3wrS@SR;XVvwGh4_C&soT}KgJI>g+{@OnBP;W zk0|u5I2aV{&Nj(Hzgcm&k{~C!b4E`)5qPrHS&aN!3L6p4d-%}UMmPT^DTz57q8F8@ zKtiaS^8=##ww$KDM3Tja<9`gAR^0D${&1>KeD7;9afWl1l;y0U3hW>3C~?$ab@;m5CUV-`(@ku+e&oqAmw^b+q<}5htc>+AI^}0E@r(1m$JOk3Ve|a{kM~m%L446 zwUxIU)wPn7yUoXsDXZfHJ|s(~*{1pdcWNDuJ!abLmqO1s3K@KKQs=5{iN>6=&nx?8!Of^tC7xk!fdyq_Zz=xhNMmGrW zv+0gOPZ|oL;i$%~ipN503+wl7Ig7RVKyB1XA&_+Yt!-<4d(&FRtMFA=!J(1TliWMu zXzOH8K5vo8V`4BUQ{@eS7e!TJ$bRful=$qwSmeQxQG{b9W)s}=OPD#O`KrB%H}P`b zL%p%_z|*bu6m3E_*;S80pN~3LE^q3{AKm-BSPM#db(2=98`Z>pqf zcD{TWoJxHyTp59{ec!Nu79Pa&o%CiH4H>fC|sQKs@E zArJ(5yl0#I%+(_io$k6MiaIgMJ(DHzCOLsPWg^K*LlpZ?F? zxwXk;G&YNzc+j57s**uepnpfWuPLFvMLvt6MJvY7L9I^*Mc$&MK88evtupTMSYq9Z_tC^ttR`~w+We&6n5S@qHs!sB?zsCWWJp#=lY2)@5L~Hxi_aREz)Bhig zt*g{;^t&_-LO^Su)$HGmrR03CdQsuge<3uL^fl-}zj-gv%~%N*SLh8`+_TTeIUt+r z58A{rRThr%WKEl^;*^R{e+p)gAlgs**`&jqew)0PL_rw=O9P^pnN|pP)hqXAbAxDS z{o0>#t2^!S84;{g0Q8{oL}N^;+%kW8dP^pDDmB@TLg#fkidc(;8!sU_p&M&pKz*8d z_BOEv-GINh?@?Na0?rcwnmF6FJi!l*e~#dB^50~XKW>;1bd~92@);KJ3Poz1$Md|C zb$x>b0Q&k_e%WbqH~vQDFT$V^@@YcG|Gyf^`h>NC0HAH#uqB%iZQ;5<-fw;Otk|?N z@mc1f#l^{&yQv`HMu$gwlQv9J8us|;|1F&rgJIy(=W0g&9kI2b%>tgZTk1dRhTmvc z7E`g0?FT(0+mzUX_+))bUkHyu1>q{dPQHaX+`a5#_vI+vYUQGHP|VQ zb=YQq1zComRhvLL6{(x*fU7mRE#Q^mz07Gb(*0ZZ@@a_xCjC~DZ0$D{O?uW;?2GlE zf$?I9XJy?(+V-o`ti*~2%yk*h3Q-c8!RV>sFx0s0wD@_VjPs}?48EQ=o}znpgIHaX zFm=jHP09wm-N_b}6>~xQ2LM<&D?=Sro-+6P5{m(iQ6}gg|M^JoNA8f7CbW_wp2tYD=pz^f{wn< z^{e-W;{_WRQzgI6jh{3d`+lS`Z;692zC!4AM>Iz?5W z>K)GxL=MA%;9+?46*HG73CMvAoi>8v7_AC@em+vM_dRO=_F~F5EL1@}CazNA`0Y(M zss48Uyx;-dUe2fn>{Tm!_M!SlGoL5X)1?lR3AlkdF!jl_pgt0h0N75k(oO_!wX-d8 z>DEQSql2oe1jKqXZ17X!M-0TYX1QKG+ zMjMARaY{~+s$m$iBAmS-?H9E9;Oda|8AiCq_&=c3=A4#MyCWHbxtO#JER4OM-DBu~wsT?rsdFM%H`mDc){~hJ0G(=Jlj?uiHIX@iFA;Q;1i(XxpFTMk~z@ zhFQ7RnB;8A=Fk`+?aNVY))R7eKZ;VM4NOx-rf$8CMnlU?)zjWYnczG5k>ET( z3Sf4v-YXVlpiH25AI=Hkq+S2P4TE%Kbk@fZaVcpNaV@jOliR9I4)8IWFXR(tBJS`L zcK$7k2iJQfHVOUO`%92zo%A&z;>TBGboDCU=)~&27|~Nei!C?#x}Hr9_m1j+VA-83 zaLYvv5_%m2DNBlQD?-iQ>HjXfMc~P6xt+voxfO6hy~4|`l1%T>jhYZ;9Y-M1r1>3w z{l5H`$G9oN7S4ihaiY3$rnl$jw)Ei)Bj;UeaLLM%l%X4eut9ZhChUW2Q*3>l^U2h} z{cKHJ)|-suZU#q1Qt3Wg1Kf8+Dj_*=MUTQ%k2ODWlKPyh>|m8~F|0|mk#UnS0$t6f z$^G|f;Rkf@nDv3a?7NQilwZ9bQW5ZGcWHa@=d8etK!aVmRHQ$A=^|%T=}epGKe+M= zxG=>NsR<2rQ?(Ujx%L=-C%Mj2B`6v@^mssZPS)EsIb!}txRwH4@Ulz;g->^%z^1eU ziyVO|eJOqO*vw+g>)SXy#d1V7idyz}!B4{MuWMKKPwNd1A)WtdIbf7}GDpmaL6`GD z+|J1AoxQmB0z@+PJB~NFGk~{ynvZ&&j@e>ohO$bp73%CksW1xDS3QV}{p$HAfr%P% z;J5AzHi7cABgq33L*MwfCn~GOXkhA4{ZJ;5@6;dbDW6D+aZ8fyZCBoyh{{9FhIxq~aMj{TS zi9V|5%UpKyQr9n3Rq-FjCg^#SQWZKl>=>)#XSVVgE2{}yR}3Er=gQ(_s@Oij_eP$* z{zwd~6(SwVPXuQ}y#DRc7Rwnup+D2Mm3EMF>@&q$zh4Zn@!{}I;X`ZV^QTQwj)|3+ z=3{lJRR@Gwc5SVr*_LwO$BEz;PzqTNxYl|Gy>S&tJNDY>35|Amd%-(PY;#g*Bg2%w z`gHeA$NY`yarYeenVhA>ek~xx%fvJk*bdNXFkhQdn6muK$ewmCAd>ghcUK2GXQ!yZ zRc(-WF4wywR&iqYeilBro78^1n{-uyk?ay*&r>$I9QzJg1jklP4Z&VzYx`TyrS1XU zO94;Jz+8=)zGG*Eu#Y1OJcKY)QNO)h+HL02+uH&&@8t-qU`yxE-T=yZs@h|YZ%Lq$ z9C)0rZ~D$J{l^-dScynHfP<4|z|KlSU@r%jq?AHF;)cp%x0`-8Qz24!t z9XnCl2q@z-9yvP#tSwuf=DD)wa9Wrw-f!v0q2_yw&S|6eE$7T;T?|k7e$qbp9)cVDuW{CEHaI}cfbGbQ$BN-91pl-oKlJMMP^r0^Hku=OIhdVKjpj z>6LywRo#cQXX#60pBD00UPYILt|R$sq3r$a^O4hul3^Jjc%CYSf5g)nHD`zRkH_!m zU)*t*T_f~Ubn=})`%s7fNA`Z!H0)-C^xK6m1^JVcYR+yxef-kb<@2e*ZhF8qg=d8} zBy3XR{vhzyRzCO$#mhn2M_*KoO zO5@M&ssjd_R*s{Sh*@vYHxCZ#;vTkV4Rn?7#HQNh@t z#dlsReT+s5#0#R>gZW|3GKn7HNFi)wyd|>z6OO2>+?v5;^M$|3XRKmXydtvlKb&ew z$Ra=8c7=IXCO@3$Dd~$)24ry?^Um&?92{d4eOUo#G4Ua-z<6*!C^PggL`}`vdW**d zc9NC2cGw6OFa{-^HU=!cF8A8{Oh#5u@A`zLtMF3b8zpxxj#_dmEvDACgZ; zB67`{Evh!_t9=0Fk1T?$Fo5s$Fs>uy#S%GJW5g{VlOwuW-zZ+J@CONxd(r%dj(C6be2i(F;ut5I!ngUg&aiYtf%zkC z(#w!cwfM2sBwr^oq%7?S!#kzi@#%4uYkto8J$qc5XM4dZ$M!=NYWuNtWLRgzUs$ot zJ&1u~hWlz?`&MNQ&%B)geDH49`wKcaIv|u8^QfqYB9{07+$)MCDzGYT+bAggE>khH zElS!=T@CAs0lJ032i-E&-dPHImL`sbpHRg|A{)nUZXjt3acpm}cdF6Y&lrb6eCzpk zKQ6rMGBgP_F7gy-du`JE3mk*j7;2~#rQNti#Mv4x9XVgepxoDG?>jHn-&q=1g}GrH zjuhSHhc?@AgmFKXN|6MKM=uzDHLYX&SSU zx9`VN%AF#Ouu6KjKAuF>t@|VZF}lp!e%Cgt=u0fg0c_`&Jufli$!2OJ448 zo-~Jl#cAuzW!uE#hwn-6GCk^m!pw}35` zCtCbvk~fn}?lnjT8IK}+)l#H+471r7-ORg*m)*_ebOM?Q=@rfgn%XvhBiGuZyDCu$ zs84R0&LDXn;C(G#X&)hT#xIc5BuHy_@Z{qv@N^v4*|cg4wdu|Z(V97(w!EY;bkhQ+9q+d^W3QCff5 ztpn37f1@C(YQaq>r zlg9t8Dm!)}lAyczK-zr?Hw>lvyAv(?-PNnGHx)M>XTf zAIFy3ibNOJE6}9hr?1kYFT6#Y;0OGy2nr0-K401i^MxkR3Ys~X%BoXUwHYYo)8gtP z5ai2xo`-M6bu31$yDvsjI-UNCK;DPk?g*NDt11}zCm>#(gAshc^r=Pw549Z|8D>uR zZ>K~ffVlb#xO3B5fxjAlwwvqK?Yo5^SQ^*;+035a_@=ri&Gwqm;oqMQ(|;MvTK+4#wsww98UZCX>d8+6lRgl|r_1vOQ-HW3inuzsnD)%|clFH!86+Ql( z`~N#_;mwC>9ki&BW+B)93?bQe=3o9XX+ zl2P<4jbf%1T+P*9*`gfY39{BrR5nMo_vxApN4jd}jI42%A36R;`WC2G^fh@k!%APxVb1J{ zx85BXb2#SC(GgD~h6X!Rn9e6Zs#`+ZNDicn8W8&^MrWEmtysR7a1t5^?y(~$s#PB_ zHS5+$QnBOjwcu!VL)@)Vmh7^ukEL=D6>rxXgn)Ib`(}Q~?`s?_*V9`~=0w{xcv2kK z+s=JB+3Yri-~8>z`8OzVsrGFi>NTE*sG$mxn6Y@YPKH9ckOwVK&5RBd6%=+O?7aR? z3QN}^U2Uz74n*Ad*T&l5vg_Z0+C)$)K>3LV?JPYu%_nR9k=68ZsqY$}e&;Hn}2J zGIhLlmjKH?YYH=^_q*k<6=ou%hUT{lmCgDtZSPMOxI%#j-uh10Wb+dRR)hIQF3@(8_kg`z%dH!bivfl;md zcy^jpcixgzK$%41tL^?~<&5a0B1m6}PO-f>UXc!;)sEI&V@> zp^Hc4A#B9;4&7b^2rPo?fOf+pMiA_lCU)L=@$;PkUD8xf?8V39NW*GX{0B)zleeao z(y&S5$Zj?s93L^%9E=s&uRXsAVn(as6zhL#DUJAKEjTQpMW_=~S^;70B_0KoW`F3# zj_s;C*j2g_J}PdZEe)DMCUl`wSE=_?^#y-3SV(Y8Y&h-!^-efM{zVzxT!@2;xkt3ry#z za>|=tPfX!&>QLZ+E8)1PkyuTt9F2O{r}=e5a&d$g%l?n=cB^=JYZ=Z0XZ2#)E8$=7 zl_#fD!*(|qbs{#da?XCMsY;G*t^;8koNbmZ=V(V&d2}EyjD6<=(R8;FB@P?Kwrv!t zU2S>A3%^nSDYiBz>Pi?D1S@`$eZwb5Q|m0?tBBw*=F;|s$f~<4s^YEwY>W5c&A|xI zBlb}Z&0nJG(6z872yTeEa$tlerMFSlTR9;tLh|GagP!4u#(K+Ns7&mo$+Lnw%G7_i zVMuL)zx1mDeW#pUwnC~u7xUv6_{`^XB5+(Tmr8dUe=`m+x`kWP=;t=%A=N_BDs=;pm4j6Eg{Pc0-SMkOt zSE_*Zv8k9t|IYKdV_DY-EmKFPl-cNGVl4`jY@yy#sGs%WL^q<1+(L71IA%pm=)B*- z3fsh?3Kj~B`wK`P6`gg!U2-BP`ykc!q;rynpE=d~Uj#Y{pwZ3Ut#Pt$Qd%plZ!yYB zphT+^%(1lwL+Gze^;YxbyZu|0=*I1^C&<1=RF~ zEZx{MGmvvy;k3v9Pgh|SXDD~^hnBIrXA4sIA}dlY8+rm;F*Lr$Dg)v9F@4Y+&vwisk_b>Dbh z-sofK@s&x+78V+=_oxb(KP$d>#T!5UnI#cvk9WcO!5$Lxt=@9hq0%jF!=Q=a)-G{- zqymPDv2-TnZ(@?TyX7Pq&V~^q3!w+dUikp}I^k0JB&|GLeYPH+8d{~YHUmyaSKFR< z?}%sH4Yq2_kfLK3kfNLFQrQyA${XGZrwb(eAV-hSy^R`wpKqmZm8M8K>Jk+qm3S9% zqH{~%!oK9g!j73)&5r3}NrPk%`M5Gx5QkX|yr}z!li>~MHPVGz8b(B_%8@eNWlQH) z64CT|3-^!EF__N&#lB?}4b39glmJu)_#Au0XI~AJ#o6i7zGNSIp^Rs&UMstE{*y{y zEPS1TGq?L(n@B|e0fB;#mEG}lyHlV=9+P(UiwnD$D(~|S^B4@t$C6f!mAoAX00wHeUNl@esDZxCeo{fm z{M=X~e5#R~2o8;0dKia0#4X!rfxvzIfleasmKByOx(4*zDx@EQ0tJWd@^!9}7R<&X zCm|Qx15=(spS^#Zp8LmeR3890QxqtAM${<+?_u4`f3wT#uQh+Y;8+*XFv_$HRIh_* zVj-CwvM|}&-UN$_F+^dz+hWwrS8O|2FC2o!s7n7>$)w#@Evl(X_V+{hi|7il!^Xp8 zMCKnC59g}yhg5;j9_zVZM!%ku=sdG25*ufS-TbNE`6qh%ph|a66oK`bi#$5{xa7v= z{vWFiL3v~Ef1>(MS@3pLwPkM?>nzW)wDt0YwVSh4yd3VZ^1_?G0!7i*(!qTvPJjOMoiYZH?yk=liHw| z)vqX~kvcT#!S&AW0itjk%8{ZYUaQzr4czY*!d&O4pT+s?#eSiNx=&s2XLJhXTbTb& zc3&b;A^{S$9yta`q)@oa9sJCq*%Vkn_kT${xRI^_~#^_r#144rvmOUwB$Z$0~pq!u=~pgV*OyGENGI|Ok_ zMY?u1G&>nqNr#BJ5YnBdvp2_v=Z0?_<6nK+{hC-LEs7RP9?wYiStcwJyZ=+r1E6z$ z07A@R^fQa!{_l!){!#c`tCQ(^(92U)TvJcfT<#&G-=XpCE8e^fXZ;bvz>&{qi|5$3 zgS?@PD2nv$=TRSK6~o&tk$Y~?x<-8S+skl)sfL{(aa=XWiYGzmz<=1k^@ z9IRfa3e7y(i~9C1^^-4Mbn%1eRU(4CJvDenO+v;Tc-tH`-ud3_eh(j)TsnvrJ-s+^ zv7>HK{(R)1w>Szesj>FzSZwFGpPAiXk+(}YoP#UShF349I#!GXy5{^S2~c0QGbx71 zjCL$6d&Wc*IQbuDUoi13P=dm2C{&e+;8N0%I|d7)(>i`FIxjP-O6@I2pnKWR0C~lv zM!QB4&JrTN{|d2HR(WdP9|^L>X9;MUXEhi5fXNFG6xQL4b6IFt5xH~eIT&uqX=h5Q zY}+#$PmJmPL*Ltmms_j!^H!db#v~&`FfzBc1yB1r`BO~e37-9m{2k=ALFy1oP zxf)2O)N;^px3ab_mpp(#Vz$uN5=^1W5i-60Y8Qq)t4^;2#=+7VdHiKgTu2Nih@uIz zUY-Hz|BxvR0g~CrMdSW?;xF;`48Q3NZs)At%uQ?#s+K)ScpV<51~bEp5f^R@-*4Ha z^g=I+?*g*m-oS5hu*?yG*LbK^vtc9Z!Goq8-aqy0Zeq3&@9iA=Q%C23P>8{*ndNDY z5mSoa7d}#16{wk2VJAqQapHB>w&L)v(8t0;H!e!!OGMDQYYr?RUKKjI^J0B&@)KNs z9`F(r!y23vhC9uKScsLJt)8t{ARVt(SMc)FNY-UWZgogNv)mHyOF{IXRA9q+KLe)asFUyEhwyWLHU z+glmmPFM$6r*jfeUMVf)>JnFO8~HKm+Le3j0@hvGxYoiC4i3{|r!)c$1?|n>nU6^C;kA%TC*5>AGL^#x5K7aa758a2J^!)4VQr#5#lbQVL9P=I?qFSw)WXQlEb-b ziD(lGEoO=O7W`q#fFQ%~5FS{yHiW4jaVPk9RQ% zO~7336J!w+lDvGkZyfPL|MedPRGR>Y2IFOX>pOxKQ$7?)%JNa zI#ZPPq4D80j5A-7x?Rf`D#24+8{QLY`x#JWM@=}m<1)$fd%EqzWT>k#w<1RE7*0)B zGtNp*wY>w9Zk$@HWR--)p0dZpcnC0_6c3YrB{X1h{Z7ZS(dmz$^gqp!UbY*&_D#bs z`Xi(?b!pKaV(X>oe~f|%Kk+*KD$XPWOo#n|+E3($_zgV%3SIED_gS8L(0lX2uUQA` zE!1Cd6O+FwKK8UKq4GL+Hb&;(KruutJ$)7(E&F6kFrTkePw@r zWvs8j9I2Y-BG*J$iQeLV*=i;J@5j$Qz8PcFo?FvPei|W=4@ymU^>@JqIo5L;#(A)H z(4H;)|(GkmY07r?#Q5#9{EvJB%Lh)nth$j?qvYkVbx9nW85_}jMUkkVvp-y>5+&m z2diK_doR_&yE;-yjF zcZ+YmUM>acuGnd+xJ`eu+&AdOt`C3=`f{qw4+dOmayDN@!@JBss69B-sEIlZiG9aJ1L)jn zBS*??S-bJ?x8NDic4n(ku*@}%nPBIkRM7LC7c!d>R*f!C>G5pCgsn>vCrMjdvXbtz5)ooq4(#d2 z#SzwLdMdI=RYyHGQI$z^&-F(@n@$J!TTa#7kZZov4%Tl$!9GEJ)f5lji2_}>Rlnbs zxtEq^8_7!Ll!3aoH0=RAUKYONL0ew1?!usYD;1Jbsv|2_JC^3_aKeP3-jCG@XDh60 zF9sV23c%XfjB{m|Ueh(P$57LO0|kWq++XM0J1^LmPOgVr({5w;MyvvWufoRUd$8h7 z|7X>VBL6j<(VQ(){2)`Tjhb74`~(zk3%lPqa{Bcs3dgJSn_|I`rf|_bwQGenyjN%A4=C<@gAj>})CRWxQ`~X%5Wedl0XlnZoat z{L{;A+L$MsWljAAE56G|*_^Q7^iuBqyq`TbksIyL?FM^Wj|3UM|D`JXVg!OZ>1W>6 zT%RG<$5#T+nEH7SD3st@bN_rHW`KwxF(E|i> z>mJM%a30EVBzC(yRFHG24)&z3Y47Xy*mXK=zq6I4N!k5^$BgF&Fop=tW}D!s!X92z>74z|@!Ou9z2J(XCiBQCQ2G zpa8#5y`E;JjTOqfS!z?)I2!7pT2fR!S9D=`9)+0^ax52ZR^^NO;f*4ID2hrB@Vr|yPtKtKckK}8vV zN9zl}`C4S%c5`FNZB^sK%lh6bIa!StAHN=s#8X{_h)HV?=`qe>^l0N%iup6DDo2lO zuYr&@@vT>X);=updSD=$}$u>HkRd%q~*5qmJ*0^Za%c zu=(ueoLAv+2DYNU^RURzHbcaf{O8U8aj^j*OvVPqI~X6+Ox!1CCd7P;H_f?fw(UcT zJ>a+wi;?dCl7Qi-EU#+AXSi>cSDv z2l-hb%iIVyWmTiSsqt}-Zb3#+pDa0@k_LAp=bpOBk_&uCIqx(K7lt5MkMuvy=!pMa z&LW}ZJVy}LRhrvaBJ}NBzWETc_AZcP`2dC^%DQ(q?E7*LpE)DH_iaVsp4n8)sa~lp ziwp-<+m*Q~H)|f?&E)MH3D0Sb#S3EMSASpRm(W@6sz#b%U%>%9s`cJ4)N0wEeKZRy zE-n3C>AcxbPpw z1C7qrKB2C(LO^^vB{ljYE$7dIX@yQ zyOvGsgDm(;Mj})2(Wfy6S0lTLjv%sOzpm!II=INNSIq6^9_1Q2k-L}DwK#Wsk`LTg zO%Hcj%k%ldALRMi#%^&ZVebBdGmIqj)G~@PvEiKdIQq~%gYG_QcNM7?jbsM`$8ar= z*mM0EM%j^ao3p?_#k)6g(&62OJn-#nSeG(Wb%w5`*^kEdsF@(XvDaF@v)J7FJdyZ% zdi6!_@QlR>Tn5Z?nL-?DrZe0{s~R)mH$Gr<&P@yR&5!VRYMjDvp^PWji%sOp$I#q; zG_ncEXN>OV0QLwDJ_Um0;n+d6`HVL(-V?tcZrONGXZGyIolEQ8yXoXPSc4biFB?K! z_V`=m2xF1huTMYjw-l2vR&%L$KK6VwVZHhUk(d0X>h0GY2&3nPyQWv9E12O6{eH8$&5=?>I^(=bRgM>M0@gQ#q{r zfzYWxzaZO+OmSJSEmco?ob1NM zj3z#u?lAtVpotmr*2J_HiNfqayP}hX-)D;_7lzB^wRhXK_bZ`=3-D@TWcx{az`|h{ z`iAJ8$yDOoGm{RTy~oz%I>A1!|BDKFRVGaa!K;bCn;kb;SL<7O?55|xr`BF26~RLLs+*s_!rW1wN=Df75Ntgo$m80I!+g3gkvoSKTET6 zB6EJpS`+5X*svM={Gvj!)@f|7Q$15tiArpzlq29Z!WB;nP(dOdIJvqOToQTC!uX}A ze611GR9PSYo1d`KItXmK?BLf@J#$Ii8j+7*ngy*oSJiba0Z3-lQnTfh1hzc7{uu6G z|KJDXWxZKb?f9*Y)i#iv}?iMoC>BsPzM5EK~G75Qamz~WD&^m5!F{qk`D8mC0w_4tRLU`kwKBi^K_njBs)vfrwWo!@soTpXo++1`f zl+~_LCbz;9M3Fj?%x<#TN^p{APJIyya z$%>>+3O`NRu`2QJzuZ7@qbpSSM_4$q03UnKm+BU*TK@j?ENIZ4mQCT@s_!&#R4eRAezP>~C( zXGi$@g!Odm1SM7vk(p^0&{}(L6L==qHbFDGsea5{vpYE_;Cr006XXS9AKz+p}Nfq4u!;+zm`x%F3S zV|eJo#3Daud|QRZ}u{1ghq65Q{sUF&k1y6$$8x8XT1ck#*;#lAxGDHPc6rd=gd zn)Z*r<8Hg2TsrKv6$8!NO|@VdG)_Kt4&I0hPj}s!h(qp~cWQ$S3pP5&W=|rmSz7CD zYzx%4Bvav?*FkxFcjD}uQ>ki-TW-Vf=uZb(LG2$_@+b8F|ivvz|OwM+M!50Hc}K=uQRBGV&NP>;t{ za}BxDV>|Hol~aV0NPpr(NwP|Si_x&1W;dbgxD$+XB;mGpIEvxAnZHsP)Ki{s{;d6l z4XT7S)6hA#M-G?xRjsKPAf>I@>t~+X41j2EE|UPVL58VyOckRY3D*G0!bpN z4ziz6RT3mDFeM~RYL#F*njm!EE3V*|#_kvXVSvDb?W4AxNH&Nc8rKu9B=vu3n%F3Qou~7fpu6=^rc_AmM(+y|eg7JJeVy%rD%zdC| z5VPW+&J!ObA2d%@tL2ef&y}uR_58wTo=>{ZkBgbL#?qYU0`52tBQs)l&30S)zS7?n zfhUwIK9=1{(K#zNW?1_xr_s}B9rDPtG&v3xAADTw|88sIh2~(VIraT=Yhocrup7WZ z%4eHqWs*tVTp=E0Qd9!%F5EZcg;ZF4(!{e@&vqijKQV)~Q1HObJ2o6a>uu_5Eg;@= z=*};|i~pi2*tNZR%6vFMd#fklG}XX)nTW4dSIZ+CzGn`ZTj^3>Tx|R9<2Xrt>1)gJ z5ftD4AgdgD%_Fz~nK-EOQH{RIBeFNngUi7t7$z*wer;A{+wNg_H%2u}O=Md2Y-wc) zdPA$5S96P~Rx&4XUENk4-SuIlE{_>@${z;Zl*Zc$pnjWD_+2KuXeQZ};}CJ@&u*J< ztIrAK$Axq9fRj7OmRX&ceD`@ylYUSShky?y8D=mnP7jKFX!NpAkNlF~ z%jxuXOzqRp9)7Q%uuYquSJp#*s@HhDopPz2aM&0BKJR!XVcXBWYDt>{tTM~ypZ77u zK{uaKIlw6jaW2fI`2#=?6p)Ys|7HMdCxSi=KGTPdvs&40dQ7xws%hS=!2*|&B~-I6 z^U_8R6z~%o&67VYGhX`a>gndFrd%8IPA)XJue`pVkJ6CEgqEHHpX@#B(0BhgwfDc@ z3r-`9BH?pdQMP+)U%Qw^{i0=9jUHFg|2oRS(?n((+WUc(1NAQSo}>OEQtuFBkQYVD>iIs*WG%ZOzx|Zp~J;%`c%!vVSwzEn;rRq3nusIi1Kh5HiAw0xZ=3hrRa%c{|6u~U$^r55y5M%Sk=gis*%@6NN8jhkZFt` zxO9o=YH^QqUNNr3+o!qA8GCm?+Mm<;$`?Nu1&6`=m&k zcY0knBnu=W?#TGp+{6F*TH0NQKSO1N1t&%(OXR(y?F8$!iRX{MBi&pBxxOql0ljOd zId4B2Zt-)S%U+@VN_inaO7Eh-TlKbPR*vs&vhS$4@j2QmOZ7(rGrf`4gPA|m_Wf*E z98iIZCjauPLw=g*&3+qrQaTkpkTZdH1Y^ zBG!|NotYOczG)L_)3=5Bs@B)pOpzV*$Y}yreA<8Mg_#Va&uH$0A0uw_uM+xIXy(J@ zA&sdoJhjiGl@a6tXK65LF?r4&fg&Y&$^R*B^^yH z)#H4BZ`*vY(Nti@G`|5ws0(g}4hXUS4b%g1+ws1&`hDTle(Qdc@ z721Cxb@#a|4w<)Arw@0^{tl7pH#FFNJ+Dli{w)r=VoVdB_#3K#-`m3f2>$<91%GHQ z3*_Wf)Zn{bL>n>HyXbktxzXYG6!2@)*}{U%w*eM*-VC|9xi@)u6lDT-^xWLaMn*=) zO0qz-R>s84%ndWf!QT^gVI!K3-D*9~botwM7A(;KH&~)ZCvxIht z-f+4aMn{Z2>Mt_+zmNt&n*Nc7t(`pHudA!;g92f100kUQ|DCuV3bI24O@{4em5jvZ zvLwg*cy5X?{LVTidNeY55?PoaGzXUG2{Y@SVK7lV%x?VcHON((a%J~BdqMNQLuOhU zM>f0i)qm|4_+JrCkmjgL!**yoW>wYse?is1JTi3Tr-F*qqOFoy9r3?<=fA8Wc;zPu zOaB4kKU6sKU%bExaImnXolq~9mj}?9Va?m8QqTsl#gQRX+~`+|Bkj!Y-{Le{!+Q<= zPjxU}ZYehio@oRcPL`R=SQKbwjMzhi^2wy#09xlxxx0QeCCU-6fM01g)!&y(^n@KW zo+p=^rt)WsDNAPLPH%}r;LnQfF$(c^&X`14D7`bVbmCwUAv4HWFgRKr*4HX_>`+be zH!fcm;be7w7L4@{x1?w8$jCFcrn1t~aat3lbSQp;cN!CpSuDmlw?|LkHy;%Xq8wpO zVZe~62lZT*aCDWK$*{Lzipd#=@GMYB*zYK)=@;_OCm_HLq_Lry$IJa)9Q6GZsyU#> z6>*O?bNxm&aw;9xf4mAf5!f%srl#jrA=>a zTQQ#c9gW$_c57%v0k4yz{8C@U-NE582n6F75b)Vv(qUE^%#=xtkIxAUJCc{1d;fJw z4~9d+&HJ5mA>TT`gT?)z(0tZhafFEP&_Na#wCW+L-{hkM%Ejr@-*ClY*5JymBZBN= zxXE&8M>OZ^x0tq9%+7dBzZ7UI*Sd+Ss;nIGHZpR&*ie{ya}Z5foph!K3zQ-&V|*`& zLG8mZsXyKrtdI0^0J{Z~x5_V;hg~+bf;rF_UU88>Xj#b>ZMvQzA!FHYxSe#Vq#*yT z|72hkx4D&xw=A*~xSZ&drr$zk!Iju~)|CYFUj|sThkK@rk}~yi(?zFohH8#P$ev(v zzeyt1C*z(gn#X5Qj}Yrb;JT|hsC{IR z1_+{4N#p8-^XsLwZW=K7ga3;@offASgSC%|BPtG`!RMDG z8(Uwmm~9xq|H?lZz!Pfow83GBU#7VS<ZI%%&xjsC``@4PMJUsvb~y41i}tQ` zM88<}4~5S|ez{qoIiD&G4r0rVz2AzJgF}-TAjt^{HwAk2;&x=z)YS>J-aR6;gHWdp zmAxe4W@d#dD&jA-XqMV+x^Zk;e@GfU!o1!5fvc$0{k21C5=zmr5T*L*%fhGp!hADk zVWYXz5H`)prb7C&llm>5Ee1{NQL$JHarG*`7stN}SkjOXUjHG4t}nSy^!*?f8UoI8m9kA{Gfer8V}L!K|vVy@rnIjo#V=#mmjICk7`QHoKGpp z&Q=gGC^;eR{wCCyRm}a=oqoDDw!N^qe*%u8>jxtr4IT6a3pP_dKs*cN?QkWz#}!F1 zR{_`Y;Y4u_MoQH~3Iwy01uLdL6g&w2Nc3)*ejoMU1Y z1DZ>jGrI2>T!~@jjS&|t%Yqg9Q*?C+P1C^pugpbtrWi^q-GXbLmuTdbb8q)27N;`z zPh7EV_X!wkdcJ=|Q(#kN2)^m{g7tUExAK#G7EhjhC@Cok(ROq!l-*y-X~p{;+uvT! z@tE(Rw<|3v8B-T-KJSM*ca)~jQS&2r_c2)-Fh$Xsq!L7_8~IgHR-Hrzr+@~Rvx%94 zm+3fukJ%|de-K&_=8ZeIlLh**%jWb9YuL5lQ5H7|X?xucpWYd_B- zntXhwRM>e!+wPWJ$p;X#CU_~Bb+3bj#R~rhU?=E)(k^&diLJ1{{(i;P)2C1S&%I>x z-dgBxtv5Q#&d%OI*F^opoZr_s|bqtSCr zkOJn>Fyakfhse`e4Rh<0eP z6Ncm=>0*Qw@N}P3IR9->vJ@Gs^@flS{@Ye>)_uXGNw`OwOd*SG-1HyRz3MAHR_lt$ z&j0|Wrk&pK{RDzmBW<&HLY)r3cDc@^lvqxjHd)L_kXx4RZxG@85=a{)C>G<^cK$c4 z&;xoC5eGNd-j6ytV{kCI(@tDW>|;}tSz=hcedz1gS6N9PCbeXPJ4cJ*b$w5_$ zx#HmVm4#+PixUgjRw%^LF`h3vfLd1=SFlI2yBee;kSZIs3T1z)Ram={k}##{m=P9F zdw!C8Y$dO^X8v($1A!ykxK2|qM&8uT6--Gs!N-KFsZuN5nyix;D#KSjxTlLOg#^Yw zOD*^ExQ~^br2qWpcO11LWjYfn2NcZ9-kf%Potn0`d(t;Jg&_R1j!4>BcQyd@o2O*K z&T8Cr2)2t!Lc;Zq2W>f$BMHr_FV%EQqtlx9vcdvk(xcJKQ}oQmCA@yG{ZFxHzp)g) zGddGTdcm|&K2){^tfo4YGUN}AZiiW&k%`R$xe}`&@DH~uu60sUtPT$71^OmH+>T14 zHC9e{G%Wt%R-Din-zGBZ4K;ZIDmZ_~%x)^3to9y4PHPLe1h=yqzRt{xzMbvlVU&4r3cM&grdFF%y~)a}Jep=AIZ4C+M(&YEd`lMehqcP?_D6GK<|zL{bJyU32ZP^H5#f2#h5 zCqMo6XJ|nxr5XQ%SRNIALBW1GT0;y3a;cfTgD5I5H}vrM)Uur?OpkG1t^lPmLvY6S zVIyfx3d?6j*&KSZz8!B9c4xL{7VS;^mJ})8-`Hfj=$!1_o+LxT1cCz`_7!)FuZ+u1 z_mL*itL<`$-5js#v_;#>#0VTBdh@)Rdcg)XE%1libh`WWI~`kO^R6w682Yl2A95yA zEWZxt_=tWdc(QMTSs8l_Q$tcELdcu97kwEt><)9k|K?igy{kizFw6xbS_ZGA6-Kb6 zW!T1RoDDN1y_EI!^`$(%zmTQuSqIU)yiAXY1509$p_u>nk^##-cf5iZV@*33VO(nO z$H_d~yzU_7mDq8`vWr*OS9-#we5I6RH0HKgYMz+*=Nt33SOr>>jDj3ucDN-=h1j+Y zgS8%|=^v+g=k*DhIbjsZr<$Bd{jzz&6D{hI#jhu-UkP@d_zkUL@a{**R+Vp0>v*Io%y%*BaM_Mk@5j2Af`#QUM7|3%fr(( z&hW=hVHnGs5(2-I9t*9yI%E-sNz!!qb}*_fH_lDjd{y=NLXBn^M#nMb-*>HO|8P~x zlA-nL;%WZX$B!So+NiYo6RYvsvcw0>^a^<4gtWxp3MQw{IJhg|tDYu2N~7y%8GdH* z8(VY6A@OGhF2IOZtf7@_e=F@k|FhD=mO;x-$~gX3iqu5@XKHi!z0lv_{cll@h zJr2TVB>&%m%YZ{qJmyOG&ELV$;qK4MY@YiQnkjsdDHBkno-EWobLn>z>a-+u(@BTB z7aTo@kWTSEn7cNqFMfwsmMK3;rNeyr{^NcIh-q3J1X4tsB3R^w9r&5?M@X4G_#5MK zxCZ@x{)z(^pWch9Cr_Rv(7q<4VazWfVd&`S*v|}6F=Ed79l@tTGF>5GB><_L3$h>m zoj{JZ!ZlirJ0|4IZ*8J{77ybYFNY zXQy0$gYIYKuRv&jcMy5^d;9jEm;Z>Qmq;=P$!Mo31g(fTINY@gFE8Gbs{0aT z8~;o0muhHrhk_MwxEYSvtBwlzcpTMy709LYwxEsdk)fGip&~q8WvibVlDHRR0wp+I(HKAU$rn5=EPU_9xW|SuMRZUZAnXk#X>MY{G zIBkA|Y_U3;x>O3l1{z|C(0f}ztkdXn%OGNTBeh016N3bXi(E1;v*nv~9Mz3+Y}3IR zJpYts8*|M05J8%5k&iNv+kb&7t6NtcNc4Z+G3m3JeK0yaJoY-!8p2HVT zh^I#b)o~lX5oEH1$NIF&sz6|Op4(Rno!aA&brKpAlweyK(PV`HAbKx5&~dxvrly(x z5A$fv*+|l=%M1H|X}kF6&po=eKMm#HF84xQ_bb1{VlCSJWh#pL;8|FAWt1On9NO2r zWjCN}X0{9ldiCRDE!CsAvhgoIjq|9N>YX!B`BgiIRoH=%ec#T9Vz_oUeGHbCl?J=_ zyF>NMQT(AIb}KRsMeZU+lL*UKn&mWHL<=6N?wz$c^(zX=f`OY5()nX9d$^1l zGeQCy@Lmxsq3k)A1>S8hEJR~#9LO!L^ndz@c){X~Lp$mw6gdd9JraFNuktM~pFmJn z7}obXWyQT$i|3R;PvhASZF-eIIMNbQ>@yD+{hYTI5o9Q;Okj$BEmG~32y?c2xn34( z*D}E>CYPHS2`-+oLqje#)g13{+~&-K<(o7%Zs2cT!*-2JvVWex*)J-k6^h~B9b#1~ zazWp4FTo^T&+(U2z(02XM?>(Tbgy;~9V{xUKA6(qU;BEpGdi;-3kDSYp~qA{8eu7$ zuc;rsuC`UG)$Gbm>GhN$=IaMbn@gYrULAWLb&D>e;IK6X1+19sr)#fgHd0~0)oy6{ z_*2BQ39DiT2)799q@lk+8JlK(FY@%=Op)~g&dTHcrsFM=67lxFq1P`11H25#TbdZH zc#c3ILl-lw}_eGMo4 z9ts^y1HBOvB;`p-O2h>r#K%!PCPNc@nA56sn_86l@WEaqcrro)HPJHI7l$?KZ%pvA zu#CFdVsg~~m06ajp(7R(8jI0dAYti<>{zPcV?fkny-~SA}o{K9RjAb)@3d7j;*$o+fhXt^H-bF%}%r5 zkw1EDhoBd-E7nduOm|Pek-sy$($lA7sqX}>6IHd&N97dnE3XE|MZ1HwVq8i#@7vh; zPINoD+v2}Hb*W=o+e^EbxIU4sYrveb8=DGh5#sdEQ;yg+CKiyW9q3p31#RxGy2}`e z>hg(3@8nF-B@|%hVMKqM_mI!BX>PHQ*G?>P(wd6c&H_Cn2k-dsj+C#~mO?u_#5n{pOoVpCI{ zcd&0yVAZ#x8?Cinf_i!y9_r$m9Q9Krd}OW0G-jkr3aoctYk%NOe&A&mL6~T;l>RU& zgLR@c9%lHu1?rok5C!uV3{^!!Jse_sEagID*~ythqc{+$yN!R38?2oNMmP^pPqC&3 zFIr&og8Vv_UGD^a8P9+GcBS8QN^#p=S0(j=YmAf^7u7b$H_&frFQC&DI~o$&)+Z@) zUm5BVwc{!gGynjuJ|{ThU`w920D|hxUS8sUR@qzoc2fomoZj5irGn+jj@Zt8O9Ze< z_lc;t#o*TfSRp+2&RrWUjVQ#v-a}ARn=i*mo5Ef!YCiCFuHA&6J z?3MD-ZjHMa%pIhtz_Q?n#XH6_`$C${WUkZQr&7nIXUHq=HI-|R_vjEQg>_VJT%`}G z+G!a-O**U%A?8K{u`$jr8RJWt~HlAzFNffs(LPb$W-^3 z!8OAPs~IBsP0vo$bjH_tF0)7*obCX}JzY^DsywqS5wfeoi1ERur+ zgNm8T1Ftnb2pG)v-<;41HFtMuOoZeV)*(M!r5v3#9Wno;12-Z>L?1VKEB#)^@54r_ z*f)t!TBZgvc_R$&k7c*cO&EFY4ozV;vZE_Nx`TC?64Ct&BJ{sxwo3Wx_ryL&U0PxF zLjjaDGet|GbN1FPLDiu{7tl&Y#Tqqvch43Ja*p)0!^by7Cz!U!GwLjh617{_);FUs zij|Kv@FlPKShDgt7rwi#J9Vo#vPe#xlUf`3tXU|v1X2E}=wNJ_pbsB67|ljMHqVRC z^hs?HNj2`-u&KF{agXh&5P1S9ZkJVfUUxT|%XmxetJbbi>ayqf_|k%8{`7uEyv$YH z?7B9O<@0Z_{ktp=ff3&WQk{f_bZyDc^)q(As}!A#La(2W!Wj`?Ph4iO@W!uM4hnf1 z>KA^|laO0SP@0~i$KUBRHv?L!hh?Xx--OT{B-Tsy&G5_vSUJ28X^X23u=jt<{bGGB z7QXs<5tUV1ynAy7@SR1_gq&$#`&t1{JF3KH%3p=sNO=&|vpTHACm>Kg$QDfy8|pr9 zUXL*K{tQPwBvmlE2U--PL|F?oq2D~f+!js^LK$2O-0q>vnGy zq>-E3*4(3r*)Nx4b_g6XX+*Ht7IOC7PPQF4Tk)rc8IxL@(mJcR)#e>GgQIlDzAY}ipgN-}R zoMjF8sAAe9wFi52Ks51tY4AFaiVqS@!KBytRR+hlzJxLIopnNkLjq;JA-fhJ*ieJdV?}YF^Sj62OP66k6*gdJb1u5E zz!5J;`T<-tD?Dx&I3v2eH-Uyw94rZ7({D5I^xg8Ao_8k!Lix;~c`twefOqrHE+EL? zt@9ti;q{N~qi(_U4X5@CwOiaRMdN-$0lY@2D@%(%`$=!ZIq2&%i(Zm^pD%iJq=&=(z&@m-p9EPlxm}eN23{% zJIu_Nis{_pieX}bNDa;Uz88J#F)NDGKX&W#LUZ)TB=)4-_K6eQKGPDBPk$NO@6j2Q z8W(3YhSTdb09Sd7<6v?&8}5thR1s!sJm%muqgg?VJ%4y-QSHJ+QUSM4A?{jgL61g$ zDa7wvdwdS&LPc*-T}Yy`R*U-lv15P=GNPs3%nx6eD&toP8@I1uc=GMuF`>1+dxkRci4W&RtSB6Y5Db&q3_BFFySPExyIxj>|EyZQghX+OitYPLU3&rBG$PumJiWR*OS*&~0t3UFr3_FX9j;7Dbanl%f@ zgT~|9!Z5Wf*f{t#??>?yqyG%40>`5@(UY$EPkd|H(eGq$2Rynj=I2~0lKHCnbTRWf zii2VNFVgr>B@jbI2*;g!+IGLszJx|8fa*1xVLpHXbJ z7?w8aLYf?`(f4bY>DWfIXu~lG~<1uvRX*JT)kG=MRv^{JguvTxFEh`qcOLA+@zO#f%|EcPns}J4df~A{L!FpsF_lBmkqJMTsqapH82^Roc>@Y z7;mIhKUd(@ZI|J$X;$FH`0H;B-iL&+-UBa|bBG6Tf2>f$Q0xYrhLFR{nZ^!Z7OamZ z8Zc39VVQxW0f|nn5_T(?v-w_tj&>Fjy=Y-U$En_UX|~CO#%C1YxM*CEA|Q|rzQ9~T zvU}t6iDyXdo$HA{YmV2``7)2V@ekgY-W9F)B3PT$41y8*q91e{gaj`Y6-QiHY3h5# zb|$?Sf9eqbFiVi}+k>`R*&6}!wUamEeMsVz#=R-Uk3yO$pqL2g>Zu*tRs-RCDKJH7 z9re~lt{4~J5j{nVh2n^Gnr8|Nn6(;wr@7vyrab!%rMysD8zruQm!$RNJ&jV!LYKpW zVn55aZH9buUG1}qnmG7=a{a{V<9yZ4wO$=ucka200p-$Z?T>y_FqTaF&p}Mk!Qj4Y z^sPK%Y#w7z@jP$%$Z~OA9ObYZ$&cJD#RHOiVQ^zbO#)RX+BXdGZO_BlK3d(#0a0y- zP9B;}vbM#jmJr&}(d5gq{^oig)vL@}0H^6Dmqhdz)zPO=-@W%10Af$G2yJKV6Frjp-5$4Pi(rHN7-ndgvCZN=oC^ZX{^z??A|jwubCDJ4z=byYZ86GXM&9#{%PIs)r+t5%pEH3IWW@PDM(r{aw?x&!jrb6AElab z<1L(;G8+a~{^L2lHC3`7f?veWjZ@=2%+^Tf{8jpgqAJRTX&QI^K3MwP^jq>?gjOU4 z`KhHL$fV`~v|hplrG9C85XCL3#-@DJFxYC|%cQpXn#)x~6Kxhf?!3E7m>TR=?Qy_P zo3Jk(q{3CPLy1KkE9IV;-@5%i^rP$av3ix&jM4tDQz>Rp~-2t zamj&er={9R!3zu+9$H&}$k4_+{mRyT@a&7I+CR^BAP}z$s6s<8O5tUn7S~oQlC-OZ zMZVeJG}re`?s%wfpY|3r%x@2+B_2MI=1xE)o@nsY56%UZ`wr%F0e4B|OP_0SbWHZr zN2l`lsWPD})B%QhO&Ot`AXvrbu^HbQQ5RQqS(d6Fy-xr@iKUNORw&x+2GZkHU=&a_ zYDRoRc3uQK!}%0DQ{e8Zw>%+2rmoE}2eJ|}mdH3)&`JHz{-^U^n(x>mr$2J=%&1SB zOYn!4(wW~q5q05(n}U0`x8agt(~_6^w??b!()uqWa;*k_kF%xYo{3vA`q6*AP_O?? z|C`B3!R^mAUtdAa-+RS@1GRWj`hl3fK4P-fYv{bX2)3^eH%Qt|Lmv!CqEqq317qg1 znor9Qgn?aSX`}E2D+BM$_d$bH?Wv%>hg%QWs?>xo3W>Jtfo^f92M$kkgYq^hNoq|Y z(z*egzx<;1%EQ)UsRa_S{T_k5;P0Hv1+m}&nISW+<(Z_3TwJY~8MtT%@98qyR=I4n z)#fsId>_-x^&>DAL-ureyl=0=Q=HU1Lbj44^+xwiLh8X1s(u zP_dKXT0`*8c15}xl3f-S$tN!d1gV#!b)c8;CH9o*ya-VKY#yMDM$Ve*;v{07nd{@)SQ^kba zwKKbNI~8KkN5T1lKWusO4&vUUv)6)EEF^b)EB&}H3V9LmOWB2A8f?9fz$2a6Oq0#X zU1{i`X=bElQT6h}w7vZoF5Vn%d9_hj0@FgNnqTOLt|b^0Fklpy9!B*g%TQ)r zNLL9Vy~@23Eq=Psk{?h!;W%uN_jYB-Nq)ld9bc+iOXI;Ukf=^r zZ!V>ZXR#aFlz!qor=G0Vg&A>v-FqZs2vxLfqJY45f|*aQgfvgxl1%l%cl8BR=o{A) z{X4e{3jz70IxnaSIKsAoap1?PS43b^A+5;~T_u~a@be(U<27w4z z+YZe(86^+s<@nAPvLaFc`!SZ5!Q1QD$XFl?SVj20QAWdTYnpN)VM#O;lfV9O`@`Gv zWhGXj5AMs=F5`@MEY!?Gve|S~8ed}3LTB>@O>L&M&q3XKLt@6dBA7ueCC^w3!k< zbzqr0W{o=w7~>A+|5X53=cJiotV%@v3BvkFUuh53cXK-N}C+ z8#!~Sn);mI0UeNB)HP%D=8#bTdFF|SbP(s$783CD4gw3zvNeA~jiDYjvI1zot>o?* zvP4+Lo1T-#yQQ7+67Pm4<$O9_Qa9g3N}JNjoutylwfEQ`#|u~viZpqO-99&7w-j9P zlB+7M^2&xPO*anq&Z-eRlHC$phpZ46C;$kst_QMcx`0kU5@?kxy*WPEoi|WP9d6J? z;1|b=QSx55K5;dlrHOYVoQU)%Zcz8lKSWa^`427+;Nu6&lM|1}ArK+hCd6V2#Es#u ztK7}r;LRrQ8zL; zFP?~Vl4N14$aUL1XT)iFk6LS8Qv#ACEeS=(sV%tg*Ijx1Kzp(Kx04}>% z18-Cm(sI#1us5nT3s+t-|F%jd?!P^|IhG%5UKheSBFwr6vs8sD`ESSyd)gAPHY=JG zKqp+#6izw{Dik%Br(%Op0AtHiU_$v|L(aiT&G{d%#ni|e;woSbHgl?Skd_moWYc#S zHPi;yd3h_W(P7%eEp#_I z*kKF_k@u3!14bIhx0q^FG8kHjn-rCgnWh2Z z0y72ZSgV|!8Gu|_fpoQdDSTy9YL2-JxA(}!J4P|k!IdAPH~02DYCnDcHsF;O0nVsG zQT>8O8Kx3iHWdw-E=rqq1h2$z-6cP2G^GL-11ApB42a{10^8Ou(?t$K;+yLYCbeCa z(CVHLW^>+2gM{93o?hD}6|toQIaI6!nDF*s0n9nD-KH*pdw;ycvXHc_#Du0qH{~*c zrMJ{z`)cI1gBOoyG0c8AR z;q$^hU!@68-z?Zyrrx#~>3P!D4cPo2&EX>w>42NdY_{kTE1cX?uY%rT;NmUgfv$SUj_g3OIG{|dCcCNDzFxW>&C%3L0;`g)?Z&__TbKMYfS^Z9C zZH~;PxZC%RFJBoPi@5h%e2wNsaLT>+5iS5n4Ps`^TN?c1#?T3;Ml?%qEsK_n`b#X~ zY&MRqcP}4Z+^Q+pQkxNU`>I*yh ztt5Akv%O0=PTBDCbo@RA*kW-_4vJkDkv|rcW!iA=PweM>_%!7xXe~MRO;w`I$ z$`k)(ZQ=s*5`u*w?K0o*g+75$rOEg*@Qzc4H7Q@vBzqf_y1rk}Go0aNrcFf-pqHj>mdhoV4pKFO30flWC*4Gr;$lU9?7Zovaw#Osl`=Hs(YlWSdgsL%F zIG0)kOl}!L+YAUP(S|&}#yUXLq45{SH~4Hu=RxoiXd3B53;Qi31xNnBx z?e;-RWm?LR)q7fvF2lZ(N#jCW*)fmEGoyJ;f*`)lo1?md0Na`9WKkd;P;}CA^ztr< zxF+7YozDwkkq{@2aaP%W;S=g{87YPHZ|)XavThzcledeUeHkw}*gHW5J*EhJ?%(x7ZGg{sGLb`e+nAi zmGpncMz$Zi;jcnS6N6S*UcLDNo|tam@ccmOko3XN&N$SoBTqvyOzr>WF$7Ys2B@w^PcF!NPS?*7oZXC3|u^uTzFgM7O{qDC?t1XG576RKhP+ojJQtZG~ziW^Qe)>`g_^Q=dOHOw+%(ut@kk= zX3kEWzjh`-MXSZfh8Nz&S0?=C?p{-B&bf` zapB2^7tEE$5o#-53hbV5yn##oq7m=j$0SNBbYi0CX!tElIdL>k?L?ot_&w0V&qUUH z`8oNr*lc+F_RdqVdZCIDguV$?FfB7KG&3!9wA#Gk`04nV)56u(z$B)~DFE8kOCR9Q7Dzd_lwFcXi>ovVl>Nr7!9>6(wR#Kd(8GhM<10$S1vSC`B}}B(X3}@0`Lz2Zm)-L)%eVf}KCJ)eAFj(Q zdA%$c&n6#uTV<;~U_CfJSH8QS9g-P%Mix! z^HYXBYLdTr%TEK9Rn8#YlBY@`EDaBR5BmOAU;!V$@?i2+>6IaAjflx#xmFgeSB9Dl zL8`wpazEKj?Huiy>$1LwWwCzVfBSO{Bgvir;mf>G6dUcC-Kg$Ae_>2doT0(_$IImZ z3B#BZXBPvLEX98UD=g_l0Gy7%~UL*&kc}BCPl+R!hZ4 z=peh}N!ezHGW3<9LHdS8LILhZNEAv0Bdf%PygqWN=$#3%c!wErs?Ja_xaI1&R3VSoSZA;d`k$IeM; zDk=Oz;QwcS2=)5OI4}=hwqNu1fOF`#Pp%^P$kpq-M{PS+YMulTTk#FDIK-FEXXgTd zS*MyRsEl6+yx*R>eEX=}H|na|Y5bYjH9b9~3q2^RLvnFJX<`JTw_oe-)YN@l19&bE zQe4z#{ksY0@;)}lby6*Lhur+c*C`9RE9`8Gd}OIfLS7uUMC8LKR+|BC&ocZEn05%* z-Lm^K@m>q{tEANEjFKj-8^wU2j}+a{L_h^b&=f;3dg}vgKe~iS*78s$<^Y_nJeOL=;B9tyOr(T z2%hJd*BYel^Nz!8#TeJ5)1v%+D=97zS(BvZ5@G$@aY1RTdGP4xDw!#~x|cZV&r*$0 z5}mIp)Az_V7H`UYqN&RX`LId#Hn)D?Z?~r?E^-W3(U^sj|7 z%kpHpW9%(xCa=od61}PP(_2WgJ{^Q@c{1788G*Vo&n9-`?HD|qdt2+XdPi@Q;QE_} z{cuOpleEW4UN_GGu6ZeIpT%y4XUXGvPm8%fqK9yg$>S;hjt^E@{Ld=qGd>B+gBpLie8)GA5IFZ!3FEe}371Pz9Y`aio?Uzy^hFNoyl*to?v)O4{a zY-c%vpj(#wDtgRebG#@nto%!*E4o?3Ewk~~r-lazpQ>7CaL}5$XKCM5T*=Ib{O~8# zg67NjkRbVdGdbPpcTVraS6BC4-*16tEU$%kXgq#}8g3er$0y;mV;zg5yCj#LZ`=#x z_?rArDveC%KP>wI9Gu}B81!d7{bW0un9hN)nW~w;0rDN49SgtIitJSk9v;8t-Pz?) zJoFW{x~>Vuy^+VGm&&V=!;ii5244MWSn46{M>hliL8~ME083+@Np166%e!~!x*0yu!6R$z2NOYdJ$5t`B5y%^0^9yo`Pb$oz4HjJ zWr!a^7nMW!vMj61!Iy0jEIpODRcd# zfZHN#sw+?BWZBxwD$MY$GlmqK{L z?($3pOvR}@o-I?sW+>(4%FX*jP38tD&#DrT0N{D!=7Svym)jZ3#~{-8i#lqE?H2pz zOvLRs_)iv}Yu3jN@zN3<)255^>S?Eldp=LZE4iauW9JRZdv+gu&mY{Crxof#?q;C< z)ubLDV;YKN+3*!YjPtvcuXxVZY+`|Pc(U#$tHgppr7n% zS~t19;ef(U^Xg`GW!+^N({acGk?z5EFfZS@47>s?G|UG-&H^bHGYcjR-NWe%ZmqDO z{5?X|o?AEL2BTUTk(TPVXkiuy6q||UKhPUc%IK3UF&s?9eh^xq70<|;G>c4`_%Qa%%HAKL z()2EOI_;VxeU-kNSFf{SyRFn>c^ZM;(b(Ot*qs5JXf~!qNSc%Fm;P~)`<)rrtl{p7 z=5omE{lZ*H(Rv`21oRaaS#ZJFfunJz_=%~KDotP6nd<=X2Ov(%MdV>bpdRkKxxS$O z`1ljfxL||;Aa7X(uqf~BDQrJ^*3dC^<1N2#!DT=HSC$EH??aX2 zznz@|Z@$0mM|kaB4Lx5#f2^3wIu5>317+vq33FSTp5jLY`#);1dF%^G^-)}iP@T{1 zyEVxe5Wil`)$R1|J%_BQ!p3D&9^11)H*~gA8V;&eA;As0(@#!IFXR|@f1CDCeQphU zK9qc`t$^2wQ|z1U6tCQf?^t789WCo;+XSF+8^OZ(G3xlm(`?HWR5iAOvt3I)>Z zKF9+)mvyU5PJRANEOw8qCB@WkB<6H$eE?i1sW$J#dxGUu^RUEG7DvBx-q30)CS+~6 z7C|WDf)>h3e+YbGMzEjk_JNkfz3o-;o4ztno-59Cb9s3mC^bXSs9GbwMW=luObUnROQfU@>2?0uJZ@4@TJ^yPB@-sD_c;aCROqm@(B<1aJ;k

5!*l7mzuCoWhVMSUcP7+(L}zTxp*|P*?B0_cLuCUY znY34O-p-h=^YzW ztvhy-nS1*0<>E};Ch=*FBXxR@pmzvr=2_SHqPxnV8}DUa#at&<=gV%-i$4h<(G}7N zHtBseeZFE@Rc5z2*Lv|)x?#p$+mf+Y)A_r7Vs}l$D#;P+{-?SBd(=zzfWGy@dr!x{&vIp?xWoBdOY}ctOrkX zjutef;9<0B{>)n$ZkuROtXxrp5?19Y`L_7vu;l;4-g^f$y{v1aOKd12Dgr7^ML?xV z7eXisBGOc(H<4ZfQbS2VLaRi&)ncLmM$fl z_xsje^C#^c>AlNFAg@yOcV25NTIgk>hLme*#aK1b+}Wlk zemrNRi7Nf$oFb?*MzUy=EAA@`K#A(%IU5Wf##nv#URz)QU$irEFcx;1(KwiLRybpN1aRqGK`C68OY-~C{Vp%GyK{Z%4`6jqb-RndxpHjEv^9yA#xl>cj2U|6i#-nH@CM%+Fq%wq~Mpz!C9h=C*feVmq%-ZXZ%c`{1EbXkDP1y zx?oQ>h|U}3E7WVIpl~})a3QuO+6GJQv8eov09X4TF)ox6IVU%w!|<)IM|PZZ4Exr5 zaKE)G9cDMrPQS{|oy$h7QsACO)B9Q)3^MhG(a%sF=5TE3H}h}bs%?-}epBa)@E31z ze5AmPOyz9fyPXsn_z(!A_uQ@W3i3J}l7kL9^~NsttT3&u(VR5R6Xe3_kz$zCtM)_WWnP)tI| zU!K@3*waO#Guy40_`^3&7*sr}&hylPi(2pn8;QaDuj`AQ21xj|p_+%QZt_v*weh>@? z@eLKhK53#B9CEWRO(Dw)+x<}+UVHu1qqmY`OquzDMj=e}yC;N}gOV;eo0y3m>~2Ir zT1sw=epDPD?N5N|2R8dv!yF}DV^&IivxjUw9CAkk76`o)*+~wl^2C|0($0DlK}`Kn zfM?*rhbFy|YF|9BWXVcqmoydm=9og=q+-CFT$Xg>Oy|4h$)(<>Or7T7c{=L&m+@K! zN*QO_*yW8t$*6im#P|~H%}Vj z)OR+2)iJK^%0hx{X#fX>NDt?E#+nSJz<6d;^v!^Bk(=F($(wnKX}VqLlM3VLnJ%jZ z7;12Tb;a18a(EJC?bmfPzw`4qiDnO%nVHuyqrNXSy5>MJZ$b4 zYcH>Z3O?<)ZXcIW!iH$@&M&+6_t8i`T>$(^e~1gkAwPh7rP5@f7#yTJ;8yurRQ8f+ z1Zm zrQ+lzA9{V(FxI2|t!ZGy*DJhDZ#P`wN@`L#z!$)+z`{|A%5}1NL*7(As5kNC`iHto zId;3AZOT>lOR4ukicjBDU+AEN9fa!8Zck!k`T!26e*^`4tWO&Vz(dMIDMAkiQ8q>| z<}2iJb1x)Da!0_`D39<8sBM#bug@imH#UZkL+Gq#*xV|wGFGY5zWttwd43ecoeBRK z)<5c>k~xYoJ|^D(+hmZ}aqZVM&_;vlo|H|S-uALr+n}JPHSjXQuaK_qqw4$~qW65{ zy}g%7HqQ`NKFOieU;aW3wSz zu-%^i#natd*REI+1WdShv#3<%xRK6VnCsY`C$SZ2+~tq6#`#h(5^hNXMapJPYYL`5 zxj|RL$e^UsgdGKTJ9Sa|g%!7a+g35f*O|NFd>##BjrP4aF&}c8-HY3^s%BHk_V$X` z9}p_s-H;ahkKSg*SKxT=;`Nq2Qy+ZcDH;B(A~Yx8rAkGO1q#!JksE;1t;Bxb&a5e{ z9z|(v#;yo##VhHFJ(0PbtlKC1qWQ>bT5NGrgG$NXcKWdp6`OcA;T7M8W7wV3AD(rmJ%ru>P!I~xP9bN=$__ne@sx1Jxugf20OZ8Nbcx`$8X1L_MFs-DBRVeoqeKr{sW}3)S z;@)_l*l~f}_>@m`y-`Zg*J|}x4?Om9^e;%1(0|OKD5R6n9^un^XsIu#4{BL^0^eki zA#GmL(($|kD{k1b^^Q5H~ie-F$2E^Z@wd; z6gF|lunoO$<`@!cS`JOhayJVXhskvgLHEp^CB?Y^JWQH zo!_%ibo&8qw9S+pFr@5ZbepsUsHj&pSV+hUB;q@SHyY=fo_-%LOAe^S$vv;6rYuGu zDQ+Ibad7$J$S?)?rU?s`0|*|N^RcVIhjD?Fu5S!pBk_yrcf56uo!!fFmnT!F>>{nw zhZJ4;c+@`RLD!mH_0>Y0aX8z->&Ov8xlaCx|mON zp$;QOrvl;H9j2ND{sS{N8jiK~GPT4!o@IuTE#}XX zPA~%K3E8Td$NwUb-Y9W2PFWdXWolYW;4NH7%_z`z$~&oic|a z_nkB{m`|9d_&xdAo|EFw?$_*0WQSEsPb3xUGC1${Mp!$m>U~taMr_s;E8c<0 zrH-2X*)F}=m&PZ#vjJupTUg(*M^i5>2lH*cchY&N$k|U`S#D$e9z?%ZM@I_-sOxGx zl;D#c<54+fJHuq%0GGKlQjo4}L$K`-pjRs;NeoGXydWW;B+u5_T0y_`i`Z9Bc#fwR zMezss(zu&q`PjN7I%{<8XBJDTYds+11{%MCQqIpGlip~jj5@8gEeJSRwxJ)>hY;g| zEeIV9eMISdhh$YtS#Q@3S|dCw_@3Z0j65xcXjBaDmseTMCal508KW!~G9ZNEz(n4g zi+3}V>pLo~iZ*Dm3-#FHtW6>rSi8Ohx%Ok+cyYZG>0p{*pL1G)dkK$Lvruv0$g+sA_N3)cFATbtp%prN(AhC z;|bVp45HSUK=m8gB_i%7dYkEMd3Qt$v=1)<_eGi-@q@2d{WS?aTl;%N+9q9SmPsP8 z7B@`}@<48Bjc=Pf9uC4f?nGg;m8R!417qwkAr={XRwdsFi0bV16yXvvp%%FH1}_M^ zc|8R<%DEr76))m=nl#TcA|cSyf2ykC;abq+tWbMmyj|RCBsB}}OMC251O0TnnsgQb z){WB)CX^@9rCX}|toOVb&xiOeXMA{qwN=9sQe-q&kX=E+1A@|jJ`mT>mNbq1W%IL3)viZ8rc1Ld>(~?2#Yz$ zoE;(SYPzW=g|EQMg`IDac-A@%egAHk3W6GD$#upJ*7m$BY&l%d^bmx22j-Yxuv9ia z-TgEe9^Vu!HzyO6Wp0vWY{V}~J{JmR`O>wK@iZG=s2*bu^i=)`l?}4+2^TorslWWZ z3lv!SbuwXcsSe#;QgJi`p5Y+zI`&F^J}YMz_Ev{hv9^Sa&QWiGTHWl{QrUJSs|>5F zfw_C3m>b&SH}2NPesCyEp&ZhZsoU_7UD%@w@@(`?>BOGT_GzdDFuNV=bhCUaNT^$h z{H4n0q{4oNZI^=eYdoc)LnAQo>@c7A&P`t{9>Xtjdw%8V2jR|q)@6hD#+5$JI**&{ z#-=Ax0=l6g@*9sRN6~&UT8&LBO@|)X4^@ss4@~Agz}DuaME;COx>ZR8;hBDzLi~<+ za%Z~pN3YqJx=2>Qz7&BFj_}uaAyoxrQru|!GYAiQf@ia%-0)yX?~Ee06Eo*NuSYq` zkBYbNM6dC(tc{lEDcs2h7#H~dqgQ-df{_x~H*))T#pJ)IfK{8$Jr83&c}j+j<*J{L z%!SL)LiH}L#Xu5p(|s^nHdAWaX8F3&#j`QwVS=}@3Txu&D3z7PT>Ztg0aLIF4dizC z)WGoNNBS#a1MT2KM|s#v4v!=J&d3*C>8DzU-}i!JH@CgOHa9LDAJ19`+IL@0>Q+9NS`z^5pw?mN6+~0YN>M`O?IfdR4Fh58Pbm!*ta2>% z2Iz)-cDF@75xHBr!o452x6(k^l+}E~8rwP;BQg~YJ#-mnA#*{5cPoWMJ$d+ke0ay$ z-r<)m9e$sqdEIkRA-lI)iVue7mQ<-=IN?OhaBZT$P)(n z!Vph+S>v?gMf7sg5A@bQgC-kY;#gUCT;l4UPvoJ`eC1AX?_~yJzi8)d`mips({+DC z$=3m42uuD;b{7(SKjb=^8%VG+yVAx&iS7%0)>v;}xO3VEPr|6L!cCLz*^3eiOMD-) zIj`3&BfexbR_#QZ7UJJ>Jy`!7@P>7T7H1ChX4v=-IQIB$$=ddqab;V8gC;(|$hZ2B(ix%ICGEGTj zw*2(lHyTPwuA02YT3(n6dj$2}M;l5n^vVhOH7vK@yI$ z9w{l0D9Cl=?2Z6T%g7hJbyl>efT){wB#!|UNqM`ON2}}b#ZqS|0V6CR6``7?PLua2 z+8tJNA%Md+sTmc|0pv_q<{WVs#Gf7Y4)vbQ-+Xz>d~izvU>xW*^AAdw_9?^*b&l`P zLvfc^uViJdCrmpQmzvwsW5Xx$qW({_7^d|vHVS9sNbYUnIXI`GZ4 z$61Ah&if$nABl3UCFIr00(I2bpA*+3jJ zI?0O6-dD4aJJ&hx|FFQC9cxT-CC}_M@IN@8>#%BMDqEyvdd6$r9Qz7H3~_3H_1+wIG4=B)z# z)r^~SL$E^uzoN6zSoQtcVE4=?)>cOMIUNXdC|!3as29J7=74U}jrJsH^*gQD{eH=X zC>fo~!<^Cqk@g-0SC57#J1@wT#pp zfbTDsdY{TnsqPgFN|kR#)%s{3csi_gEn9Ebyz3mZMC}cPSmf8f!4yo9#)?+^z!n9y zxLsi1d)t{BJAO>1+UfGrb_K++l-;0MlGn2b{z+rR=ImZMhWo`-hnD4XtGQ7pRCl7O;gmD&$2P=D_|xSVAAW4ZArEGgB# z9KYuW=qk1g!y`+2Nxeiwy!wTp5ulHr2Tygc6dBSi2>Xz@q#y0$ZpAMpU+det04`{{ zMZcR~37K+pBQeVc zVl7evC=LW1(vyY@9zs_X>VnL-cHk;0=~!#-tiYz(Sx3wpCl=Rt+YMCqkYyX_l_0=@ z2yhKiQ`l@`K5pd^B%OLcHkhyS<_b0PL$KXoz)ozK+fE#Te|IOq-OtX zDRP*{{{*8-sPzit)H!|G=-;)g{a&=xZGCi9LJ9NPRc!-l{d3?S_w+)hvOVqy=sQ=d zP0G1_rLKt+a6i1nx3SUD9dg?Dv!6xre5iedsvCUMpLK%nVDek`_Eq5J`(MPg%TbY9 z?KIuBr5QG@Xm%a$)s>KU?&OJstHg4VVkq!4>)G(NvZ|TZhErIXmxy}-&2dX90kxf4 zM-wtI5r(+k0PB?ct|z#O?oX!GPzT9+P!b#ly2^B;SF3)e7FsRbd!KZMCNC7!q@q7t z>Lt#xs$4A8nTEFhkhJi2UsciLsmYY|@q9nKPa51blM}a(^`eLC3HxuY#%XPOrcDko zw~-|ay|b$;B%8HOer~;PBcb1Vo2=D2@iz$`VQu8`X6fJ~`JgtKNSzp_LF{h%dM*T{ zXzCk<#AQ^(rKLo@!1>_u<5ER^Qw{@pW*6W7kc}znZ>Obk;UYiUiqsH=ViQm|>h=9! zPPN(n@b1#mT?kCVA9kJIfr+qll%=DMZgji+}Rp9_DjTn)YDYCpt+0q9rS zuf>_8tR_DP%s+03qh^$H6S6OD zJo`4%|2=XaRqflVY#nZ~zMy|?0lh@sXL$>u4_DP82D)nRe(Ni(KjQA%hllPGuB~k# zZS|MY_x%G(b;rIE@@*EG&3U@2#NaKTYcz)QX4Xc3dLs4~+2Pjl$Z(uWn#S{e)T__! zsAY{N;feMR}FY~&e#L9~BE`3D+uLpvcwE1cMY-FuSYu!f}7w&ktD zSYbKSjqPU;b`HAkUFkf-W1?iE`LT*l%Z#KGPjG96Sb-^V`JQL6_| zH1kbg6u4dD=P|Pl^-F3qUBO}l!Ri^=Cc><)eNEyM?gp~n=+eEm+g-eG$JSgDqKLSv ztC#Vk$AY#fk>rBqvWBMYWlKi)e(8psiK#~H=<`ly^wWu_7kLOGuBf~LI^hdni7A*v z9<{&cHp!FiI#a!C`bW*V)#5`;YUle&p{VF;%NU zBKDo`9)R11=^HCXFu*`uXfrZF)mxuCT}G)wxaYwFd&Vmay_`FbKMBNgul>ssPHEKk z*0$1M)AsGam(^YtmuL8_iPW&pmKz2z={dw3<&xAr!(2BL9zV5Y^XlF{xg{gJz0BTM zKgPt0s_lLc1jIdk)OBIz8sYft4U`ViyS~V{hjgAINzolYbc+ojz8y0r=Y^jqNRxc3 z!7e?i!-TZzTCo|9r1*+bwW3tH*K;QCz@pYp;-8AL6s+C5C+6;|fO=Wpk9vB&B`#rz zyNNO8sa6^B>g(VjNJMRerzoSlF}~%o&glMm$?S(p<`JdTl=%uq_|yFIb6nn)OQVp7 zVeqg5IXo66>K;7MHC((BP+4uf^0lDs(02*)Q5hR9&+T)qgM)FvL~7bC$c!Y{x(S@Y ztgN1zr(-9M)O$$ONo-xZGEqbj7i<(plD2#X>DkWayilqKUNpa|A{->T6#}*M0k&T0* z)vtxQC+dkq=_4p9?DCJemDq;UEsnyyr7`-@^^Xl%0T{2fX8*K?g7y5XeST!?i{o1^ zK2eMTiA4v~6ke}(w>4V-;Mi4UKgYONg>Biv@&0i!ZGZE{5Ie7eQ+jY&ipnL*0?odE zA+^sM@j))ejD)*VgDnWw3wblUehn6!2)@`0P~Yurk;VjR5+=7&HG5m`6vy5aZei2# zp{`?bO$Ez`KyadiZT%kgHZe|lKGo4zyZ*A}YH#04suHQXJZ@`}RQt^_Uc2GiL15e= z-D?saec+dIp+2UgHI25NI4>TeX4`|MeE z;QCESf(~>vCOY)Qh+=7Up}C3^qdEbxzElS%e%fWF`pQ+#tH)9CDBhN-AcVzP{-jHk zBvN8q9l@IYMt%7Rh0PwBR;|0xV^7BP^aC0}50=^W1`4d77>UR7gRKD2>&mj06`m!! zrkN>d{%wWVgYDU21czT{@8}ihw^;}y2h2OCS*aAp*!XUys@$yj;7fd>1ij)Ty1A4@ zF(7oE)FLdBcxwY^Ax{azaBRi10-pWKA0Pq8jyT0_II49@X--7#kiM?6LTQlQsi^Fj ziu>_gp&^CMwKbU?CA%aC<)6IduY|GN4#+f9E+>n|C_;AQR2F|XZR`(QrWP`yHoYsG z0pqEG%cnAexCL4y7P?o2)2V2Qr4QaE5@itRR3Tdf>2r`b#)F#Lf*^wcGcGKE&5fG* zpfS#)GZd_K1LNuJe`*2X4Xp_>?hVN+h?-aEQZa3h8cZP&2n(R=4Ux`1+G{OuZ)>Ts zv%pELrgNAKjM{yUGE3`W*A{ z=V~sI^-i`%Ey%03+@G4(_jv>jSwtmG(e?ACQ59V9dx~Xu4*b5e?F}6Z?4ljfompAK{0P;;w^W8Lw#=lz=KXvk-wH|4 z3$_cHM$M;KR+P67#RS|6%)UGB&AWGqk@*$OVq6giasE^R_l%THcS){u7mYFgUzgfp z7-<$1F~wyXm8JDn-Y<1j_%WIg?T?xp8d?3>8$)`@PXe5_D^4VBOEp@#KfnoYrmrAM zKtVGL#``kfKndVK*t%rtGI33Fh69O*zY(r0kMA&8tegLb1$J)~pLi2f&)jSUnFO3> zQ(53U(9VuO`C&P-0-mYN7D%tE5PSg12!U_5UhrCY4p9^O1o4AR#lxq}`Nl7dZ~1#e zLZYqCn5csS!OB0g`hw^wVx^vh4w$EuRI?_YI|{K?cA?S$X!MiBadq7pEcnyI)Iu^PV>6u z{Px!Rr&&(7gv$~aE@gG@={5LM<#suLT!`ja9Bmd!rkxTk&Ho+`Hf-o72y|;?dgc zi(8NS_ye!9>RTOEcHTEry#L&Dw{AWxAOMav@XtYCa%9>Nnd+onkn#O^NZB+XeRr?r zwV&H2o^Yt85O>wJhen9?NN=t(_anS0EAk8~do$KyN~BJtcht$yaY|vC`b+Wp_?SnN zQ+F*WgP7aZS@H?vIKqISh)K)v<#o?d*840h=LR8Mc1$Z(>?bS0CWLj>?E4(K?L3>+ z{A27M?)Pg$kF~(bZ>qF;ci;G)T4F!Cj_#gnU!QMllUxNp>hbuj!5V^`uK7A5259fz znJ+;2UWqVXUxkM#D9t-Dgnp>!`%dqBmI&jIqbQn3L;1#M5ly?ct}XjNV3H+k?VXdM zKR^!n6pp&gF^M-Jg5z=&nB?@zW^a>R^<`4UVU8!l(&8Ml{86{lh9%p^D@LU*wUpAN z$V_WDzJK%X&>Sry3|t{Y?Bn5$5|?~j5hha3x0{A~cmfaQZvrEs@e>32bpe$X>WD%) zCs{AO`Qdi?f_qzvQ||zz=wJ`uwSdi^q6Zg##e5!<;;?IWh? zDgRz2^kA}q;2TB#nUE-GO|z(*?6^T~=)G=jEzGX}v=m#bn7kd%YfzO$@4RphSn-_4 zQRULQ6*&)PeeB2#X_%AFpOqEB_Skf|8syn;A!?=&fFwO@ueqlgO=mf)XZbb0Y@Lth z!PY1otHd?Z=q0h~LvZBHgKz%mDew&da)NHAQOwdf=NGb3y6hv#hcz(DofubOW$D_)(u)(Lvuj zamULJD&3&K{eV%G*Sk_BZX}u*1|O5UZH`pNJQNCs!mB^T-*mQUP%qxU-~PP7AaBv@ z#=*x{6gt;_a(S9ls?_Kbf4zQj1lw5!!jcnsi} z$7BbHH|{Dwx?*2sXIAS3kkG2FzQ5Es<2CMBo^*waQBBX65aA%M!vnyTx~$h(r1)CU z)Gvh^_Mo!fw=BQ4F_hY50c-pEhR0mzE^c|CqsIpj?R4dA&seW~Zkx+vVG37>`_c&9 zPRFwQoXV^9?K@X#8@qX-XNo= zouQzn(*1~I!}Qdom-jn+%c>S=KIqQ6G>ftWMcZoBn6(qZwlI+X zTGuh~2xQ=ueG6T)WF|DlKV)Zh7S>?YrS{_rNwF)HD7?LK!gh*MLY)2v6k@{v$U1J< zwjuo;SeA+_{jP2IMHtD3Eh&sR(C;c~B1&|c54I8oI2a9T@cf%UEhxD9yqchbV4~b< zMR~Rs+PK1iL zDi@@nj1m%*L4BV66zRcKNLfmW&;Hmd-N>}ssX!(_9y<16b=Wx1&p*&r`0OUee%7#$ zvr?M3Dx~v{^UzPB-YJmh?^zaHj913NT1bY-AZwrZ!=KP07bt%!Y*O&e#b7skmr2v> z+d$`Oba#>=pMD@}sXDGl=R}7|;y(!Qy1?(GVH&_W-H?S})ZP}&^~e&jwEm@05ehlV zEYoHDX6a8FY#E{HIY%bBp{HTTGBl57YcTF$mNFNfW*jR~wEjkKV%Bpj_?+sx48Jat z^@7Y3kB)av7)KsGvW?_VP>}DE39UbL(P^bunboSQ2<7gP5XGXCWBbV+ukCH@o@Oc^ zc=&$iL`3V3LvQcpo2)X{oadax7o;@99*#Xv>4>|OfKfYKRidu9nC$A2MJi`DDZWr~ zh>rkg+RGie<&q@~&)kT`5jmvo@gq9dUps>7*9~4TMZH%X-P=cFc5OOQd6rj@r=Uw(^|CM+NX}RN}+BmF)F_Cpl zDaAAiQTEe_6&udH?N~lws-g2KGwqw4?NcRDuXw}eRjEG8lObe#dV93px8r^0L%+RW zcRd>-GRt^Up}J!qk2(u7aLN9t(X;;+d;jLPSD70W{isdax00J=hA-4t?{80oluwEH zxfOOaf)L!lkqF~Zv!^-eWfRB<@JSN{ANvS;%_~b}%5*{dmvgt@@SP`x4OMKsY^XoR zrbc5IwovpXuEm!{#R4`){WRme&BLFZ0$kN(XvG)?_Jn1Dcj90#&}M$HFIKoFiWXbU z6;K1W-L3^MSoVX3(&zOOH(h=C}TFt4H1=&vY~0 zyko)6hUUi)(4uegoS1Y!t?p9AF3)bBpvUio@dEB=yz5WVJid1@I%q}INJ~FS-{tl` z&43B^edA-I?Y&&@j=4{R8X!<JdlpzE@SnD}M9I8HstIvm~iu<^9}zK50aG z?t-oZuPnYUyn3&d;xc%2rZ0nJl0fl`(_YQCU(f$9=E3Oh+kQ~V`{y-udpe)??#OQ8 zaj1H^1UYg!5y3jvKpPMp6)jornTRRX)QMXhxu(tUfBp6?ca!k`G1<2$G(l)-)gP6~6^=Ao)DtY4?z zyddPARk3D0YbN-j($SN_KZ&}1gj(LFA0F!Ufv z=@#-zi9Wq73z!9XUJ-0US;-h1%QK?f-~MqC32Vr4Bqc-gg?m>D#%>%(l_sT(n+u4A ze)h6|44}4qjdLwj#kJq^(BGLgdAk~@x$aR9R<9)t13Kj9B$)e$tbrhZ0za$|QYU#j#l4VT&b`Yho3#8wHs_Q7n| zhZA*Mmo*8=y~2=h0Mf#kjlrQH4)1}sS$YZ7{QQcHV|ME!i6q0|mNW!i?sYc3ZT)IY zL!oZk4gndfGZG-SP!W3`;n(#;B9%INA;q}A{=>-T+kiJ0<#T5*UF$o%ddBo6Niu#8I6--9QS{!9rbb({FtfJnd?>A61a=TN2V2-7CzRQYK zPS4l<)p~q~HwquD8}pxD+IhR5@dDsg5VG+OJS)&F`F7anyq-o6QJDEA!IL?cmpl(1o6at96rX4t94xpJ$VED=Uy+7sIWI`dIvy=Ss8*jK1{|MB@*+vd_z&t^CK z=F&UFaUp|NuxKk7ApE13QI|VqF~3vw>&>re5k__x``9hwFN*Yl;@!hUAzsI0Z3$Q2 zhiJS$#U~oJQP{5?+{m3oL-|En-d2A-r=J0~xTW4E&MSHtsFrXD{Y^1{Zz=s$#=xqUx%*g=;&D0l~34t3?e7e5wr&OORw@ac!tVmymq|R z?QP9o)ATmbms4+_ZhM`A`xLnp<}$+Wyww+*HJ^-^=Dm7&{ZoHaB_y6d zx&ce3BBk$T@?N+9iuBNM%ck5cZ1P>GRC@lAudi^uLhg>K6Hqq?O+31tL;SA%=-9z+ zfSdZXXQJ^iBeGvmnqk98Py@kBT_vXuadY$wGtnfr1WBWtsWcIw12X&^DdGy3Rkt*$ zlBffSe>3at-XQ>cDL?N`O^&>j9H@MMv7%)o;mTolQp@{hqr&XlR0&@0V}6e56aozjXiF^ zBa4GYCdFY1Z5@&V<1Oi`-a+!@%_=der4P0Xkm0QV-IthH)r%;A~0<0vH4oJg|K)bYjzxiscxtDZYlzl`~ z)ab8#o^9pBj@(9#n8P8^%gtx&(tTxcqvH3K;JhOqMW0)JZX~BYPi)T6lr=Y4#sbVZjqpQ@(n1495>IcS`ypt*Yi=5s+ zg=DVlP3$tuc#L6ngv5uEi=X|@^;AqOVux863T6CEjC)s7RIFH3+dzk@U^}JaZK$bX zycR*E!EUlYJaP1~-SP-jN@R^jGL6cVmw4($l=-0`a-FddF&Qzx&vwrDmjFvv`l&y^ z68!O@p__2k@l!JKSwlCZ58N>^b+ad(gWhSG5xofcznTtx1i;c@4U;>+gN3LJUp(7azR6?`#?TDufjGR+W+ zN)?^|UDfINGUKkIvN<~)`4=$wd+2lBJCq^XB4w7U@HX{#8%UDK3A_m1ylX00 zWLc+niBi-Sn8n4IW$5Kl{2&Uq*f7?RavYQdDZAq!wpZLyhpE?(37wn~g|Z6ebJGgX zFK+woH$$cNGOjuta*S)O(bw17y{Y=Wv9l`Ro<_*k_kYMo{eMse3Z-gX7CMeF5hD=& z&BeEpDy2g1>5kVWQ5dI50snHsfI-%Y*3bMHJ@@SnlcEdCE0ECqOyDt+rEaQtTZx&szJHmSbKwVAufN`Rik`|D$g(^3ngx zP;yKd!=qDdRsQ!s{ktFkAAgsVeUecNqR*Y`@{e!%pPEg-SA+b834CV^w<_hK|7WB3 zo-i^$!6P4^F#PF%P3(Vs>A(5obtA^`XEQ@=|Iz5VLPi9CvyV~z^XDP_zgQ2|O2%+5 zk(S{9Y_!TRWw~rQ(I0pI&BXrC;Pf|y>HcC-c8VAvxL0FS#QEo!r@xri!&1iZ?`@U* z|Iz4feFn5p3R$(0|G}0s0OT2CxP(#M-hVba_$Gtisenw1!~epn|9tM}f3d?#uf@M& zhkri$|GN7Bb#(?!`$q*!9B1y!j7>n^!)txOmaISWa~J3?tOHi%otUn zGBuUc6zP((OFG!i4yw82(X@ve^&PZa8}155Y4!oL+39q< zw;u-Y^kui@r&*1N%x8NNr^A*C<|w6 zb(b18ISD`&Kv?wq=E;?=9^CR)cL4uQjVT$2vfAySnhV8dz1!Qds?pr7-OP)EaWcgfH8uUf(Dwxe1*=T2wmHE3#uKD_KCLF(l!U)!5ECviC3+p4OnkHZfILVB|MCM-fTyK z2py4MP%$|HL)V>||Khay??9as&UB>HoVj)R52Nh9{_x?$%k08>ZWd?W86W8cekP&4 zNo^xYSAo3IAyGB&x3S#vZ51JV!DLoW?rwL5q=vI_q26c)v1O#CrL}LZPUSNe(y)=>-Q9@AS{3ML zi#PZ!xp26?oGts(q4wWb>R)Z*Um3y6GnbwCj+}%4;lD313~9LIb_@MQH12RuP|)cN zc^R43QqyWX>TIXYd89`%@ObB7si}ZB36DH}a?0%Gtj)K)8-J5>g>s%aBja(FAMi)L zyebG(rh`y2jpGB3xLjCLaKieMjRNN0MVNJ(0UidiW`s~X<)z$5>x_^>PQ>C-o`3gh z+rOLLr+Y7Q(5$CR{#b=ircZH+f>mzAQY6-|bsCIcoR*qeAJ)a#9h-h1_hR6&PBJ5< zJ5u9Z6}0K@m~+crty?K3UFPo|?A=#?ZP-s+$KTgsr1n#qb?^=FsHbL$Kut?dz}>rH zzW}WYL_isBy2qgn9s=6zOa$}!zG7UoD7lPUS4@0 zKC}jZWiACVe)R!8IxlZK*kN(rT zF;53ZLJ8X4y9|er@?Gd>anbGGeYxiS{BPR&p)kg*4j+^FCmLGiynCmH2$;S2>m1&D zeb$O#^>TI`LXC~#mKXn$f$yx1$O-r_e^@wm?z0$khUS^Hf5w{wth~bosqGwvWpTmM=icIXP0T3NPBVm zUytxVHxhpa&P$*F!?iA75B)D#&q2jc-(&n=<%Y2#JM)DCxC=gn9zL0awRVY_IKVRV zh(IFuIhpu8anPSP%={}BzPhT~t#n=t^*d1KWSx{@z|kn$+kR;T$rY|zbNrv?U4Ok4 zsi)4s!h(W(&GGyazqT`6UX2?4Q>y#K-`z4n)$UB2e||t56N3eW{_@*60&?J356^$I z@nBa^MLyw-uvr#P(F6_=quZBi297aYSvzCu@2=u)1{8wNJp=yk%1ahGjg6z0{|{;J z9o6Kvtq*TeRJw|&bWn_eTa}gz=7dWvw}%`OIg|wboW`S=n~R$9Icq2dRW33%wf0 z8F|wpS2lhB#Z>5FzDlYzKBElqu4jgn_x*n_>!`2+unB#*?XrEkq9bG{Q}_$f_vov( z$1EulnD040$Wcok>qzJh3TaLA1c74a=jWd&Dh3NZ-~qs}fu>aa>TmLZ*F}KggPF8X zF%2-o?d|PxU?Egl>HHTfD=W97QjZ?JfB&9ebUm-YvRF0EWAT%P*$@nLJsG$zGh{uo zm-YA7D{X=lh$hu>Dbxyo#(*ZHw2BI?)-ZZb0N3~Ejb2yw-S{6XC$hZHEI7uU;JZH) z6q%T~>N9)&IoX@V>whH6{Vw>%1FsV^H(~v?V&De_`#!(e3%}AkOR@xCfGs<>F}fQ> z59{Y)R=kb?S0rW-i<&XFfx|<1a{<3m|!O6ZW!h~sms_~dZftR+x^z96#JN(`o z9^g)*38Glc;&iXj>!Jq`2pq6zLpSu8dHqCy5iOtWj=Btf5DiI}N)BhHkloqdc6MLb z@90p<9e}5;k|Y>Eg;M@SW&hh-p993kzG<5M*J>F)?@AC6bYCC;d`FUSv~vh9;8e8}?tMpr8=68Ri{r@N}8Z z4>*$M;!<4fNfl^394g7m$>EsCC%ds&uCsmh`aRSA!*BRxHuU=$PLEsl3o%GbOMAef zmUJW5$l7Fdig1kG-XI)rm{8kHRr*VgQoFNC5%#q_$R8ZYz*`24~Mwot+T(f8Z z=5UK$x&CyTD_H#w54}E#+9j+_!XU$l>lsq_M9d6u)ZRnWLJRfPB|tWG8NEq_59C*BVBqjB&CXw@SzO9?db^J6x!G zSp@LAznR8=9pt;$fO}j_>t{P%T|3q13mq|nzQ;$OUxBHlnZ=zSaj2&-#EPD!x9XJL z0Rj}Qgj=DOw)XiH?ea+hqXyl_;S5~mFS{bU62-&{C~}j>ta}aqPDYZ{?&e`m2nfm( zh%?*uQ+WP7$is@?4+^4hxG>V1`7$Upx~@FKYWi+-30`uiYfr z?gxCUl|C{ymg8JkqQ!Tke|_a&q3hp$XQvF%9#oyt?r9S2_nCBXXsA6)F>3y2U#5u_ zQa9`X$OEIt$HzZc(2qO;1LS-2%Y}7Pl;6_8IJPrRAkL&EQ1QfN6Gc_sHYO*=b8N9T zAv9efAtB~J;_p^1(R3(feqko;EA$-;T%nq?xP1jZ!10?w;}4=Q0J>6X|JBj-?%^4} zyavm@jL*rV1tkb>{ioXAg+_4w#jeEbRaIdWmEY1lJw0nfnPrT)d3eHd``3`S6vAH_ zOB5xX1TU5NJF*=e9SIXD6XC5NDkt2oci!jokomCw{o`T5|6mBLp*iYPV|MBBhd6Ja(Fr%;l7uQ|E0JJOc&l0`z$BW&` z^i?~)d!rT;QRgboSK1u>%#7#&T&Z~&QOf#e@iB$bZx8ax$sjdSO-~a0CE-e5kmw80w;&tjV=SY3FzFprQNIe#IbSj^^ zpzSkEuV3q&{UcSz*q46TqUg;bV1VoZy(mNn*5Boe{ww}B5AXUCu)dw|F5fyDE6B@p z)X5Xz;n@K*6^jYI{P6*BDo2s)rEbkqi$pwaHjEKpMMU11Sy+U)F_o50;G;q&R$URE z`fTF=IyaW9CGm(k6VZZ+i!udb&J`tT0(#Jvbu}xI3`yE^kQ|m zDDuOHX{6aNhq_6#!fCnQ)54{gL%(#>Z`G7 z2ipss=6xCRIig*99z9an@4$?!y0cr_cQilz-ATI*jD#uRdW_~NQ)GFX27`4N2GkZ7 z@;ZXbr%tfp5WC?}=L-lyC8vmJVLgx(AU5$TN)kKna)qAWrp_A>ZZ=TW>h^Gqwr1QS zuZo&lY!SFx>EXjS%j@U5RP}WKdolKu9$q?8*)lgXoRv;pZR ztXvy2y3&{8zer3>Ea)`*h$rDg949+_JAhPdA|gZ1Q+ss6CHeUulad&?xVg(JNL;@G z3iEBbK=RV@u(Vos3ZCCpsxnl702XcdRP7gKdf>+>;r1PZow#08GrHl8UFR!lJg$57 zv-e9`*vU&vO5)n1IF+GLM7C-k&ou!f-pt2gWfMj4^IdVgdN(^``N}Iv%oiryr}zLS zP&N^eR?A1l^SdCH@dOynRYMgu;y=lX--DAh_%D`GY`up=8hNYo*RKhp@F<&JpHq6` z15SLZJ^5-tb$c8*yujAB5N(gXYk7RIlp1o4oCh8W~*ZgK+o@h?` z_koJ#$_ar?S4un`r@=X*zcg%HspX0K>O#YMZ3F%|(?tDVpVRRBvdu2B-0xcR@R*va zs$KWG$y9D}u^NYJ0-Hhv69pL6BSUBiWsWY4RZJ zmwv!6>IWnwv_L=tm}Fp)O@U5HY^Ok@WZvFQ##Z>qn?-$*HTjTh#OBmL9s{Np3Fx)w z4Ttm-|JXbsknuT*m0jPi3QyI#d8n2 zCQmlo8~OS9W#*mNoN5hZt49IJ3kaSka+|!oye#UT-Tu)|PbWY?lSOyHQ%r9b$IiXa zP4QBy=s2A58h1n4ZST)TD66Qb^aB1smGGY8cinTW=7eKF&n!!y&dy`M+1VGL?m1;x zp84r0b-Y*I*beA=a@NK0bAO=$S$nJf+_TKb?acvX?4qK>_T?O_V{*MdZQ+cppdp7h zS3k1={t1W~kGv@t0Dbs>RH=U_K>zbQ%TB-fqV<6Oo2p2q!e0*}b%16MyL zCh`C*;bLtqpvnQcY0tuX{RZV|t98)+z6WrXt{591Uzas?=K>(5mE`4pC^co2)*dh~{A+A~Di){d52NT?!ch+)`T~yjul05I4bZ7mw+-i`Z5)!VQEteHoXmh3sbV-dv-OimNjUleQE|?#saDa zxc@WJ@6J}o$%saY7hau?D79&2sK9)(!P7*-sYuDg$S8%4jZL_|3y}15K%n-wB-B}j zg@vP{eiG8SwQ@l~F>3n83jZ?QF8J4301>T#lq7zV0j+mnSWQN3lK|&bmp;h)`t|FG zt$E}7v|2co&F{Khh5`^3cMX)g&z=0BG)B^^SFe8m8cf~dwJ3nt&mgB2%#yczY}#u; zCf$=Pp;PhHy@mg=gmG^8iKSJ&BQT-@d(8O>6hBvPIR%V~1&MBLS|GAgt(% z%2=`_O|XfX^W6$D{vOUKp>OtL{2(XMJ`(sv#ovH2l@()ioiJwn58l_DYT~ zMMg)@BisPopaX?4f81ZAm551B=Ht;RCP$6jsp_)%&Dl9~?%`#C{l343`jt;#z6gjE zwLB)wQeMKg@LJq@y*Xg1CN=_qD5)QVJt>LXiUM4w42t(sR9B}0C(ck>TyV2(4W$J{ zUizAQYa0>FGV8?*%-w<4PZ=O7IO<$i%VR~k{~I0uiK5qQflv~1MAY}|DoY~b3Z)UC zQ-bsaDuH_TNpw?GQL%NS_mg-G)YJcVb-&z^HEbgu?O+bnQ@bXoY}+g^CLoc>&I+pm zGwk}r%iNJd^S^kzNfD)5Z-ZXko8*6mp#KC_V`(Qb&ZFQFTO?MW&;QSsI;I@+&01eLzY9NH6HM`||_VWy~+FHtN#qZ=;bs zfJPMtirr^V(1>M)IQEqHlc790I63Qiq-}a;pn!Dg>Eu)@v0oT~Yr*WJ9ejCC^cx)) zD7s=H&GSU?0xHzoJ3IL9e0B%G>DkGy^OJiocoeAv1s`Ygk?X&S-D!L$#cySu5X7Ix zT>J^gBS5+;B)jw3x&Ov*qGXdiFOZ|(MBIBtar!e< zfpk*|2oy+)kyG|Kw?>9%*TM!s14VGfzcvwDR*`AwLk4 z759sX*(CafRRY@N-#RIy$Nes72`Co|6o=#steM&sz~l)6#t4IJeEL^KWB;aje71H8 zB3GBw4gh$SF9+mb5edo8-^GGUmLdS7D|+1JclyLd)oDPyI7!I4czDR{6cURnttWb< zakgLO3W0*Rph@%F&wCRd`uchMU1C$w_7ioq*QU`d}6o9v|%G8y?6d;ln-{v20_Zpes~R#v+jzub+)W^_Hn~Ip8O!TU8bAMpJs3b zC)1DCo19Ep98!@q4 zv+~=_$hbK-d#!O8)|x6)a;$@PJM;j$)#ke;Hf(b(daV9Gl5NG4wDtHk0!q`Fe_Ey> zs@RAn?j`L&){wL9PHI+zWg~uOR_npudxDPO1?(oO_$7f`e6z0}+Q~chl}%Bl4Y+tB zQklK9r?Q`?vysoPu>&rkeB6zWRlQgAPC1p;|FMO)Xu;$yZvx^G(M7t%pB_bKlhUe@ z^l@+Tpl6e|TztirZuP-(*Pjq%TUXh)(UV;oWgDjAIv`#Oipn!~?oq{>%y9`6LfL|O z1f6u{7qeH``Ij{me@d%pG|D{U-;yzSfcprs@x@ChA`_RCd%F41a+UK0K3(PzQxRGT zniZGb$U_En>4>cHnnwCM!@>HyK4^E_R1zPja$%dI3NlrB?=9>41yu z#_*vwHUc^>tL!L#lB9E~rZ_Wul`8iMwm3FX*hM~o!N2vMUSIkrF>${^Gk? z&z*)lq2T%!Q0Etr(83S#db_n@S54EGMsx9{sETi^Z#HZq>j;J`Z~`%e@x`DNpXjp} z5^hnH?Qr(3sp6R3FYvFvP=$-wKhWNtF9FK*`1)wY;cp*_hs)pIYEa<;afh? zh@%aN^I<6QizC-a@w?#gF^B`LI|h>bQgPcHsoe8Jt+kR53ONjE{Qj{=rplhvK7O}u z)ktxuDsPhA`}mksM6v7eqwqXa{%B?MqQt>{T1OmOV}0`z*y&74a$3q`1bpfR_~+PlA*gv zyX~)Pk@o>AJBI<8f^g%b^!XH8HzZ8Q$ZH?L3weBW_UsJJ>5pHzvrMP5xu(_(x~E>$ z9sN;FY{UHF{eU0!t%k7daef^YL^pnMQqciD| zEisdluW>Z8tmpH)y-!I3v}b0_;P_2R9f@<#lf(PzAiI0%`-Y>*)gAeA>zG!X!Hm`3 zyWqO86xL+~$<;4G6NzpW%ToPTh0CTI3>-4GoQej9HU#)kg&cz2$uRfH21zC!p$Xwh z+{)M{6WLnbL5q6RwT6)=GU^Vv+LlN91GjC|#()Bb&h$10^nb&fx_ zL_Owe$5x9zcqz*$m1Q$oS8=6Zv7cXE2fJ`7hi+K=iR>2=E^!T3k%je?;8$8Q29eQu z(94f7d_smAv%K~F{Mt2eY-)7btdO%&;+k$jQlw#I?=AT{3rw`M)uFF%1%KPYN>rrp z{@ZBAg2*xMp3+Kh(8CC=Wlwnr5z1L`wH!l{9Z6D2^qZrH;#(Liad6Ht^#gkT^&Y5# z;_^pcu8D!0f>k{!{2!a&TxoRTVKn_V#Qv;qca{H>RJ~GfH3OPqufXM=hd!*sn!TH5 z^%$|9SLr(HE{E`~mC?iv;y*uy(TL9{HBBDQuzzl8K|h>E z!5x(Px?N*U1WX^Sjy$IMDQR{2XT^XLD7`mnbsT(;cx^4AZ}?kY6~B(%^3Y50c*>10#PHu#w4YEd>E(dU=)%-M_@$Q-OEmuJ`09W6)@*xL5i%f|a}2)i?AdQGXp zrk5TkKF!7S4bsuXC#5y_A)XhbTV;zXq!d83wI#67q?a$wa8VS9f6{Ejf~U}rhI!u&uOvBt4p*kG)u+-9KEz+(7^T{v_5^@8M{FL3a6nwMyL zf&8=eN{79jS;h&FOZA)O>gGM~uee`CI*#NBOiadgeCF}KaL$a!9JgktG3$s<6wMQG zQrt6k_;BoJno;$%N?<~Ooq06XeLPLApCD5b>33$yQ7xNM@_KRL{Fa4M6+6{_IilPO(pI%FX#Ydf|a$vuIK?F{arbKmh@i1h2Uzl1f= z#?+4FNnam^=;R*nJJRMChvji`N?e~;OgFFJS~)b{s6DO>(yBK`RoSd*#gu@<4@LtP^cG%Heu>1U5b16yxpc2-Pk^bIh$g+oR z-s$g@?@wVI1YeCWh+-qAdswYB0(~}KVmf90Qg6vkWgX@nszA^_GHbJu74`g4%tnm+ zdhT~f7N8@M-ZqtVoV8ys`v1ap`;>6;84qA`Eng-LfPf8PHZlfj1x$tnnzvC zP7`1i;)=9`U!sYiVNdfSSv=5+%Xps+s9M`YGuN!RF5M88@!l(xur$(mfoE2T4J&Qd z2D+C2cMXc1DBF7~CaT^z%0^O9%0V>mG+&i9C=xn?6`Ys=Yboz9f)3|%4v>E0em1`s}eSY zu{4;hmow+}+Cm-E^@I@d#V{hmTUL#7_ZWtegW^$+N%Js2wcI8<6{Hoc%jR3vo0_hV zJ_Q;%-<#SqTg1+5Z9*bQ5s48~_WiCalFMA)TA+FMYt-giHSWzswexRDSJ#h5kX;-C zgJw}YgC%q$5$rAS&x&V{$&woI)uP_li=AwSs}P0Rrgcs}%Y2U)#VeqJVwT0yRkT!{ zY0MV+nq)=HIoI+B2HzIgOcW%wCLF`fBx-qHzS~XMb5V3XoD@WdI++L@tPhI!PuzGV zQcSr}DM##9#D%95r+t^8(r>eUN!(rsla%IpTPIi57F=T&MEXfb7;O_*?2OM~es?TK zl}iP^30~B{;FTzPiAQSb_-P;pdw#@+UaO;xtg79q^8w63t`Qh%T*o<@_vAiF-Baw~ zlzW$JMrPp3Wyc==i^9_$pizRuC?HK0%8qqsR>|HIxXn zI9XzDFczvph<(FcUxk$t>3iOP)?ZQ;Mcj3EJ^L6kV`y`tukcxgpSCbQ_yA<<{%@^Y zUjltne#37Jfxd}91il)QBm`Y-UHqFJpGapC)OkFU>_LQ5z3yab+sl)-q!~fYN@$`o zC%wo7*V?3GCD3Cr^?>&ta(Nb5ge};x#)>L|zfaC%jIQmo{=fu2b|2*8O1kFR(%d@c z0u2*~=NEtIpObe!P9hz7wZ=QOj8cxo^sh}qz;qg_40R6ATV z^T&N5eufO;V>cjv!yCGh0H9(32K{Sl3*&S#9l19WH@s8Nnsc;I#4khqK3$ zVa}uHs-!MN1aELqh-4#Dgdu$%KXO(FBk!9-RX(LYg9HzBFk3GwUP;GreoMf%8AZ01| zW1527a=rUS>KG^ey3C8aU%s#Nnr2V=hJE~kz*Uk;33!7k8>cEVsttJ#>$-(}S&+t~ z`$9}h%6s4GsjiD=8pGs4qX%R1GP~zw?3!KIO@lPP=xh{jjOMQtTC~Iht%KScTCexc z8^0bNSl5BQ!9qKqmRisk_|9q7_+|)tTM>aq(V|5Cs zxGTH!p+>&}_;Zc=`~)Clr{#}a`iG`#8AlXjoY#R!^=0URQ=)ZZ#jDqZ$2(CXKPs`hG3jLGxGD#872t z5$)%0q-%QTx|C&fGhkX9aW~vOh6y()Fox`y!_*KT%yljS(n2$IvD@R;u19Ge{f7QOi z9Y86&6ArPDjh_|EYRw@+NNXR3gLJstCVf@aAmz$~RQD33XEg#9b9r)<9!Du$!jXV#%sTR>t+0I7wt`Aw;4y!7qOjU?`)qrm4m%35J9WyP=PGVp~Q51s9@(C z_hhE)z)o$U>zelw4fh=eLSVul+r^mC(w@Wvst|o#2>ppA}v<#!e{N&9S z-_P;EM~G?l$@f^up^!UIgQpIKW>=)-${w4KPALyk2CoRsaT{^cu&d&zqwcAAsnqDy zXsLrBt=^B!&0fHB>MY!z0cQch*X@<45zKVQ;H z%=2ODgE2ld0tB`7??7WL-LdjU^T0 zv@qfV9c<{I-wU%J^IK6{k27U1))e)d(hIcz`YLkYw_dMb!H974?irkSjVq0ya=LJ%r+~Dbo|ouzEaM*dBQLU$ zfpub{(^~7&Rx*qKJ80PcB-@00Oek%-HF<&KMBuV9I0E-ps}_1dMM2{WQ9ZZS%tijw zDx(}`IaxqV(EF5U7&V2L~6e3VPsZU(MS?MM3;@~bgV73;ex4jG`TF&EjA&5V6Rlg6ES1Wr- z?K6s3eLwW6|G~(5RvilCmQB;!%l@O{X{CFGWVe*vXZBy*o^wUHuoGGwX84UGnE1g=&)|To89d`!BAH$w)seW{g(p9luw| z-;X@kCD2bMSN&(HV5|gyyzhqIK(Bhah|Q<8+D}Smv6qD-LV1e*xiO~i=5zXvs(Xs+ z4+{KMLEWv~ts>q!`78Y!3DsEvh+MpZ0i~=9T&ckBV%O9Bk-a2x)F*fD=lPn?dv01n zCDj8qLlWtqKKt^HoaPPMIE8iP(QEsV9vnl|DI!>K&Q7c8LwC^(!EX1C*eY<)rKjnDocyh~ZHm%Cam}yjA4WC0b*Vw(YF> zRYr~rPm$KWlC*a!5)%e9p|rCuJ0#cEKkN@l&7&BVvwB~Iw)zqXPsWW_(`pH>!sz!? z%{N`Ccq8{il?i0!?HK>*G%0&eXftQrst$IghBD?4=EcY z!PbTL)`<55YLI8x@AX4cWt*y_@F8x76t;ZRYwr#(UuY}67AGx-NZbreXfnIJt8H2o zcPQ=Zs|N6>`$n8+9U2Y0*9JMvtbL|nr3(H6W-e>YsnMtx{NPn!^@e;CjY2C zY!Ek0eFBtCSL^j%SS*XVbfs26PmeU)eK)}3iOgot4XCJLj^-((IxFrYO}E%4hQM{v z$sd}$bOqXnIsuw(xPbnbV_|SuZXwaaIvVO}0!IcmrXYl1qrB ztgaOkYa$M3XaB-pJmS%AT<``S8Sl zVAXt739B(>L!m;WwJhqSG6NB_1cqE#nFZyusJ&SIpma#oIV~_dJLgd2BCz$*Dl)_H z`9=$uV?ItCbYmFh;x*g~?eN|hG15uh%7?GSoekHI&=Hy8U8P!fc8tY{@`L;k#-o=< z2|1&jEjwgqKTY}E1gA(_jk-=WwJX^?*r<<+LnK$J-$7fW4wy)+-?TeJ-UM4LLqYjd z#oXRwkcn(-*K{p#m>vE&Cqcp(qM=m4`}k>_$MR%t6fVsI$a@nP_3PPHl;YMIJF}lx zx_U^?q}bAWn+95!JlTdGs(0dGZcQ~Q{NldjYxnEwGmnGgzWBn84y|^GhwzS3bA0B=l^C+s$auF6J*xJ?E(xS7Uw3WPG+B79;IdxC zo@y6`CS%}`I|w&r76$HNf1#uokW_#%GSw;c;mnSDrHLGJwArl8nMhq*=OW3s%D~@_ z9*9>@^oARtWG1B$r0QDvJ(c$nJVyQf1Ne2tF+X4%PtpyOpE+K%Ya_0QKfZ-&4ehyr zDj|ul8$kdCH1pBPyO0G`4rU|ads^1j(TAVq{sGFyj)A` zjrP#;C}4McpPRfm^NFP6Cn^AJMRkt*kmfmW+ojK8X`gfD6VOj~Yfh=)pV?%^#Sv|W zY5*wzDDqdGF1h=|`$Yjv+Q8#S20LhIuX}Vm`7Ad}?SLdpK05D$J{htA*1d4;*-g1= zl;|TEk=t3VruFeJh8hWt3f7f((qW_w^i#?j=M8u!gvi-FEBz&i_sH9ZM3KyDe&P^` z)g`0tiF}u=`jv1)@H%(3X<61QT>Qb^J4ho18NI2D$)=WjKQKL_0 zHT3GbheCIXhAc-6G+!o_ZA&Wf36fRs%8iNA#;LrXnZW~CMlIgrF*EYe^ZTjr9CikO zBPPr0PW>=K$|se=E*O$Z=ijtv;)Z9My()~gUn*-H9xJ&(extu#+;YMWM`7OV{z%Wvqk&WS;i*_Yj=c_*~YcbsV~WvY;py~XJ3 zQTJ8LT#7+a@7BwcAI-08668#hk_OtHRD`8Un%KWUbZopY3sY4HA>3hOHsixMeX18@ zAZ|AuTZ9rZB^rf2r(xzyO&@uB-B&iI+1 z)MP z3uVhQa?aYyKCstouZ=l6(uvt~rW6!mS9a5QW+zZ?>jPl5qH?N)wlI~b^{M<1bE4_T zt#{JobhVP@QVAMEF;NKZp>e8Dd+O9z=0vJ$p|*3-Hg0;$EysL=`gO1gEy6v> z!dPoYkJ#27y}Kg`-d6|pH9T2KJa+?hb_Mxv)`6J~P{YuxQJT{lRC*G`GTF*yW}%v( zeB)B87Hc#{9HH!1^m*U8&udYn7zC=T9?_zUO3NGzkOT1Kd*Aii&m%`vP<(zhd z4rzS;eDKgn)oLQ_wY1YQRn~)mzQ)fW-@Pz*t|8jmi2_ zC0gsjWN~x70J(#&Ks3*Q`RtDkMFR}$XgsbG^N7~9$U%2kj_cLFNO0%@va>g33%K@u z?JIy{JuU-7OZJJ&S=S>fl*R#GxJNW>>@X{@(@cq^cm7p$oo&9*!|>FnCgGF4)BuQGdT<0;955#PI5*}&cydDavG*SP9FFwt) zXr8cfR>LaBa5IpL{rgIDl?fOCTWN+d)%!U~Q7*Y%J$LyrFPCG4y72?c>oyE#&jl(z zm^%Vn;todxZ%MpVY>US`cW1De`7DytZr)O_8Ra)ynYzViDTz$as1 zd#Yx=XPezvUld7673ya-?`RJ-RH9$>YmFEZN9;9JWZf++DBASSGiG~AgO-5aovQOH z8#5|#WL)z^E;Mo(L!N_1M@!CfI2c53&wcCH;VH{wY8#ejS;$pA4m!R8!V6SA>`ukn zS{&(6m0NedL6;A>weA%ets;9JAbD7t#OHOB2t)IiJ))!B-wW2;a0KseVAE*3hd}?-(c* ziKr!_Q}jj=w#TaQ8=FPGU;Wg!OQNI!Xmz6`^5xjA?^_ED!ZPf}`HGCLDcW+!)use- z>qtcbr-aa(D>&~a!)oR976CpsN<$VrE^tSOrTMZjvNbGs8-b6fa`geOx^8uMyhxdl zoGfO^4^Xkz%{&Nh{nGYOaFwhJGOJT-VNIFQe-TKPn&zeA#NQs#`3LQNc>!Ye8l@0? zn)EQ$5Y&Xd&_Bw`K<93r@pWAaIQacyO+f;QvtW(7$5LCMatS1LB=8JSu6st~TwvFd z5$5*@XOp3{>eVeZiFg73NlnQBV{rHMc^j(5x|GJ`7S7G)<4;PGn-{qD2JS^X`SfhU z-khvCC+Ln()?u-$t$RO>@Qrlr1(!;?0A6|3#U$imaR;BirZbHczz9-)d{Y0UQ) zr2lnt<58)_bcxcffnx!x zuG+gi>!=FHo>QRSu`x4P!7Y#kmF9#&u<)Up@~AK;Fm|;S2gliAF1LF-ree%OIdCDb z5CY(0=9zC1{B}Bx{3lG^po|}Rxjn;Yu9kRowIa9OpNG!yF4|)qY zZ9>Y(wVU=tf}75`2J~pvcFF-D0PYQ#O#)=P0-F;N>tLj@0SC~Gx_ z6yb`Dfs zg(FcM0~m-y>P=$6$sL-EC+e}VMjjQyZm-u*rqzKgUUk(vE`ExiE^}ar!M(6xN2m@b zC8&`!jr0XG>7pbkdvygV%!(ZxMV{ld^nD>UVqAC+>aGS}jS=wC5Aqj^Ld9 zNUcp%2{-wspBQ{;ES*lO!oAzC^SOV$SH0R9HFs}#I7<5xviMu&ioRCkLHL>%`=;{9 zfCJhXA0IU2W;|kxtO+6%v<9=vm&t?VW$f+-&bAuzQ*XSFYe$gg4gDml+TW{uAY_47!CN?K%jku!`blwP zgtu9;Pvx8{A)J1)mZz6esjQL18kaSryr5CK^@M@*tbOe$tKjQ$4}UspY!qOY`Xh4aUZFr1S1=>udMim~bf{s(>yDi+p}# z!w9Ovk|4H8URrzQ0ZnGB1H$a-i|StX3~=cEvYkKpC51 zbhUL@@xWISuy!HM@`c_4fq3kIRPFRjuBxM4||6)<&Jl z%?eT)i7-X1{Wa5u_8Vl|-kp`mL+QL)*8{iwt2FWI8NCsnmP3$X>d4u^e3Iu_C8Y_I zgO#BJ(U?A5yL($`T$JZ<>aCAPD?*YA{X->|6-K?16&u#MTkLlgXAy6g3JLsIipCm6 zX<-w@UGl^mh}cMOk^Tbf`N2|WE?;>6aWVD7-Xq(Y+_L4;D~;-@TdH?h6{Nnt9Phy& z`oNQl9FFSy7v5845EUAIs#dgFxh`&#iGE zi?K1<{z%FzAbKtquRnw{b1)&li!!otjj+`Cgn~49i5r7a9wlL6ap#KOR{HxxDRcLH z@?d3gIL!EdPRJqq+mEBkS<`5&8IrUh_1*waNA-(dgGPs%H%VXTB=WsR^IJ927j(Dn zEIs<}(N6ocGmUOKrkfaE6oAtZ{F57IUu}>qe*c1h7$myYB$3})(sw7!5Uy&s-ItM4 zCWJgP%Eq!XEENHL4A@ci=04oZ!?nn@#z~gL2#QbkR|3dL5)@|S7otz~^Qu4fbD96H zpYu*LJWeTjm_B(Ykob||aU%C-UH6NkDqZ3lXkqj4icWw($;h`nLSOwC?)H5Bkk0rb zm>brGx##ZM!eqyBYCMw=o41Oa5K(%H8yc7P#*F**2Xn=lwJbIU=cd(KkETa{zD9nuo(u>?O37o!b1V;YC*NaY+-5A?b=?w#*A7D%M)9T4 zl`}mlmyB~AY#GMCOrWyAF6y>!!k~ZPT(kma;W2Owx^n5mUOshaT8=|;5NZ4v;eC^( zB6G&WrdZH>dYqL^VCBJ+_v(u=Pm?ylkq1%G~w8o^@Nskw`1nz*)Y|rygf$ zM?DZ!N`aFOkg&8LOMV>?7WF!*Rlg}5>Hwk6+|5>-Q#RZU*Q|EO<7zSGVemj+@eN27K!cAz$(GQ;!s)KD@*YXj6NDMf1P z8L)r<|1tKKL2b6}*6`h8rBEpDQrz9WC3tZ!ZpGcb6e#Xi+>1LTNC>641gE&Wrf6`! zJoo)P`+fK9neW{*=VT`Nksrx*9l!cWXzixh*a~He6jE2^X3cSyHQB z+OV`{>+3U_1ZmLiFp34Q_j@X&p016gK8Yhe^?SVv6p*x8RoCVNJ#2F2C|7#~yS0`C z-l@MOfEuyTJ;bMy3m!Z99ANwr*7^p|O_APj<+eG(x8w8pwP^)slpEyFJj~Yhb^iX; za@$*tAl1xnv1jYJ1OG;pCzB6nOGd1I%|PDiz68F(s46}%b135~Jta5vZvb{XL52Kx z-ryeT5g=M0@{)(juJpLJh+ezP?BYJfXUX^^2k!%$d#*Yq1kUDi{9@Q2akPXvMVnkcJh7zB#dv~d& z5HM8QEusMPqIk9unk2?CTf?JwpIdS(Q;p2E%}gjXtB!*{Den)h8F5&v+QV~%T(1<9 zjHOZKWuvnu%zbj8&j0~&GhRq%_onHdtXdd^Zj8QhbyFrj6;2zSZ zu6+K(L4ZTD|C}w}pEopA+cJDJhqXYimR0eq$H55L}A~%onvBOA3)ZEba0H@9ht`wg0Fg;p1GX?6)XfxUEziw{S{# zrl@>hX6)LQ3e%Yz+TMUj#;Uam6YzmZMLr3M3EP8bD1DXf?5ejc?&@gf6Y{AgE-Lfm z*7#>Di#lFUp?wxlE|af&F8dI_@G-~6q2~aytoYu&r%r8u>thEULd(3}=u6mVsnp+0 z;uhtKRK^8-JzGIn>YBh%#}7)~yw$KfJ9_K4hM_(2u!I{EUA^kxc>So?s_y7LWiEfZo|H4x1Z;dayQB;BG+IzFlw&DbYINFRC>y_ja#S7o zbB;dO`Ix$F75M7rjbd6i_M_Te#d_5}PDMf6=bHc`-{8BsbZ=yFm$Iv#ryQ+Uey3MF zJWYV}Ac$Ngdu=x5Pp``Fc^=phs5$`#pg>ji;^H`Rw-*t+UBVZK1WFb)1HCChH>Z~?31V^*j-oj4S2#}< zQksrb^_Eq&$XHq>hA0fN-`PkkF??L(RTqJ)brGIr`re3}8GbW#*9GoN{xCZ#XfI1J zC_BMDC8e_%xWY0wv`@kRMZkv;S+dFv`4Tv-S&=xwzjaAtX64^GM1Y&9*PS!N019O4 zjP%Y1v2U&fGel=({IVALhD9Td36p{JM%sLEn!uJv(af$l&?J+oxs3%Iu zs@RPe8FU_A3K3t7j>j9$NQu4O7a2JMvr72DtYwNSw&7?{s=cG$wA*^iH*;TSROV{3 zd&{C{QVmoUUvV%wV7|!q9tp0fv~l2#$E!1DdF<${svTk(u`fz6>s)CMJ=(6Ka6WW) z%$w~E;l?P@P3Tw7S-!FmcAU$4?|x*G<)Uy7ch2C=?{dJyg)s~T-YHmh55&Ftrh8g& zJ4@sLTUhsV-BOn#vb;Wgzo+Rz~&@+uY)mIw=|L z!%rE(w0qS~C3o-?yAGSCc5fp66>r0-275_iZ?|A6PSUl*e1!pb%>nWP2J*Cp2b%ET zc69v}(>HcvWF5MBLuv>uYApE&yBFOm?z4UiEmA0b61*ly#(tjPKKfBF8TI)UE3Ys9 zKv}CyMXOCFtNp!M*^RarAc_W2>t3?g`UC6$g5!{(+H6Y{Q^30vZBYX8FBF%;!f{BQ zq%E4JTB5C6(kLGgWQJvhSi?&3pGUam9#4$I%To&R_qyzSC-{CdJxOTI-Drz@Z8#$9%ukQp}V$r<`XTCv%LlRl~M1NQA4dmf`VV$ zirp+WlBAqElEO&5I3T;^#>h*$a9?Y};r@JK<@%}G@T=`N<7Yew-Q%H4hL)%EZK3na zh#qD@pB)17a3vA`+s-J&24Rmu*;b|Szd%-VUOM|pjVu@FA(SGzcGX|47gd-+BLpdR z7bmA4Vr$<*IGbM&SDH7zo@EFFY2~mI+L(EUFbhPB?n=yDfg`d3?3wr=0eR|C%HZ-8*jd?}=`k z1**RWMb4m$%b81=nK-NS%@fHM`Hrv5-%gq5oX?GIC6tI+;u}YV++r!|CoOlxDHA~H zzrvE{)b~!oVRq*5I?wf=S>ZHWaxzO8r87~xH0%jRU*AjPb?PexZ8YExFS{3Su9T^3 z`s1QY+(SO5QtwCI=$<(7d5!-%$igkPbh28mff>;NqcMr^j-`i`5hkLJXUnnIOA!(tnJ0UmZ-2 z)+O{M?DSfk6>e7aU4s#8eTMngiRpcDhPs`2{_faS*I7?Tpx-3;{%1I`glm0u>B1?6 zZ+=l*k*esXSzO6y>a6_v3-r~=!SV%3iUiltsY@OZ&aZlhMchrp1Yg_@ugd-58u~2w zTl7=ih57Aw^GoM>vk$vK=0IbKA0OYy1`0Z+MD9{W*830Qda;`c+_}>XlCR<%)cAtN zR~}t9ySjd=m$ErVEvNrs*?NCv`|uLBYy+C-yP$S~W!N0Q}EXb2DO^Bsg>5DC1)?eeZ&HLS5mf*WDT@L@}k;db^XLX|;M zeYZKn`tfON&tf;AWtSLD*p0xq-}ocHUhNfa|G7<^;jk#)PV<~^Q%oA8(toBo_BD+& ze=jFBdb;)j2Z}U`CoW^_|CHcOiP3B<$S@vjljoZc_NA?>0bKl{A>51HA6>$Sin_xZ z9qFWAA`V6JUoscJj|8H3YX*L^TSxCYX?@xwMtrm}Y^d-BS^ob%1-y8F2!H*eDI^Q+ zfpPYShWweD5}3D+xrUWoL+g-uiP< z8vsJ|u0xU8Qf~HVMuc&(Q}-8eY&qVB5ljG>YZG)M-i8LRJndeUPtGnW+;wT)#4*@_ z{IO)8n-3&&^(7a*Li65Qw}x#Vaf19uD!uZUGtB1sb*UFtGhl(v>_3xeD}@3=!X%Uu z47!un3Dzz@sR|J!jY8}tXO#v73?G)asv=zcAQggDDcp*+0EbxvzO!84!XeK-k z6QKS(YMgRGNOggxKBNBdBdpC)PI`70`WYeXVjC4?LdnGQf7c0HxY1cv08gV9`5uDZ zxg8G^UEDoATbA%4zx=CI02jB1uUa4@V|}A!-wIsEb*g;|6f-kcf-8~fag%(?XlPv5 zv+!dBTxn2IX@v(^Z4Ue6j3lQ6lrJvuJ4(%>EVkjWwfKz^79KCHU|$(jZ;PXp25!y% z$j37WlLWx!gMiB=ZFs%CHSPlta6yU#)z$`CeL7-)O(jMhLyC`q(-`dcLSyX)aQiLH zLBE8HqglR?a4Fs4eP3Bwv7JTzk|a{`)41OD%|PO3%I5F`EhCXoH+qE7$LBo5BWiBf zT&m~Aaa#Emx)X*J9rOS%PQKF%`9~~lkNJ-Q|Iw?W+sPt!y=R|e=aU@9AMfr%ujZc^ zXMHd+X4_FH_LE|BQ1%L`>#%WE^8qUga(RstoZ{TwH|*%`5`1P(Yh>-KC}wAsm1&MZQO# z0*E_iag@$0<1WZj;~tCn$i=GmpF8<~UMDiq_rnAY=wi*(bm@|0^L4-yqKS*jrqgK= zm#m4rG)QQYek5h7lbU!*L1&tSEvuT&H)p9>q6Id_4C+2d`073e#(YGp7KFdxeN-;n zUp`?0?q-Q4?s0S8l6WL&RAP@n+iQ6bcr_=((YKG}SB)Mq8^$F{`;=$7XT9>;Y#nH_9XS7&29AuQ~ZJgGyFEuLCqIfGNwdRgAJzWVITz1 zRY>ZEMPsKItF%ec)3jL(a05$JD#LN(G4Qj`!MC+yYiL8ZMoUatti)cuJ){ckiVks3 zW;=4(^|#Eh$N?mox8#`=0Yd;7H_)c3v z^fgMKR*n-~LiTH2(f4>+a)zvZMqTAM{NdZjhv^+&uj&WkS^$a z&T=yYAylH56}|o8`2}}?52hPmF0$IE<#RkKe~b^$DrNx(Przc$fz8CMK{w&;U36xL z6hx+rKEW7|83!eDj3!4fDJ(jIe%xm5qQ#Zh5kSXb5eFC$iq|4t?h7KR)p1+i#tE3Q z_bsuWlKi(l?g5cD67K;QanTPaXN04ySB>~HH5zids%e5~ADdRmsf%uR!?ROkG#lv` zy~nJx>mLc=ZqqQxUz+{MpIo$Pdh6hkZ=D4-Z^d`X4Sl^KK$Q)fg;h_`@PVrp)?L1K z_)1;5{>_iw=s&@E*AfS=j#yJMEclZvJvEJeo{vJ!t8^22v|0K6*JZy=VR9Ql6rcvz zp*P+nHHMlO6H!4}_+kHJa8GnNS`ly5f@-Su-~?F&EvKj-vuJZ5LgL*n{I#gf&rIWs z8P)hLbt1z6FAeyLJo{nW=KB)?>t||@pGb&gXIj=U{Lhuj&Hg*tts!iMHs-pX_;GQ6 z!KgV{S$mEbnhfeDIC6MpE`Ub?(YuZVS@cPNp(p;|N6PwL0p6-Z5?6cYy^f;C21}Y6 zV?_r6^zZFrB_omVVE4vj+bBM5ZNQr$_`X>S|gnp@xpgb`HEXO5s zqRp*fUgP9njMJG5aRN_VH^hTRWiE~viPRdZdTV9(MVVnZ+i?eRnmkWlpSD!b6iBY{ zzwH`0eC)qOl%x*KlZJ~vkLH(>Hw+T@M=UZYzhWFbETH)z&y+Ezl1HO|UFNw<-sva2 zJSsk*EfCZ|iu6!1#coRvOp@K1nfdiL89aaE`j+S#OoQRS zOc)d1Utjs<5AiHec{l2sbW%+C83&UrEo@4cu-*NS;M&l~zTztKxyY0}8aI^R0d?}9 zm9H4j8sB|)?P=RU&NHu~JIW6~h>6j!c5HXEg=obelj~B-iF_$aArr^r>aH8Z9dvbR`r_r(Y@j|+InOCq1mf6cq z1AeN}A(>p};GDpMcG?RHY>K{+4(5M@;-pDA&0%9w%9mtONU-SUj_=H?(jzgs0vW_+0VNnw( z%UldD2+yj`JpWT}mGQ9ulP~`+Y5(>1@0&WIa5$4E*l-b;_K`?FQ^XGa+x8NJ;fdqZoMXcVg1=mv$OUCzEy&9Fg~6SNQK7E3_Gp7Y>RJH!}qRblFYB z`a7J(S|mG5guWdXb0Zioh6Hh~OX0*GTiA5JybNM?-;EDTQ$68+2 z(Y@h7RhUz_Z&Wi6Yf<~a%eZ(^55M8gMWT}49J^ODfE{=K^a35TPEOR~^FGlOOU?#gYzK?-904N1?bA8CyVY?L?gY?LlR9&-y@eGu7!`PzJ2$dB6t z#It>+8CW*}&+yT)s=+{fv&#(imk zpK6;CVc>(;Yd1xS-u8in*1e21v}qU_v-%3Zd&b}p@1xtf-|<7t2sU}}Db4D$M(=%I z7I<55%|$;pIipg65yR@o;D<~Pqm{1*Qj=m61KoS02SwNotEFovuCT!Tg+P3A0XfNm zVXAaiLcUh)nmliO({mrzL&)tW!3z2N$(*9LdmH;z_2^yb)im2pVm+DM;2sY8;;o9gIgN49t<}R>La;+imP)<^g--8r3S;L}v61B&;hg)JFdCuz z9^%pI6!KIg;2p?pd~`IZj){)0N9+yJsWSZZiL_e&&u?PEN4@HyJVg#-%}UKcT9MuLvwxI@f4KvP!++nh&j1@+S#+T){C$RoN09DG6S(isYuX5 z_P4#L=B@PC+Mnv{xRr?pmkc1+W$FM~;7HTdu}O;>p+otzXtTJ^$D>_l1@DoIu9Nja zDwtPV^rI&brtlp97y-X&+Cvs?d35|_jkvRfQ0!`brlRI{)#K}MNbbuzchOWSfiU~p zQL}@rHV!@kzJp`eNgnt09(kr9wYJ2c3z#cj=aGH#b%p_`fQu8RpcCO8bMovAr)p27 z6+einv|LPv(Ss&4{w8{^y#!o_6Q?~^91Sn$Y za?)IX&lNbH81cbBk>dpcMP7K!I>rfA;6m*s2BL#GbywX9p_d(;KU29El1%wuy2-y1 z_-M^SNm^?EZc=PAeJ7V)&>_Jy%G)SJ%5q=J!MGJQ?LIeL2(%SD#bJJohV9^%fOV4a zI``|>HI?3p-f4~9cjZqz!fm=#mSu`srpo?~NlW?`1+R~sSE7r#H)1I&7;-{cWttP7 z_ASRJT3;KNTR6;(^O;OPRBw877(^tua6JF6ii5Df*oQUIXrMg{Sh`@#x;I`2YDSpu zg55*Q_~2b>EbYdj8h{ds_$={mwpfJW9$|=>Dy3xJM_yj8+o6X2Hfz?W^Di`0pizYs zdOufHD6tawTui??IR-CzPP7tSavB0rNxZjB*?Y94%Zk`ldNXG#l53Oab0R#rdXI7) zy!~c@a_!D_9zvT1^E;$Cj zQ<=zn-f=d)`o9ofk@lZCa<|-+QuBq~KUeYhNB`C3aWI9|@uzV1Czr+FSsT&0{?`d1 zWc*itsY=L`m5CD3;0EBHithzo#$f*CXyU}Nboy5RHdr8{HfFV6M!sg97$3^2 z!_lj&{n~b#a0#H%RhS8OWc*XwC(}uVV1TG%)8GMPuOi zDU!A96@6XtWwCc|1P$=SeskoWZulAe7k>*!qZ;6}L3HRg!F0ZS^$AZ7sDOWE?umaT zb-Ab2b1yh9dhWBfR6iyw>S=KX4KZmT+{&v4Le5cYg-Jm zUPax~gy>ybP}4El@3y}ksf03py5-S&XMDUTJu(`C-NRVqYjmuHb^MJq*x*W0a^6+O z-Q=3?rc$urJ@)|ZSoxaMc#X~XyclIVmOGcIXyXHZMmd>1iH9e1^7$swcH)yDP&JvA z*?6mz2vn$r&M$iRQwarKh^z)iRLa#w(EQ!6!vN(9*g?yP1Er68Ok&q(ACrz2Qno>zJ*#jiSq@7SHj5uIR!g)vWI! zxSWVsehC4RUMS;0Sp^^wj!FrlWH>GCG!=ux(lsqS>QuRxHX}*bR(|~!GW%m(>B`C% zO~bknbm~w0KvuFlm7hNuf0$bWBOlHuTZBFIFJ(V-;mqL;!&}}TJv#d@ zyC*{A>W@_8cTgv7i$**KYvp3-?XE1MZFby@Hi>UVd*lYhY1GkR_RvQ=cw4+?2O%`n zUBPOS&>_h1%-c3bpDQx18n20212h-SG40@O*gpF04at ze;iD!OISZhlOYI^Y8iMLap^0(pOX14WN%L-PrR(bf12^;zDfJgm$m3RL)e|9snj6||;!6C-Ic+|^t+b{Fk5QNQn+ z_aqZVcCL`L_It$-XfyEDs?X%DstId4oiS)09VBRK1YgApZFx(DP)`_ z%2FjAzlrN=WV41CM2!3R%Ze=(2^;&F2UY&3{&Jk5>FE6|kgMWxnO zWfLg)%@3aDZ81~V#Msmu(kxb$nBV8cmIL8Jo>m-lM~4n3WlD3ui`r@>%=kK!*f@o% zC5xi@C{%1g1X*okD!Lt8f{p8YTP~>T2G_)PnZkcQM(#%O=)kTMmwLwE?gZ>un+wP- zf;|F{j=X8dM4m+ADJo)UoM4J!XE2HI<@b$s2O|>~P>9yq$!x^6&mToR<3xNW1X3!) z{{f@)VeieN?4+SgV=+a73Ev$0XTp#W)sGnH4LAUmbc-Fhq^@EKu=fXE+KET|D^Lhi zukqJh?G7PJ`KXc{$_PG6JAd-IeXGeY$Tj%sq2YJ5`FoVV6mfde?o4gog?uI_=4rf_ znG5#n{qr`zod@Qp_-jU#<7e}kI?j10$$r0OxpDX9k67gke&{%hab{Ua^-0EKC`Pn* z-KPYKIw4D#>C&Z1bF*m~A{Z5TyJqZD@y@O1ijgX62Cr)vy?!0(DFbgPqJZKoXuhbfc# zNuKv(O~|iyCVBSJ?ypT7sJ)5u5viy#pls|ni71g(N^5w^h}>R&QT|vZx9!L}d~_9) zq~0DK{Y;);-36Y! zb1>-SQ1`lD@gef_ku6r0sk2q$DyWmoq#?1V&BBN=`?Wb}Le-Z+P-(M`dR`V)@8k|z zBz~|NaIMEazI<{fF_EdOAbK^w#nmwHUp+rnmJ8w_ZOi327e(s)%+~*<`louXnnQ-~ zx)I3{+RTThAt9Ap5Iymya-4vrLYq9ELuO10ov@;{s{4su{O(VJb*(^cxAOTfMO_@a z98BnGNn%)?cU1jJ;`D{mm2ndvsFicuZ;Qu>h{xZ3da+>B0PT@ajNBdWL#vc+BM0>t zauoRvf4Ao5t3&SN6fewC>N#&72-x9VGp$YXxX!7{mJE12{m>Qby>s&JP~vK5Ip!he zVo{b4#yXyAOUpmLM2#dWR>MFFQ3Bm!qYzdh6M<|Awe`mV&+byYrJS9+^v^H9V+KCP z<*B=}@l zW2A_vFR1LXn=U5#ik8_JpJ%=L6|By({pwXSW5ZKkjZkIs7wMPv-d%cK9goRPX85)< z0r3RS#wE1r=#vs+PzVkM!iC6t~K2tmdVBprl-|Cny#`{ zaZ*i40~ssjgi=Kz%b*yKKB28%LPhQf-PgNMSFLZ1wi-5wevGHd;IBE`Pa5)OgzYLp zAMrnCwC>@7FTUJCFF#)x`UFt1C)=DQR2BDu>?a@g5Vg)_*?>!=NLu8@)0za+bIq~^ zbIAU42r{~S;#rOm9}=WUx?BhHhUTaHukVK(bXg-yG(o-`UeEP<=|BC0KMv5*X8F52 zoa!TbIQqe(|03tiU#amWyq~H>L!=It)yPriEV=b{tp9oE&=~$M+G-)&o~c2Xwbn{0 zs0#QxzSB2dMVe7Kxo)dMm+8R^b7^QMFEn_M)O0H%IVeU&sjGez{noTgFRvp~nwiT< zSyi_WB#NGYKq|4{9@+n_f1i$@VcbR>fnB-11i{5b0X(zZYp3QlrR^+!==3V5jlt!0=(Blqjj>f`?PSw{BUYoUo>g`r(_M$bR zL&bT0^$#mFJ{(>d!O09!YLY~GI8bgWy=Cl3Qy(d2V$?ply2xFP-(1Wix{c(bl8fuc z*8TxPV~2?JwB8Ef42v$8lma{kJNmvP=$QFx>#=&3r@lgKw>}@0`~f?92HY=gr;;Co z)5K`DX3#hfAh9BmC%eZ-ebaIZLK$Y7RPe>62*gx7KUbZ2%d3xEwa;SWKLVLFJnqlB zPUA4rST(PJzfk2~Xu)dt?Q5yg@NXM)H~YHsvze7^-N19cEHl4md&B?fJ0R7hJiUFo zwm-6pqno+z{#Q~y$cECeT!X>A;E?iS?}`{#i4t&fwi{)lBdR&T_Wp2nKy24apD2YN zU7;mg-2|p>yw3hcxV=vi$W`ro6bdyF{QZDY``UY}iQoAX)b$y8Z>af4d|kPr`27Ur zc`fn2OSbeG0AR1Y` zL#B=H=0aD3WkG@-18KgwILC}#6f9v&$6JG3?=CDwJmxM!{^-G_sEjw=v1DUcdsX%p z9)Ubm$?|;_eK$(vjRD`geymQ0Ghb`&5tuIa-d!_hWpgaohkHQDCl;+=DvX*CW4B#Rc$*JnZ-z| zf~BXO@(PVhRkcQs^dho>+FuRm*7;zIPIY=WRJ*q+AdbVjrp;^MAXI1OCXv%qF>Gwj z|5dJ=5vWA#p{l#ei3Wc>X%JrFNyE*lrZlQRw0T?@byKNFv9T6^n)i8b?)gMq#iA9t z?q5O}ksI2GIfZSPtH*;+Xe;0%T&U~Y(mJs)zq&pOoi07+kO_sMAVRZ^--|Vgf?5Hk z0n*{%ns<9{1&59^tbH(m<=}_B5aFLs{Ebq(1vI!7scC%sUYF&82D?&MV1m4ahcwSe zX(HdXpfNq7BY^4LOLMGm1I=)9k{o+Pzcda}T2-9H6E*R}FEc;1qb?*JGR7G1I{~BiA9Omt+K~p z9|vZ@oT3`rmDzhjhPQ0Ebsqj;Tz!{& ziTdnD`dZpzvc?p4{^4b{>`%Uw6}s2(x*w*kVlJJ1=1n#$_4>razj103wn$;^FBhVDlB&~LWOg+2U(;CPY4A{oAUdF(7~(Yu7eiJPa0<@maIOnS%31OEIZCD)K&8GCrS zqpPsycy-(%)jlZccrYKVb(-K^(xo*Yfak_l4tsZemr^8m@{~GC%KH3`08San_OXo! zJfJxuMi1K`38Xn41Di#X*QUO@&o8GvmNO}zhr{ce@{ffX zCpCAmUYei_V-jh^*=wWpg^2U%A*%soGm0Lo$ES zDvIXMF@N=21fTg7n^oB#AL<%J72DpxNqW*%Ku1@s`ivjY=#pX`jAbH%;(I=4c-16B zhzu4&2?RO*x+}A@ND_&kfADa30R+YqhcZN|3uev&QP`&g{zvmR(T?olW+nA>bjlu2sx_JZ%5#Url3pR_ zR|zPhL8=|5tu7jh8JIxpI2IYz{^Jry&WgX7v-00GtjUXHzB-n z@ikR0Y$W7CFm>|zs&vO(t8$>lxkL*YeV0ir>MV-Wz=_RZy!+~A18t!>f(#{7=d#av zcIX=pr{S*ZvydU&=&5z9h6}}Q;EqC@>pTvArD;0f-mQi|*rFt%d%&CR4Qkj%0V^c| zQO!@zCI#}VZtLyoG+Np6QJ{qrWe9T5)7-3l`U7^?Gcwk(y4(h~cDDts7*z${!Qt_! zG~>%ECD)v!`(D4T_l;ih4z`mIUN}&>XiN5_c5yoU=cO02$M!grhM>Wr_c9G6dCo}a zDn$?D7;1QP?gfI4wLZP?s*p@Z()xY4f}i7E1J#TW(hO*zW1 zR}P>h)C|0nL7tb=w;k-L!zNV)uy+ahlFCbxq1-;wWv0Tv$h)#I>kel>ZQERyv;8tT ztx*%`rkeDzix-%xldQB0;sHutVO*JD@8#0Ums|n!zRxPaqp}gAN8ZHTVDdD3=sAW*#%`YGrEPEP6x*FVSb%CP;&i~z zO6zw0B@zkMnT#H2Ks(@<4|TFvy1G7O6j?H)-){DM+Vs<_ewv$LnDaSn_oKyyNMTa* zy`%&Q(J)!7K=yDu<=4jYW#T7;BtJaXhF$-BrlW5c_hxrror@zr8%rhd`ELF6$yvRm zlD@1k2x5Xz!<)`$g`z+ap3-lyLmMu=G+6r%6 znzYR6;6i!UJART4?_D?lzA}{{ieJ>$!eu`7-L6_w)(%wq_zrcv;Ou)M_V}3u$kbgK=2;t!4(@PSURScww) z(JlyZgJW`o1I2+- zCrK}GOYeiCrYJJi26X7fW6tA~GpJ-jK{(|4dNaljtDiqK@@CJAZC3+iIfJHYc^Y{` zzn^qB{xmBL4hi)?|r~g*YJ^>lN%HBpm7n>z0%Rh15=pCf^nrq<$&=B`CeyVBbODZ z{j2S{K>R_c`r=C*=#i4K+<_dda%3tGeH`R9g@k+XR4-TJFKV>EbY+|QCpwA z)gufT)8XME^0;2|4j*R5K%vS+b67t*Ei3(EQ%3-)QEGz?WniJXi5CZ@I)#rB0Yw z{YOs<_wAtE$YzKij=Ok~ll5oQ9hRi7Y5WBrKSDlJ2+F$_reuZt71OlD#~ z)nF|S_8#@V*80^V7c(7Sw71Y2S7Fo$14X_$nTCwjhJh?6tX~Cen4Qfy9eLX0Z6Sgb zn7{r(v@4HNlA5UTBGSp#ULRF>2arwo8(=K7k3|&u&K=kTQ~!NW5u52{E(D}cI3xex zH+4}HaG_;s2u4P7r)djlIT0*pdJ;M>aH=zS0dc)D+Q)ODe=KrLiUghs{Y;;qN6gG+ zxO1L!j>VMMM46Jhh8%k+b-iqB;tZ`x{C?#q#kbZH@FHGNVH;znC>y{lsallj?X7i) zU_+#3hP(!FU{I&d+WxjCgqA=at3-?;=@MZOZJdOYlQ2lUKr~0J09gF~9P|FSKcrYf z1PBC^d+M8l6vIx_lnL5P^P7++<8yrn$lfo{snR%`;1c*6@Ki4}kncPmf z0G5%SG-s2Wa;+Db`FS>HOd=Mv_LN$K1Ylb4T-SeM(R1f_jF2 z!YsOijsXjfZvvF4p41WhGLYiH)OO>PF&jN{KygO*+FRbghEllpgQ0K4dp-!~E;8~w z7Q4nzYn3ECb`4UnIJ2S$Wr;H6jN2I*|0ud$&}Ea2w-WchO_24#91cq?|7kpF)I$7- z6NyA)_HT6O8rSnHe(c=}0GSfusDHwpG?Us`AwqQj@h~81h9R=#M-0bu62Ltw?13UG zjBOb5@bgc+n}fSrFr#TbK%5hEmGe`#TCVzfY{h)t$iTbj!^3SNC_hegPha>_)rep~ z+*~?4Z^X2gLjd+tdL^w^gyuI;PUGDv=(iHz=PPO2`nScOitLVPgY3gMT?oD=^&-Jt zhwNz{pJeDCML3hoZ&g3`4IU%cP-C|ZFvPelYcdL>-9zRCqAn>I<*cEm2{JwB55erV z)o;1G20xA_FtLGCntVuQudo45YaKd-U)eO_RyQnH>Fm#+n6Uzz(W%6C8tP?p<8sgw z0#90BjYY5%PA*IF!Ho-Wj4@4Vmi^7@34dXV-$m{5j(@Jrrsc7klsl5)bGDr{B>Xz` ztAv6QBjw}LN#C4=wWPnNGe!M$M=%D`vjOt*xYzGuglNuwywT|2jD`y;x*DIe!3{oi zDP9oK)mlK4|C=oQZ;AM)3@OJmx8nuidwu!E@ANc_ACQ|-pl>I>Xhj8y0*co9Dfn9q zXxizo!#LYGas77-=TI^VKp%!HSDGl$p7$Kd>n3G1Q~(-lRg=MsC4=Qw%83>=cn^Ahan;h` z2%1LdQ7WYOOy#v6ANP*DEapU2w|pGgLQfx^uS0H8r^t%6ZHsn;d`r`S^TtMNsA4*vG+REG`%d$b76O_ zpin~RFGW%x(J8Vu8SU^QDh-bAdi&b=cFt;7mWzqA`G;y6iydFst9`GL4s6574Lmga zQ=+K(pgwGuhfb4%U3oTZlj~Vxmj(Kyizp*0qa=B_YE`NK91xYGcHxOEHF&q-i!9;D zWydMUCE-(hAF5N#`J|^)4gPr-`%n{#M@-)YFZpE@ceUhz!4O`OtJm~uDYID%#f7b_{VPf@&cb34>lUW~lwG}ok3pid z%q!w>!O!zoC!f|F>9UrRfmElq`0NHTMwIFeop;op#xH&-zp1OYt7hw8f(I4m9d+_Z zzm|mv;UEPjm*Yk40x@j_R}3baHQR#W-!l>pG;8)puJ`zWk}atIl8x}Kdo1*6k<~?q z9`gznt!AH(Tm(>Q^^U8go)+z9+}Na7liquBbhAShI8l$H8^BK;G6&;8A_hYVB9DET+wRp$>);E;4TFeKG6Kd%!(GLW{g9CUtMuic( zQRI=G6FeGpza@nAn~N2-83yeav(vcyKRmJ+0*-b5=|br0eg3%rb>#F&W(O{cT~Z)e z8w)yXGGIE!pKK@4m*4h?y6oJ4i9cvS{gSH5TKXOzx&yjp&>uZ>2#67WI7#nA)7*YT z)ZV8p;J(tiJPB}L`M@>p#X69=h1j3s;#wHoEkhu%+C(s`+?wFOOg&yUk~7XI_afIP zrO21@)KDPqKlL~Mzv^$Ly#K$f{ug?$^12oUgk>#mkrTc#6ID=fd=wwnH1yfc5Z8Y`Az85)m)p&&sf>Wr`%?F7Ev^<{2IU;_p6s*5KIGVs_J@&|&%o%cUPG(gkPb_*f!GX~#G4t^&81ZqB){O#^vIk}~E!6)5; zLS9nH95`ly6`e_W*%2O(R(V`@h?zm)9hVA!SSG{OVMG(^rA$_g&`G8~p6VxyBDXoO z87k4(U_>NRCe$j)<3)W$ZHojevlS0z3=(_fu2G~^JSqd1_nLcZw?5sJkg^0@7}_m0 zy;u#8P7iC*m+d|}`{?Xsq{012QdJ{-T)B`bX%gy+-q>j;>yT^fos{$%@4QoEUE{=K zn|$@)8CeE?Z)cXYA^CBYjtqE(PtqOm=?=@83i8H$C#>!gTA;;LSNyKPiYFn`96v=_8Q;i^`FxDMOdnY@Q-L}U|( zYW-)cVodm<2yiDUt(zno*M}!MO4#LG=>p(ilqqMC)YwilMHT9MlGB!~4Vp#zrsc5D z(=r0=F2lv0Cs*?8+J?LPhP+FTf8h{R4(pFZF8HD$a3}bH;xH;uT{4$E()ZK{Rxs>(eD_SNvIBBX+1%otAz-8ky>6!U#H^?|kftP7aPrENO zE<4y3pAP@7Nn22n(SzB_<-R!q_8utO@$>D`g8 z^Z%QeM)`HpEnxqtk^hj{ipd-|GY{m|5X9Kld487N$kXq#MbdKrPh=3h_GpDC-ns-sVr0&~^2bx}V7RSla0^93| zReTH3_n?6XgSYDWdedm+TV4cna(*}KxEiPTpZpVCxLNBt_Bl+)DfHZkjR*U}TN)Hk zK$>awr^!pj(|{hje%rgKYb_u@#@AUU^x$VoUm5RJnY}(>ncPOZ@7)xH&h9V4>P{x$COj)6%G;G4ZsSX>E{!q!)5{DWxuM3f!v2PyVT3X*aKlv)(ZNK6j*8RQU z79l)twys6Pn`Ge7=Yex$t=%_~f*>Sn;u=+%?a;%sALqBd9N%A4y&r3_YW~yYgkKP9 zT%O*lGrU*LlR}W{g1H|;a#X>ti;!F2b8;VMAD&oH%P;2`GyCA3(Y zuSuU^Y(IT|RdVn&ZE=utnvnmq$ZbS+eiJbjfn3h-7$VEgL7vIdS9Os$BL8{?l)4mNkPv9A@}H?r-1lvV-mhX)LlCU%bP= z8rZ?>1EVDZ_6ukTpmy8epQt=2AKc%>aNXAqQjFtRFiIXSBi+BakQnJa684QZHwNfp zUmTQ+@3--!a-k=Jzs~Be@3Wl|ehv4TlPg?mp2TF2n^kThnF?C(t~nUequGw}Mh)z5 zoh*qwCU}nV*8P_4G39BpsvfXeBONISRdwyl<7+@T;%i)f_c#2!nD@EfsTL9Q+EWVv z&q1DarNo(kY0=_C>6rsRnX-sp>GKyitYNb40dLVow&$7R>u(%Zters*JJlfL`O z9{2Q`JAOi4zY7p-eXaHK6;$H4h&$2OUsv7s*kuV~geQu6M+!?$!Z0Z`kogNjSr#ZF)-J`pbefoA( z6X8g6NfQ{qPv-MZ_B~VbEi4;#U~8-SUUfxAJ$)nQ{Q`Qy?F+R*rqj?%NPxI_{e|2> zwQk&JJvNe1gzF(4!ZFnq{F;>P#wTwnVSxE-PUV+KShKHO**V!^S)3Sb;PmW9Zo2%p zfBX9P#LItv;xjCfi9=wsc2M`|NI{)kA#`85{^OxI6a`H$ zLk@pzvAB;9m(wSC6|M51lDr@4&WIn{2ZuEj_c__kH{0#qlN0;D<$3yOJjEIUB-L!9 z!?p%XaSOhzSHFSEoZ_} z3fA+5I_+Oqb6~yxS9`(!xG(Hql~XlgRgBPk$IJbO%(P#(S=a5W{W&uKw4o;PuqxgS zWaP#C^*_G<_VzDi7Wd~m`S13y{X<*7CsDi~yBj<)+4@lPj$l|a$s8)R9 zkAQi!9wSdiN}4s*|M73A{qqL=@!OBWpR*egDDr=D#h;PEKhwj{Cx6{_jJs>e5%-(m z`{xkOfB8fPmT$zF)yeiRrqUl<{vXSu0kDb=h0})eqyGVx|IF4&eW=z)bpnY|$TM;?HK^f78wPxMZ+Nj^xCVBK1$J%KveM|NaM* z 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≷CGCq7amBFP|3$ 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

o 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 literal 0 HcmV?d00001 diff --git a/logisland-documentation/_static/kibana-blockchain-records.png b/logisland-documentation/_static/kibana-blockchain-records.png new file mode 100644 index 0000000000000000000000000000000000000000..9c164cb61d825f7b2ccd3a111c200090ddd5e5bf GIT binary patch literal 596894 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

JHJw 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�u7{M|0qxw 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

Q?HwE_$5ur?SEubecUXAtT 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

4ZVLU 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

w=aR#!V{*^k4>8nY7 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 D%RiU|oiV-v#uxw9DdHFz1Wy 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�rS9lj`A9C>#hMl0d7%V1-9z~k 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 D>L*uW literal 0 HcmV?d00001 diff --git a/logisland-documentation/connectors.rst b/logisland-documentation/connectors.rst new file mode 100644 index 000000000..ac40f8d63 --- /dev/null +++ b/logisland-documentation/connectors.rst @@ -0,0 +1,178 @@ + +Connectors +========== + +In this chapter we will present you how to integrate kafka connect connectors into logisland. + +.. contents:: Table of Contents + + +Introduction +------------ + +Logisland features the integration between `kafka connect `_ world and the spark structured streaming engine. + +In order to seamlessy integrate both world, we just wrapped out the kafka connectors interfaces (unplugging them from kafka) and let the run in a logisland spark managed container. Hence the name *"Logisland Connect"* :-) + + +This allows you to leverage the existing kafka connectors library to import data into a logisland pipeline without having the need to make use of any another middleware or ETL system. + +Scope & Roadmap +--------------- + +Today only kafka-connect sources are available. + +Sinks will be probably supported in future relases of logisland. + +.. note:: + Please note that kafka connect requires at least kafka 0.10.0.0. Logisland build for hadoop 2.4 / spark 1.6 is hence not supporting this feature. + + +Building +-------- + +Logisland comes with a connectors bundle but those connectors are not bundled by default. You are required to build logisland from sources in order to package the connectors you need into logisland uber jar. + +Actually when building with maven you need to pass some java properties depending on the connector(s) you would like to include. + +Please refer to the following table for the details: + + ++--------------------------+----------------------------------------------------------------------------------+------------------------------+ +| Connector | URL | Build flag | ++==========================+=========================+========================================================+==============================+ +| Simulator | https://github.com/jcustenborder/kafka-connect-simulator | None (Built in) | ++--------------------------+-------------------------+--------------------------------------------------------+------------------------------+ +| FTP | https://github.com/Eneco/kafka-connect-ftp | -DwithConnectFtp | ++--------------------------+----------------------------------------------------------------------------------+------------------------------+ +| Blockchain | https://github.com/Landoop/stream-reactor/tree/master/kafka-connect-blockchain | -DwithConnectBlockchain | ++--------------------------+----------------------------------------------------------------------------------+------------------------------+ + + +Configuring +----------- + +Once you have bundled the connectors you need, you are now ready to use them. + +Let's do it step by step. + +First of all we need to declare a *KafkaConnectStructuredProviderService* that will manage our connector in Logisland. +Along with this we need to put some configuration (In general you can always refer to kafka connect documentation to better understand the underlying architecture and how to configure a connector): + + ++-------------------------------------------------+----------------------------------------------------------+ +| Property | Description | ++=================================================+==========================================================+ +| kc.connector.class | The class of the connector (Fully qualified name) | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.key.converter | The class of the converter to be used for the key. | +| | Please refer to `Choosing the right converter`_ section | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.key.converter.properties | The properties to be provided to the key converter | +| | | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.value.converter | The class of the converter to be used for the key. | +| | Please refer to `Choosing the right converter`_ section | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.value.converter.properties | The properties to be provided to the key converter | +| | | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.connector.properties | The properties to be provided to the connector and | +| | specific to the connector itself. | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.worker.tasks.max | How many concurrent threads to spawn for a connector | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.connector.offset.backing.store | The offset backing store to use. Choose among: | +| | | +| | * **memory** : standalone in memory | +| | * **file** : standalone file based. | +| | * **kafka** : distributed kafka topic based | +| | | +| | | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.connector.offset.backing.store.properties | Specific properties to configure the chosen backing | +| | store. | ++-------------------------------------------------+----------------------------------------------------------+ + +.. note:: Please refer to `Kafka connect guide `_ for further information about offset backing store and how to configure them. + + +Choosing the right converter +---------------------------- + +Choosing the right converter is perhaps one of the most important part. In fact we're going to adapt what is coming from kafka connect to what is flowing into our logisland pipeline. +This means that we have to know how the source is managing its data. + +In order to simplify your choice, we recommend you to follow this simple approach (the same applies for both keys and values): + + ++----------------------------+-----------------------------------+-----------------------------------+ +| Source data | Kafka Converter | Logisland Encoder | ++============================+===================================+===================================+ +| String | StringConverter | StringEncoder | ++----------------------------+-----------------------------------+-----------------------------------+ +| Raw Bytes | ByteArrayConverter | BytesArraySerialiser | ++----------------------------+-----------------------------------+-----------------------------------+ +| Structured | LogIslandRecordConverter | The serializer used by the record | +| | | converter (*) | ++----------------------------+-----------------------------------+-----------------------------------+ + + +.. note:: + (*)In case you deal with structured data, the LogIslandRecordConverter will embed the structured object in a logisland record. In order to do this you have to specify the serializer to be used to convert your data (the serializer property **record.serializer**). Generally the *KryoSerialiser* is a good choice to start with. + + + +Putting all together +-------------------- + +In the previous two sections we explained how to configure a connector and how to choose the right serializer for it. + +The recap we can examine the following configuration example: + + +.. code-block:: yaml + + # Our source service + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + documentation: A kafka source connector provider reading from its own source and providing structured streaming to the underlying layer + configuration: + # We will use the logisland record converter for both key and value + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + # Use kryo to serialize the inner data + kc.data.key.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + # Only one task to handle source input (unique) + kc.worker.tasks.max: 1 + # The kafka source connector to wrap (here we're using a simulator source) + kc.connector.class: com.github.jcustenborder.kafka.connect.simulator.SimulatorSourceConnector + # The properties for the connector (as per connector documentation) + kc.connector.properties: | + key.schema.fields=email + topic=simulator + value.schema.fields=email,firstName,middleName,lastName,telephoneNumber,dateOfBirth + # We are using a standalone source for testing. We can store processed offsets in memory + kc.connector.offset.backing.store: memory + + + + +In the example both key and value provided by the connector are structured objects. + +For this reason we use for that the converter *LogIslandRecordConverter*. +As well, we provide the serializer to be used for both key and value converter specifying +*record.serializer=com.hurence.logisland.serializer.KryoSerializer* among the related converter properties. + + +Going further +------------- + + +Please do not hesitate to take a look to our kafka connect tutorials for more details and practical use cases. + + diff --git a/logisland-documentation/tutorials/index-blockchain-transactions.rst b/logisland-documentation/tutorials/index-blockchain-transactions.rst new file mode 100644 index 000000000..8c4e6e396 --- /dev/null +++ b/logisland-documentation/tutorials/index-blockchain-transactions.rst @@ -0,0 +1,274 @@ +Index blockchain transactions +============================= + +In the following getting started tutorial, we'll explain you how to leverage logisland connectors flexibility +in order process in real time every transaction emitted by the bitcoin blockchain platform and index each record +into an elasticsearch platform. + +This will allow us to run some dashboarding and visual data analysis as well. + + +.. note:: + + Be sure to know of to launch a logisland Docker environment by reading the `prerequisites <./prerequisites.html>`_ section + + For kafka connect related information please follow as well the `connectors <../connectors.html>`_ section. + +1. Logisland job setup +---------------------- + +.. note:: + + To run this tutorial you have to package the blockchain connector into the logisland deployable jar. + You can do this simply by building logisland from sources passing the option *-DwithConnectBlockchain* to maven. + +The logisland job for this tutorial is already packaged in the tar.gz assembly and you can find it here for ElasticSearch : + +.. code-block:: sh + + vim conf/index-blockchain-transactions.yml + + + +We will start by explaining each part of the config file. + +========== +The engine +========== + +The first section configures the Spark engine (we will use a `KafkaStreamProcessingEngine <../plugins.html#kafkastreamprocessingengine>`_) to run in local mode. + +.. code-block:: yaml + + engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Index some blockchain transactions with logisland + configuration: + spark.app.name: BlockchainTest + spark.master: local[*] + spark.driver.memory: 512M + spark.driver.cores: 1 + spark.executor.memory: 512M + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 2000 + spark.streaming.backpressure.enabled: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 10000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4040 + + The `controllerServiceConfigurations` part is here to define all services that be shared by processors within the whole job. + + ================== + The parsing stream + ================== + + Here we are going to use a special processor (``KafkaConnectStructuredProviderService``) to use the kafka connect source as input for the structured stream defined below. + + For this example, we are going to use the source *com.datamountaineer.streamreactor.connect.blockchain.source.BlockchainSourceConnector* + that opens a secure websocket connections to the blockchain subscribing to any transaction update stream. + + + .. code-block:: yaml + + ControllerServiceConfigurations: + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + configuration: + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + kc.data.key.converter.properties: | + schemas.enable=false + kc.data.key.converter: org.apache.kafka.connect.storage.StringConverter + kc.worker.tasks.max: 1 + kc.connector.class: com.datamountaineer.streamreactor.connect.blockchain.source.BlockchainSourceConnector + kc.connector.offset.backing.store: memory + kc.connector.properties: | + connect.blockchain.source.url=wss://ws.blockchain.info/inv + connect.blockchain.source.kafka.topic=blockchain + + + +.. note:: Our source is providing structured value hence we convert with LogInslandRecordConverter serializing with Kryo + + +.. code-block:: yaml + + # Kafka sink configuration + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +So that, we can now define the *parsing stream* using those source and sink + +.. code-block:: yaml + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``FlatMap`` processor takes out the value and key (required when using *StructuredStream* as source of records) + +.. code-block:: yaml + + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "Takes out data from record_value" + configuration: + keep.root.record: false + copy.root.record.fields: true + +=================== +The indexing stream +=================== + + +Inside this engine, you will run a Kafka stream of processing, so we set up input/output topics and Kafka/Zookeeper hosts. +Here the stream will read all the logs sent in ``logisland_raw`` topic and push the processing output into ``logisland_events`` topic. + +.. note:: + + We want to specify an Avro output schema to validate our output records (and force their types accordingly). + It's really for other streams to rely on a schema when processing records from a topic. + +We can define some serializers to marshall all records from and to a topic. + +.. code-block:: yaml + + + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``BulkAddElasticsearch`` takes care of indexing a ``Record`` sending it to elasticsearch. + +.. code-block:: yaml + + - processor: es_publisher + component: com.hurence.logisland.processor.elasticsearch.BulkAddElasticsearch + type: processor + documentation: a processor that indexes processed events in elasticsearch + configuration: + elasticsearch.client.service: elasticsearch_service + default.index: logisland + default.type: event + timebased.index: yesterday + es.index.field: search_index + es.type.field: record_type + + +In details, this processor makes use of a ``Elasticsearch_5_4_0_ClientService`` controller service to interact with our Elasticsearch 5.X backend +running locally (and started as part of the docker compose configuration we mentioned above). + +Here below its configuration: + +.. code-block:: yaml + + - controllerService: elasticsearch_service + component: com.hurence.logisland.service.elasticsearch.Elasticsearch_5_4_0_ClientService + type: service + documentation: elasticsearch service + configuration: + hosts: sandbox:9300 + cluster.name: es-logisland + batch.size: 5000 + + +2. Launch the script +-------------------- +Connect a shell to your logisland container to launch the following streaming jobs. + +.. code-block:: sh + + bin/logisland.sh --conf conf/index-blockchain-transactions.yml + + +3. Do some insights and visualizations +-------------------------------------- + +With ElasticSearch, you can use Kibana. + +Open up your browser and go to http://sandbox:5601/app/kibana#/ and you should be able to explore the blockchain transactions. + + +Configure a new index pattern with ``logisland.*`` as the pattern name and ``@timestamp`` as the time value field. + +.. image:: /_static/kibana-configure-index.png + +Then if you go to Explore panel for the latest 15' time window you'll only see logisland process_metrics events which give you +insights about the processing bandwidth of your streams. + + +.. image:: /_static/kibana-blockchain-records.png + + +You can try as well to create some basic visualization in order to draw the total satoshi transacted amount (aggregating sums of ``out.value`` field). + +Below a nice example: + +.. image:: /_static/kibana-blockchain-dashboard.png + + +Ready to discover which addresses received most of the money? Give it a try ;-) + + +4. Monitor your spark jobs and Kafka topics +------------------------------------------- +Now go to `http://sandbox:4050/streaming/ `_ to see how fast Spark can process +your data + +.. image:: /_static/spark-job-monitoring.png + + +Another tool can help you to tweak and monitor your processing `http://sandbox:9000/ `_ + +.. image:: /_static/kafka-mgr.png + + diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml b/logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml new file mode 100644 index 000000000..c5d511eb9 --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml @@ -0,0 +1,127 @@ +version: 0.12.2 +documentation: LogIsland future factory job + +engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Index blockchain transactions with logisland + configuration: + spark.app.name: BlockchainTest + spark.master: local[*] + spark.driver.memory: 512M + spark.driver.cores: 1 + spark.executor.memory: 512M + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 2000 + spark.streaming.backpressure.enabled: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 10000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4040 + + controllerServiceConfigurations: + + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + configuration: + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + kc.data.key.converter.properties: | + schemas.enable=false + kc.data.key.converter: org.apache.kafka.connect.storage.StringConverter + kc.worker.tasks.max: 1 + kc.connector.class: com.datamountaineer.streamreactor.connect.blockchain.source.BlockchainSourceConnector + kc.connector.offset.backing.store: memory + kc.connector.properties: | + connect.blockchain.source.url=wss://ws.blockchain.info/inv + connect.blockchain.source.kafka.topic=blockchain + + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + + - controllerService: elasticsearch_service + component: com.hurence.logisland.service.elasticsearch.Elasticsearch_5_4_0_ClientService + type: service + documentation: elasticsearch service + configuration: + hosts: sandbox:9300 + cluster.name: es-logisland + batch.size: 5000 + + streamConfigurations: + ################ indexing stream ############### + - stream: indexing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: a processor that converts raw excel file content into structured log records + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: none + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + processorConfigurations: + # all the parsed records are added to elasticsearch by bulk + - processor: es_publisher + component: com.hurence.logisland.processor.elasticsearch.BulkAddElasticsearch + type: processor + documentation: a processor that indexes processed events in elasticsearch + configuration: + elasticsearch.client.service: elasticsearch_service + default.index: logisland + default.type: event + timebased.index: yesterday + es.index.field: search_index + es.type.field: record_type + + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.StringSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.StringSerializer + write.topics.client.service: kafka_out_service + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "extract from root record" + configuration: + keep.root.record: false + copy.root.record.fields: true diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/_static/kibana-blockchain-dashboard.png b/logisland-framework/logisland-resources/src/main/resources/docs/_static/kibana-blockchain-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..03f6422df9e6b10d2f7e0c4635de55b7b1e70e60 GIT binary patch literal 487007 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 z AB6h7hqZ@acF46Dc`YuH%%XA0VXiJX7@*?0e6#2hfCWJLbAUDN#nqejNbIZN7q zN_+cn2Kf)aNqm)QYAqaW_K!{d<1rZjO*s<@9hL?gz>^|N@jpb)KTU8cIN&cDg77k;{QnLzk%8RkeGMbpPcM}Yu}XNYQaVtwjVt9n&c1dqZR@4>2pzrjnxj*!F;Bp2yM z6D*a<%zE;o7;O#O1kZ-(opBVzgwWSI9+eg!v5xBcY-S+!Y-$YOLwEU=Kh?gZd;&{c z#3br$x*GA5!Sv@md{3b1{7>0<#V9Mu&IUJ0ni5(a{ey9L=#HDmu{j99{ zv?63l;=laBl3QEkp;+Dj97+jDR9{NNb^N^Fgt&7F?zsTUOaV6y?zVLVlS9BZLXu*# zgBrmN;u?AByf`^8zDW>9Knig;NkI4b4-dN*rX^tl(Ak8Ro8k0;G0bi<^*-hbZfQ554k&6q?43J*K(9#`LH6dJFq zZKrhWluRH#Ew3k-Z?x~lGEN_2y_=pGO`Z4Ojx=3@C@%GuzW`;Iz4cC`baR?^?Jad5 zQDIB?f$otk8+0vL&x}VpdqWYU$nRIrSwQkCNxkxv4a95?b zNGP57wInc=!g;8x7;Nd3oKy`fXqre6|( z^gNOh%Yx1ogbSr^H@ZpR9#^K4>2rrugR^430br4nD0FeClOjR7#rwH$+IL`n)Ly)^ zJE9l{t47m&J_(Z*-V?%b*E<^XMb{b?uY?1|2S!yLO1ks)XrCPBhZcGXjOyj?2c%C2 zZSb+ydgW*70=mqEF^$m4W^AqjIBWeK;V<$`Z4)WK6?)Wo0{D_5& zJ5Yf~e!Yf$$%J=fL4gLV$q5R0rDsZ%g8x*UWyVV!|ZS3>-VJR;LP}wW=y(_UXlqJcPqDsRh9SGzku#FO&Ki`tVPZoir^Q+< zYy(Q;e(V{5w6`q8^>GS>Y1ZrDQ-Fe$@t3Jqq(9ZS90biy%JPhBv_2Wpsr=w=#nuz3 z#P@E4vIDrKqyt(pKt|AvW_Mj{PRJD2r?pS_#H|KTot%ENd+Z#0u{k1EeSFY^DRB+Y zwcrxHwqPg#8nBfS<1`|+c6~%O6en?>W72Czh7x;CZ-i|stPqAhjsOjbod<=6rDZnB zO>TZTFH@Wl7&y9yC4jsL)E>!(xoK`59BICF5Jw02)8Q-!p46(!nhSTQoh%%~HWo(6 z_E)^dC0b~GQVwZ(=_K2?w#c1$RZWtk@UA!V-t)CyOAf-?LeWIH{Mx~FPJ6AzVk9n= zZUA6~oLHNj*=Xpr7wsNo{e3|&@iXg)*b`@G&4!~Lf}>+yO7Pmg1=g~z*|5r+9|pe* zds7A&XKIJipZ*8&=_B_c6ZGksUW0X%7ChY@i}m$J>Pu3O2`1x@w@}#_f3jCn5Y7*f zv2@v`gPEiDA;HiOyC6)4c7Nrh>B__CII;jZG68EX`hBgHsWJn+>rH7q65SQsN+Rpx zvvWAIHn)LuSSDY$&@;71+ow`4+bPK&ThfW%OBJ*JwRx_`RVm0u-)0A%Nr-=3C-DkC zmXlO4oWm83w~9W?qwV(QV;;6gON@{n85E{^=Uqj}sgq1FZ!-|SijDSZY4wW2+l0uI zQy{|aluB$6#pl!*&`E`{m?noXock!eHmZp^7ykiL4za^V#h0{IoC$Ph>biRL!XpO; zqWW`$9mb4eR}%E!l5&_$L?$wyZ3zhD?C_CjYNYRTZ6aM;?q8DCOdI|gfyNsLph_s%{od>Eh4oUD**%6 z77y>-7d;!Uk2MvM-Ynoq%*|)4><8&v7-wnrdfRd5ySD6POCn+KX?2CcLc<%E+DUDP zoNsQ3V@>u{Pr}%>5;>5Ry?BwKAe$3jNLk6P%liF#dZ5G~UA1I!7za%>9Mk>|n16CQ ze*J3O{&_zKQ^!ImTNFl)XdD2;>P{@jbj_H{(?uYXx10byYF0-f6vv=_PNl>X*@o{< z?dtQV0je>K!!wDccnj#}kth%BB+2jECtxrbsgzaX>{-3s0ohq_3^2cCPe}s z+9f}r5>;@>^z;%AdOh~^R+h8xfJeD%n5sa$CDwp-=4%WC05iKc=pq{g$vOi$Ua42mdE4RXuynjtD$uFhgQmlp?)8ONZT-LoKK?0`ksOzKHKY1TjQp+M~fP~%_%Bs+zgnr zay<;-B3})vN~8d59)?~G;mdoW+YoUxB8B89(Njma8{O$WV*a=kM-mr_b6R3fs@7#% z7y9GNV}OM%v_xh8-rxUcxul!&y)wi~NsFOTFn+XG?2IuMTFf zDQUc&SG+@cJs(!aG>dOqF|sa!@aXRQFZ*g2js}ff3dx(blOi#F_UyFZIK)re)yu*S z#iI`y-F+c!$O%~g{>!;r!{$Bj=*+xX5njPQXc}{Q@VINDeA|FhuA_=8|#=jB#0+JzH1QSX4-;$2lbZ%_HF><7rR~s3$6<1YcV&m*4 zUPP*sux&NY?$z^&qQ%QqESG#39Di8cTJ9P=9oLnN9r%=l%}}e+tuGwkQfg?lz95x+ z!)G^4(v2jToxB6%+PrPs<_(Ly5n}5sIJvgzNRQKwUI7bCT6T?NKWPOB8B)qq?BTEV zDT^LvWzzd=!S4_38|e}4L5=NFicP|hPt~rW+N+5G^lUf2OF#PeDV$r(@rrDb2K~=| ze>61!h1^Z9m z_Cq7}+F@su1fb%DhAKumiM-YzK-q9L=+~JPBXnGN9V*R9-}b$=+@MfAMDk(GzR;vh zo08}vu`qKEBin6FDA>az+~ z-KiodVHH>~xNr~If0_CXZt_`%gFsb3D`?~%``rUzHk9l;8tRwHX|e9hUvmaT$DxXBwd&(g+$mA~9%jPa`gF>r~^!j9>ukK5Pr1@~e$*){Wzicif zK>THy65O3qwi;F3AduCI7OSF`ea+<5mK(FAAR_cC*-i2pJ|pxVe9g`%GOCnh2|5T} znX2`<-w<~G5?vxq)V9r+2+_mzny!fCM}hEfy#@6^e@3f^1s*a(yFSkJ8xsL)k8c;3 zGnDDn2h-IDK!EcPxFMTeg?IcM^P7!3iciwXe%EetGBDo!W1`Bx3lgnTDAc*J3&cGV z=@{U&F;jYfJ5p(dgDI8oyu0;+e)P!K}^RinCn%?ct1DOOE|3S`L4KvsB?@6LC*3%u{y?`JFV zttFCeiYB-Gx0;svv$>5|PEallz7)miKqvkEjz7$8>4oh102LaiWw3@4de@crde`l~ z)PELH;{26sk!!&2&}vtsHdb=H!gnTFUR~P8fL-w@xvii)<+a<+9LljvKMAE7<#W~q z52GO}l%wStlL61Pz3B0pG6PMW1GA_JX_R%xX09zAQ!V2BegaZrOA;G@)3L2jglnyu zfHzk%+?0UtH;(erkV^_u5m1bBbgVyNn=c_ufL-gj?BP9hH{JSt~h z1|}LD^sb0&1|lU~&t=p6stwWSSaP-}68ib>Y+Z>tk|Ot{#5^Lu*4OYIdP_^kEWbf# z9}zP=tWs9j_5+}xoM`9htvg#-e#q#v37>Rr9-^>;D&(x+*M@}ydMLafsa_XGdylYn z*x`;;f3wA5jQ|@>n~a4%^R2B0(C|dX0f!NE)Y&8!Ci~u&*9ZNtajHviwf?Mq* z%@5PU0eQ;SRqnNY8L5x%xYZ+QkJjNPZ5a+A)<<2`v$*=y!R>lj&QlC99QXHt`1=J| zKoY`{s)_i!NBl2o!ts}Y%)Y~CuM3gfUb>>;}+q1V7KhEIuIK5vUn_7GRk-C9qZ48B}~7#EuGQ@qYILtT>s_DGf@&D0~r@^emQq4*Jw1p3~Z3`j^{ zP+SjJ5N0bm>RQJnqODs9_@U;Lr%8iGuQ5T9(jy~?x>}Xj?3VNHv!}^6gH1$kJ@t4) zaVFu-#0jw2P4WeR#dv@*03_-@@t6~m~4ro_j{@w{{OMw^)D8*Va ztuj9{V8%sd@2{w!P(OMQ)PYa&Y4w&d1PEK54m8#W(*xQO04%vC6}n?)Shwf3x0O!! z_^~agw7bp)=?j`4(%eu^jAh!lZ3=tRj#ob?p{>OSB#^0gp5bnUv-My(ArT2&5-;AR zK%>xkUM&_d^el|QQ<}(jc)8Cx-FJF=J3}sb zwO})``WhY#cxu!Cn)39dQa)j&>v3yN!K(-bILI}^36JZ-6WP^F^lqz@wET9xem1QQ zPJL=TLLGVDU~0sC0IP)g_SQFFh~<1HcgyUL0?PsBPYr3ZQ2eJ!X#aHcX)1=lh%0Mc zezf-)#-=|1U`Afj8JDmqWJ@s-qaeVH`*XdiHEkTFz9$;1GheV26RCb~?HpO@MuV^U z_lPO^)m8~T2Y#p%^XYJp-JDa**PZBInei7&-e+vX@>-;1m*xpNsX>fgovLU#qbn*& z=aK8^_%AjAv`Vj7!Hif8b6kkK%)xJNqeZ`#w&l<0OBjhnV}ED6E2I&+9^m0xNCSh ze>ejRuz2pAbWNzFxYXpsDHIuc`1MkzC+IMKi{j?!3v83h?R?W4HvPmeX<2rrx@L^Y zTfGY}jRzK94tBNna`(kPdlSlYkQza(cAlDX1D}f{*AaVq+i?W~IUt;vr*~Z>IAuR- zG?pj$A6QIWzq=h11RVH3_>L*;I@VBm*rZ%KMHc6;bY{$O*#|Gx7_F=c&Y4=C zTf71GNnssm8CGOU;sCCU9(4dLi)9jnE|XlAC}SZ8E4W@$bNfdzM)m_I!mqg`O zy99o*U`H|9VxZJBApws#OUcfisK?ub&jkc_?UewsYGacpakM^j{d5hVdn>=R^O(Cc z-5kVn@9%RTTjCG=J^Ou5#FE-%+(y7vgU&$8PPe{TCC(W~w1&8$xC>oJV%yeLI<^J2vT`3EO?cZG-z@J(n^b*#0YC1HAbCD!rl zh&S+v&+H!LBt@+?YXkwA;@uw~{tGYBCqnMK!t}9uJ`D2FdT+}s{7q>C z#1Pl=H?~DjyLVAsH$%kqO5X``o*N8$A1Nh#sKh9|#jVE|^HjreF8i=I650t7&5}zh zUkJ7vkLc;xXO6o_W=c+xXh0FWU_+1evqIKgo8IiUZ(%lL++7?NBO*9y4sY=In2Tpb zW!B%o7QSviutqtiMDAa+mZ!n9PZ{or*8pY>P46m3ik}-&^yXb}b?xpM0w-aH(GzU7 z#CQgY5~l~r#5_0;N_4Yk*RWk)hbOwFpA{dk2Eb67=(lEtO8dRrt&r80_n@I1Dv$sN zSHFWR>YrjL;PU&YfX$tGPh?P#u7qBvRgJj*hq$Bsa_GaUJ1Oo z5#7cNNGTwTSEUedgZQwSI95G?!wUKzSkhnj;LTTUSJ>!b#icT;B)V+9Kb(pRLh`y#!i%1^tuc}{ zzvh(%F@6(4@7PGSd!1$XkyeXaOpvDc!xvN)j<-%-q&ER&c4jtw?V0KVvab`)f$D&r z%d;`ncN9%$C>Xj;mgj!1x9Er4(Ba#G5-XqH?@r!LL)5#~$};bWNl;0LG%y^`RI@~N zG7>dIaPt?}Ti?84L)}>A%57Hw<3|>vV^BQ01xJ$<S9OHEkAkC7D= zk?!SvNTL^LkgdLY8Suf@rCcbQGhRBteWbSxg@JVLLJGb|IV$K{|SI%4)H2)ul1tm?G<_-G+66rA~_ zCld|K6UD5Bk>B;vTxbl-i3|~;{<+O((l_30-AbRr=U-t^#A1ZtUXgx*YcY7GK$T5C z`iqcAXcT<0ch|?j*k2fY?a|W^0N%^BBYU3H0`>R&Ch$3fw|w$kTYJ@)O)VGmw}Suy z3nGircP@=9(+81e*Sb|yn{Od>1GUdPmMM0A*lFY#$>d(hYA0N!8G+ROtxnU=Z|`_{ zSgiKfPYq9LZJN*XyfZ9#Hb=GPp;AlAB@|e*HkoJo4k?Z(CJv%N9Q5}Q5qE-0iNztf|he%)0T5^QmvVCf8>}w{JV<84qWiOFZQxXB?-3 zm$CDqAG{5W&XEhx7?lT@#B#O9v~TzYMVc})WArJZ>j|m>UOt(HOHGJ3Q)qf|r|RyD z#JBpMDmW3%-^{lBzu97FwOf0H{qpqXo6o;~C?vz~*cxBtLVWUfmzDqW`=35JN|^^6 z>{U)Kt%Su{*_Y0Tu`Z6UJ6elFURJsZrDv=6tB!SM%4B-^`)=YRYL(J)g5n$O0aR9E zE5FFrkW~pvU4W=By{vq}d79E# z7zeZ!k_iJ93yNa__AE6D+|%DRET49^B^X{9aY_NooZS}M9X=HSdXZmyJ4}RB##cB^ zG%kQ9ak?33Oo_wMW@v8l5D=6wxkWd3rM{i7bnA?G@w@A7nKQTkc#t(>bCJRJPFpwk zFi&YLxf5Hzdz*|5K=zgZ3^zP=FBw1L!-FE01)JC;$R<$8-0kESF9;SCFT9A;>{g@| zrLk_0cW{XRGX@ z8-Lg?711cYyWZ*Sh;jaM?=DhN4MUI=3_X>a=i1dGj!OSclDd7FQa)#dgnGT6<_^qxTjNq~g9$ zL$h@nlYNR28-u+mDj)lv8sIlA)Cue zO_YOsU$j?8sK(f0#Z&hfdo}?nLZnS-Cog9u=3XmH!bZeSKBh3FMiyD>1vY!`H3Nzn z<JZ;|dp_GFcC)1cs{U?s)F4uZZz&rXm0T!Cv9dF#duM~bS2Fir#^f}Mlc!J4@ z1ct|kF~GRmtfnA6ksm3@q(@cOWZ{xqoZH!lg#`4M36%I2L>tNpeMbU?hqnq-Y~3he z%4koJ)b#_+2Hw6T`ejJP^3Im|&f}g_73o%I$a=65kJ|uWPktV2SAnu zrKus+&h_Lwd#|2~u5Mu9!qQEB_b+L$oTSZ#W1XV2=|DQ(OMr%ldpsHVx#F0&OWhuk zF~iZPBc-Dsn}B;!8-7d)`@xVYk5 zMQ6B}jDyFa2oS~=(Vs{%4TKSs@ee!dzcJNc=<4r2O2vMBeek&V7#Nu$@Qn!=lxgEG z1>}}J%w-k60luUp+U%Qw2fnA%M`&vGNG+S^p#@B-0ho);y42kan&=xX&E%btol&KYfgW`LH+ixha_O|aq&u<$zvk%6v%rvLYoy08hvvKS z3nLjb-c(vnBJ4QJdk&N&-FFlcX2-I+xMeX9CQYZ-2m`9p=ew}G*PFGUdaSrnZ|X!& zLo3tj@)H5$GZp-?@oELJ>1f{ab$ai_FTQaagHH}6@=|A%B53AFo3E`y=W5K@cU{h! z^gcC|QE0W!H{6s2cJ&P77h%5Y-ZuYH#|&(eXo|i{em$<*b7?8^MX710zXMH=LK`>i z>-i~??3b~RXVs^8l!DKBsLfyv-y%cSM^VcZO z^$A+{wW#+#(Vaow@(bn5w@4_=E-e+Xz9}$zOMyIzZKBXlf!mFFa1*H2hNL@8!V6a<5B;U#I_0v&kHBk&U$9 z!lZ{6r*CR14uaDmJ#bG(ogbsZU#IhI&<1)%oXQ6}$9u%DDuplePAN;LS~}--PdI)^ z!!DZEr_(IJEJySrk;+q9JmFO0w2~9bWNsnZH{@RyTAu0qY|U%YRgY-3ENpC@m5{T2>L` zt0}bXrg}urhs37kCse~NCb-)ASs2&XbXdB`-sKvySD)uQv^^=RYoxywSTj4BBKB2zU#58q_s=JR98a%fcNDgIAgk%jlFY z9q5#B8>4HX;j!w{BRiNIckdQn*kC?N^5`o*xw&s~50sm%ip<+iU+=GYkaas2Z9Gc( z*4xcekMj_Rs-7=r+~Ph*y|b+sgr@9Ww9(QG>Pj#OIH+bE@Fvd%i@l}Qi#STw2?E8s@b`|@ zY-+Nmm8XznpWsiHnC|9MED{CEqP3QRWtcb9Rao2}Q2g>Y9nxMO$UGgs zStR~3FtL7@a$gt6nlHsIt_`S*ksCMYRbLf44TLx2J12Y1Q{+;yq@|V=nB8MRJ0o>8iRzROYy0(Z80wvvSVd&b`a{L5HP+%fhOs`foKes33I7 zlzJOnaTtp)-1{E#UdK3=c$2uzR9)M=xDW6hyFr56A2jel$uCc$*7ZeD?8AJo!`XqL zJKe`bbf`tCekm)PDxLm54pXT=P$u4It+;Dr3P}KCM15jRjMpgWTRk4-AeN=Yp2$6W zBn8@bXN2nutC>rMMq52JO4+z!t8(4egI{(+Y6@|{mY%1GpGQ>SdZ){71m_JND`+rm-^p%5l@~+s6CN> z&%WJE;!5kEMM^S(xUBcusyvOpqerbrc=G_@Fgt?9HiMmQvWqw-ja2$-pPja6K&S1s z1wl?l3j6b^niHEBRzVEw38)tu3vU%i`}HJH<2z*)mzUC~AE0FhqimH=p{NWh^>Z`x zW%>6!BO3Vzb1HZvR#lUjff5Wpt5PVIsumvyc+v-Bq)#p;h~Z^%6{%~IAav7pO2Za3 zJ*MZzyyb&TfkJC#S}2jYsA7TOQQPfvDn|^ll{ohf1l;LU%sO)YWvN@e zn#fDx^BJ4sxW*Z*Iy<3LFMKu^QriK~_VahC6(7+O@}U(?-3N2|adSW@?Y45>!3F4K z9_e~GZ~-DR?CqR>#>cYw&8Vbf98mxUp0G=LaJ0QA0Ac>d+r^Am##?)br4YeTE$1vZ z;M0i1F+iS5+;XDNZARvpJ;W8J@VD-&&u)F+jhueq)0gcLt5f@?;~m4+JD;>1KNMVi zzh!38&?x1%s!S<0CAkuKR^8VirJe`gqIc5}`4Kc81QRMCZzU3rZKiL?Qdb+Xlj+t~ z>%HK4dWZ6w)aJ8R@@n*OpwsH;45B=t6bWY8a0aBE?k6aG;&EXf!%2SZmw#(bzmHK> z98x5Cc7?CvkTYI=5$1-wq^12p7(Zz@PWIZ%&S=_vD*v;r!iNV1X^kKtglnH~PGQZ4 zX48o$Y=gwe3Q&{XxNTmG`_|t_2QK|G3eh`GDQMXR3e_kW$A3D}4#*O-FbcS^$Z9Ix zYEe+W8|lA6jw`C18Mrp7yW|XQc?=nBb(CqF5)oNgXNd-hM_*c*2Xex%p;UvaUtEn- zxMvLs8_0mI{vy`K#FO{Oi9*09^HvOW$ciacX0A@NYJ_!xo@=@Y%TBsiVX=byY9jLK zoyr1ENyvveF*K8cG;9QLL(Ait*S*3*4y~LPFB_#qdetV5nhEcg^=g-N z3CG9JuzDH(ttTB?99T_t88=jnc*eVuQ#T_w)fbFwBrAuETAg0rJ1r1@cTB`#cR1j% z9(Bn0aykBj&#)*AbWLWHckIZL?=UXmw<*XYjdLNbWyR-N)`3qSGr0)rf*X40?enHY zHrIOUZDCSsWxMyy+HCP(r3`VURg2K?a?9rcy%qSOhR=?$sGuqRi(Q&@Dt}w zLniqRU(Sh=QUhICEi+nWF^$grM4mY)Cl*qdo()%i)kI&*DK7iIbbsEQyD4{0>mtNIIk^6HJ;hzd<&eZCU^ zmPQuIZ;{f9^OLhHiw-ZrWlyeH5T0D+E1Yd6S!WBc2#CgD`8Mr&zI+C2O7h15oG;mpa{DeE2Z2 z%;2#Y$uT=53+-k}VEYkMGyTc}Nz2(VrHtyl-+KR|T&Dos9({P&IGF7g`ID^_s$h05 zdWY-PPhIsBxW9P}K5B0j9I2_=y0!EoKDA?8c0}&^=t+;ZG<=qxg@5Fxqt7FmU)WAC zblrz@Dp@IKer{x~jNpW)m0l}7So-A{{rM2*GA(;xoMVTSh~JUtUgMW0q&UDuxN7>E zEFQB1iE4Pv!y}(mld<9YjC`{W$CT+yhGmhF6^%6d3KlakZJG*majztttk7u>o2eJI z{(aIyEkAiJKaubL5O|X{G!g;?BxJhfM!Ta|kLfFnzBd`ahVlRc_tKe#E=;hnfzU|x zL%*`q_`Yu>B$irP4ZD?2_6E3|y#$8mrJhJZ6HbE>Q!LH0R4=D+lHaVK&$yR|Eyc8e zM43u25z7za5tEzyo}4<_zXyO6&ic}F_xx!aw@J#P(?V_HW-y-48)S@o3fRx&c`vh- z#xBD0k_*cc1x~vv3b`{T_FYI8UVoNV*cPU$8GFK~P?P~?Am*s& z5v#kXT#vNjE&#(jCauhT4%tz&%#P=+5K`M-k1ItGr&&gv5KTBU%uwmrU3S;nj7W`M z><_hxIUT;PwM;Zlq%Oq#(Y^b;p)M&8$B07#zNAr>meuz%N$iC9Cm8-4k$wLc^7;T- zCaY#5GSCovr_P;YILg!`nUD{I3dB)?R=u#TPFz<=`C0Xlme2$eH1K?O0gu?gBSKi= zLe;(FRcxay#iW6yr)9lH?;tGp<)0&9N~~;e6KGyx{)t|rw$?ei#FnmU%kwP$!6Luk z#zsm*axS3T1cl!E{075sbA|T0j=4a)5cK}5fIhgjQhJo{8I3UjDOnxjnbC5;L?GQH zSl8^F?cv_xIG5J2S_}D>qPF79Acsn3F?y6xF9}e3IfulqRz2VKhwM3h~>Cx5;S{AZi9^w)DXqAQVv`HQo z5Sq*ivZA=rcsTV`3-rs;YSmYLr^AWYz^R3WnL2*~>QCXzC z%IIQB$tQj^#fHjUU@eR2oUF)*4P{AL>K1Y>0jreZj&G;xgji9Y`?+DEWelz9Ez*S1 zb!mWa9e=L-5FZWDKCI07UMhWFSA&~qzApKuXPy4)gO)`=@VN;`(edY&x)t22#pCKSEz0a9$11U;m|2`Bck@0>kD;47<(bk$dt| zwC<#^g~AihqL?!e^U6tiI=hAkj}Hh4)(9^+vgHS4~amGqEqnJzUQxR z9#??lJ%_o*je;hN%#l5Qx5HtoGhtJhr)L-_=td=&D+@E$N> zG_fZP{t>lxbz*0KUZprb=4t5^V!02X!Cwxa*6$tb3odrD&wl7@kfxfZr{SukoT^Wp z0>M^_usJF3_De4NC`O(aXM*#=WEDIs>d!wdrwPTOR0)fmYGaC=rsbCC1L50 zKS?4z4&>3CwP~-M94fu@C#sa_S7K)~t-8e4JnlrY zZx}khM!^^OirN||33gC=@*XM`sQ6Vv8pfi5Q@2lQY_;zi%bcSp7d3@H)98gYjLy%J zVvnf-335a%nHJ5*tKp@1mlp6J5cdbILVVROcovJQ)JK}7c;bn^Cfn$eIUxuM&&+Aq z_VYl_xNzA7p?Nk?^X|aUb;Tb@vV?YZyTM|Ux&?&QRwY)9csHDZpH5SYOdZ5Wbs#g6SP7K!*<7$J zGD|N~S_-Hb4S*MhCR#<#SVJqc63Xdv+1c|G%&PU~c%XP0s-cbajG2vzGfhCfC}!p4 zNEL=d4VXqjyATr%r|-Iutx`ih)*2XE=B#@jJ=of9om4meklZa?dj{O)nY&^Kd{sL{ zySL$1R0~T|!kYxg%kER_=p4vTfG0n-Qf)9&Jx)8{xJ;NH9_HTxcb7ez9i2{(o0{Bw z4qNutmU6LBw3{mpe#O>|h$EAie$QndIilPzNb}pvr!oMY$laXfW@TmX+qsA74?%O6 z)~V!?G8(T`(k?Sj6j@E@xOP_eE8N=fGI#zB|Yozf81&?;b0li-qr!1`ib60Mx5B!z=b6d)LkLVeh>s{C|SO!fhWQg z4iExV_t=lW4X+dFhF$N=ZC~)7dE`*uZp%G$&!bh&**ZCgZirGJ{E%1$H$<1GJ4MW0 z!@bfJn)bmHGvN8T6U|m_ETE=nbuSPeQ;ao*7*rpRoyKdC;z>}tSDV+=zd!htR9H7p z4Ka*pY|8h={Xl|Y7dE%>ieyh<+SJyp=XWd465EB1gRb!vlMbYk>2l0>=~GjQ@-nK1 z>_g_#yGLhW3e5ypd6^mf*7?WXoGRNz{;}J5*QkT)+BCa`PxGS%;7|786?K_@6Z#l~ ztyIP!c7NVS3rRZ8=3Dy)rK(yqo`c2pit_q|8OS23_8}3uQ%Vdlx^CQ47LZl1Ql3r= zzFh!Sbt!;UWaEYEztDq?l~%g1W~vH_v~)JhKVg-TUKF0+6edM2TRMM2rYU znqx`;3lxU$dCgUMUo7KIgGZk2b^^UN4I3vB=Ktc6^>Ub1aIY1caUJ>p)Eo-_Fj^w3 zn8p4nO#ay&p;HjOg88_GKXTbkp+U7JPx2#T;`^p>Ei^umOuNGtB~YqX13^`_3cr;6 z2mw88+xk?!R+^)%9hw(k{`9EL^#9oV&VVMjZ0%z~6ckWIq=N;Js#NLHM7n}B=>pPw zFG&Oh6r}f#A|PE_=!D*z^d6B8385vSCHY>)Gv}O{d+*%2-|zXC5CZSsd#z_Z>sf2> z-BW5b&(a08-l9e{mQah7De-J-vN-IT6&jwI*8_&i^2un)PR7B#69-ac4tp!!%B8=- z$Nu@7G)EHXC4#NAP)XlD>-CHikM;Z}%Xu4Kfh!7+oy7Xdh(Ssz1}KRV9y_zk6eQ zK0oV-aQdax?p1u=?!s#MZkYKPQR$Yqa+2S&abK>7)&1}04{_+^K=<-h>f;b~f0!Uy z-vgKJjz+YO5@J%_O?_k&+Vq?gHqUvC{WvL2u#j!6L}I8!2zJ+UZJD?@=M%$?izxRw z%qzgyV(x?awecmDE@M4wabq77b6Y0m7qH^BI|Z^^oQp}^qKaRk!}nN92^|eZW5!|m zl6OI^2*{`vx1zLbdXj)0P-dXF9VXNBYxxndpFC2pvjv}u&4!hY&Uy#^VQ@}gE?!Py zdZ5=U|Idc@hXwwyy1~wJ`ubYVp=q(k`L`23K*ka7UjAG*=0tzJA-;UG&T)6f?5;T) z!5yTp36A|};GspaS2YvF!d{U|9Z){;Lg{fIs$Rq{N7NJ|@X7t=#Q|5$=B#vlqS&@#JH^{F`^s3_AQ>4ol(U0Yb9vw zO0pQ=(J5d)(9wG8MnFq!a{DL{?7rr`{h8B{d?dc4x-^xi&k=HG$SB9rp%8YJPw3Es z!j=iBT*P#SSaTgjZ3^yxK`34;AM$%t7U&RKapq7L^D*$%& zz(4!OfQ2X5L7#Z`o1z{(^vUqEd`a#)B`TpUKcOb6E=1RQ^8Hcne$KUz=Z`RDH_<15 zBaQU1ov3L?ltB^!vm2p!EEwCrS%l(8b%fVXbR$fwZ#|w%eHRDl@R$(FvDWij)svgL z>KRul5mF|>A7MG34}18;Gc5nqbMJCK89wbk))4&{)Hvj=VBAuWanYwy_QPzAoQn-b z=w*_%PPM^bO+Bo^%W@45Rg2yprg~I!C49fY5fDBhbjyCxTOZj<5m%+UFQ$dOIy9~ zNl@r?wR8OT=n0(a3Kn*Lv1JUcZ<>LKo*vo(jYT>IO6p&0kp0Qao55wqrnMzHn;%lu zFeUN8==G+d;>7(0O8zZj{IT@o#U39iCG7N!8p_E0;POxzTHM@2Vi$B}@rN4>xilcv ziAm4VrWHV)?$LXjw+6I3yyP-q!}VpvPEV>lXefnn(+x@QVvz^l(2VLG@!9QNqbc|l zF&u*GBL&pg!3T&hnNPcJZ$(+H*l(eu@c4(sd8zJr1X8KJXNskqq`ENKBIn2nD+9Dy zxxXIyYE))ewA9Nmw&IXp~M@5{32hpANsP7`29x(T~ZFHvtO6~#-p`{U_ap+{+5ojE0!#dUNp zmJIRmm??`MB;tV+{%QPb5i{uv8e^Oc%6O9Oj!fH=$Lf*flQMm`6^R7Iic;?Np^B%er!aIAI@wMMnb$13c@i!u?41;sKJgXtj zZ!G03`>kcxkCAo6&FhzD(~LB#4t}2gv-aZj?hMUYbVL6Int#3V@Dk*-S><~R6Hx_m z(nQbO3e5+Uwi0De93x^Y&ZMS??{sJ9%b(%vOe2aij$TJ-oT`p%H2RdkwBawdKWGzX zCFSLMGh>{pgCMEKi&RYjY=Kt$;Jiu1F#Y*`nU>CnshpA|0ky)(zlLX|utlTZ-Rp8+4b(ji zEvRZ7Dr)NRVR%rk#|I0U=e~+<^VrXGz8&w@?OUiX#?j`tLwYi94xUYU~7C}~yNIGW-TSu>ArGs4k6 ziX~%%MyrxO?LI!zf1SDPGitG*RJ+rB_pH^URx-lA(9bLVW#;$JxlX9jHz(zRi}~pZ z6mPH%#U3l3+_8%wb>V8oy7@1hhQ{|9DlI2OKU2g#GFct|{F^Sb6**Bzi?_as2z!Ic zlR5f>khDe9274i%9OrTZ6Wv zatR>b9t5XD+|$yHTH|1(GUydRF6v)akDn#M$~8K9Hr2#g75b@U?`OL}9uGcqz5wF= z*LrjC7Z6{NC4Z!?4^#S3E>?T=P~w5Y;(fi@^uCgGmdTHsIf>6sg~=i$J~ehj+04Nj zzv=mO9}Nx0X0Xk`*hWE6=qTMuCskTtna?WYnMQ#aYMHr_TDRrtD23aeFQR-iLCf0T zjwdVg!`j>()jsYNxRp}WyJ_Bp!98z@*p#ahj9s}ZG1PHsU=2$b{T!-oZ~zhmWfV`U zKR#;rh{TH1d9HKJ2U6;gV+ls0U*Hn^*WeNxu5TFNMCuxYRnCF)cTyC?q9!VfAL{4|2ySyuGcv#mcgiy4bb$ zkBrYvjX(KzgZS{PMlDL=TX}{V4Wd=l&&z{hty%FR6r$$A(0tEfRv?Nwn~=K(A(hhE zPLwJcSh-`PsWVGLkWn4fR}M7sOn?0u$Jw&VHM>92hgk|1j=k)C)o+Ez`JLEQV+c!8Cw zuB(JPw=YINll`0Hr~)3;DnP?B4`}Kv=EbHm&z@@*F<#%|KpL)o?Vz4f#_0z~Sw4Sp zJV`n?`?EAQD=Lkk+ZWpT+5Pm*RLw)H4bGpwxatM0D_W>fby1Dj{HU5I8tE8}3iFjoY;}ZZ(c0P1B4m| zd0Nln=;>f%`pW?X%erq>EEEh|wK&x&M}4NsxiGfAL&b3n%1ENUnuEg%9I$v&yzz>? zVlMFYWcVk$u65PTsV0XyE||ndQ+gAzewW74n5DTF6Yl;wAWfe5;WeV8KQrnTz7CIA zLOUuXa!P)o%wDBqeVVg1d{XHw=xsQZaW)ub49jHgTRaCvn4kVAmT=bjR3sD&h|mGy#~A zgX?SF-;weeg_9}VG83dt#=y})rcm;lj7gHq_;@7oi+;63tt4L8!4;SO*!gpjL9Is9 zVFxeJl__OMmcsPd>4|ocE{lc5v@&O<^(gCQWeBDsGrq*IzSp^n0b7P3bmhOm*ILa& z?I|7;`Yk2*oo(*e|5+D5lZYb7{58(IPsGy*?g*&plp(n$#zRN_*+OiuNvud+f3+~= zm>903tF2>C(p~vIYEE8}GsY&|^nFvAn$9|XMvY7!DSbG2hr^KJRbYIepl)(he`ru{ z!Y0W&Kc)7QN!IxA47Mc&bks4>EM03Bqf>;@xmI;aAeBjgx{NrqaOE_QHFQiZ23-+* zg6fpMdC}F8k7=T;q>G9p?`Vmy!W4hfpQSx&N$gIv-N(i0bYhWXWQopsUoJW)u72qt zKXIkaLB&XMQY-QL$D+nhrFPS4^SK8J2ZD~|&6X2)%MAl}`naVJ_daRhcy)SEZz7_( z3o&0(qfuI3>B1l*0BuW6e61uzArrfFV#N8!1IR(U65|APQ>I?9FZ^bPTWrKn@@pA3 z6wbxrZ(BOlk26YYO?b^vFWXfl=`-; z8>I|mx7Y;@F;lt5LSIL@^6lTk z{*L6Eq_Gz&QByFyTWj}B56EJ_;NBhK7KiAU8|FExuINbvMx{eR>e7f~WL+pGzQ>IB zRA2UEtoo@jqpp-D+YGmA9o8czl%`^NPSdlSe^TWk2wOR7JWM0;9Nh(1IKec9y2z^4TD5G{zm)WM$vB@t;x$-nn&7dHE%8rc#J zTt3i?dky|PlgZH@(N$9u@pN0!BM47e)C)auQaaVV1 z=@?p&m8FtM^m^&g#hP_3mEjAl4pK`bH zsHLaZTP4uJOTck>rqGZ)S|HXE!)_8EkeR$q%hXUnQ2 zKOuT)qKDR0WYIMzjexkbu~B@?B|81-sZMkWr#02aw>j~l?}tvA`kl{i54+V*_OyZ% z6j|yVix@%h0DmEFZXdUdGL7K$RHJK6hg?t#amr0i#7Ro+4j*D?ze;RrN4AinlRGH>SV5{d7vIQRG4%taIFYcMQ316w8!ln7 zcawK&12zS48=}^^XHjVmBrcuDMducMOKTn#2&2OG0HF(~x7V4Dy$1;q0uFO3ZATD$ zA}M)$OU8|fX=bYWieyJKsgAyH zoP1Dyk(G!nv83@#PfPx!)poC6gu_6tuDoM=QPs4k66|GZ^KxnPny^4vs6Y|Y^z{&iju$gyE>j!qt<|Ti15KD1dhb~~3 z27j~5v|?rZeqHHVxGPS;@Cvl^p=q1cv$n5gR8LbS3rBxAt3GI1(w!DrkXvd4y`j0g zyR&fIv(}T_PUTy*t}Bu6VVCAxt9Hmf!RBr^2;paKssV+<)Lati?J5(f!sWLP2TU~y z6O??OUlt{kzR&gBdM>G?zpN1O{;cx!QH-}ER;s$>V2g>eVX#c8Zd{+=wuT{TBi*-ZO-P< zsLi$EqaM&AQpf9SY?O6wO+-XV)t&=p3pCmJ)**onHKi-J2-_;vVs=jR95{z0J5u?O zuA4p)dUXuNvGgQVDQG(BPB#|IOm ze30e1q67g)*+Y^CJq{6~cEOhJ5cWk)Wax_p7 zU$|xaqUz-q$zpuId_$l{DwD=Jm09g1e!!ugacM5?(25 zE6@4~G}q!`>uy446v@!ePt~@hn0#bZ&j`e?N&xru$xB5bwRf|cAO(aw-O30!y--fX z^q}Wf==Rzd9XEJ^nUj2(*>m3o_eIeSNUo2Gdr5}8{oidN z{-3U2Ku^j!kb+geI8V|d+lqtDLTB&)0gEL`)oPajnp2ro>tS|M_n`a~vmD>cErB5f zf513?hapE`r#IqDd0+WxL=mv5#_9)ki*Lv5;SW#^^~Svigg#NsJIu(@*l5nuhmKQR ztYnvIZH_9QBytd}M%ZgRha1mQwu8~em4zPqq+hM<;iKuUf1}A=7BW_$pD}Zz-oZ_C zq$;X3&0vMZ@7aqJ#NBt%3c>3jwP~_J8M zs~#$b`a%5%xFI!STElAtbJ$p1Dx@R(B$>-3%+0ZjGtI785lAgeOh+aRDped?obj4 zBv+B#FV*(DEJ`{zge2H>q`czY`uCl2&^(K6!F)n)oMj?n;Fs_bQ;txV!!+HifO%vK ztR5GQ*#i-nNVoIZQ!i8&bc0Ve^)=cnT%tyvvDQwmhtfpUK?It}I|| zUgnsJ-@`Bu-BuaRz*X6@#Z}o-DVF`Nn=n2fookbrNhkZkkc|CWpTR9xa1z99Eq`de zv0T%RxX`-ESL0>UIOmzIy|^Y~{0>oT@@oF4szln$G zeqh4KSe_Qu-1pyXo<5mq+60r=?i_h*xXTpCbB~049PB7kF>9%hq&hwMq%r7g6P;El z>^+KoX6KhfS8EMarKJe*2f;Ut;tj=QOPFTG);wji!NUEMsNmP7Jzo4AIcqWUF5tDp zi680s#!A0_lWF{$h@sH=m+rAwQ{Cgg6i#Qynr_FWqpB0lvdax>8p7iQ=L2Z53{f7& zwQ85p#lsS`=IG_7y;nbZt-aPBb5#?u2`gsKnlF#}kF>-Wn>m!Ixs@Gubrvw%G!oar zHWVZu3uqY+XI|2ivVVRBmU4rh{xnv^xkaFJG=$nOetIZCY@g+i$ob?2ux};o=j*=% zE4zHwSk{sM1>)st%glHPZW0n792}grsSY6DUVN#aJWoA>Ph|03EV{g7*tBe-h8(srE$8QD#3UN|JecaB@!T9!^uZt=7~}U6FNE}) z8A<>wA~ut7y7qI^liU)M!wXVu!lO&q#5<7{5CYga_S)Q1C}+uKR;I@%Y?*$1j}=ZZ z$k^UqrCQ+f1+%rUO-)8XYI*&X7m=+`1KIh}B2DL5yK>8WyLN3)?Tu3x?C@t;xy?9- zvst@@sM|WTWrla|X@~Kt{0{7{#JM|P;~;;+0`SUTz5K1K2pu zK@Z0p@w*oW!-+4=uK|ASmZ(|R#OmmXw(Y}-GJdTrVNI@mwRTQV%r(Hy=+&#=ie7i} zxpx~4%+S&oBspjL?LZvk41;&HdkS+EmYNya`4Kq3ey}g4$S<&fB*v(gqhcX0m)ub0a_C2FD}!?N*4r_^tsD9LbA4h4 zVrpbk0&LD`wA=Kq5CT%DeJe7}97cQ?V%zOGETJP9)IU#*@vt-MDWV*RuWV zFa8_gn~#oIg|w?oCwxsxPWBRV%)WT!;!tHtflWOPY^j}IZ&%D~%_*@ASj*T~c`Go7!*ZSdz++iukJ z8w!~{0F!hdY>pK`M2A-?n=e%o^($eC}EsKf3Y${$m5`|3|qW4?DU-- zd17MwCcEoDoMSfh*3_YqFxH{D#-wk<`V3h)2iyqCL_Jo!qi3jxZa=t%wLw7>mxERW zHL5Fx@X~{x>0jEaCi{#bu30ZvoxfcQspA>b3LGj*tRiLYSv~TeS+LJKXjl?+!6)xN z#7xX6mj6_f^%b-df2A{Tm&fw6DweosRm;}}(+i*4UhUxXc@_kFfblsgtSUdwi#3O| zWa;F%HTo7DNUgc$|0=C8aNhNcO zq(TF)UR|+V#4oy{s|S^~xrB|cYu}~ANS@T5m~DMAPMpKN$2d%}*fKR5cd0Dy8++`^ z(Rg(|-?-zx*Dc@XT1pEX0ijc8ku%lbLwiTx){RSzbMDpyHz^V^44!eia+k<^iCVDy zM3^>1*=@{sq)Mmnf#o_;`YSqFTDqCuwZg)j@(o&Eyyz9WSezXUE>! zGuA^jVCaB2_Ze$bqO>1}mG4*TlG&5H%&=7G{*hR9WY^CYJ{S9` z!MOPA1zugt6n?U4jtga59>1^t%C0M`?DE`46k#qW z59$D_)fU1du217+OealHdyFGTbz3>c1f!8hCj@A>UigWxHF62thoSXtu0{Ta>=LeG zvTP?rC~7@#Hz#K3LN1iX%MuYVRyI)2?Q*dZW_=+^HrO#t^9DZR15>gn(}e>+w@}b< zjdIuOw>dL@Xm-fJ+Tm0K6WXQD6h0kgVa85} zKRxUc&}Db&p2zP3s{iVhn{)!kb#D188R8-Z2NjvPqMGJP{T`pi)}XTHT`ByM)TP4I z`t*6F@zGpW(g^)VANL(Z>mu$1OI`iB%GYgsPS2rkBbWU*WWefZUY@qLi>Vzo(7`Qr zQeonbqBeTQ>%G!Cm+fY8u(SK(;sD$iB>`;i^W#jJ92@IKR>K*E9_ad?HtY|^R>Q&i z30!(N>`NyIv3(*(rp}Y#$-LnnBqD9z1_fkuq}l|JS-un8W?^Y>ypGX^Bnji7UHkj% zd&xt7tn7WoButV9znwy79m2*_9r@mJt_6_tT%H5)j83n9d}4kRz1W7tA{`-OUx$i4 zP?KvI=e615B*qf8ZSCi%$x>rCydl%P`9;e`8I&nu9>0wS1ZZmQj(=1u-Zo#SvWhaC z_3U3 zltWPG@*P!#bL_iDS1JjbEQX@h>TcgI4dAql=mgDAIthee#2koO%UaJ@1c_iAX;dyT z(XKOu^y>IlJ4WjWHQp1enn(M}li5B*AI3_u86F$llNid6BJ2DylUYvAt?&8ZoIxqk z%F^qX zf7j0xdyER|ILPix1F9^fnTRIpQDY1)>B>6x**sL({6t^uGb)PA(9K0jxRI^1VuE{Q z#|K9hgd}LPiB+SbkFlBrW^jZkJYn20>ZBay~0n+--IIo2c3NVTwK58l8qvp5`D%6HCNS-24SLDc{0kY3`b zn&X6*wcX<^g46)xbYr6$hUw+xx6pFvh;*N1ai6uzj3RQ0lDrjkbtwE8RDmwmS@uk= z?iM5Dn1N8UcSKj`+QJ(>41J#^Rt&|Ih;EDBq6dpE$_C;~a|pc5vdEr#x1>syr$&B0 zKO-DYaUOlQrjJe-j+O77tnAbi2VO}EKkjSVcKkthY+IkVv0Pqa$(Xz)T;`AXOKt7R z*})uFDHeX;{QIPj^d_YMyvjDwz-J@p#oZ=j6DDdd5C0`i zHIe(GtC5h?Y(I3N@ip!9Lsyj)!~`3i3WES=X>=J7oP1X8F#lPra=z<~5Yss}Jet}M zGd}$+e!A24!s< zbre4NO=1cP3fA|}NVZGcHDNhadLF4clWYH@7U(4$c?!=blg{4r>0ZKpU+9v&7rCZuflGxv!-}a!FcktN(aUvP5*24>fmbn4miU zc3J}W6!a6H$$(tGm3!>`tEi~Ye=>MUD3CBoLGyxxf2HJOt%b>zH8~8%e!4niGVnzAkVE2Rgokd4Jn`uox}|qal}%G{#O}91&+D=$^e1C zyCY~A)pWAW%#OnLA;l~Q={M% zj_P42Vl*NyUm#uwGwD*)V9!Vo&Vfi3fG$E>AIDPsZIoBP=6?m1vg>XC$0 z{@VTJum0|>pw+f^JfnbBR1H;yYw^o%&k5u2V*LH5EyPUS05M!ZWYrcr;!lsHpNR1{ z&uK`z>U04)EHWd2;;;#HvP=#+l--d$T|2v6FL1oC4GU<62`sX~7Yh?Iy?%Zue=|U9 z4aBBH=L1A3VwMSq3{91u{)obziBsTL@ZjNJXJGxe*7V=*I zXf9o$x}eT=|H3hN_;d)57-|m>Uy2YLloI#B_45zC*Z;mCF(-GPx_1ceL`gb#v{3Kq z_#ECF&$$9z<45L!))DvQ{9GRo@9XPxrD_xU2R#vB_maEkfvy}G?V*L3sYsr>05r4q zH#N88WyCNuC&1u}>%+NuO5@0k8Q9mz7})2<-VlWEn>|oKJLv1EMpMOR@)SfG=*T;l zoduwsM--2l3oX^6CKH-8T=Zv*#Plvjlq3umnH!a}5dV4LfZr+6PFkAP|UR$HR0*HiS%3RyMFE z3sVY47c##G-3wf;Jzj&>npBc{LbhEq!;nA4YRTt%SGyQ}?d+JaZ-z1?TqX@YiDuKo zN&V{A0K=E#%vyW(LZXm){zt=n!6Hw4x^=WI!Rfv;b~-y!lEZ=Tt?!}q{+GHo=cNe! zZzld}u7e`m787mcI7_HK0gr3h#B4VNM>>M{Q}@Ch{qE|r-~r+HitzrQhqL`c-DWnU zEU;sGgErRVwNx*mA<<2Q#aY2ew~+*3`tAjOi+i(lJt-CB7B#t>a}_@L6~Wi`%a!y44!k>FMj3^+c`-*(rdz& z;1+v-f^n3rDp3Gft%z~WY-1;@rm+zodq(fp=Ime9IDI-mO!FU(m7V~QBz@BhOBQal z%6WI@(?$>++P}Z-;mp|{dHc~F-NgkdpbU>In)BNqaM{R7Ts731hi6XyGmQMX`JCD5 zfMg5?d9pC=`DCGRQc=z!IGRVvO*b<_Vo}a|vZ*m{>s>Ll){=ptk^SK6A5)bzepU@Y z%l`J;FYk$HcyjypAk}${E%w3~wUO7SIS_XKOpWS=-}ga=gyF{P=E=Y!K>@1{ReM{d zFiDQlMyJIkNzn1dMKsXyV#Mh6!~e&AKlB7G%x0BAbFculPrZ8kA#*`RZthc2&u#h! za>DM(8Zx!)4H3Z6PqkUEa`!)+N4fugF%QI5IQ)%pi~ z;%g3p`tzs2ouXut`&;0{#gLqW0uE8ueR~#$Ke_%Q3J0~w$lLj?dWe*_ zf%z=2K3x@tT@fZ8+D-~#^kKI#L&z@tW!C;eApXG6KYuo?1bB1x2&H=UuT3$B>_n~2 zPE8a}Qwi7wUv(bXsS8eIrct9mbhTv8smehofvJ6vS^$Eb_soG1@GgMnmE}`ia5%1G zoKCfwAz&R-gRz9plMA2CO(8I|o|*mWV!~EBCC!a+*y}Bipkq^%0h*Y~@^tA~%=xFB zUagBof_!I5i#~M}42PKwoa8AYtnflaypWTPCN1Yh*3w*E7#QtHyTW~!N<%Ze-$Ho! zhBQ~3wj1?37UCr=2h-NgJk#`5@o}1JAE3ME|5*4x)Q^9vX8-=ye}W6>ffCFF9slY$ zX;!#LaVa=frWv?>mCxx%GxKG?y&kqc;L_EVnx%-oX(b38kV9lM{Pq-`IgRT>&gS6@ z=EBhU_&A^ajDW~$lG$r_Dw2mMnN)Nb%+}y|6Oh65>A;T1*)O8be{b}~M$D`d@5QEl z4s4*-huTGdk`1|}KWDQV%cefKSzqnDGlIs3NS&He40{Z2r)j@@X}+CMRVucIFF=6d zv4A<=KLBDbKl^^36fWPurRTo)R{dfy(5ZQh&ZY3v?cScR?auUk%fqSwUxoTITOo@Sdnh+LihZzDFH=Cybhx?A3bdyY%VhYji^0Q)Om>1IdNp z6ClT0G=+2^nNEKYzu1{6U2FEgz-Q9@)+7ksA9WgiHKkrie7~Q64~K$CSq*+*%U~xQ zml8OD;+x;jLg}nM`^{D|vhKq!@`8Hs_{4+~kVf%idcj-T;hu#l^&u6WEJp^BXDQp6 zuIwCpZl=nXtx&u8#w0P8oz)6|7OeSRx4-{U)9*@eXLoElSz>sGBbQKoL$NU9lF2jm zHvn2UWbk!f)$PZh1ma&$1@P&eivu)7zvGZo``JuPMgdH+PjJ$Jva%;Ac3x=(s2SQ6 zg*)8e1h^K_IVY_2YVQ;{YNl8SKP*cwUzi?3)VSM8Crz`B6NVkB)&h3j78zhkz3S1j z1QZM}qWCZLgQx0qbOb!9&O9BcWHTSlqrlW-nYDXIr4XEL?RMSPXK1Zt1^~n@C;gB) zk_{fp*Yot3d(W?_@!p z{kaNI#R@rFoKUe&2?M7?;K|C)LUhZCYN`-X%j@b_P~S7spHS<%)|)4Z&i~PP!p5J4 z2w1+W5D{k1KS2R9 zs&sl6gJ+r@yh-A6a{Y(jwijEGLlRg6u4O}Dyz$o~7_c)E1|WxcZ_lQAn`H;S=2XX~ zc<^N0>+WgqBqWD#a-v^mSfX5@XK?& zf94zi%PXt<00GzU`H-9XYh6ws5Vd~$MtV+)aJny@RQuf5;Qc8b{O~E)db%xyS~646 zHo*@Ncn6Ok^HVTvQ$SmaosinyWIAXvDQxC^6Hi*h>yA+7W<>QoQ6rmL8at;>N!;DC z&$YG+Z`K!z#lgUEL7R^A9hQA)}_(OLtT9LU7B+zO<82vwUqkfT=h)GA|)oyZr`O%(UmyOfFIsoU_+Ay ziPo&zYTv;`pfGwh0E2%QlqObw{oh7>?K=SC$ER7O0U_G~2s>$<25Yv7 zq_?F`5EU(<5wIdUv z!fj)O*#v=FGOB-$wXdFMJ!>%N7lYk%bOS(DewSx+t;U;}!Y;dH`kCH32)Ksk=G zTyp;eztcvptfi$jAz3R_^r}kfOe;_*j0`ye$eJd8BNMN<;JwB`BV?!R1U}tg)|P+~ z@Fy!kCHgA)2Z>Dg3B5f4opg>5HYkfOGMz*T|5s1{@6q9M=8=Gcz;W@dL1~)5CSvb9;{F;-b{yj|*pQ z$1Wu?jAH9%hi|ak^FL=$tve_f0X$4Ri2`7OwX7kWMFK*^^D|7TscEYH(Ihss4H5re zeCscif>|G^tw68*rMddw|L$-8+T4IiYGr~&|LpMlU*pqXCf^+3wnIXuq`#7YzkKlT z5WwMrv#7s0s=oF=Z;1ZOK>wLf`P%_YJI!kMkDapr?%-cl0b-Um=y*f?|LfVKfO!+2 zeaHQO9P+QZeNqTW2nz-3QtAKm`N{u0+P{KKIWTXQso#kH`m=v`+!R*hXRwUk$lL$_ zd-k(KQSB(9|IPycS4%2>1sH3gB+l*6lXL#nK>vAA-N3wM*tg#LXC307fA7Dwnk=oe zL~J}SbMW8hrT;L1X<*(eRHy!4!~DO^UZu?$4jmtidjEet`+uDL|6(S8EdPI;{69|q ze}nh`IQjn#*M5b8|3vctMDqVG21mp-6NhYBK-$h7?LY{^+8w)H(0IxS38R^Wst@*S z*Un!)-5|nDZV7Vk+9qtF)geY!=gw>UA9r4w)`1ygCYjUyDdFwG~gtcljp`l=XoX{_P3*;b8-+<@e_%k7cPs~~;r0r9Jr(B8QVE}P0pK~>Q#L&^PpO5?j3e#|0n9s#R%+{$Y8$R8Ka(%9S#rphVghB%LBG>ZkE z_6HNN2-{4Y`Xm3w5`1IXnFxT0gx&dYONfj~LPfRxPPb#KLDq_dX-A@f*%G;mnh{CaA?3eTQ2qo!Hm7%5GRECczuID)EEjG`T^eVbJ z%x}Nz7=CE|9cpn<+CiYcLRWb%%^g3rjg9M83yOZ!Ee3o4euuXotSOf_&rr|x&6eRE zf3G)s=<=OA&eN}Vq$)gwH(zDT^5D}B^tEkdsD(v&sX?dBtM92TBfqrW5w(f~U!C9Z z9npGOWxgUVu91GOeiy9{|E^v?xh7)GTx93ulFvhbORaD^c}B;cDnaEHEJX6~xWRK{ ztx^9DS~?corRB|&PR7Y3#ABk_YHwfC7c^_@3jgr&{;^&QCCSKuJy>BSG~o*8>&~W- z^<07;nhN*L+W)bLx%#q?Nkd0)DZhpv_M!v)HS{g-Ul`p;U`Y9yz#3X9h_q zm}4JzI(0v9($%ZeT8Hv{=IRo^hz=Qe7_P@5`E|cf>f>kolWK(${$uLRV9}X4@r%Qy zY(=Ld(=}H@G$Y z8v8h=Jz*?+VMA@q)l9lA@C7Me)z+gp%-nbxs|ACCJ|1@;&0hdd-J6CP8V^|!=@z`&S98-$*tyv{wdYs^D^^U5@dzBc`Hkv zPGCiBOYhz@vx^az6|#t7G)hL-y8_-v%EM-7j8Gd0^zoeMMpvsi-2Z1lC_8>6hX# zMuUEco6qdGKAIAfX*dQBJ24WPl#3m`wT0kd1I3m&&eSJor0lwwr{NBaDI=U$+BUA6 zq14LsSOzb4rMPZpJe{|7{}8J>V%@f}vG_p!dq&&Io&AXoPxH^0&Kro@Gov{5tFqH{ zbIpwRiGVGdDDLC;Z$79dbiFg`j8>w0uwi#7qWbu2kYbv>-B0pHpRcp&PZc`MKc*Hq z)LX2iguKnQ?swU5lVICEs&dRvV%-w%T=l#a;jVW7eHhzJ<%^(WH@zjJmoMbRhuYgk zsK>%P(hhJKeM7M#s?>9Ey+eP>9wV%{jghWlbMEGNJvg*?;izQqxalVp4o1*SdI}0L zUPCy=npIPtBO-RaX#C`0@3E$0+4OReXx{UwM-pn&HCC`=g6cU zz}G7r2bp9^pWH@GVvDisH!FBTzpLM3JeVa(31MaYCpCAEeFS>1RQYV(QW-``Hhp3MCF6&U}SEtzoV_U+Ka`HcpV$91ooy z62PP4f?^49X?K58rnK9FHCs=Xo_<<_OE}6c96pe4^YVw?AHSK0TEAhpwlo@CVV9-$ zQn&}wtIogPWJ_F-l3@c9vV@`IeTN$Pk6pl(oV+bMVbv%EA3@W(Yx>~!j*L? zHi`MsTnP_W+H%B9ITr;JuPTo=QS+Xk_%3eb$L;!Bw<=3L5p-%!9LD&0clgaJwn;QmprbMcqLa`{5yoI#vGZAVex(%{r?1 ztnre`;{5>3m zV7B0^2*1qwqUC9f|Id4O*PV0k4c2BkaIJnpRl}7KyXk1`1~2RQrbvvnF*D7M;9XhY%Ar8>V`rf7 z+~xf9WlXJfcX_-#B&0$lZLs2j^ML25wNdTsE*l@cw1vyFQHYE5JXT(66Y0-$+M<;` z-70a*-UIh>4UT>H&PYavUq83P|GHkxOm`?Oqz7z2CAdmIR;gIOmESg8hBB8t?-+I$ zW$BnQq@_gwZlZSl(tR*-_+wLofnlz1Eo#CmIfvSa# zZWH7DOs=QQ^&0w{BNmIOrIpxrMG8&IiPXa1?hw$nvuw}h9MtrSDhksMRLw{xWn4uc zKgcS@qh~EQetefTu(=*emNr1}+hYoU!6|!PwM99NEKL*_QK)1f${;T}9^vvjnGD2D zA_Rta%>A5al6v;4-As$;2V&(*UIO56@z9g%$zbsk@3*O$KBb$`6A?DZXwu4Rh_Bk* zzA{|nk;*EHx(O1iy=@SylHlzn9fI0)ql*Ww;!KWuycSSbmK56r2b0b{vZULa-+zD` z4B)xv@?^E#_8V_?Rb$3xVqvyc{T0rpFN%e*2}#n_d|O9FQr8@opK^Eoj1^Rk;HWIz z%$%py_lf27tGR{hE$4}>O+r#DdZ*KDn^JkqnA9SD&9<#>rH^gAg*Q~RU-4b@P5ZW% zs3w}YG?MjYKAftrRjf7Ie(A^!H@4LS1oacJae=yfQzrFX`Yp=a_f~;?b$!rkCEmmi*i>dxU zfb)Oit(Vw+unB*ma`ZFbsINrhfBwo~cdeip-PLhB4hqbI7P|oV(f3?PPU2Gs)*QY5 zD+_-ER~_Ud)(qhO!bBgL9Q$FEM=mSyf3c6-5}sSSbg^W8UCvAb)zDgXX8q5WTqi65uG*?xG*ZA9tx_Mn&*q3%M3oLYlA-uITEEUfBO=$8?xkpP7{A|5dSLBfDQUX`S1d_n()Kp z7Oj|%CoDitq;9Q~bK)5+dcr;^?;AoSKS^LervwKY4he?n@*NmZ`|dmb*R`*`?Or!o zP`Jt`KI=ov7mt3EZ!W0#KcLGq4+pnjl$#zuE3#^P>S#iUXh>zNr)^7DnkPZsc|(3R zT)H^N=BNR3gHdM$V;3|`;}92oYm^`!V$~!e=dVqj6M?Yd7Fw&GIyttol$!UprgM8J zr>i7BLzJr+Df6zuTOSqptSIrldUh_5I){|?6z%^*$RiJQT!Z52f2=IQmg|RnMZ$vG za|0&Ho24y(6J^dtLV06w{NqJh1Vqx~7yqldX-U(k9$pp73#R()f{f~+cA&Ng zkq-di(gp1i6&}n@GEYKO8ad5cEyipDl6JQbv-vlI<^M~O;?R_@Q-kR`rUy&ROQH*|Ew1exx-a6Vv_9B zlc!wHee``)@&b&k9a$rbYm|0Nw;cG0RLZu;u13Oy8uWEz)d)It z0iUVo+K$+^RlH*_P|7xT{_9c(q{bqL*)NVp^SIutpQt+i39P)#mgYC5n|$#h7$EgpGw={}<-zXnma z1-qNj*oy}aKQgje9~}P-QMY)iSb1*AOno@_^UW!o={65m8_K9^HSOE1jc|`<1iLA< zBCb9mXXTeUYkM;W8P8q!Ki?KL=8J^nYDw0EmEUjQxpk#x8K}&jELt{?w`w)QSJ*lh zfc&Ta<^P2^M))Q#VgfabUG*1Ng7oe(^~NY^W!H?X3deG9cgRM?KSgVN;vt6(oD5nF zLI*Ju@^sG}^-v>xA2*=p)+6&ozM<5l#4~o(6On#yQ4b1_AJ?1G$!T4fJ=*8pSzq@V zY@mUkKX6L4ij%11E&F0rouwOg@6o{G=YliyoHjuSW%D?Pzp-n+ziCoPfUI4k-s1no zfAV~{#J}~ZAp&pV%DP zFCK0Y@bg9#gn1k{Df(u#$Zvn6{&mm!^MP!ZOLXLrB+BA8j8sl1?d*jF=&0C2srXX! zziY&U6L%L{0LXC*8MDnb@O!eY6@*{F#NK_ZSo+#KAonGa|8H>u+-2Jr2i9H|XW2%P z${v=9F=>c}3q=W-&QJN*!B*^ef;h2Y7E;x+lh1c3$L8XZ7Yp~ zhkft3TkanHkOx1OI`AOzRa+ zgga@HEtg3f*32jgQSS{`vx}vG^==dW4@^w+PUr>;-(rin!*4_dwtmyUQ--;QO7)sF zdcw__2&#O#yj^!y<*@nhP5fLEk74ALoqI^J>PB=*TUotISzjds6tYZT6QA z&v1_gA}-qsc7^iITG2R|Rtj|~ynGWFW4cH%){sH}Gp!^Zai}OB1jIt;|3!Y1B~~f5 zc_KIa22O6Fj-r9e_;mlxQ7X$DXuEQ@%G2x`)<_CWh)eT(^bu>}&zNZVitam`=?_n9 zmLmDjbUBBztW+MkIZs$NHmVPKI}WiZ`>o?iW@k()46%XXvTOM*r)Lc%#&0^#Uip%MLp5PT4%##e|OGxV8 zEgu9Jw}3&?RLRc;pYo`#&X$Bo=)M}NEm+SDt=VbVTLK9E%-Ys^v|+k*r`_YFL86^V zjq|VK@U?VG4{Ku{_78ntg{HP|ZL$E*>)?`l<0qHwq*fXuOLxFkjx`!B+}qP1nhbw; z+pf#9Efmm#r)>oo5r@sXe7R9sOI_wx3rRW9?htK2teGh2$-RBWo1gnR)7ZrEXBTzd zAuAc#JOY2cRS$BWS;c6%xS0zr^Lpj^mO`RTMwx=L#k`wd@VfO7pdVhI=W+6w4C1^( zvWgj;Y5E;6xjt_$1R@hGpFBOAIkhPN>aEa@N3=$@P?k-*#7UL$-RZ&PDN(x_V|CJ`4n>hNObyUx2 ztn(J!4;1fw6}&^sp1dS>g3jqMDT8FCsP#+xL(qD6DG5)LeuNU4klY16^bHytwv{E26bBL4+UD2=! zA3LqZ(KJSvwt#Co|7q56TTmA87tA~+(I6k4uZN2F<}CNoY!zrR7eu`S@fED$B76&z z%5s~6&@|qD6O2@hgVd9jnT??V)E^@>Q$qNtp})z54)ocZzJZ3TaL5|~;&L~tXJpi1 z$2hOoYpK&RjfgApfp?n2AyzMA^Prs5)^O4jr4ap0ThyU5gz3Ewre7a-V|bA-s7H6= zT(!}|g%e*auHq&eCX}P}`wqT^`951ub%60qbj?uC< ztIV9Fv%s|45VWwHEWG1uoW0r^APr}wD;x^~fb+9H?dWf!S<90^x!RWdWIZN9dtHL` z2ww`WHEsp5jCjJoptE{)Q$j`UxOVB84s}nYSIM&8ztZ;xpgV18Z$tbyjmdFv2H(Fh zhO*lFhU4!5kHD+%9J-;9Q2+I9K81X?E!EW8YbzQX-aYypd4MNchw~QPt-4-=&#brZm5z$~Ls0LaXyBy(IsQ&5dTaS|Gp!1ND^6Ix6TbF|$^Wdk| zk^ZZ;;)D1HeduqvgN?Lwk{_>3d`S~s+8Q+V7JI^}p4`7@G(qAMC?6fcq_DVulnpy7 z_kQW9JNR-wN(ha{*3~AuqB&ehl|c8u;^I3?ZOD%NU+-w+{E@KOBXptLd1%aziX8mJ zjEpeZ&$ZKf4S(C{EyX$qcWg*yppZTfs@ztMYj9gs z_#_d8UWzs&JL5}-PQms2lq|?QH z60q82F4>4StVLPrJ)F3*g31UREl0V(+{baS+g|Z`r{6?`GQpT^$(BI}g%l0AdJvBC zn3^gnhz25{lxRTsYf_FLDZjx$s#`xkMpjee+(Y-;PM|t z?rM4&AD*^0@Z%q-w4ti63$Vf1Ep}GG`vlLn{>gP*%NZ)tm~JnR`Cj+^>BYje@8bDn zJFm^hG@2tw@32ANmLKv#TCLy7awpOG-LW{xB)$wwV&`oG2hNz(;4l@~A9MmZEupgV z{M>(Su^&G5P`bvPDSa5wX~{a{gDp`ZmFQ1S-d}%h0?wbQ;*MApq#aPN{SRgtF z4>?k)2yPdE4!f`c*OaCOWk~EXl>7r%7nB z)1}}~Mpi>BLr$89@7d1%BSMYWzAac4xzle8(Cw#M7yNLpT+PLIo5hoSzB)&k!tP3X zm|bnDQvF++z47gy2&u9<)^gCk$R;Hc0j~QGw*o?fUtPYSlDJ`jJpaQb<$1SN)drFg z=>l?YXxN29m%!@}8AOf+>D1^_8LJ232d(~c@gAB*Fs?x@c)6DOETAm*;i8lW+n?sEq^ReggylJ_6lYEr5r}4N5wFQ)Fi=^L! zbZ8R4?R?v>FJA5Iw?3|gr3WXOVXyQe`zybazV8uD54JokVB(I-A_N@a{C@gn@{3;( z2KC?&M+OSCLwPwdX%h!&>@ANe`VM5kPAFb2`@NBQmabm%(4L*^Q;)?LtOt!6DJ-lk zJT{x3QcrlHfYS*nCH7k)8>ZdI%;!7g{mH3^+NQgIF8j8`9!yxUo>I&&!L=*Ksf5TH zO0yeS;f`Uvl-$?_vn6jS1j-Pj7N*D8I6pXLO0`jPUYg&ne*zSBHv>0>#sPL6r{SRM z76(yW=raMG#Ih$uKod$rrmf(n6RBoht07f8I0;@=Yt=h8vs=K_ zEz(j!WhfnXj@uJ{Fl%ROsC0hRIYQ1||M3~en7x2QPX*+~RThlA^yBBfle|cXsf5w6 zAj9ryBiHQbqZg{PmQ=HkPo1QI>C%4iq_I+gt4~kCD0lt4*raA&b`1L9O1@(+rEQJ$j%poxLr4#QLuj<=0}*qTSq2)UuY<-r-Fe ztS=N$B;KfB^SV^bJCUQGM-!2+0JLWLqJ4p2&^ce?QYZ=WLwvtX{giorOx)5Uyi(%% zZ1bv#!?7WxD*4ItAoGTV!SH+h)}aa?d+mKj@Y)br(&%Q)1VrduwGS`koXDnTP<4z- zaD$-H({T)o+GB7Rm`d)--7&iY06eyp>51HwWWzHEF2I@~dH#tUzw#KuxE;1jcSExT z^j$L;vFXd|Up6y7&=bl~&4=YivHn<;3?jCPu;&!l+vP6MV=1N_YZV8%Vi`xsq2atU zQCoSD^n?zih9ym+QTGfW;GtAOO`XcXhp)_C%uhlci_+;m{K9>fv@YC`k^6IJ`+G$4 zcHnC64Vk>kG%B~+s+xayl@VfFse;&bZ|17AAAer3nlm=_?q^d-=+wRt#7}vUDz2nn zs!C2dv4k#`vo-+PJ=&AJ#K|UrDWJ(GBe>1Nw9RydEO>K#>bZUrOn%|+bN9P zzvoN!(g-m>Iw8nCMg|VA>uB{NLJGE@F|N`vQ*siNN@YfXX8jR`rBR87Ro&2eq4oa zo@>b9Q<(XwJk8Jjl0aRs>Yj?^!P0_RmFm9=9G(OUGXvh;x3dakPs25ZGy%=NIjRY_ zCHI{#%*v%78jCHH?Dc0>g{?_RxE{Idul4}Qfs6t5>7A}ExHH6O;$`R*7zFgEg5>V6G0h6fnRS{(~$ zC(bKw1RD0P0nXrcasY80f8~fgYPWf!v_B6v}S2IYKOQ zSmPEb6{d>_Vh}KCs@%oa6x;JDkkkJ|3Q$j$K*u6sbfAfAH~2RBAZC98FMCF{?RX8pV;G zpF}av>xNIxXO>P|$6EuuBM;a$!l`D058kj}XY$^gnFq$5F$L7&g^Z9XIhUYFKdKF+ zMI3!=S6J|uPJAOC9NF^xpLWfe@`OkTkLFRG-rjzr?$I~!FENIr@M9h%B!O;(CQL6R zq(HKi1FIuXt(aq)fi5&RKoj0wc-4(d337z`Fh-AzglZx zE^AjGrJvo2TQ5(GKaU z8sz35Us*e0{3|rj+x^Mk@wU?;GV7$eZRu7@qoarZb#5y4{0_p+ok)#f+S50^p==k! zk)ty!y$9OzYwLytlq^(l zblJfs&hmv8?Q>5%fceK}W7#JpX3hSZ{G60QOMNQZkqg8} zAqzRrLCH!W?C+K|CA8;7D95o-u{u^%YFseKZZe`9vo{O}#u$=~9dJ9W^@ZFH=$^i! z`jQ$PrnPu%K-};&JTEOBMAd_z^y!&Gl#Qm#9M&-s;?@pb8HwJD^!sJ=*z0aQTp2*) zYZEK6D+bVzx6h0Rlsh*6nJafDhZly3mkuoW1P%}hu?K(X0v={_CDpiyB85W)%vmX| zqSMi`{8ze3bq?75UNKS7yoScd4c2?%~bYHI9*Mw6VSq z1xkT!%yI0}fT7(@dNFCJOv2Cmb=8}@X_b@M{MNHH?dSoM>|X!C#FtiO>yNv6DU?jo zLJ@~w1w=*@sa$j>9^7^5bNLP(7DZZ|GCEpz_O&zN{0X@Fn0O(du|Q@u=W*p~+^P5r zagD=R%}XCUD72azx`J3F=64Rsm9t1ZyvCU$n#&fE0)Z?+*K1J#4b2nsDw_)Zp|biwj!^t%(^rZQS24LC ztA0risUk3lzta1e96Wpzz+6I!4`I6BPA)lc1pny_qIdG-dGlKuQM`~8WU04iPG44_ z;qpGC>u3^q4e!#{^Wk4|J9}2EW9n^;#J4HT^)kW0n}8>8(||3bKuE0o~)*7T8FkE_&3~eY~l-gpuX&*AGKO077v92L^CXu3h6_G9AFm z0zWNcgL-}?YQpuY&z?{%+f-9kTnUzCo@!ZGUpi?rPjW zQYx`7{RdVAVfOMlb)V8$j-*td`67B~?yCULTtoPjsM^o{P*T}hl&@$@k63dH( z1^QGeF}xPMNim~+zx2HR73q>zl|Df&=%VM7yd{3X>X26rVJeAF5L%dIIGzH(%Ulv1 z`m$O9G);GD`>UN#?DetLT1?J~MvzZ6ww)?_fjE>}aIQgIyOXl*sF<-fOZMnEDP2*M zh_nuzvRDpCUgY#;nA>=%Gpm2EkWmiqsB1=}i4ov3&OkrF92^S!Q#{WP zabP!@Ng}DN9c6a6BySUDQNb z%_u1(#zS9Ys-r9A8i5L_AD4l+H`5Q%Fpc5(6gv-ITSslbhzFrK}msuY<1nZ}Jw8e#tJuv_|avKF<>m2#a=RuTLBf`M$wd-uUmevXGP* z@B#Wa?|V(zAHb60iTuE|Mj+hY`oL0D{fH%#Iv4??_-x2Kg9mSTE*WyZMpB^2_qymjQCf z+K0QsEg^oqBnA)zr>fMaUdmH245Z+K(6BD~83Ih;=o;~@X`ws}c<;yIumY2HO2pBp zNsO&l5n65>CUe9K$jpyd<`?Ysf79nNLKNx2; z6eAH@RLZ2S2R!Vl;RkKr_fzL$1`UWltz5Ox4yNYIX3ybaPZwfUw@poL&CP|? zwvC4^6!Sb(*}5qvK~yge<3uFa8vb|XL`C>22be!jUR*_L`rj*nSu4~gT@T=Idj5eb{$<3e$$YHVcz;&BT@n#r&6 z9`+m;QOY4^MNzQ_niP(EYIfbf)g>HgKYx+NRZe7GNiRHB?SKPsVqmE*fiA>~bsv7d z6=lP@>cx;OQ4ks^Ko?5CZ$E~GjC2B@Aop83SDq7pHkyKnYMibRNANc7v_7O(H?P6d zRN&$8V84AB%QSvA_ToK?7oO=9pDh@uHEhbGN)qL4=1leNTt1wb^D^d>P?mmSH1djx z6_p3x!`|F&rU2PL;!kmhF%#LJj@RWi#cw7G&d?qP9BtvGRx4_|KRrz z%$2CSo*PukPkPs|4h`Z|uENh>F>?6QBHlFcde*iH2b05m>RwpWjRw|ZC%ZI4>}~}Or3m9>mV9ELJB|>?QT(Wg~W2t9|6T4 zvTbdp@xG+8iWjh?%amM7$t3mqsY8%i;>7G9KbUi#dO7)##poz&9jte})xrNehYT5; z$cfDpVIO>Q!z;GFqR!~$rZUZ)#4_!(NUnHj$shW=1Q+u%oN;FoCyEl7wPIQ}Wq*&xRyH1!Lku{9E}9$gEC|4frqOwI(x zdzB@3rzuFdmrB(V*Mf!>@6@8%f~ET1c+YH+^_2(1PLSH6@&A+**^}up%MAkKja`vz zScw*ri_Xy{%3!@h<21LJ4I!dE3?S`LAAIog2hF9732d%ll zeEG(YyTqDraiGC_#aia^Uz3tqc4+}5oyRozu5c{Qb#^_6f0OsuyET@R#~6ZA9mXsL zbvO>g*S`D^(<#E4pRA-tl(Gq0%H3a=TJr(l0cjSyygg>r@dqBih-O~s@nj({l;?;Q zLPL@(rc7pJ?$p8sfpcqFqF9w)zpzDY>3ws8B*s`VRp)TOHopMWl|vShDMWv(jah41 zyle)wjh7Cci^4_krrg2WmXAJZ?aGEj{=l$_upcEXdimRT#bhkb0@v)thBg0QF7$8* z9#v%#4r_d6D~>dg@@I5-+puqrtCuYY3Hmgx$*(IZV}Ow)!n7c-oO)6|{Fz1U-Z>PB+sHR?M zF7+V8`{QrK{uG#Euc%+8Mp?ZWOvNyUvGTjenCsp>6B!uf)XuP};lXkcSN}qTe|b>H zdbrs=O2_A>J1-rgv1N!bv658nV^;e4?63ag5!?1_8N&GE-;0~*)}|c+%V?C`wjJn5 zVfY4Ql12!GPo|Gfz+gj~-#tp4W2y<3k}Re02&D{zuS^4u5JP{;0&MjnwwH&?<$$3+ zm47SSnRjLZ{K@;&--Rz4agh)BPkZ{LTxjKI%`M#S3h-WKNP(|ERq!QB{c`xe_ni=_ zwQdSbn94qOs9CNFuBNy+ae?5F!s+O__WkWJT7T|2sN(Sa-K5*uuN)vzpYnzLP!BP_ zr$=?_RsM8u_}4Nqk5U#K`ivcSTCs&OBH*doTIC047&5i>?=)qQ()C-rX;*GE@>YEM^}`u7*)nvD0JAPb ztUv$%Q+03`=6DFPwY~qCeWlIKvDi1_^D4)I`$$Mv{dA?z;@?PQF95IFTbjPan5H@E z{aLbsSV!2O2A`^{Msec^m{iES#RI`9uq(9!a8;BEt+)aGY|!(il`HkNxp2|85;5^E z3Kq%FvPvk`iiodX8oX_^iM8{^K-yR=pha%K_;!~^+bQ{$VTG-fH>IARA8nYl1d^3n zuPLb2IrFlrmHLn5A5e&-SS@!d6>1558!u+yG8yoG%47b4>-$J4{&s?`XM=C#ZUWbL zsyvSqz&YO-@W@RV2q-$X{E(8Z zh?IyqIUM|mL?!a^-K>w~!!2wKX6syTZ=R`DS!L*N^qqK))rb-Fr-hf)z~3 z^-Zju<|(k)w{zP3LC?swQ3_jRj#J?oqk#c0v& zZ)V?9oK}s8Zgzj1DIK+b>9sgtxTG!UyQyPUKAcl?_vQy$GX6z1dkog;Mx6aCM#8pF zyE)Iuov#O$kEzO&3$J|zHTT3(J8yVY-Y8OEzDWEK?F7i41`){=?cYx8?gYWrv}HqB z-uY97_oT!Bfs{wAk;)=m?-znfBnJYib8EHsu0CXhP*jmmx|ghDRN9_6o-2rrYL)9p zBlQ`mP?XVyK-apSk#k-U_PV`H2j9_XXq%B7-W!qbqqxda>e}0inANqgKCLuKp-wgR z#9#$U9b4QuIVy>52{F?#`AMJFwB0IJQ*Gx;ThK!SA&x_Q0+;i;s#%s zd5YfiuV_;W#YxzDX%t^S0P_*YZz)$27+vO?rOob^K8c0Ym{B4L;fFcyj|X=wT?Q@3 zNp=C3JT1sHsdD>iU~EY z9vxbnJv$rwetfG%p)Y43ca3FLUjY?D65a)vH7Jv9lnz4D0H>=qsHu;lsH+?$x9Kxb zr_0sR=pkT7DsCHd;6+chjskDwIqxWK;^tbvy4#kzHi#TN-CHzSXb$)lWCIwS4Tw`{ zE`eyj!kW7PS29wn1P@lrqZ$w263jVg>vh2N z(%J}8^}dKxJx*+@fP-8`3Z8TaUquC$$$iwl!?s`ozefmihxu zlE16={;Q1!Mu!XQYiT>EzqzvT95iwL)k0O7{jQGJpZ z%^i$;e{dFRHfwh3(t3q%_{(=VDx@rhZ_Skw9q8ciD%}PEI|ix;)K6lJc+IV%N9U0N!k=7x6u_ zlX|)G`48ihf!(87(Mh6q2hrT`Stc#M=6m~7un9de5px$ke6aQA>8mORF@xie zF>VleGaeCD2e8evCTO5U4IwwvWNgi~qboz^)fCJwJQ=OThr@O{t{C{*Ob)`cn^pli z+b#c7q^kR=4Sw(&>^d%%@cVd@|IC#$Cs6U>_Bt?NUnq(WlXLO41w_g$vpYnecX$(D zDqSs3Z2DAZmtGC=FnquezMoGc; z$)7MtQJ}BRwb#SFXG?3tz){TE>1X0)=AFiVeklhYO~osDUs9vUg37NAE=p6=haYYS zS@7i1+CWZaTKTrMR~v?XxUzyrBnssZCh7y>nKAGL;8 zP6)}>b~%b(REoOawlDU$aV_g(vLMRvhv}5}U8A%ooQ8d?{b?o>r6vJ$I&OrxY2OQL zN1)&eLW#}Y;)hX`-v!TC=^K43l$gdEW@?=V0dHGMrl)2(%N=6ZV^aHoDPap8m>XLs zP3vrbS#_2En;`f5?Qv4`h6r*0*UzmEdUzCXuIt%!jHJu-3UOALL1l*Bac`x^HR7_~ zgQ&4)P5j#vJ3{+bC;hKOEsAc9yBR{41B%Qi%ULxYmZP8C$OQ|%r{my9oW6}gcK({e zw>TLK%|ahjj^VRjbkqHmbcZ!Gl)l73Y2Xw6%upW_uA9X|V}V|Y$q|UZK&$(}vOZ`8 z(E`#^Bqp_almVsDC|B%> zfq9w}4(J*sIWw+*7WBef@$!3P1Gmf)N8dN?vS>?Cy-MJk!?Ie@FzXK(h)%?w+RQEk zwBC2Swq5pTv)>=?I)rUkf!I$PB$rKqY65##vD>2NHvIGa%c2=utpO}x`Zv|(XBpo5 zBeQC|>=Q1=g>bn!r_~y^0hW8uBe>~0eC4XeujJ_T78E%fE&4ovn;X4=Oy;g@BTBDy zI(fA`Xp3qT#u5n|4L3-PT>jS2?9i30Uf9BrJ6FwR;!=KYeYfI~@CvMh&=H8Tx8+i* zHZDZHspZhe=pA6aW<o5m3G2dQd2K)CRj9#?dYR7|p7b1y?4VlQR+V2o*Y2BzfEb zi;aA!Nv)kz2U}>`!D>`OqE(;-HIH!n7KjB8hGLykkvgxmDi6xu;2)8jSQ=GYrzJy-KW=#)S*s-~A96c#0=kAwu zsXEUHl~i(mDB=pNZ)K}xGxN$d>E;_MlNvUgvH5)TM zvBh?~e9;OOPpL^G=8P3P#9C<1aX&7t^V~(E z0Y%=I{HN1^h5k^jlU?y*y3paT6!hgm?};)<>=h`X2^!Ufc?`Is4&^Gd1Bw!EaZwD& ziY0eN2ko6xwk8ei*{|9D1zVCbAQAmVxy)|t`BI_pBd;BIYEK3lO=gK&iyuIS|Fl+q zXn1O+&&fr%b9+weNtr6HKHrKra7v1ij7>v@+oM(u&~o5CoYSy;!+KvB>y|DA%Za^j z_LLcGCL@!zxn5SY=VEm>$eA)mrVL8@)5p0HP8o2>oTkkN`d2iDb9~^K$5TTDC7KIL zii^zyjcCSQ$<*Z1RP|3QQPe?QfZ)V?M*UECNvgfrhr8S{F3cR+6ST2OTP*t0i3 zU1kWrs?FWRcG$>xEv4u&9V|ze)MY}0yJ*%-#Sx_*#1t-l3R@5ND_h_6$@mVkoSsTs z?rtfh-L0*8R`c_qG%kOI-d9%z28L8I@@)hUnYHs? zUo9_9!myd=ezN#j>pwrRTyDfJ{a_odh-_#BSi;9hm%}C@nJ0?%a=wDX=Ajniec=bs zrfNvrW{H0Ga@;wXnBFis&Et8W{ANC;$C_xmF6WG4NXxW&d6To+;ibXc-(HmHmK7o{ zt6wv=nk$&VhUAIJX7mn+f+yM+zloYot&Y#V2F5-7?Zqz+qjSZR_hhKdnAdX0=!J4< zWF|U_I|eeP>y8s#ZktV7v-@bDTi3&Us_xIfdii$v&lhQLq{ingL$ih~pGpj!evq=9 za0L7m5&lUd;cQi`IDWr@7u?6ICRl~If{9{X@@-do0Tj^uO~#|Bsd_gdm%SE>Ljd;; zl$%W|Jj0}wMV#*f)|c^s1#g?=JL#yoJYMJ1-6-+p6Gb`DK@$`OMqG#lRXh+>0&YYs z91a3!4EIUG!k=!=mh=kBCi2;ZhRd!*3fgYQ4OT1!8-Azm8C3q5msV9@-eC6xQs{8L zhP`soywt7jjWF7@st71%JEL8>q_usg!M zTESd{mqIb<(d!R>p)|IUVb0oR24Aa77W1nR_DZQ5_~m`16(z4uE&E4U>uNTLhs!+# z5w9i^$2f}9s$vOZI3%N$2c%nvm1x<3qhl_R>IgNZZxM>reKdgjnjH73O>n#Jem#5< z1um2XiwkEwS++Zn30XT~(){{jzMFzhtQBi!-S{h!UiwjRb&fqwv zxgEIQcu$=X#U1mGRI>{YcQ*91`e5_t8#$#R2f}HQ^W{^9p_|Neug6R%u)q*rcR)?H z1$4h}SR@wR>JSEEz(tnoEPjnj&!ugn`oo$V73Nito{<)2gxE@L!r=$mJUzU8G3*PS zkQBO1i+X!BX|O8#sOqY&Yuxd8mvi$sfY^(n7<`HK4QEYUGYF~7=)IL0u4hJy zyGNtiAH@S7Nh`g3)eCjJ4;VW*b4aK>bLWKIlZust`jdwdB#u3+G5ToDR8v&hyhqa- zjZSu(F=q_At0Bvo`|uBloGY*ZtGV>0I~u@Yz*k}+KcDXZ_GuPr_^jIYP|;!to1E>n zT#!rr%L-HEKaCWQZI*ZBQA-GlNzBSe(LQde?2R|~qScIOjWm-?0rvNy(WSh`hPxb+ z&>2r>t!xMJ`O1mT&C1R)om?2zoYnE@k)*28YVR#Pf!uJguMW!z($UdyvlO#pHa>Y#DdsPEIaDV z0W(Bx*W!$GmyA;Fw!=X=X)FR4Wzs#g=oWtRL62x7&1)R0cB-srzA@d%vNEwX5VV8!_;GG+}<|aFx;m=0_#jZg2OmV zaz|~P5X9B-cfzUXd=a;S07AXmyD>*BBD|nuqM8Q!gw-SrJmefi$|&2nWdcY@&DWD^ zWwXbzS4RsSN8Nu12pTrKsb0K{D+%%uPJ^)GL)rC52q>=G!3%1B$Col>2s@kEAp1YV zBbkDDG#Zs__F`KW)sgfd(`ZxCA?-}iuh0w1&@=*k#HVM6v!yS5wUnJJ<}SozK@&;? z!)0bl0#T)rx{(a*^~#zqS9RaJGH%VS%>U33J^)OXu>f>*!x1I5V=9JKKj(?hPoI!3 zOP~X&2o4pi0mpw}{aMQD&o4~Wdll=709p^gWSp0{5h(|6{m5?^*tZ9~eK6}egQd6P zB4;l@DJ);{BMnku%Cd>TWaD8ibWy@cbZ{W!`ua51QOqqGBRogjX^RVBI+qLMk3-2k zfS4mioO8+xeGt9`eBqhI63f<>o(y$eXA$-1sqo+!m3jAjDQ*(g#xowEP4X2%O|I(D*%Ee zw$F~Q=oILUrb!YRiE1#K+beJA0TkeZ@IReMRTVjnr`}JtL%ySshvCCL+M1SgjU@Q~ z1G=jFT}o9Mmnx@DfcVTiYe$5n$XM-HxP{+~=yLOUCDx`4__i(nhDu?l?<`=TVwGA= z@hH4-Dgc%;Qs@;2uTOT;u>u-=F-q()65-C}M)T5prXViM{q z8xU@WZ@sXzw8)cRZn0o<8SP&|afZBtma|I2WvGVUzF)~z7CXK&T~@B6<{CapyYwCG zS(an_3HX4Vh%;`kJ&FKP!RO~*D-N~C<%Bj*yJ}oXMyoIARzuVnxL@QgP5!`Wn+8@C zNf7pO0i?3Q*kHb=Oi9oI97Bym5m_Ua%2vs~(U9QeOTdMhsqn&8E4saRhIT9pZ&QfcScNVL^G zCmbHe{NLw&N}D8XL32&nFOx}MHVmqZ=Bx6M-tiD#fTADFw*K=YS9{%5P!gU+3E^#h zILwBD%bkbKYNOThoYO#TpaV7Ri|tc#*8cS~Ghq6Qp>#xC|0Y*Qc+4JSFrFZWk7H-Gw5iPUCGfrY{Q+uc5aU+wVEcy7CuJ7a7 ztCmRG_6S4W&jhG>t-NoK8vyM5*Ue8r<{x`b*aJ97ZKS~8nUDa#Lh9y?7wq<;Z1q<8 zWCYk;FLEAeUH}eIt5avmGbl7fE==&;cz_49H(6+w*W>{u!@g`|TAcDIfojfNt@o;K!vUmpB_NcHaMxaZNfg z?)R}eH1AX_o_g)ux-u}_3im$PE0%WseVf^jVSOu&k`+IR&ZQ=aHq)Qer8-2l=v9P< zUPGyRra&j4y@xkW9n2jWo#e9DA_a`o0VQUOrHfiNv;e5RUCUhvwMKSYYSnVCZdN06 z##?9Q>3`&!Jsrj=%^!#;Fmp8t{SB?4Rlbpjwr9J~uK;_)eboY#1RuSOF6Mg!GCH{b zrf&}rfcYa}xKmw^$}FV7mFuliOR!R?^t`cFf$@_sSKg)^TrZXVfIU8O^%IL&RgXdd z$UJ01xt^2RTg?%Ir2y$-$07*Xd{cwwgoX}MmD*H7`=VdQTN7^WA9gF799-ust$G`8 zK*pLU3pHtTv~qF`HZ*u`z!bV+v^fNerC~Itsx+y1g7W@J-r`R%O zFilwzIb2?>392hI(0n0xrmn?1Ibj{~6dlv)^54HWyOJc7io2uzk2sWm z)Ja2S!*Y)5L<#OIV_BxlCaiaw5=m{k(CQ~j^xTN!{M9LzG~)-azM`*@VSrRo`OVGo zqy--S&3MGzF27;-`#P=!o~%d-gLB@{k=f%>b_ppSpW#U7uZOSrzc@Dvw7sf3K>vs#thxt8LirLpAHheBHu} zACj4bY4mNO)g|=P+Cy2miE1S!Oa!;Xn0FBV#dLzX%2lubhpn#)$Z~DkMFc^SPH90z zNeSr?DFFcykOnE~?w0OucilV6(~)+SGTIObk6kFt?>Je63JskO1D(pITc=ghmG6_4DJ9RI{smo!lu8 z#-828)_8n7NIWQq-Mp*EIu;}+HZ+(TN;pRl%*i9!LyU};evQ#vRc>P+5`jEBzc+(y zAoO7nNM^p+F~|uk0(ZUS|$~Tj_Ph!xD^pC-2w@F5W4#PnjXD z_qg0FlZ=8>dgVET0Id7~j_*hi*ezkL0Qw>gz(?;Sa1bSpM?r$Ty(QucwILzB+y=8_4wG7z4 z{V>3?AgUaU1&!E;N;Ws$0di_57DbcNOW(w$cUm5_CgRTVj(l79j#>*GxJg4Gwrw_h ze)pc0bH8};$?>Df7PjGzK!VM?>-{Xi^mOv^r0HrrJ_AQ~G&$#<9M^%{AZ*n4iD;QA z*QeXUtn-c*iM+L5DcbWTh+2wTELkC0(Z`owGE|aK%9}P* znG0VnPFvoEx-Xv_X-K1-3{kURe0GWhbi=Z2-^J(MJgF0Or{km7xL?+{cFix^=bWWh z`q976##qj%2>m7><|g}XL1B1jmp!8*lWJ-v83rshJGzjEowfPz&Wfk@fk0%}rqjZX zu)joM3#&v=y`_hqLSdXbwH1m%>D0XEEe<+7G3fBuR*VnmDA69Uj%V0w8(^|nj-#Ph zi1{KTY^=+QezW%LWS6iQ9G`jxCU$E2gmCSpTJx=Ps^vo#o>2VAB4MkZ@mGd2)L)Ac zBWV?<*#$+T*2{y#ekjXHHwB83n6^xSXgi;N&mpquxjvORnS&WwiUbl)9s1~=V< zCk#We9vp`E6EHs6zFnGA5LGa7Z;j?i_vHCx_sA)m3HGdh%7pPzb-KG;rwrE~KX7yJ zd$@gyl?1+EdU%E{+Ous>=8om0M9iIi*T>jI0a%6cy2~0qLn`yjORZ+ zQcN!eqzQ&&NuwcAe{icmZ&!0SA;Fg;F}JcyfI)o#0twALM$>YM0lUQjgCMsNH#COd z94G4?v(pu`wv%d?1b-Vp+8Sv5(~4Ukd3BuJdoa@LYhyxl%Y+vcTWNi>Q z_gP{tZWXr+ijbRc)wtAbF$*JCH2kZ_@}(}t!;un4&#l4Hm*rZz2o!%Y!7@OQ?r!kw z+wOYyV_cqEPeWg+QQf{|a-z4UO@D%?pk1FjXIQbIyj7J92!kS#v_iLTuSa4qbY{$_ z6~}_|PF*bS@Zy^6LgNxj=S@H30l{eQx1MX0%)bg<6bj0nqn~H2U&YZMy?E=#vvu`j zb{AJrmG%4UIqT@qbLC~UTky18jO0Jt&HQNjKvF0Ulw3 z)}b51lAL`Yz;%0N;P(3jhqBhO-cTdGCN1X^!-r{%c?N!tcUYSO`j3UeU!0)WP3Fk znF1G2MyspXgp`_!i(hM{xdye~BZ9g4U@+|T?oqbB7R$d;1%3WpMTySpq0hT=lf}O* zHFf^HnkVFy4uV&#Mk+x9;(7d2KPvZS;?b*2Zw8*;)O1`+mEPi!*l<2J8fECMEi5E03BCm1T;2ZQX=o-1=?XB89xA~}jf_y&}OX_?@bzg~I z?K2aFbMjj5cvNFCF?F7`zDR)CCnuBo`V%hUzA5!T=l{Emegey= zTMISrTO?eXo%$Yy`Q%c#w?%Y607<2vux@lGB`_-rW&M%b1vQ@X8nAc&wtv+P?n@F2 zW6e95yR?*Sh*b&C%OH4r{1d@schAyR@x|XyqvY(La11Sg?v)0gFnlp~(V16CXCL5O5qE?7F;Y`1(m>HQXnb$4QswAQ{0 z*W=8YZD6IV{8q7Cx@2nZVA}KL+qyc)qn)n)__(&_v_j~sg|q61G@P563$CHZn>R4| zNpTDyO=%9YfxT;?(iB{GTYVKQQZ?pBH(mR=FX{K;ZcIia(3n}={j+g|ZKZKF0S)ui z5ZhruI7{ssHv-77Y_FoKr7T8`qG4J+ZAAE>BYm#(f_zDMv7Qejz z_I}^chu#lE-((eT-p(!|Mm#G=7yB|g8fw;CFuXjfw=p5E!SmCOFQiS6#QgwSdOUr` zY=fVQu;2Bmu)`>wbn6u4@TaM6$Ls29%nqDM7s%c5@_0t*6gCFI0K@%|le9aVT$|aT z+v7up3dxkcin_s%FRzL>vKUrzg3|X+aINny?lxAw zncY75HQ-SBSs%S?B53W>>W~{7W#C=mWxL*Fo*22}VzyM;Bm}?SR{N^#X2sBh$JeLB zOwdIYsFL%gMwk>P3hR$VYr#^WQPhH~=E(PO=y1nzIFJu$iiqOnvcIHQV$!Z20lA`k zvI{}!MVr?&Mw(+${wLy2LQWxDY;5p+3-|lop0`i14Pt31C zUBTdg>8g(pbX7s|pI!FWrf;g?k$Gii-HSg4_O#q`@k%t@+=b?OK#?4-(TB zk%BH+Jws}Q#Zc&}*hNmXB0J?J;f=X5pl`h}pJ{K(-kN<&2y4EWrquPsDN9l)z!_nB zqN={dmn?~&X({x?m+)=1CDBnw!hhFQy2H3eb(TPdh(=1$R9{6`Kb1=7su0`{vIj>`#LblfUfDQK>4wOYni*3Zx^KgsGA+10qRNwcV3H7xX5CyhXiW`5munhcY-ZnU z=ceBVVPz^)CoRfoW_JmnbteAIBHLOBUzBUZkt~yVEw2`iWtC_=5m%IiEdELGxo>$uzzXt`I@N#4JLOUhxn@xhdC z$uB>9>B%&>n+SizAl*>D=XsHWX1)-Z@b8H)9T|(OVa${L9Js58pqpW(!vC-o~YmlfVF zXFUloKSd-985|FzHr_6KJv|n8efqG>Q-C4nnO|HQ{dd(=ShuwK;fi9%j?IB5IH~n= z<~`N8sr}Y`VUfpJjZnts>r4aQ!aH&X(_`s<_H8n~B!zV>@I8IL969dkp4W z%Q;?)xiTWW3ZW9VKuKuMbXP@&X1eqd5M4xI_e~U|KaIH(FE*;OsSf>peMlZ9KCtQ^ znE}F|>V{B%J|=In^8X6eIzB|coE+7WXQ`zOLuD-IDS=m++tK(cNiB9l_iy2{)4T6v z?&qhBs6BHU4kx%ayb%IfG^`TN`~MlB9}0HcQbgj_SkuiaeFtBX7_E_I)$FH^#nF&> z{vY=(0;>Q@%<2xO)Ug))_=(r{U}2Ihc>TQpy=p&tRyZ$Vz5V%~IB1{87%#VzxWPR| zODOxgmJ|1_%mI*t(*H^sea!^RZGVzXnP^K^8OZtrddLfI)S`fy!s?KT(G-xePreV6 za`JMjp^J-pG3| zZ52Fu1UzDk0xPF=7wirrj+EwxGLIG(c;pF>xeYsdX@b^No%}3H`d1v;{zgD%7l(8o zCK*Vn?XIK6Ad$>{tW4(x_Yp#af)VI|^%b%`x$}^rnGLmXz=u!};+_uONNfAIz6lk% zU;c}Se22MmNjM|iWh-WS{>tvR9`L-XOdcpJR#?ymDsi};k+6qkeU1qbfNKA{EAq#E zPukyRY&MhdEiEA<2==sjTnmKb_&nQI>YC1GI^K=m4K;t#TW9B4QFYYbO-a!?q?civ z4GWQ*{w4KE`2G&nd;~#j4|)B(#wyQB4Rfqx@lQIfo3ez-4Gmr2WnL}6c%bv)P~V#^ z(CPirk&XP|d+WZ3zs^>$+!@*l+V9~oJBmVsE=WTD8y%8(M^f<|k4gNN1;wdL zOW0!4wQM_)D)oot^8jaeb1S{hUkT+__tx|KiKJ^ZkEiE9nILvr2aPa(-lc(`F1KOg zrf8gBEKY!eY2oE@m{ITM7|CyxdUR4lr$d`4ruOq6Xav8;iY(bogB;ADy_TiDEDO^C zG))!HaA{~n%K9!}F%a=6ThEWm)mRFTzwDBgn@?88Rc0AxCp*WTd<#T@`mBiz8BP zsPyY~&i#6RTBXX*FYej!G?(W*aaBLXvzi3C*VD(156$9!e*1Q`NR794702mSdjw*{ zt4stG!erG3`;2n6S2?+jQxR{ZT3%41%|WQA_8GXt%)Td}RH~}YjIK|cER0sUMv_|n zQ|a(uI14?!lRxD^(IKbERAM1V|5SV4vDtbJtAwQWv>^XB)B)mt3u8*87QEYtK}87*3BgwsLo6gD8$@YFKYjuCKyO@-?(zY z&U$M)$f8ak`zwd&mi6;T7ePy9wi#iwts(Yi0QxE4Qld9DV?&ie7$m_Hja^QFYb85K zo{=bfV2Xtk1wMcukH6DhC1;djD=(98Z2#eOO47NlZu`EV_=L1Z6stc&zbHtnd782! zz&s%+^j^&JMg+2KN%mVk$)fxDU8!1i!c9vL_6axLjC$#e^9ty~&KH7jHSvR&2fbz3 z<1E;uTFp)&_H&y6O?l#VU4NxB2vS{j7o$LRdfp+UQ7V$UT}hxLbL$@+S3N4!9hTBQ zwda*;y0N_!C`m~&+1sG-cl=hVt5=(ON#TJE?~C!L2{UAc9(A(Qx6b>6osb_-X{=3~ zbF~Vmknv%m+W|8z24<670?&ohM3fj2>?L$)Rw%l^z|g1g_HsQ*`f#b;g7^CseEp(K z#gBgc*M5s#z+>lWy)(%-tgbndDZYrv&;UORM1V+C-}3P=+jmGGJJqa&iRrHPL{3Si zpjA{K^-ym%Uhg3tW;V&Gy4+gX1LE-(8!DXfJ&V}sL~0z9xYBUyBM^n~5OLYQBYCM; zsLvvt!!p6KAO1k}TN?x6iyg@{gb)tQzr@lPYjrl zMAaT?hV5(@HN9q=%3{Q(kq-gbw*X$1nfR#3Vo)s%%R4 z2U5yQey=YBiQEc#;aelr^3<)Lp3g5`%2EQzj=zTX@+&gi+khWJ~X=mgYsfo zIXe=sZ8yI~5H$1dW^aD$IkJOn`1?$DUiuJmw5_dGtSBla!b~zy+Y)o@DsXu@r zz?l!r+9DWe?;~wGK3Lz+`@|kMKJbUpjVnOkF*mqX)aTX&DrQfR%ceRRx*u1@Ej!|e z_eVRLI)QTZj2?eH-IA6S+IM%x9Dnb!dodo9FK;y>CA4Oye_s^jcJ{$^F#&hyp z_A6cJon~*x;(0Z4l;Ki+blLTWU$wkOD`YmDd}j}|>or~4@I(gZL9FCtifWcag5^4r zC#V2tF`h3e5^I)N~-;w|&tP5}xxP}4Ar!I~)w`VhYK$|5} zz;gAd(dnQ8h9GU`qQ+o?PO-uMy*Px8fkKmA!m^q5+4_%oa9Vp9V1w~8`An`aSZwRT zH2`+vL`e3nXnz#~Yw`1^$&J5(1gYhdi;sv(db}Da(cI^NvjrZ)Z5&oIgw}U$JYj{S(&_v$E;O9r=aHIELM$=$=)>y@h%z zcDwfuAzN)u6q+P;jaUv#5 zB2vu1SpZ@qcxZo=C#L_;S}5XhzSuxR+4_O*RSuI?&uBV`%k;7q^wFi(9%a8ZUxH+- zkrcf^-3yCq6PauKHB=eqJ#XI)G`{Q-b(f~ULA#Hww?xSbBE%%fmoP2oQbY#2;W%%Y zXo+}BYE*vlCs|H1P1j6Dg->nMdD44^2(QkHV@!6j;~QFEZ}4YeVCx+>7Px*|;C2kB z`CSR&Q9M&fw&DC{z&~#i*I8;e6P(7rvnI_XG}zIQ!+FS#{=xZr6^J7jzolGaD|%6>8yQOW!Eqe$;m3_x=1}d(vxDVykdG>ZX(_P<;Ou zW9GCSS1lc#T&Q?ROyI#DG79d)!*=iu16A%OfS;`(j&Ak189P=JD#BpgmcznOIHkLy zoJP5QIrS8MAHBO6NFX09+ipxO5VOY1HG()E?pgFmsVy{NOQR~T-e`IoGOD`crCO8W z^rvHaa>3x4*?>U4q<=zh5enX&sp3RYX3~KM_*;FiHGO6>QK+(TZb_f+&xCtGuTopS z%;ouM`gmP9xH>JbXucl&SDe=0=5ChHZw;xczW;))z1qqv%MsnNdcmxVrmhTBGTyS2 zr@)GyQBMWX^i}a>Y| z#^rD1O&Us9=S+{ zauZwL1-yuG?Ch8l<-gA1S)$t$4v6Nf%`|hR(w^`QtU5ZZL&0pS;ZvMQN4aydKhHaF zLKCD!LUVf}@DFnNGw#7Z{w>0X5pqgv`|%Og5=RhDsabk!CyI2ieHQ0w#0k(Cziqna zP!yPodtnhl%QnV6Xhj-{6IA4k867lEEf@c7Uzxy8ePUZ)d(_vUM7-(?HG}_*f~S9@ zF~fUfN466|9VYg7LyIqGBKVC(#B{)&tL=kF`)o5&BjX*r>F)sUqm!asi9pFR_;T_~ z0w%!)8=JTjhh>Ba+s!DAO5j~m1GVc!j^extn`g+&*v>wY7i9RB`~9D#M5R)d-XLRC zk$uF+>XDI}6Vn?`zo9-ZFhGe83+st_8^&&4eSd3Mpqb<}e$~ibZ{RX-166c}CXPE# z)Fr;(GvVH^yQ^3u%DPG%7~<{Ws@K^0Fxm+wFTmj&4Bf-Y)_F_3|b6pXkq?G{(HX<8qYC7IST_gF~|e$dnL+%^49}8mtNW`t;U?oT#I$+XoeUrm0Tf&ks>7d zM}M3k(06(;qMWIv`Exec2NoP;0e49LW0n6M#z@)OSMBYx%6(=}^GznFg%imth0w>{%F8 z+LOR{8cb}v@Mwy>;C!&NTzAL~5YC$6!yYd`DJtR<@jB14!2K#j&RuI$@d1%&G$Q+_ci5#NLZZrBR2+}^Gad&e$nkAWZf&M~+>!^$T%ve~R z%fmhUy2$0$|NAEb!R9Jtp9{z%r(pmk2>RpF|G@NT$l&)zIjf@Ug5pWnkLuvXYIx@W z+HdkWRA3L5$#|A+rj?uEjmtCGUj!ZPkVh8WwwXn;c~Q5!)H4lYQN+(t)DfR16gzw+ zvp#WCeOE1fRmz_G*~DUiG(_dWP4k8J84NXW({zQ=-YhgmH^-{cCzjN2tWZegZtX$| zjuQ=rs#W4UH9{XHAXShd7sAUF)TX8fz)b6B4)fiC)I~T+;8G3$k!|gJ&!-Vsh}wM+q~2w63~~MD`rz5HcNZ$%nCrZqiyCvj!%-T41PS#HO26NWuP$g&W(i_j2KPOa zi{5IyD0qa+%U2FxzkYt52{{#S7-`wM@LhHe>%)*6llyNnx#3UeWeA^R6Ro#(Nr$bP(&!=YQAUUS; zQ9P5RFV_Sgv+#ZR^WW2$z6LSn7P&TR0p}MIR~O5{t)mP3BU5BemOj~{>ZNB6dyk5!)gN<$Fb2|v20IVwS-`n ziE(ozD&G9O0gvm4D8ogB^9DHRjn`1Ce<74DC%1|Tm5tZ@#-?|9bz?BGd)8cgLe@_v zRTX!h%HdT*XN9diDJ`#m7Dv~M$qVPzs74N4efST`FUvM)Alb7kK9i$${fCGAaKJm>Ttjwcq@E9x}9i7 zD`BZYK8)76$=g>xQ(S#!;c*v8dvvTc@4T^I5l}r9tBYb17ffgC)z8G-=)GU$;=Rkq z^Y{ZQrSdId*w?^E%D0~RMT2jF{45Mrp|sKMzhBx;1h@K_)^xQAl7Kgg;87w!Dr>E` zxk4R+=dFa<*2cF0OdSPo%PenTHtotlFCkb`i?Nh%DXcEyor)p zNdb)SUS5-iX!@*y^dU-`K_To1JTCs{3$L5!7%=q)ts{0=t}}V;T#>GCl9@KhzW?-a z04#Hv{dM?aa<4-oO@UUUcP+|*qZC|-#sW8!?hM=`uikB|{2TM|N7{P7+_kRHcC~{w zem_>n{{0Tr{=i4NXbP{VFS-W66A{ThZjKt$nr9eFCit;Cc$lC1(;>j^in+VJrR+iE z2wa$~OdH+u*o~!LO5rw{QmVxH_C#=D&~W(dxH8zFhJ@AMX4mTG3cz@bb%_o z#ab^UvNWg!{?a3Bc4s5u4ET2*z`_?1H0NK4C*LP)iQMzPDSH$0;bk++Gje!5#Fmf% z&W!_^-Epa`b)C^V*T)F8;Q1z&ynk;&Ti) zXOgzz=N8lf@O3u(LD;mtOd*&1P4~{VK#$I4=QBXoyd0Rl{__jc@9jfwbvHgz%9lV= zk_>|55`m;7ghJ`!mlM4!Qv`=2+v?-3n$Yk~dDbK(RYb$5tWW6Sjs78Sc`J!kerr@Y2uro6p53fx(iSe=Wuj*1%eS9&+jS61wUwl$D+Xvn-uLX%bgLe&)`W z!v`~sh;JY<_w;KkvsX{{r*E&%v+R!7%zXUcKK2l_#io%fRPM7?CE0o%XA$~Q_HwFB zCwMnUf$|W;3y$02OeQBpb59cBCtj!|h1^Y~vaQnA@)+IsxAXTyKOa3V-$vpO1aFM0 z0f$M`EerSMN_gThOii}K`JPOPhM?pjJDJn{?YU(uGOMYNAGN#tPha0xpDw_h6%?;J zi8y%PaQ>SdZHNsP@eAvmWw;5MOi20S7~!%a_z9UPo8!dW9vZKyzeqEFU~A5lJ>qZt z84dw`8KkA^=4L#Y{OH%V!=y9kmZ*Cp%&U8L3pd)0&Ee>@q>&6I#vYYg%N!$*G%;3V za!D2Ytq_6;$8BNUIWH>u`UBX8lVLGunIml6-N;rLiKsVMZydd8z&dxv*2}%~{7LXM zUQ^mLzU~9QlM(Lme3iQK-?DA~#<(h$p+=*AM4#BW+8snNIdfASZR9!U1kj%kaXpI= z$M5!f0BH23VC;ad@F&ew3+kT3Q^;lH=A+;_(&Rg{B~<#YPs`sAD-|*_N9#340@ibK zZG@iOaoJthZI)}SPwdSo7M8%|9Bt8vg=ij%(lq*~(GV4#FWH5x4C2;y;plq?DI?|P zGFPwk;viWqwNfZ8h9vlc+ff4F3$~EjEXG31XuGEIhgW;@^0_x6`g1t7y4S)1P`;uW z5D~h=)-%a|=Uifyqs_%gAmW8$B{rH#S5c^Wc(*$`Q~*4jrS=;Vs1t94+VYqA%~5IhGgYhKvq+!911xKdfc0-$3ye( z1@TL-I^U{|8K-5VLiD;!&7;ue8V;@lsn^(%S@76rawXQ{5 zW?5B#GOT*G8w|gfjnmor+~L`jJJ&hV4g6ZP{(9q?^swj~bEPs98~n2tsD&K#|L$0f z0b^C>r$(jBmdmXf4rJF_vMMa+(wMG0NN^*xO16~|ezK#GR~Dft9GTf&qQC%A zF@mAz&E5#Od5`#x{;w zFRZ%HJYThe1E?TlfVsMbW+1it5xD_g6CsD?CkJyc-9jRb@DCUdDn#&Pe5eFyC8=2D zf%~;8td6s`{SHTcybx^?Ud#pQ(Lz*0uD$=wf)7^!2pu@PA>OMSe#`XR?(b5uELfK0 zp3mrbcx<^4ys#W7@7TGdGilU#|MiYh-{NjQqIO$38{5~MHoNEl8p|4IOZ+km;$MCj z?Mch!9iPLs=#g9H)0z6uH{ln=V=>y8 z_trF`#NuX^kO2PmEXNPn=Guieg)#cNk(I9SkQ{v_h@MX=nw~xT7GYNCUCw?%H0=Jz zSK9<&-*JXoyBeUg^$NXF1B&1*Y?s{wy|2}+pnD})VO7A-aWCg4J2mz&9`micIv=77}Q#~u|VQY%VjQo)otnaNc*Wl zet|+h6?T987&?kvUBsyh19s3M+U-#JzRn;B7URD+ekt~();f185kDe7{4gdD+Iz(d zy&F?7@jO!2#>+D~9TDoyOuby|k2e~Q+|zLL9sn6} z1|mQxbG>0%(UrYPVF z-0JtPi2{O2(>*CVI>qn=#B3`-9-UTww#YG;ACZ*Xk8iAI@3U3AFA_;m+xSj`-6rt` zin4zzG&wiy@+rvKb2RlrIGO+o!VL6~>$H`}Z>IC~f4ecP0=H7osC&)x>gCR0X`qv= zaF`B)HR#KGXI$IhMQ#)_$UyJc1O9F>>)-RK$MJEVX!Gm<6p*iM**Ne&NkHPNRyU5b z>AcuNU(sjO!gi*r9htEih1UmXJcft51`KB&$Ccy97?%SXcY%9n5l`Nshvp; zqovl-uSFE$OIt=2>@`LqB?){d&&$I6CXTWaN$Av~fb(`;_lhBQvicl+47M-FdQFx= zilv*UUd$o?cUMhUrh!bpz-z5d1c;f;Iz&FV114dYFU#l^_DqI zOtWeUEao1U-Ua^yyZ!GcVI{y%U!oKqmfcOaQ1Qb$&966IWKyBEZ1sJqOimjq-nxM4 zhrHA2(jQ8N55!||v&6&-MNROqo0}=ufr)CPByl`&-6c}a@&jdVK6#+4_G#1? zgj1R^#5NxF=U7g_V>()gHokWpv)l6-;|Tl2*69UG;bmBlT?j z0Os}scro-q;3IyzH|`7gSjPG&-{@qAJ8weszADUM8B=8Et4&G=;rIm%jiwi#Da6bd z00=h*x5< z*M(_psk~Bln-Zr-4(oNnx|h(R$?y3}sVr7GRw|@+|E*}4o`;Hddi!T*xN}PjNLZ$? zujQ#UeMQ81h!BQM2r+^v30HlUTG){YCzt$~nfp&UlR1q^t+NF(xAsIYK8Ypt!WbNw zqBEt1)v4(^`e|7W96_jL^d&*H*TNE)xpxePL>5bFEn!T7w!5RR5E1;L zB4XS#u%9E+Pb-X+w0BUdLt7E0Y(TndhLP|cB9M-g$N%P z6>WdP>|51Pq-bcGaPZf77Nhbr*H4_0K5Oq1@z_k0pOt#dvkF+42qsT&w$98PYNntj zv6>KPWN6?0qPmNpqV$pgHsaHpgT+>B-fROK?>ASx>V2%X2j6ELY-3D55WQ#iyOfm? zuvj<-;(}p7DsO<;#057BhSQcOTNZUUL%mJC#06LnU$wY#L9cCZd zc2*z;aP?kcNL<$9#%cdk)|BXzU0avAD)WN`^UkCWSjWW02xgyb^8;Q?oucjk5KgUW zXe_pba1+;+5^i9yv2*)gVYf`-Xc-}2Z5X0*X!G0PL4W-WBJaBTT6lR6(^LV!WpC0jv@GVAfX^y+P5P7ufX z_fJgujxUTM#7POeExzb~3cdVKp+j%7p*2@(UD0E_{}#K(L$M>jkdPo^+fI}=&bQD} z3$oolzteJn^61^(tx&+llGm=LCRpbGj>3;DTzAIWtbkhk+GDM;K3Zob@5mBSYvAL( zs|J1t5h zTKbOT?OdB3+6%zUiOHLy;wNWGq+Wsy7Xk4&=BK%dMdz0G1wo~I7d@5&p^F(LUdY}k zp4aNHqH1gFWBr+}#!=HBxm|XWxO`siIW!s}x0I~V#3H6uvs=a1pZwBbWKPppX)!dJDD|CdUVRc<dkc)yNVA zEc%MnfHr4W$UfVx7TGwJG|oU@G+*NZGY)?(t`WJ3<<)2g{M9mmcU|8lv_pBUh&QZ3 zoK4;QsZg#+wYH6*=80>%0L(EGKQrn#=2G}K4?~C{)ZDyRXwPbsHpKG|s7RB!oA$A* zxQI%8d@?rPX&vJW<_!|zTAf7@Pr#;TwP^^1(W2C*S)l)^W?DKf89meP=*4!~thw45 zqfpmRl<&r^JbqV=HHPZr4(t@W8KC3Y|69^?+WuUdf4A1=PNM3omsPX!6UIwnOvY5v z^U&5hy^|wfxG+@VHz83;Pgojx{U^kVO4&;yD&B9Tl!2`kc@Eb|NrI&C{&`l4dp`Xt zK1m8Bw`t*x=J^GPZP`BI|Kt`oqM3(6lmL$d4~3qXHumaor^QUyf~LLj`Xp*h^6<0O z=z9drP0vXB)<8@qn>sXmi%eIpu7JY-v~1;D`r(lOR`Q>={l6=@%LMPEWq!HLfR@o5 z5$rbWgHT!5eKelNdp^>X4*3_jHZDARXuS!nw&=oIiMNhF=neRSYr4tcH^oVg!fw{ zs|C1qsMVNLSndDj-q=q3jieO4Op!VhPBBcv<5(?z5tt=r?Sg`#Q)j(fj;{7$%bRi& zBn%+XH88WB1R_^!cHx1Y zVN7*`u_5`A%rD{FS6AJjqZZpr{V}S3A8$;PX=TS7%WxXxlv9}(8?WOe6FA<7%@JE- z^fT-=UGLS&WQayyV6(<|0t=CA15#L_p+@whKD(o}{yb{mh*1B-e1OT8n~?|WU@LT_ z-Q5agy4UES`TP-njitgI0XH*@La8Uo>^TP8G4+VM!C@aQr|c~Zk4_}WN|LQ!yZxSOL}dGFE@r8xVkq%MD%-G6-1F8koVkmia2%FH zx*UdMn_8$YZ(Uwgu-}`+j*kA>Hv`|+_TYRltDx>OKVPoy^pqqkcD>vCdG@YPA9Z6n z?HQ>gqDki-vvkc(wasX@bp30q0w;F@vVjSReC@SVipL+w@?;(Cmw5{9)H#9~d8Tpb zY^!;HI&^sK>!Mhp`5lGm&|p$Z2`8(KjnTKyAPJj`5QFFLGyv6aMm|E<(wxen+-g!j z)|0(!(RdTy>l+*YojPRcGx@{|ok3pw(@cwFZ0x07a=8TSs@>1NZ8Zy9E};SWcV;~{ zXRJ^|voZB9nKAF;)5)Bo=alOf5R0X?DB3z}&3GS^H|607_$SE#O6rm+-%lY-thA1J zDwZqMM0WjKkc?wSd(!^ZHfjn}CyMGGyMw$+3a;B{9q66xcp{*)0q{~G#k$x0nUzOV zu2ED8#gPANid)@0T1)kTcfGte=`d60s4(daWnLEbX#E5)oiZ&T&pGLbV2#~8 z!0!6%cgAPABM{P3yiWeZJ5rh#=xyYf` zAGQ5c)1_C@70gz<*Gt34=>9(KG_am(k{eJs$P6FnelHYL#K&d}GmqBSR@n;nVpi=Q zg-WS70xiL8MG;Hx&(E^zf4Z+;6jQOpcA2NO!r%-v=W^8Z0o zt}Fu8LMXQL*jJ;e<>U5DOcBC*umI@DeP_O*vI#jFty5)Hk|W~a;9D4!>yke0U8-R- z4^$7y(pMs^e(I#H8Ec!#F_%XRhxH$Y>R+t}+`eLl}AJv?u2%XE%zl*hb z4Iq4MyVyL5x|zz{eC_jxu_WqGGq*bCW`x^EjUDc|3?3vj5Fl-X^IrITaNzM@XgC{ytoQ_DEV zRf--46FFzfk<(rWZ+_v&N3l@IEr3_eHupLNR-OtMvQUZfQ}RH(I&*ozowxrBbbjxa`{o?c&9q>iRKP#w5U}Emn@&SnAJi_F-%-@0nhpI0E1N6uxj1M|qL$IDT| zq>Ayj=IYsoVwHf=*4J$g$d6})+B>he^QTXd8xD67VuueM7H0$by@Mp2*ub)w#zbod z9h2lw{Aap}4AfqV-Rg>Lq;gSbh(LEqVZwciV_)aH)9e>tPct*;{{QNfUh9o`0`Kb^hGX?Yjd-tvK@~;d13nFmxbmZ*xlvT`pG8i+`(M) z%|({?x_{4#c{N@y#o68LoLt=syZZGKxRPiS`4Z!(V~j^@-WTE&S7&6=^X;@-`QovT zO+yTB`1wjTXTCmi@#BvtkJ_Xe3n{2>7$D2UOuEno-D77E0# zZOigdo)b83@kE;OxGOJbp0^d?s}z?Zf*Go@JHGI5Z{)i^hUedV=BI4_f7p8KsI0cI z>suN`TIrThx}=eADFI0d0qO4Ul9p}>Y3Xk1?vn2AZr*i!&Uv5jd&c|k8E2^D-h1tJ z#hky{nA`A~Jihk>TQ~0tFx&qG%HPtLJ)laL03!J;K&&Y5u|*F4?zJb&^QxGOZ@m9> z4k#SvG@4G5KG@w~Tkno!_+k$~w7#c_=;aPWp;gKg7|)f^S#C7;4v_-Z`wcc+By+JSR?lg91$E0@ciJx0) zIoZGs zV;45-Z5YPAyCjfV`$j=~k8iYPBaDR8ge7(fWsB0iH^C>#^XrmwDLwstUa62GoVx^(`y4>%xwc9N1u2 zyEo0b1*Z~YE;9Yeoa~#g!TYy{KK#q}_1x?LQNmO>_f+thl#0ogmwMHh7%6;4KKRJ0pG6k6wLCq#)~^Iu@ppCh z5lFn48T|nOSY?@IylYhWeKAro3LzijMHa?ojNn$xdm_oaCB#Nhw5;r%zQQdAQv`mo zahv|^I0}XyRWJEY*9YCJ%AtU-3J(4=4&d9&X)w#3Ot54ldRvaxm##6 zo`Nu5?^`y%IsLwGyls)J`+_H$h$kyukQ5uj9V!ro${vPPH3e|Iyl0rTcE+Dhq)Zfc z3O-2M(0TRnvXMn8P4a~1PC*-{$@t=5W$0pO+?H;fyfb>H>t0%A;QUy5-Ed;PLa3xd z_r9PpgUcZEApHJRbk<%!;>_WP?JFditxV3B8$dEwx)F15zW+kb>liWNIaElVZ;?wn zxbyLLZKf>MvYuYg8(B)01lOVXqunS|y-cnj;&by^*`HPjlLqxiMR)-jQ5 zt$fJ%d0fsN!F&{1nz93#w8O)Axwh&%fA;;kl&DWLSm(jG{7r|j&~m#$OGn?eV&+)p z1(ydH&#f=B9H6I2iXSuWyuZgWtD%uiy|?N8bRo?C{zI1*3pru@<1=A)?M`POEpp~0bsby~OS^d`P#dgsHtZw8wxRzu867xZ-O(1wn4*jG)2 zTz8CW4{I?cZ5TI%HyhHGXUB|M<%F!LyS|~SeafFCGy|eF@_!-JjB~oyP?uD|)W9B1 zE3E$sVK3`bX|%kG|FBk9Kv>&1D>E-f+;&M@u$0!;=Wk(g&!sQK;6q@VS{_Bb`L4a_ zMyCGVFcOy18oNGN!mxK75Kzi9d3MLUzhfm6{7ep3- z>E|ODM=SMqH+lXeX$xatHTbs(vc5pXf+F?<+e~6HztaU^GMZVJBDDST4Cx;5xyIw{ zm$@w$dHdoSAE9vqF~KO23fFM^d4QQn^>6XLsb9uG)UB>V3m$$zv z7-1KK*=C=AT-;0@N8B#HlXzRSGG}b=JX{+b@g*M1qHai&AhQlDY+#GqaaB+XY*cHS z6t{rY)wYf6T54+s(;p-H&@xq=#68BM@uZ7TQ&`sUvtdh+65xKh1Kr;44y^4lo=5G( z4Z*jYoZjEDw1I|v-$bDV1|X;4P?U2146C*}toUO#`9*!LX->8y@uEytyj*3C*zkF4 zx4%glqw)pn+CjBj28*5cL(80>i4Fmqj^I&_I#HfSF!I{BWpbY`83_!ssnx8zSH%t+ zm-Dn^-Wn+tko^Y5w^LqtEv@t&?Vz0x5Wx7vv9cb%J}wo zlrM+N{=;KsSf1Mfj5%&Gb5;W!}DuwTF*5s%GnX> zLaOO=(WX5E#zzEmIHqw?Hj3#S-+or4+>;&FEyKWzn6wZfoQx{840MB>3X;MFo1E9I z*DEHkX;S7l+Bc&9(5pD0ygnj}=S%3Fd36E=y1rer`d88A(=$iCyAeDXLysRn4M|v@ zRKGg^eJi&hdDk2_IbFK(&01vBJ*_=*;uqtQ ziQ3qw>_G&Np&msbCq0x)xtRZ4%x!@Dg0r7v;F{{3xqDr_6@5@RMqxtaQ%ymAFUm17 zH!v}Q*-Si-vE20bxd6O&tyMp4s;ddaNt1A=_3s<|viBi#RA`IjcBrUq^ z(VLsRGa6~V^dYExyj9)@i>VB8V&{${)3i0;AMiFF>gt;Z+evVF)E{l+Y1C-re zC%fXx| z$JK|pUPkkv&&^lAjMq<~RUd@Cy-EvoPaI5-$ASJlz!D}$ao&tOP+s%d?N7AXW{LgqB+tpUqYqrtfCn>%S7sS z&W#Q)k9+eQDvIU}&MzIujXQ@*7HZtJeKk?qqkIh0Y;HRzk4T}}!VNUJDrJ>JZx)H`SLrJRK*$0 z3<8>TTacBOU(Hb=CzFp2{&Y%nw#<$x(?fs2x2r*~}Ct)7`sKXO`l*Z-pH_ ztPkLDI*`v?;TCZ+#71fCx<%FMV2?bWJS)xaJVh&8ySskwjbBX8>AR4ejgy6l!7WO{ zf+pVjo@&)XJO3U9A*Ht2QGWyXD~`bS=8N*v^%R_1PXtg76tj|Rr`U^6@&{M`-5UG~ z-mLGHQ@~PNP?o(SXF`b5;<%~)x4-6Kqnj>iy2KA7A!9A}8yTCfG)x6o^lK1}W^L&K6#ttj z?V8-dQl1a``fSU=7T-NHgU_LKnM>3V33(g_sD^iEjh~T%sc0-PMMNt(wE%}8o5Q{; zdn#nE1^tImuqJ+s%XSm}mKRI*b*asU)b3)_-44NkVS*ws$0l2`t*}AY-$j6)V>}d( zH4hxdTr2}_9;@YNRc3!aCZA}`I3p>tM~j6HrTXgVv*`Cken=bqPPK+4uMd_a6OGQF zB4h{)e#m&-pL8pM4KS*;Sb!kuPxPQK3eUW(7!dohW$(R)s)As?VDZ{}3y=%p+Jr@} zP}KzA<>ztiP6rua84Vw~in8;P2xe|8Rq(xgqZY{77>ZMls0m~V>G_TNeL5I>J3rUd zf^t}HP7dpkY|Ba&&6^~jLSFT@v+5jBndmX!^O-8}7MW2TQJp=H1qZR5O-u6v z|Dn<{T7u>ngQCfkZC7S%leTa5VKP6cZ;vSO_cw{|0|iA#aIf)y^WPl9KFKZdy=JvM z6S_5PcZ1T-({sh?C21R>w!yP%mCu;&togc)_(u+`VOt&_HM*L9P)~-W$vJ9Gbe`>L z!X`N(wFz(PghVFu%QQ>VZKc2)qck<9o8QAU$zq^umv;pmH?6{Leabz=aVW1Kh-1P- zV=Wn8$VQf>WA5TaaqyER)Z@|DrB1lpTM{%tjw=^UCpU>Gm1tfGZYuCVM6$+5(h03A zR;Lwex;qX`1gazk9!A}#yv>-%eub_>7nr)4Dku;yiqyJ7W;!66NWML$u-(OlW<3>K zO8nK|<0Sm=y(hu5?Ku6m{g;aHRibmz5go2{kOzq~GEaD4m*G0j`gAvTSa#M8T~%^Y|9dC7$KTA;p&t1@>~FEAad`|)=&T&>~gp(AkR zV<3U!F~Lt+_qD8GqTp29=qjq|{3N2{*8&P^ZS)H_`u1M>fkPZzUY3T9zGCHCv3%eC zyH7c^ht`n=WC#zFSwKI+a=6N(B;rwAA+bsNmIp>W{S7T6svh@M&2wrs&Rt7Ro%ah# z=@}6y1jnvu9`Sw2TSYGvbT?)3go>~xqAjL4;G5s2cvl>};w~gbDc`M2C?w)~^ny5wuc1G7Ag$U zs!S&Ps4{nY`1Mf%s|g^2@jsm`xt)c5I;sa7;9Ni(*;LKM2^Fvd6M_KXmYlJVsQS`@ zo|7CDk{umoh6jT=C4MRLn4i0SP_y(kme$Xo(q@k;Y45U+#!8-OrRnB&uVi}jfCH~f zQF(FjVFuA`u@Mq{g2VGMD7SapJ9(}Y(KZ1r6nWRO6msL&^*dNaE_9q1Z+?`LcOq`Ef>O}iatVM8okvVPfW>7C|^60XY7Ik}0NELWT zejvos$op{i(3DBwfy^0}-$HoU1DF_Js$SQ;SFI&(JXXUNdU0$Fib$nF@`Ry3*KqFU z&VM!#Rri(5(FR2WywgTVI%XhFfO4Y3?IwFx)gUt2RsP)$ra}v=NSus{0>-}4wp^Ld2ivh?;<4^iDcCA4$Q>w7Sz zyR?9xzYQ2245QDr*iQHV9j+)o#Qei=gRi#aouSvsl60YVE{W&d_6M5dx&jg(0ftjm zoekbbC-X^cJ7C)yO8~>UVh)KnAL{B)rhaBUqX;b)3gDcg`4nbRVjJz=%O#6+Q=XOV z2QKhsD*gOTn$^199xieFYRiELCb{SMBP1wwMcVMz3-p0|8vXR~XWVfobbk+HiSu#_ zavx-3;h4TQ@Y;~bp>NWfp!i;fzCazrYt^QNNb5CUt0cDn?luyBw^3Hb?r%Q{F+qtdaAxv@>yZaJr{?6 zq^G5tKEYzZyW+;?B+*bt+a%m!E_N`)L+zqwEKb9m^?Ht*o*K7gQ(zS)`hvfGmTSd! z)*;f+TvAz%i4k%48T2hTOlkL#m`beWmnBpl1|EaLTm65|3wTDMPECJ?;I0~Ru?U2=Uq|F(}YT)^$-x%%_ zL-fuVR*OpzdqUJlkZV()@tT`2(8npbxl+HkXlh4mPR@ZkDT~n)NVd#i@JbS{gAIF1 zJVvC7Yk`h1^YP)%RPmdh<15*X+B+AuC*UVZp~Tk4u37Qo5mm!$SX*B=UATssQ?D|? z*z|uBQVO-U0xD!lV2hGfRp`4~xxib${`gbY`MILl02$iUzbmV_`A`39Vp`|@6w?Om z@E1b~IKq?IFJyC=4ZfiF$Rg_8JMki54sr#j9Eq6~$cFpO^T|>=Ov>={-1Wh>M}OfXC$}yh zrXPxhrDe)GAzr?}qQ^_*L1^vBYE&Zr0U<)K59oiC7R9*ktTXtxFcx=+<(;IIf3~X` zDjP3*&>amp6=yw(Ey2}w%ieoas0!`%c~V9W+HVsm33BZCC~|B$9Zp2d?XlkO@Wze8 zb-R7o&fg8}IMXNgW%kgO-I;e5-wt~XCVG1)>mC)ZsRr__^pRyM?H_T*!`{jASd9OC zeJ-+`63Drgkm8r8nAG>wcP#z^bzbCKdD)j0=) z1mAJm;A?Vk)DN#6_^gHVyWCLBdKl&2IgDveztxJapK2B?KvQY)cW$@dyTT6VDjDdJ z@1DWk;2>=EoMM?;X5o#+{@RmFN#EWN>fi5DD;7@)j_srf;rO*a1#+83JYd{c?1s;E zi@_vvhK@@OGpb3Ahcp5~K1`JAwxhqnp#NMS1JG0$QUUSt=^nSnCJXgd@p*lmq#=uT z<1*@erLRvQ^q~T!{LG2h4g4cu{}^TTkG3PK=SK$`a(x($O}Y5Qw3cg_SU6$+PhK8? zh67&N-eW343XBDN?ooq?+h55>#P-Q3ABQ$m2M~W~@&2^Vh02aI3s9S1j0Xgb6*`{0 z?UXrPH@_2YpdVz#`HI>kL?rfvHee4|)9vzkC%a%inp$p_=c^9kB%T0!wk|=r?-dn%?2!K9wtkN;*TUit zw9w&aazD+XtO62DV+vDZ`Qg%jgvQfCXmPy$K5X~%ap~^4_1DU?1$T$mqVeJ6?nBN& zidT7EZ(n7E!f<#;v1+fTO|RWH@sIXvH(~T_x0>R6to8;)99{_~v|9)gib&U(g`39K zsFNiZ%J$DzOT1qEudQ0UIGKl6I4MQG1=G3@pOiXoE|oRLHsVw))s_pgSpE#TdhA&# zxp3K^yAYQgeKQ$2DPUY(afR-(xZZq4hIjF@K3K2OrTxa$OCtIVxA1_n!aBQEV3OK) zD%Ht=&W^czLhSF{L0gtI$u^R}-qP`qt_`57qL=;YRT%nDrwoBXf^i$r*Dh}2p0^PcrFelJFAwJO4f^8}Em^dGpV7{+&iRsF}=unHq|K@6wOI^u7p^|N7q6;a&=e)Cy22-6|CQ3*TS z_KHE+ZAg8JFLSdoBsFXV;~GyoStGpt0%(lC{L=K?>e%6X z<=%8Fbd{H*n7l-4`bUuMFpHGLKm-S$vQ}T=`OPHdqjT*>tBlV2Kz!}i7U$UMWBu8& z1%HWANMT!lst!x^N%5Px9+M^dc^X4aV6#)38OFmipQWYCIbnJN*-(r`I?Yd5qT*gF6^|`z_6I{rbHP2g$s5CbJm7U zTC-HNv&WV8K%_+-$D^q;VWdV%G+d_Ev%p9iMqsNE>bi4}G~JuXUweSVVqHP}Z}9fZ z#qE4l9B{oTe;GSrpnl|YkXhLe(LaN76IpUxa)({xAo`6y$ePu6knz64E>oXL%6=~< zbXo!bC;8KiH@w(ut(KMM`%~$;$X5?uhdPak>0(a*XjHn#ITD6LInKttzU)H?EAF8C z&$VPp!~4kpIzddSk6ec_kG`xil9&gV8x6elh?|<|m-UhOjKV#4Skm2N%~^MAqG9XK z72i}ohDfP&%FrsGzqh+bmmP9f_=hj_1O1D?`E>4QGNbI+K0l?%|McDWSR1?8x!pC_kJxt&Zd1#T+=J>{ z`(zqogC32}S>qD15ykRGa`@BOMfc}iyMNFJ&$omskQu6_YcfJLm<;h63=81$~4~|M|_@u?^N;ely3`Crwb?f9d zj#|@fJpSwGmp%$8R_YlRt9{<9KIQLY%r&VlaY|4OSi*Y5oPVsga4vLk7iLMnbG-vsA{q>4F>3*Ty#7WVThE;Bn=mEb<&JzGp*;(&W!jqu0d-vUaBh$v5px+W8gq@*CYpq2cJ$1 z`A2AT8O0m5FL~VkT2kTbL|8cmeJwtI{I0Mx9CrbF9}i{A(&m3JI9yxBi(ubv6B@rPZ5eUaIkw{YOOIS(HI zceH8F`duT^X*DLeT^^OlRgS?ao(QjE60Ba0pLEVC>lyf>}0OZHq znV6U=1Mu~GyxpsE&syPm1bK>Ma<_8FVI^9(+~NmCy;it1`qrhbE>x`Uk8`m(>Z zV<#ht6^-R1a_;>b?4-KA7wg{lS6+or-+#gg^}Gy0Kjr_^4m&UWWD8g{NSVQHJ79vWi&eI>8mZ@K!7^I&IUbBoVTLSe7r5o|)M6Yx4ZeWVF z6>8&ho%3`Q-=TPvW|q6A-6EWw?cgPd9`VZxRW=~dr}HZM9e*(>k~5zF`gwpY@hTw} z7m`B3^OuDdHp^6F_M6i4AXlyNE53V$Vd~QK%qjxjQkz?M>Dxneze{F_c7UHgea&J@ z5%@t(=F}7iT&N}PhG{k?i2m8U5OLW{Ro^a8plq?E%v)O#i7ve?IkdWzE9d>@`tN*B zRMX|XtmXsv!?A{)Tbb&&n}Y_D&MK?>^rw6A2Hj#a@!&W8+-hUDV7|2t2|OC+f6`2rnn~O~ z=_VOIr!S^wemz4P*@38&(%&m$`*Ls?!BG`_H%7Q~c>B7wy;Lx*jHG zETof>y8dT|+DNhTQx-z0@{_V5)_a$WrAFO2_sFTAtyhc%oU&vl=@>tmT8GuX#097J5Goy(8xx3`Nh@69f8 zypO{Hxw+$;s+W0aO_Qcej$qM>@H??Y z(eeICMr00M{fk>evx`Q3r5&Gj|JlhIy>!t+%(*pOBaKh>iB7wg(shxLwf0I9h(vPG zgeyW!u@!`zilf|!r{ln3qtW61CINJ3LQok|j&Sfb+40WdzLkavSOpSHGS?XEqkjuM zylHOPlqGAAb-l;4Y=dX<+nwfVlYAo>RHzCou2VRk*N#3Y_bTP^JwblLXZ(AP?=T3c zGkPe7u4e^s4umGt#i{0g&sWWr8i+yh0KopkFSaL0VQ&6Qip5B|}uo*yt# zNY91fSp9Jwa_x60%DkEyl)(K%DDwD-a@4mTHIbiwmJ;#;W)(%^fQLSlRs}Lj-Thpm z5x{xKt#G=(Ix*ZPiQQIBQuATUhn|{CT+C!8=4fIrk-FIbtJ4Eti0R7Lw?|-MVo^nlnhih!-bu(-tp%r3e-rqY9K3u!TWjV%6H@Qt>hR_zYy7NT0iRvvtD4w@wW8kdewlA=j(LCxZ1L#Z7f^rm==Kj*D{MV%`gcT`z@rc`ya7-pP>%pyR+`Cvp`Yo#-*isNQhLDHd0KS#SH2d?;>dXI z(f+$wc0?PywyR73CP0|j{t}7h#ln@z%U?o{niGHAc{bk}l6>*}Gb=>bs%ORSAi-fxW=d~FT(4$lGkCFiGf{8&dYRuw)e;=o8r6R2ij z^~j2UBv&RF>BRzOx*{;V)h&PTlT>PmrO~tK643z&Np>>Uui24k$T$oTpk!8MWo6`d zpO$bE!?HW17jCsejV|GA_CudhM(>p*hmzif++H0GD;KG)KidL$5yR8(sg&RA$V7E6 zb|?K7Uf6tu@P*A^^AsQbQu>YhumIq62cN@r5DDSx_^Ao1R(K2mOy|6dz;Yy0G^A1m zYyUAI6$-@4XYkQSdkK=hLKjFk4BE_!RaIA?i5lT(v!g+~(O&m9@ye zGIHAEwz?iHpvunhdFk~13{`)F;&iiIp{H8%M)MK@AkD-+s;}5=m>S{e2AxX%wkFQQ zo?2~;+h7i=C@FU4VR}@9b!k-iDM7jGJWAi!X;6d9!1AK8Zc(#>kMC|HgwD?klhj*# zj8^eIr(}F9S=tt}ELw{!4E&J4!QaVJ0iP8;8%#X7&jPiy?}*(m`fCn%ckb{*rkIGI zkxB>F-h-p3H0Z| zZ{tm6VKf6iKccDE?U^PuKUR#u3Xhm`PZ^1aNlgxB^T#(Q`oT9sGysl0kHBX=dp@YNkLso9+t~mg~!k1zbf3Te< z0LwtK61RsO(Wx_wJhJ|1St7FJ=<9t#th%nZ-npDw4aIhTDG6gJfwvYgUSoJ5t0(A>LXH}Dl3Xa*;uUdkQck;PAYgjV?`@#^p#2;2mq z0G)o}p+F1Mn#Rn1;#HO~#GzvE!Y0mazdI2Ok4lL9IhgCC`o9CNaGv{INZ$|g7qJjo zHFcMo-K)j-M4V{X`+P~bg4x85vkaB2?Xhg4BK}#?C3-4_l6xww)5jvQ9DhQx{ONkR zPlm3%(sU2e;{c+mr~{23e1t^gaJG_utWJ~S5w z{zXq^PaZ4ZYaU$a>kN^r`R7T1U^tLQ3p@UOiypTVoV*b61j?UoH>Z~=G;(RYQi-k8 z=!3DxrMy933}Zz+NJ_n8bjX5dq26Nr={i(kk_ek*q!3~}WP7?^Lz`{!_|EEkVu~?0-g_!T(@P93oDfh^op9iTeRU0r5-D<0kzv zo`F?n>_LlyN$*{abzMiq*VAuliF%hru;6c?mq~f-)fF#pj;MD z+nl!}+RHLK-7Y!$gNkAeK6Fju}@wlQi#Bt@_PRBJ(xBRg#d6&>I-V^5xFkp} z1!)~U20s;-+gYJCEVk;v-y9QgZca&HnY;EFpnXg-m|y0wx@eJ5feiK#4%S-!G=(q6 zCb#=CZt4>iROL_^;LpfsrTb)jPbY1cym;)GEEz|eO2~dq$_T{MlJW6j2a!xYxGUn? z+oKIyS0f^}*};z{w`i<8t!2I*O2J zk`hq+7YtT&q%^O1Wwv^FJs zb!Wd0%dypJi^V{X9X)bQh55qpqFs6biutI$5fOIl4bnz=V=i_L3urEEs7h;w;laOqO-q;#iKT4Sp#*`Dh{DsXZ=V#OfE~UFJk}X)aA3U*xw*c?yp}?XW!Fl(e zNx5iwV?<{!2KMiB5sC66F2h&ZQ1Od6wiq~R`J3u#`I#@cciFK!4J~imv?w4T$m;zc zvgye!xbNOBcon~yeiNyQ+73nc64lJDrOBW|o*dCTzjVX@7T+|gQT9Y#=tItHL`ucx z#I9-yG?rd_?0k_|oRVy^Kobe!tP&Tk+*}*?pIPJDu6}N+&td8;-8mL!71jub^>ru8LWUYhshDGIQK{P7 zhxwd{h7F?BxFl>3?SLy!m*7k7QDL#*z~k_gLGv#E>=){Od1)uc&4OH-wh$@DN%xqG zzR#wJdcDJe4kJ-(;;N0WeV3K#JQZjn9jay0#JCT=96WuiY@v7?xnWiV%o!y}^h%RM zpSLHjgrw)fcsglRcz(moTlB?c1)Kn?a!W+Rd8VyahoQ}OOe4$U~V+hnf1%M z?anbd-J$Q@`}(rhcU_5p^;-1pRjR*_a51Fg_VIR)vSe;c@snGhEua08Hfk^sh_la* zHC{O&?s|iZxuOB>-V*+7O>kno#PcTnQWf4`7bY}ar`8k5LlT>RuJ#TdE?MxH8Z;{oak1bfMG%v$$B``3h8?}K~*1|jT|?{lM@<90MfAT4aCC6tGrJp?X?Jg z)Hh^%rdoFv+2-IIbh1_t<0i=Yxys~Kd=H%sBzX^?$DxQhsn;j8g@CC5g03}QY;=Cq z`VcjfM-4_&jfT*UndKKlJV!IxPa;2uqZk}kwr7=Pd)6a|DPbtw2UP3{F0FTHqhW-Z z_X8Xjows_4lU?DVd_gP00DUY`=P-PA*@n^hl1TFDvm|<3o3xgxH5RhJs($C?CF%P* zr1#cX20@VpF0A?sL6M|hx1~1I)92%s$*hf2Qkicpb;%k#{%k48^kcCECESdkzFnhg zhoL)v>?V&juM7{QD^HGo>E+;39ZM4F!a!>)3C~4`ch1gDfenS;B&Z@K7i{$8caX6xpilYu!8Y0q$M3>|Q>%(WK>C%(mlyZO#YnJ%9u@Q$h zT-N71&4SccObxH1gCbw}{(Fy_n;HX=i%CXP^UUx$L==7GNMXjx7r05vwJgXt>@1=% z6n>3-%^l?M8W-t2J-o`Uk}zq`Po|TePRw?CVON4LxsLX2^ADY?4m{?$hF1%6HAQTd zJ?t^kQ+GCcV*>-U79(Pa6ff2jgg0l|m+xI19Cf@Q<)GT^rZ=4BEh$OoFXsBGI%WE- zDk@3-lJNNSlzT$ks!o2!8kFGqGcgW^YxuY34`R=RJL@S;8c34&D8!$gVc^=elG+7M zYCl*U00_K}g%+J9Mu7<)#^;Z_ z__ckbJ2`Ud!Q$Rd=G*F2bus9*M4`VFQzjt5uh7Htvcp1{N%NQCpndAuyy_9WbHIBu ze^Jh*uXw_b78u1b2*=uUQOt51zBto`3j&zN&(*I!+(I2`-h5_GbM`< zQe&L=Hk{n=dSS3*HU{J<^`OlWcTkGIEjvC!FpLyj5d}HG(YBb&)QsG##o8@t+z$JB z!j<$`*VHD34sJzz6o}-$TD{*=o{5h}*zE4b*#o%rC>X~UH${jwfy}e+`Q8dG@z0MS z*5D`Lq9wjVqtS%~7E4A`88cEV-)?%i!FENESjH>dC;ZmaS!4#dXJ|Eg1zqqD0+e); z>U9v-U>PB8Y%iFa~rTO-|i5Sd+2r;9?5ZjkaiK2(Rbxwxgg_8aI?0tVs+A#OjF? zrNMb?CDlP^LR>e3EggCBec-p=6!cl|+EnJM!k$x~>(dF=4!a~~n!LY?Oln9nS3T*6 zO%!NijAxR%M@KDxve6w~{jbh=>(1mKd2i^*1(=f?11|fCY7rZ?E}%!-4%`>_8mQ77 zVeK#m%cOe&>j2e!-RtBzF_+-BXe;wnLWi;(#ApoOWJ*h3jx;f0oW7XT-we$XFzDwl(@Ry27dS`C+RGXTD-dmo6~x0S`=c>C)C=P z=}AQNLPU!=O&BIFd+{7tp^kdM-t5 zBg=syG=G70Cg!bT9_YA!OSi2h*CR<-yj$*d0}`MZ4oj`8*VU$Gy{N0!nKepVJ@O&g z^hVnw8L*itNH(x`(Q#OknZkDyGHge4H6;gO%HhRn4fXvWBBpYAy;?v&rvw2FNa}wl z@LvhFSR*kEKqcmt08yhM9eGGQ0BW;%`8@r32M@I@*M{59*v|=&(R=Vmrjp|fWIZVW zBbC}#7=-MP|4!EO6%n$CQzhJ}d_1!*d3TTMP57$XOFg#G=gWf}pzBo7e=DBtZPR|J zKzf|(BJpmO^;lLp)49pz;y(gY?uRN#gUlN&IbK1~|Go?1e5*JYn)&x@{mJ>5YFTYcDsycOhF(DbuRk6h3XHX>liIPgK<#b>@;1qb)x#CgrH_SS z8-u~pykGs46zjPVX3(bSx0g|TUmI!+hlzK`ej-B#&@x{qeA2)zIhRMaYo|!hw~)Od z@_jp#v^ej1^=FWdfSBO+I~WbXuBh z&4L2~;CYJOYIYAo$nGHaJ51b`XgMIJ&U}u24qd=;ApqwLpnVmZ-Gcw%6S{NOaGW$8 zH7A2r=SCf@9To}}mzWE@prQyadz+J(Aua&BH0?zWvDp;t11(uAyO`AEy|%~AhTp9M zNM4BP6Dq(M9PM67-Y+ODmf{+#IDFI=@AQpY1|9y7hZ<<2dV<9N{X=={i+Y8$?ooOk zckn{?dB9Dnm6^;*hCU+57Kktn%GQsMmD`@u8wI)b!J7nE<{7|dn-M*A)Laj+rRidy z5Jnrdf|2uWf1&1LF&qBxKOV|gpbZ^z2HYC?K}O^`$doiiP|M}`vYZ1I)X4J09&7ar!|X}SEWRwMmEGPc0^>tJeFbe(HM65 z5Ag+vtz5{pG~p(AXYvwQ!aqcxUw<(Ki5Y;h96>Uw_u^cbbm)%RX;g;o!#eH`2D|yF zSOl>Q5Y0_dk?_b4r1He;FzNab!^Sac%X&WDEnOf^Q@qj|IHCXcIpU*r|Bw=h6|f{= z((yV_o|8*2%%6b?o?LiB_$YOP+3X46f`UK+_?wMH&N@pohP!^e79(uJEvW5kp&fVY-?n9RUK8zjeU-nyYuireZBRwUaUk8B4 z0sk%8Nb6s)K`s{4|LbuG{rx2U;PHHP+Xa4h3IR~+G@{sIA}v#1fxx(slyijEOe%_% zZfqwyfQB`q*my;Sp~DJXD<&W&3zwPe@H03Nd3!|_&$399IE+TTAY3eoruTactkeO5 zLxQV9Ey!|J!K4YusS1w@c7a1?L9HJA#s_iEN`nIx767%>P_mR)6@n?;;@ zK3q&A9dKa?c89|Pg)Zu3k=nS5!$0r;Ewm38i^Gt&b@)&-3Ox4}00LKRilq=h;Wo_! z$=KU6Ro^@9fU3^p5IXe72c5P_mg^L4&|Z;xEu9qx8=&-};{j zYxW0=$l3Ua4dx&tWW&)?I&QqOIq>(6{Qo^$2~G%)67^Ib%-&za+$EV7XZ-d>7*8}z z!=sV8KV|~ZfVqChH-cnZ@MOl|Mu@TuMEOF?iw!0b9DbKBT5w3HT7}@abV>9!yVzhg zDgF0NN}~1&Eo>O@nQ8;+E|?OUV5phF>wF6Ps{MA+2M#&U@o2G#MGwjMY6t|K`LkPq zgm*+hOACIy8TRawlHIESXX6*1l=aH?Fgyyr2#M#tH3e59yE*=3p2F+zmGi-*CI5;* zXCB@h+sluYS!6=4g;pJw#%nM~97|xmI)v*X7au#rTC&&+NRDoMT^&#O0f7!FQ zt#8m9{-P&a=Xx)sSTF}i7wa7kObBq(JRff|wgh^8Y7ZazjoyPRNE&=abNU$?2KHyr zUy7Wi{ab4M&(DYetqH58_8pQbv>98R2~WA#1G)fwj8;p$2u9~L2z;G0mbHk(^kt#c zXU1)bV0KLKv=qQXP<3%2klrI4m4qJ?_fC~@vp+f>p2L}R#Q;;fJ1@-|eGoZSIZ|Ea zF?lC9lZGui{QvP+gQpjc=7j!)&7iprlVqg;#D|tx>I`-3m`nQl+abSJNSxO(e5RX4 z0$2?CM$UJ}&4)J?_MiwKFG@T|ffA9#evEnCmt!XYg`g``kGKG1L`GefA{f;kTMQAh zOoc%|l_c+}t?wT|qX4DnPZH||> z>14-)dSmHmj|!j4CiENyejNEqM$o55m4`p1vTFV~e zga#lmAbBW9NBk!qn$1Zm0*HVp0viLi}!H#$T`}=lG z+A6pVN5)km>Ot@JiHsZ4r;KrJQ z;I7C4{42$fdnTb3(HlS+ri$$Sa2(hQ9)2DuxE{4mF?gaVxbIbGKn`pYt6?}=*n{XG zSSuVeHz^FrG-!#qd4 zKfTd=HjDzn3z-{?MJ@I#hlLM4NdT9P>;%yYt3+?(&5O4@ahfH=5VRpdpi|fpCGjTx zcA+oqf=Ihac$DDrvJ>_5OtS=*tsXtu81EB@(M-|v2+#Z1#?8qhTt8Alw5=_>B*$b} zZl)1GGzVihCZ*I&gSO6Npff3N5)SRBf&M~C5^=|;Bb;YW;RyL8Yk0?97%hfBJdz=; z!vCD#zhA{|;pLfNexqsKBhGWZ%zAulbeCLo_=JKI;Z-DSGZ#fYz4`@x5MhD#gZ%^}o z|DmKv7(L7)XCh9Cv9TP8-(zW%Gi`_Y;!ijF#R0E_$Gp7p#2v_U%D0hP;t@aYMZFd` zv*AHJ>?Ia>182;QhgjSj9y?+QVsQnIQ}x@h|cgw;EeqE==b3xN`?c%a_A2Dei$NVUF1H|4{bUaZ#?{-mrvV z00t!>p(02l3@At{ASfXr(xB8314ws>4N56UBPlI4bQ$!}Ff>%oC3j z#zZO6n@~>OI2pKWQ@N&zus1=)4{nmr#_C_`;7>b+3u2a3Mt1DMBKR-7B_~xVFY`XT zb49n}XC3epLGMVXgcg3%&+Ho$k+dTLZE%g%WK#PuL=Xg{4Z7*0rJrb zJ}Pjd9zNtuYuS@QEo9lq zLDMSdfBE0797liY6r!bJ?ep{Ql5^D0Cu~^!5K259b{-j|4tHC=d{|v(-r5O>W z-M)v&QsX?A6$TUT_`71xBdy)whl|wY>gs;z1>O=~{j$EgXAsY;!eRTMY{%z{@>zUM z32fOQUUu^%JbYD#p6>r>{r>!ze*YBG`H@9(48qnQ8+{bCC=@c)Gz{pa&mtOMKXhEi zH|XDz25qaw)d=l49|%Dp%-}nzh=mud9kod!WI9M@fPQ~Ladtc~3(0HT)GsCy4~4AGF*dnmL|8!<1e!}9@%v<5)KXb7l0FjSxabO9y4fa= zZhIuZ73$zCQElw%$7Upw>7D)4^mKU??Gw#JnWH<=MCHTDgpGzS2YhxNPIK+=iH0B6 zGjhz=8qx~O<@~>k_W$R>`mg87(sQao6-IC=X7{Q0Z&n}};1-A#uFNM>1UE0j^(bQ& z#)EOa5)V7I-trm7DVaG_CJ&BXfbzV08PwEC;Lb*KVWBs=^QN4PKl`#EGZKi-xGUh-GT zJZ85x+m4?MmVQ21@-S)cVSsuw!4$$HJRr98?#kHuxt{HbYuNus;EMstm(D8Np&}rjq!gLx<5ZSDM3P!muL#^Z+QhET8z4nllcBk}lv@Ukhl5h5!FMSv4#PNBz#;M3KIR>4x(aouC|L za{q1X-^n&}kptjRcAD-)wszO@UehKvaKH(n(CrD2L#IOzA5UW{Q)q@alP^Tia7FRj~Q96vN{>FkiG8GtF2beeI*)me_aXHWQ~TM)=}^{+h~sPFc?L z;Jzc}8eAAI*&v?Q)N!HJ;wsY@sD) zbg?BevdyisVnHls#ltmTa5Cod=;(%d_G?8>S2(zdwJzKvN6|}W0GqH%N{)uz5@OLM za)8y9a|&J|oOut)1w`aOIVarb%nb=yf0m86o||04T58VhELKbIn#M7lZYSV4A-)>? zzH|3pAjx;gzv@a9?Adf{OqOzRS}!P{U-995Em(CT?Ru=}DXBvQ#3%o+fAI4KzxA7V z^5lsWrVpl%wyx;@n z)D<1xC$hBd+OkM6NY6T(+`|#?tjd2Js6NUs2`;0nw{RbU%4Ouu#PS@AXV%S59*&M zxFpZQMTF~d2HHpYW5LbV-i)nA74P#fTTt!gdBXOAy4j9=hATGKS$c!gb#?TXA6dv} z+^16_k^zt;xveysXw6LY?-Sd5eVg3f>)R9BEHkZMqc6~QCNnE*1?;TNvR7~6Y?Hx? z^+2?}0_N>jA?~-4IiJg-J5+=Q_W{-B&AgYpo*XY4JO&Gj72WRSkmS5(mK@QF7jm`P zS{_%c@^mvc9iTudjth03QM-H?Aj;dYU2Wz;ul_%1*1mGh5U08O#yO4>Yyg2(;@7?pU&QAS9SuN$R3m zSuUzz0`lc!t77@P?Fn(i(l8fwH!e?`-f4kFDzQdqU3fMYd+E8$9H-Sfs)cFDW4a>Q z0T!WV`0AmSN?{pw+4$*{n_ljfR9ZruQh*$vO3+PQ4aS(}4Z27#@8I z`JJ(IMQmJMHBRJLg-iP=P%TfTR@mcQuR}PZiG6X5M))f)AGM3x>yP51Ar$C>dsRc- z_)`X(U{DaYxztY3uO2j92r`-DwdhKHMaC%FO}hX|o{l6d)KpX^$;A|+UA3`@tf*nX zgX1qpNlL#l2aR2+47t5<%Drw^qy)04ic?0$@!Axk?U+$9I;r)(GZUDkTDNSt3 zUj1^^+Ia|<>PxedLPl4rOz{BqD^B_4_?kNgWKMF$vvZBg~w0F!ZJLiCT}h8tb~GB@m^c3E}G&S#$s^U%v=#SzImRpvtqU7mC*mbc>O7)v>cf=J8$=Vz1N4a`7F~v9*5726!c}KOfX1EWs60 znxs)&x@Bf<46r+4cN<^ryk3zl<)E(Zy>@d6283&Vsg2ATFKpAbyO_K;@3S9~JX7&O z+6?-Qw=f~F8YKAfpsW@lUzroGa-lmq?lkwWU2{g?$--ZEm*{9q#r@!-_M2d16gs5P zrcLj;x-}Vp%@2>f%d&^CaeR)whjp9Z-*_e?7;f3_CCURY>S=OfJk$XmD7`m-;A}zE z4LIy^$U`PQMbw1xQ!d6k;5>4sR6-}W+Se`Ygjcz zmk^af_YT!w0bg32uB+<%5mK)e+!f`eQj!}mq3tYBMB9q`O&N4EXTF9UkY-pPPHFYF z(0vhfH_A2D6zkoG94mcxc190)t$MQ*+$53Y5IPZi)(uaNQA*SwFD0o%ew&B$CEE4U zQ6E@h1)`ssmlwP}Hz4y=yND4kn3g#4Yx_x^HBqq2D|2y)y;&JCUHHzr-~J;|RB|{jaaI9<7<$nc(;~S}VD=A+>_OCR=dX61xa)a3vaU zt&#+fF3^<`jXzvdwg&~`S(=4;}jFSvkACQI3SAAoclZW0&6AvRsI~_ z3Ha|2VW$DCZ9~U8tOw1i$U}WU~K=%yM5kXDfH;^jOht_0fXVO3nl9N(*r&WAHp=jOAQVvRi zLM=*^a6ZRq>nrTdk%!a4ga01?-D&At_5K=PhaUz(`4m1YdM+v{e5TCOAb8Y#=|5Qj zq@FVej8kJ2dsS~T2&jc~la7Xd6#YvHKl0_ARD#=)P%{Ar0TcNKu6>UW{dSAMpHK?; z_8&tng8fWAB6@nTvh_|M+~wv2J4R-ov^?$*Ez5T$L8Y-&C&ZFDL;)}yR2YZ^c9Rx?|v$7|dCHbPLOJJC0 zM|Ef>xM2_X#QIupDR4e&S=;QDzLIXR8k1H3k>qlej^Yr*SIdBTt7M7~9a2aFf4!xg zPSxaBadTKuB9r@>+l+YC{e$2OSCOuI7)Q9aMJQUGsWRC`DLa9+VSyEm&RIQK6>0rj zYaU8i9?Kje3b4B=w3SN$W!pignQz*WH3^vcYr(O7`1>n`gWLN08xHAeDPq|XP5<}q z>fg4DMTCG5_jw2v5JeJ_%vpX<%R$+7pxniFda!s=!S7UV^?uoq*Tyh=meuzcgXx11 zBsXaizRGzA6;cy&hZ&P*=B}S_qA=Cm%Zx;;BgJ5LZ8Mv2P}*_85O@%CDfrUW$?Kz&^;X^xk_TUq^$qTc(6l)BTi-!?Yf}UvThsVl!_8*Rc#nrwc>@Fy zPmp9hHkCN;Hi@0A=Fsn>dZc6AhE;mEB6t}Ov*EPQ-zVOG!p56hCa*M)r*(=psw9OV=3dKN*XURlBXqIXfFI%foc z!yt29!^D_5`2rGEZVdsnl(zX%9-kC1{^ia)a|#|H$q&hcEfse4O-La(hT!*XuAGwV zBqx}-fkg_?3Ly!dezTAZ>Y^_jVP2~K2|~V=u$ota`rF;5=Vm*)h3JqNSd*ntB&7a&Q0d8o}G1Kb6{NRh0(z9Bl_SO8QpiXaKT{~ z@=jr|-DsPn?B(5Ek>Lurg0&wi{whxEXT{C)OK98uVnyxJ6B25??q9yuPWBV(`l~!S zds{b=u3N$sw_X+AWAd20+|iG<=G&&j6CiaZbw0yWw<>$5Ql62`$_EJGzdY<3A41|N z_Kzy4fK0Rd-Y|BVK*w{`nhv%Ce@UwKhJ)VrgCcGu&-hs(>{h8dc3P`hN%+cO|J5P} z`a{*OzaAivEMes>>mFJI*V?1cm8~FIr%+67Zo;)8N0l49CWIqn;=bdHke?|=GG~c2MZx4Lw+>E zc(#PxS?n&sLo87m>dX!QAW&g3&sp~F?Lml&45@jaf#b;llC{|_ww?fzJc~Mm%H9e{ zk61>CmG^AWg)8w^uBuJCJHVKI3tqb)6uc)iO$2YRg77OD-k92q&FEw)=qH?l-@K}| zQ8@jaeh4s7SSi$G5@1w*i7>q^N6w;kgKv=DZp-ViAE}LSqV?A*Jnk(6N^2`Q7?0}V3#Tc zoFMUF$m}CF^6SG-kB@c&D%UqOlK=3)z$mm=}zK&0@|qw8(0Ns>RXs+21R9( zLCu;ECAH1}F?>n9FpFb*`Kn2_wP)=fKUzE61qvqfV3o(kuPT!XCPWVS*l_Ea2N`jR8W-B8i?YQZuK9ZtUd_N!r7sI~$8GBn;40 zYR$`nSSV)k)UVdf2St}TxQEs^qKxpnu9By$8GQbNj7g1MgSM?}Q@)+$1`dUFSu{wh zvk|!|6ol+SaNY&GPzKadzx}= zpo@ZJQdEi|>4Q90_Jqkea6&yNv2-gE+nFoq1T#Z!MnE|eA?`=&Emv7dlBmI|Ne$M@ zc&!T8ys4IxNWbfe)NH{gvX@L3hDtjjKI_P0pN9hJ{b?g^-BF*yaVU*pKsOA`%D`gV z$xU#%*U%-H6_loLGTkqbYz)VE7}jLNqJ(av zg1H!IaGzqLqpduHWj@5>;|$JTAb#Lk{H*erC$KNUj`IUTs~?*N>f6Lt0tFlDQBuHh zh|{5r%7(o;+GbfC$g83O1DceM`Q=WDX3Ew0KD%|f-4jML0a(!aU&?D#+%?j*DF2nRE1tR_@c# zuB|SPN~S-+9KK*_tQL#w*EI4uDH{DqN9fEFcF-maq*KJ@w!4eJ>s4LzE6p(o<%?Ae zOEo`pB-^&--R0Img7>+mKYoBTOCAuMY?s)Y{l(`&jMvxz_M>DV!k~^9lbp$8F=lBv&K+&iZxb0upu zhtGS2y^#FRwarfh+M_s5w}`cY-EUX=nR|t59@O{}CQ%Q3N z77T?=9n^1=pYF(djHSu-e_Yv+A3M|Lo9*=$T?#AMLIE*+Zl+UM>gq+-KNk?4e+4tZ zim39V&!4x+?9W3k+q)SWFE%Ck>S)?m{3s;g%DE)c22MmtBM+<(swYyrDf-19$PQgbCk3o}|B z-gpAl;JGwb+gmo}G`0_22QQ=@6&LNJ?<^SZFVm*$6lD~NcBUBd<=1DzDL7AGa?Nwo zj=iC8_1CvG^KQo-b?vwa=?UP$s?c8U6w5o;6G|(^f2K**eEM|VVzjFAEhLv7u8gC* zSh%3*W$obW%WOu{Su+GUcOxh;vgSSk4ypgZVoH6jad8<^P^B^@qNh{@erYMiVGYUcI4CKRF*nLD(4XcO-=D zQEq?h8TzbeQVyqZOg;dQk}3r5GXnSFfaBLe(@;&A25(W{(>n(W*Rarww^N^R!)xOl z7EefUFI(p#{Vv+!*EZ89Gs9htb-^~VA2I6Ig%+@WtrNsu46^JRsb-9LUpt258yC+D zd)?TegQqQAz426MXL|ee058*DKD=+u3HbB}Mj^sM)@DSGVU-=u$LUykf9FCfiEEpIA z1ur(vbL~TqAN&;9J$+>A>zd|a$GW!^jG{7iV?D{lt1E8xj4lm;zl04)^vZ#M&29k) zs1}u#kjls)hyfhu`Z{ju_j?;Ae!!Z`99y_bh?9jz=6tqpaX64fq}o}#Yt3t4Z%tmJ z`b*g$LuOZ;b22XL8#R}vqX66Ns0mGUZM^r;;h>579e>)|2R0a1M~k;g$$ACR?JU!v6<)H?JQyyt2ph8dOx{brYd?}V(s7A8%dpy@%w>^jT;GLH z(C+-hY5?v;{6=5cMsCtT)k~TZVUK;(QWOEBMpf>Q;ZJ;izF6}cswc>G4DwB0pfw$6 z90-LaMCUzwkw5^suIzJIH!2@$3WcP0Pw#Z zM)wDs0jT2wc|oDhE0Rdd1m=K-mPkR2>D<&khC}wU z=~v;TR^W=f9mFIaY7?DKE>t5;#0t%=O-2J{QzJHkWRPG0^qV0F+Xx+_vYqgr$y{Ha z0Hh&yef2hsGrQ;Y1=WBw;@!PP1##q*0-G3Kf&^ms9wPaj&p zuU~VyKK|8|ERVUK z8fCN6#HacxTZN;xpkJ^mhL2MQ77-h#tkP;xiS zdsN0Z5?6Dq+GOdP^W3{aE4=dZ%1RjaHTFG8Be#B;1_;PcW8MaO==;CkUZ3XzEDPIv zWl%c%KWJ_5KOFmjl-ZA9!ZxQ;~ zt4U(Ox8aYI(&XFuR$r#ZI5yM6k_6dR$`Jncyz3*-0@&@!6qcp!Th z6cUQw)|GQ>1jWM|w5vqNAeeP-qJJ}%`>ZKwgF4gI)0QH##qf)d5RCF|KF41wCjoH_ z43jo>9XcFQMgIU$kUP+>!{?erm@4IU)KJVsijWH zjMU0+{L8#(1>{d};k|txcc9&JypMuve|XWG9U+0Xp0aCwhxJ(|y;<5vZKy|Q`p=@P zy!YIvp*VTo;l+0@J^<(-0#t0}+#KRp@NF}g;$b%6rG6z7ZAW&{_4^TX@H1 z^tqYsE~t$$;?H}!9ee1B2f$*EaJ1AtzuB1VH;lILh5Zk9Pb)I#K1p8#Vak2+u$=6y z2?GuilJ5yS^%R8TMLg!|lTy6{d=j zA8!#Lr8pZ5-LO`9HQB-?$su!+!O(Oc^VS%SB)M1lo#Nyaz1H7BQJk;lE%t;-%=L~= zu?=QkONn)*p!L%#C}Xb@t-||Fqq5>v{u)P@a^6XYXh6ur{d_Zoc$z@4cagtQN}KY?TR9)to@zZ*q6$X(bHaknmR?afJ)(R? zlMV^{pU)}v@?eT=&pG3PtaoMaGRYv6N4d%nO=H$nh+eKe+XIY-PVn}#M=xK#Oa?$B zA0jt0aXoY0^mZ7_JVr$-Yjc5G-dc>%)bi_V3&BuYnpAwY)jOmw(&{^gyt$-$zU0=x zu70_5Hps~93)W}G9s{}0$CG_p7Kse{2@sNTV)VrdiT;)V_AbA3?nC_sDB~5_4lOX}!T0($e;RBOTs@2*B!6=ec=;B=<|iz_t@Nk2fKS1@Fr}XrS5XuZlZP-Ps!F z^N9?n>u^f&$kfcvI$)NuGdJ^C-%KF-8+@@;4mW|s;0=1#HP{N-XdEOyq0kHpI}`2z z3|h)RyY4?+lJ3`f?t6mOmWKkeW&Qhv_|JieZ8)m0g^Jlannc6WD1}5TN^4axqdyYE zXCokWvuQyWkh`tDMISyyLry$kzbc z=u0_$0x*PMfYZV0TxqRen+c=(qiAstY=_?!?*VhsGm7R~3iYzN2iv8)^R_-#JPj(j ze)J!;i!ASUSjkibP&~>6Fs~w$K{xkbAakHFa=2crUa*j5(62B3EPq0O*2?m7GJwlX zBVBDdBYeO;N#-nHAU_1FW&*~MQTjG-DQimP=#QD2gWP1I#6<|llo5Vdlp{KOr~3Ej?m&OSrlFak2~jPR<2*UnNMu3Ya}B?s6o-kZW~X)Iq;aWAHX_lAa|^@+YVn2DKu8QT>!nnEicm z{z9?;=>5g%F#`49hLvj_EUVL=nwZ5S#qk~TeiQF8y<@MzY0?M^g7{GGqW72=>#h*k zY>$kZ9)nG@^kxk1y)a8N z`<3QPqB%J+p%X1GYo6b+QwVz#wB>+Eoz12IqIFidIV9b!+YTAlkflezCy*BH!O{kpU9yH;y1C(UyrmOd zn_=)KXk~xSeKI>KRnR~E%h=;#^w)z$pM!G5?u3n=ezPddZ=erV^b-9SdaDlKB;)X=c6ll(s0oH0W1-v= zetCs@5JQ%zJc0MeA}S`?g!Rltb>q z`%vrD0&P{*5W(oLF!&Bpsn20ex_QDI`i^0P7L9IHGF7A#bO7;nMALSBQ3$X1gIIs^ z=g%*9y(@Y}yIzeD&A42TEvh*o$mJ%!DN3b5v=l}+c4pDVXiqu40Hx>p?FmT5w%Rk) zm$eGsfjC`1&h`7zwpsja2V9hJIdI0|m7e^i!D0!12VcbtH#)$=!U5vH1wK9u=H;5! zD-6h0&?I@T{?rfNQg4s2$9sM!HhorQ_9M^ir|16G#j5UZm|C)}KwGB`v#i(w z!~rTq3Yb>qUK?bZ@(loX#kCVd-dhTipwq{!uez^(P>dDrDUc$g)Gqo#jyfTWcNf|z zB#E`ESp&9&X&bv%AMdpuN%?aR?l7%fE}g>wb2^YER>s@pS_P+42)iyfva5GG7W-dQ z>qG}}>Q{M|?tVMrv-Cmup@6W*UZn7FX#j7T{OUUauY(6=v5n!hwsz?J@ig^>t>2@R zA~y4(?G-SHTY%nSXtvTkFVkpLJXwZVi!@$5`XqMf9 zw)tJOv|fx33QPsyf|{|f00BzqjCO9eNP_hy-co^ zXuxZnu~4CbR~Avap~t*Xn_%5Dtbf1Fbs^WlKTnOm)ra#%+x2|f4XV8>S3cXoT%T?B ztB0j$ch_?ZU%fwWLNyG6ji%RR(fy{!j~|ca#zej93mDHSU$7^vRXX6$t$!NPRkShH zaRXxNYy+(k^_UlbB``(GtDAXwXpf%zz^Mqo4AM#kKOLJodDaUoI<*?c@vGViYYuZg ziM316ZP>rnR#W=Xh-S)Ev0MR-(k)~XhPF2cJ#kx{LXpRE8&r%}ck~Ok)0T%mcy&s1 zN6i<*OqE(T^(Lvl13EPy_u-v9NzQ9n>0U%xXn5z&oguc~5%8eq z2&zlNJeSpT%HX4!jU-I3o6R}#R^fPc74aS?ky^qE3V{>7(F;C;PIZ1`-U@72Q6(5L zpRSATdbx(6lXq%0{zn^vA@1=dr+=LuP@<*D^!#`~EeQl#{0!eINGRz1N7e9Oibp6dD3< z;&|gVpf6m^blpG=oqb}C{K_$(kt}V&NHI5iwR$%JsOxL9Qf;8T6^$J4(I;wKi~Fqc zbPMMDW}p2P=1GH9XcnCooNmmjd^L_0{{Xy0`iH2$>3gMEr2VoeP?D}o2`m0K{6|y@ zUJ6-se%U%#30#hS9i4dtM_SDH-Gm&;eVSro|G}!Q35JfqahQpMVX1k5nF)viPXr7O z6>MP4XT2av!33mKacejI`4FuW(g4gJ(i(n-cyvtxZp;Uoq-~oY+Ipl;26m_UA!-cG zfn4b%SnC$-DsiIGaU#}bBm~&Miv{VK7*xUyqH>`lT5Y8CibYm;uZ5I${E0iz= z0zCWHSM={vss@W~gEVBD3}(C1f~F1;cLf+67j>HXNtG$=USVOU1S3hz*d74FSMdz7 zJqaZV=gC>SrN!whkRa=8emCfsun=!OxtoG#s^(^E!~9xr#C*J$<&IRzQeXs(vrpqa zY^%0XclS4{gRJy5MO6W;r4&Ey70&B7A(|9OL0nMzZd-BC#=K&D(6Ou5myJYrX0Hdn zMn>C+z^t^$FrSs^QP#KVq7?+9@0_<+r(0WYeOv5zk82sbLFqRUvh9GRupFkM0>mIH{1$;C=gM@mA~b6NUCscs3NB; z4g^JCl};(xW)k#9kt_SNpjPrpG`{Mf?x=6X?jJdTQgj!jVpLX6T#KcRakS~u^k3e0 zjSMzb?fnK`F5I2p79y9Q2H3KxK&O1+c{8CRBPEs)r|;ZW9L*kf88y<%dU`i)l9yae zWn=ag&Ow&jCE7pMF&@okPyXSyvqFz=l*!<1@w|ZeRh|%!E|Ya7QR1lCA}i?UTCI;X zu3jF&aDw{YGwwF1krvsi3~ixWDzmxjlJ`X3q(`C0GF)@>dv01L8yK!#Yl1cEGsFtC zS3W-&Pz+P)X>EY~-He7PE;^dP6)qKmEc+f#-IIX@rS{?lNn=P%6$D9nxq75flJ)pM;4yW3O;okBBJyQCV{|A;VB`U@x0 zc@y3;?xQGtO(F!is)7w=vav&Q*keR`yY3 z3I5tD^m@HMFf_X@ATEVlzZ^s1H$lm+{04&lb;S!iYtN}38pL~23W^f%{7jQhuNB@} zTZDiqnKq9Xyx6vjFR=A(v&A5jhH5!OhLXp|>J9z~;{sitpzf1<2kfT|GqsNY`E4U0 zen|;f_iaKPLeazYs`{|rKW{^*4`BfEZH7gSP0e(qw{PqK<(~|=UtL-10%(${aZTpN z9V|(39cvx0BgbyR@dzFo8XD`$+Opby_mR;tT;ZD8Z<@kNzbRbGLHs6c0O)HZvmzIi ztBpEZsuV5UYnJJ{`R!Q>49b^v?(FIkCsEr{S&-sQQ_rev}kP<#&DyAj~C_)_jJmj#gu2nCRtR|U#><`jz!`69E= zTX%@GXt}jmK+E`2W~|Zbx4=g$y;*}s`BBHvJP_`~TU+AoNS+MR{g=&}T-J@==B8DD zHEGLy)vksPT>v*Ams8N0%b)0ojWX;iZ@P{7k^Tgv{_W?NPi4U0){nkmDPg5G}h@;8}RlO-t z8=U-D*#Mf>N(*J>*Vh!|F_;z6qzyJvU0Ik(U#$;hlC8@z%&Xr2J$A9`N8gK2OJ+<#q{Mzv*!7>)4Vep8rOLzw1acXl5XsAKu~c`wsG~wi+o1oaj{` zG)lqu{BrOhuEGbAN&?VOM|!;8--0XQs@BGDokne%+yUT(8URQ>5IgSi@YPV2S9u}) z+9f@m+g?r>&_Mi>fLA0|Ly&8x<|yOlx37o}m|jo9VM0*^jAxZbf!fcQ79oWv8tNX~ zgnMI^1?SbbMujFDH7+1l( znXXQCXwHF|F(EZ!>43)4^rl*H9v4z5#o{--53h`?Jz+L;#R%f9adM4{|#VF z&P84k;6rP}qAt(XOYZ08zP^Q%M;z7)($app1LLN~6%7++f(`dUD&1LRb&s#HDtGpG zW9oGv7RDs@TWZavf4*HzAQLY=G4N863}xG&pCSek{c$FbgDTinJn#C?*gH6wf*+B+ z>i$?Hlb|T&lYOW1J~5SYjIOA)NJaWh;;5Svj~%6&VSl)_=NLDBJ*?7c zX$M~1BLb3lWJ--)`4OXthg0LY;<>Izk7lYqO7_PTXSMzz6wFxM$CR z{3T1bn735jx(1hqw-)WmEP@@k0oFOE07%AORV(J zZR8oTwCnjlML0wld^Yx^OKe9aN~cq!5r^gmMyRI-5x4Y9ro}o(rJuhLuCAfM3gd4W z_`GC1M{xmAES(510cbLwdImoT3vy%@N++4{|9BfH zRb|i5{^pUV(K-I6aqcr5h9ngIEziZkabN+^NyvpKMktp+D6%Un#tB=<7z_?HJAB?% zELOaP>ouE}uB3b$r!ej%>+rD8qF4RyO-D9Ez@g5yiMkOZ0*H4M z%z&jkcV?b7^sxc7MdxzDG}m<#O7G!0=8H-A@gG!wu!bqR-UqD)fLOF#`jHUXFqNRd zN6YBh4t5@nOP7}Nb=qe0MO*`{5}Nq%ee zm9~5JQ6w5`QyrggO(;iSQzRNj8O_3yrH|UU4O6Q_ql_*?=jdbNvzs9_RK`D0jqxmI zWyQi{)Bw_(mcdLlqLoktcPg1?CF}+mZ}ZtN$TNNp2jwOdyoKFe8g$ifLb+V|Yn~Ih zp-ds*F7zcG&v$g(>|N{Fdz_kCmk=%tk~Ye1j1v!|ot?>bVnrOx5~EYUZiDzcLXa{f zdxw(IcL3Uiz!SYe*aD}MSPE-UmWmZFlsZhlq+rGMjw90bL7Q@(Y?5m8*{a0Rzu<(d z7r;dnbvP>CWyCE}JHN7(`&~;db(?V1uqQYy1%M@U)l>;^Qlsw6phHX*MnjN9(UgxA z0BAaXAniG>cNo;%gdhGuTU%Rkz0osGjx3*S zeRg!)DwEc(F%sb%92{c%iCV>0TF}GGxY^%yWfPp%SH%{fp;P`Cm;MNI_;HkF{Ae@i zTZWmIbrZG_%7m=O9-sNWI1b`tP@o~)r0%jKXG9AEy40b~sK_VE)wZ`WYFpO#xT$My zV&Ewp*Guo`cgymj7SQ7XmCA3mM)`n~g&BYiH@`x_j_@rnGI5ZolsS zLd1ZX=+6d<>3F5#)ZD*3N0V6iqAj3i(A@=ojECOn?Th|18*}{^KwA<5lzqzlGyWdG z?3pVd{`}z$w$E~e-*PQwJJ!t-1vbS7P;M(xnWvDE&vZ$Z9qf%B6sdVvJh2(XD$yX` z+*OP4c13+KO>=H*XQ?JV%`JPU>^Cuk2d)3Cv>lsEu)z%!SN^oIu4J|7^E4=Tby2qy zO0V7er!nSe*CP$Is59+~AGCX~C}{@VTue(JydFmu%VsAYmUFC?2j2dL z#rm&{eiPt~4u&h!0MV(Z13Aom)EH~=Z|#bBH_N(`%A^hus(@$>6f2YUFDC{~+}oER z3@5qhtB1Pe;V3JX3E0x+(^neKr1Xwodi88XdNVi_V~x$=!jUWgfG3RYNCicpT(gt< zyOG6xgp`onn^s9An(DmY(ff<{`C!8wU63@msAL4M?_3_cSg}X{F-4mH0KSCSmL>1qtS7}Hn|h?qj#KTm zjZZU)&h1Kc`7?vX`lDXK(Sy}ANu}no<*~d3AIxFf*@QHZzdX|%-_Fa%mf2`UQ3X%? zO<*5A^)JWEh3^~nzt|PG8}pr#;_j;L_=ah(y$O|bL;sMa>$PFAVkfVTerrcfhH74V zbWXtlBFwI0K&5TqL@D2Tr)3&eSMeQPi_;EbBp<>nPEJ!DLEv`wKJDr&I~bB^^fg^l zbt^MB#)>?2MP}Xrqp365Uceb>zKtcGUe37rjE0>4%WF=kbmookBR(}EivJjE_wTD9d8R)Axa-1;Pj=-e9-0$)e08l6#ApQP~rY?J@ znlBfE#Lk0~O-Lu#Y^A473Ni~`g=a>ZAe~W?shRrys7QB6LF8y7vu@TikNl5B?H0AW z9-n?0YTW-ez@m)PJ(&@2C7#kmwQgK~zxRA?6Hwa-KoqX^aw=4U9#^cR|LtxSF)1z^ z^n4?pD@tyl>r(49A$RXx32P+-uXAkSwVU&!)uTtn@NKChl4+JTX34Q>qY-P@`YuN3 zefKm}u8+KTeJ7>hxEFYb6ASXPz``QJzGM3I++J(u!Ik$Tw0d@aAb}B_e?5N3>aR*p zUpfSe$1}SLJ^v0a(lEF!6hC{sG!Jk}{3W>I}q0qgAtgrZVX zJ~8;clmpbIb^j9*@>#)WtY)h^Swf&yy$!`7M)9%taqbhg`$$;@{*2tGzsEsb7?E<$ zge(M@o$5CJIqWj(M0it(e-xKUzz0xyO*7Env*muIHrq617+@GZ;k{c1w@@Quc7zqz z?^oJ>PVy8=cxBZ`ms#>}!H?!W_gD2I7yRwOI>HVnw8S52lRU-sMkTsa4&=u=v%Df$p^gdUfc!{vV&7j_ZErx%BIdwdOR8-oniT`xTBm# z*9J~Ku6k9$c&j^w^NY>yi)pnu%M7BAPIrdr%ws|>6aBaz)U{MkKUEEr&eqQ`6%(Ws zCsb3!eWdoyiN}y%!q>8Hs|YU6?)|Vxi=`Ps#r;`XhvZy@_V`VF+c6}fL^P}P4W64z z_b21cx_X%h)=KwzxVgpd3wkLbQ3hAl74CtBZ*>$_Ud-%v1zM%W*x#x<%pBu87RDa+ zO1q%TN-Aw%E4OXU(2n`Z74?lU<%4YLpOAuPzn?l=1-{X;Kqhg~ih!IrLkP4H06ZtK zj;k# zJU#zQ@On6|uRV zCE2*Wq?h`1ChfKKHSwUsxmWrhoN??h=D%_Uzd6S`9g4d$RRh}f1_=V(gcm3}Ur<~{ zm6|+YbFF+j<8-fj@bJO(%9zlVA(h;e+F9!*5B;U6O#C-%{nefPkz(S5X(27ri!jnZGP0djeNv*)ELH97hLtAe}Zu?w|%D z0G(F=aOzdK!hI;Wz7~Ek0NzF{I5e4p!D0|SPFzWMH-(@0BtK6A!3RXE47PrHF3~Wv z!pl#u|E)y-6Odw(2W^{n#mcn1*%35bc}0a-f2Bup9)*Qm1pu`2fIkPmRY3kvzT|#@ zr8Od5W#QB_W^XN!DVrDmtB6%R4t*qhUEAGAv7}cPK23j7$^LUOvoIit(9=pqW)|q zU?Tc>?jr=S&_VWYM1cwxj$?8|NW`d_AyX0SM9tGzc6+Ls_89|R$6Ho z|F#7snW~)uWXDJ+;ll@c$UEVK@kLP6@%Ip;2BBrfrfMgV|Kf(xZ^^E)tYFfs%eRjG zMUM0DqcBDu#XEh4oB4O81Xcct%-Mhtc1|5L051Rg)4`kpcW~IFM})>-RicHJc)@UM zJg)lhKP*K$;5gf>By8Phl;s+WlQS>6|2I(X_Z0aEz)RALn*mbv$96ZW51jHNa}6p7 zv}WreU7`(l2wotmz30X-vPqq*lw&;P~%P4m5lySfs2Il)yM? z3OSN$;O}R^r6~U8`2RcO%c~=kykmWbHL(Vgb%wYR5&hz+U_d9EpmUWy$VX1BH|@J? zE;(eNXw?!VC8uWvuu|y1f5U&>E&`gK;4v_PtGWektoY{9-%tePTWBCdpcZ4v&H!%e zKG2L6LTtL$A~MPVk}CLL|AM0&Vh(Hqw?&|aD%M&X(V9Xtj+1wzdIYkEJ}TF(@d$)) zuFH4_tCLZ-BSTtlRFD6xi1_`}NF>n0Z0@FeNDAS9oIQ2!)nGkOhn_8O`O-h9{G#3J zlqzx#knpPX^H;9i16Gp*U|D`OrYFb~!V)_s;QpD?aZ22xVYuJk8@888WdEygqJaf@ z5@_?zw{xf4S(0G2dGlO>@~f_^^*sQ~sm?qmO}W9ip&8ZeB4b@s}}^M26PD*zmV z0ABLB?27MLU^?MfqxtvK9!Bjf06uDw90dx{CK%9?O&UYxnvzZ;zeQ?Ij(+)1NO%)g zlLamJKc_NDj{L&7>XE-ewf~mKa43(FMUvA>G)Lc&31q+|gl;#3s+cbyoO9k+O7yrG zB-{vK22dCD&j5Y|(XhSp+W#H}8m%JBx2yAmczGd^8o*U4&!L+5IAr+}@t@(F-#-<& z4YxweK>R9O05PbCFCcQ_5GD}f|DVs%`ZyIewE~2onL;tj$;`O({t>q>RuS;1pJm*~ z5QlEX$uqEi1raC7--RfxH_)6ha0Fcc-@Fo1EGtN1s_?oMlrLihIZ(*AkFSK9kOh34 z7RYcX{_7vhqtHx*23a@da`xzL8uK24E>J! zG>89r&VTzu$_%N`kvne+x?b~BD*Ds~Ie7zvI9gmP#sBI(_^*mIH%HS4AyaDepS|WCMyIOi)zpw@Fv=LZT#C zUTXq5KD_6gduQgJnKNtFy5H_MSk1HO?p=FV)xT>0>hJq4rd`G5UtDzjySXVmHs6cK zu;U(U83M{v7DB8Y;V{|)(6d?Jon13+Ll0~oiD-S#tPA0I!*%9jA_ zDofzf&IV9SDJZd-t*Ch9763vjEwP_@B@o+pn|UE68PA76qtj24``AD zO`d0xBf)lwK(EeY+uFj*_L_f@xBkr#qiG+%_WsD+)c@9>|1F02KdUL)1U%l$(Czg< zdpZ$ViVRwT6uW;>Y5tG@_U~`t1lTI%r7!pYTY=C2dDDOYN&7Y6gc1)vHH7_NFa38u zO&0_3c#}#|=>OAv?6<#?!R?9|Ho4U_p!Qm^1ht>fAsYKU-bV+i{3)W>vq@b zbUy$3rlxG?b4?OVw8D4A~fdY<=lfLS`Xz*s8RcP97gZljIk1 zuwymZpHaak7xo)>XB86pHR$>7j+^%|r4 z0)qqhZ4C`Ii=?7LClCW|Ev6Y+wx>#IwlnqQ-f6tSx5it-c+Tr{Ugv{*edk+u5#V!@ z+4;wUbxtS}RSf9oWM^H;j!)C3c2HKmdTHrGutb$6Sj8AkQK!^YyGt^g;?L@!d|$kC zLSl=)6slRMBK?Q|>?L2VK5f2cBjQZ>CqrQ$y^#mqGYr%9-lwLGXF>pUu3xvz!{u@VVKlBG&lg z4_2O&%lMCjNwntir&&axGOW4gj{ho7^B_lK$L|KOzHdnnefZv+N-|h8UM{a$l2bjiR5P) zDV4+hx#>k>zYk9WWct%yC{1t1B21hHQVu^0B*NjG&qftfFILguO!{rp#yH!pmg>5^ zd$T*;)-s4*HM@0MigVR(usn;0#w>Eskn$ohHv=Dyf5y20HJ-L|=w@(R30HSFwjUa5 zx`(wW9pxxQU}vS^Zl(M;!V_Z&#JKL9)*uVw+ zcL`4&4Oz_{xAUk2_xF@ZGPV}{X-qDrTI@G3rVIvPsaH?g4>Nh=K4fj~UWf;~vov12 z)L-8XgxO_OTx7aCGL2fx?_|N`gO4xB^FS*Zl2CaUx?EL;#Mt+F@lHqb=lYcD9A9^; zq3LZ`WnBB00~U?g_yX6ARrX`#)&?Y~sNEoruG9z!c2yxG{g<-lP7c>WeFG9~}Z-rZ2puWTr}(XVSf;w%415V3=rHNF(0;|$D(Eoc?YSbrhJmomBk=aIIu%jSGy(L9i80o=TURT zJf&E@9ByJ`KsmpWt!ztxrE=~x_M^nBTFEhpiv=CImG%Xxb;a;1>`ztTy&=E-E;fDi zvdgTFetiXBAcbn-dpko>sixKLhP+VWa=8|CQ&r`Q7kl;V=MSDWNUWmE^in!ceqhAe!C~TXzBxmskEhAF*q3@Zz!sTWU2LJ@5E$h}}eJ|+eg>8K`NI@SjG_v8zn87WrLqFzhpTl0UT5THi z{YA5%|LIM88z#fNU_HUU!VBNVjD+JAw9?D!e(S(_?tS;fGbD~sm!{mrID|!8&-TMw zl*_9L7C$RnT%EFv(N=!E0j5BN3Oe&rPZri!YNgit*eXSMX!lUqeq}_JfnHE0v2U6` zYkdEl2^McFRc#H(DR4F!<<5`sX7#LSrlHY0onfjl(e<+QuVY~voBWwHB^JuxR^1Dp zOfLI=#eD4aT=>m&1V!Ao-@DY>dXj6+T$jkR2h3X@JwnxO`9uGmt9u8W;WS~7j#j;q z4ZIP`pyLM5$N&Q%(Y_kY_(Ap$SN8AE1c#u2`?3W4h@m0RlAcXYvuC5E?L}o~XDq#bnDyqY+WSl)bNh2#4c5%t zqj2w$#HtTLCI0N}+}PlBKbz38#CMY4&)s|5e%7V4?w>0Xf4`f|bm~f}+cY!C<%qe) zcGKB9fB)q+)kd>wqiR*m}Q7&!Y* z7-L9hbu(+bM4xQGo2xOP|14=j`8{*ohR{|c7cijgu7a|XhP zV?wEPFQS$_ZYIcMpV3YTi}#^>WF)$&?SRS-Tn#-;AOs&c=qjkpgE25mV7^zCn-LVg zgbt|+R2WFXoDa7nLj5*-UL>{;0s2@u1Np!75`J-n3vwS)^SKRm;w(PY*2x(fZYtXT zahbYb>DhI7TwGG(oC3GplGfEt)GG|2T))y7v6YL;9qKoI?tK}IC+y;TZ?~8ga<^tN z_4?>tGsQ&UH4J0H7p%OY&uT2;bDWib_REd-+}qz{=3HOP;=-{pO*^}3!SjsIF5Ji) zS>-XKdJoC}Pwu~e!((Mzv~hIpg5CcjL=74~^Xo$#JVm$n)7DTCF$x+22%&(v2)`nQC6nNg>tpKRs%9UCGNNh?_y2fR7i=)jqAT zBD}hZ)UdBWBFstv5AE~!t^7$HNz|Ddq;IM>XL|sLRys>s{lJbOnuImw1P^l|UE@{O zXs2JiQ)!ei5U4cwtY6Qqq@|Y$Wu>Xj87$uj9dZ5?U0{{ka32CrUC1zHKxS8M+prM1 ztK|OE=Ihs4`A!b1bn$u(ig70rL$~DsdywP@?g#eVH}rmktiEDN;Wx0t|G5n7EKGae zr_w4MUA%PYw8&yLfDhJi)y15rj(!1XqpBTBzyA3?#g$))Ym3^C5_ym-QWx}9_Sc6x z`s&@t1*?9avVIp(SBKh7BB=)AYx1uM$QQL`;?rr{-E(h^1utK(Z4BV~{IaAJEtJbHF{v0X_dAZz@{Axpdqw1M5_bNXZ+13 zkg$>Z7+_-__?E=KBihIFb6SP^99K6T&u!DU#sp~&#Q%w*s^y8TFmqZffhUO4oh7^- zFeP7-ZFcu4vzHk2qp3KU^QDRIzcZO>4-T6ovRzE!f0N(KCx?=nH}TiPdqfxfbuf=z za+Oj?e@CPffvsk8;Z+juRo^WMZ%Ye4wZHRd{p5tr6OO$%zOVL6^?m(Yy3P5=HJ1@@ zy$W?xXyw7dHq96DfGmpoa`{t6KUtgnwrfjn)wzD~s75zl@-+X`RIu#|@zx}YFu4Wq z3vaQC<;{BWw$xn={aA&IFP?~Cx2nCMnB+-(CqEENW4??aaNuWST@kM&ZqVlJ+NmkA z=%2O7a1#HU`!zr9?Zm?c36D|4L-%GyIdSQI*k-priFky}5RIJmJBuU?&&T2@MC3(E zP6KhtUSL2Ahtgcv2F?RLe#Q#M&wILg{6ptV!?Rd@crsWx0jKtMTkGqE=lg~@;f3R7 zQM#txzz7dNt#24dJf7qnv&%Mo8d=G<@B>52x*b(Mr>Zw|?;M-;7cS;EZkS6@yS4IN z@<}~^8yx&Fv4xJdVPY+lzKQs#;$x5R?spldSVcZn>iaEjR&WlsT526|mXuGC#~JSC zk@`(QT4LsEUewGsb%|nWs!(hQLFlLN=o4ksRj{wEXq1%3r`OVfpJ}JNHJObTb6U*a(W8s8S4<)&*`Y$Uk~%RsuTF};m~N=ZE=P~kls@{?rb z!*jJSIQJc=-kH57usjtcC`Tk@krudWcr$*Ldc^W3ew)yjj$*r!B!J-HljDrNYGncP zzB8;AXe8OFCEJ%`>KQz%>~F|&>uV!P*F|Y*I3jEv?IvBuDnfQV5T%iWU6j5_8W* zvz(B9=nVf_hzaM_&cHwkFKFUHmYFokq%aV&&fa(bG!1vFv7Wud?1wM!l?)tr_B=+l zU?8gf>C3@o^8Q`xL+E8_FB;9GI#}Uk^Pi}L8purp=jjUT%B7@94VQ^$Yk%Go7Dtv| z5e^)Svi6>cwk03_s-t{8e_`QtlZ#kA^=2GLi7r=Sx+0acfRU$KNR=X^EXk^sus5ln z0!LYt^_XTZe&X*dlTs?;CUSn=y4lul5@xg2-w;z#0<6)pE&X4vZ+v^nR(E}NNpeL( z@PejNsY&chfBa#n?VU#y-tHM;6}u-nMxy1OeU)=*{wZ87(tJn1&Ny$!kSb2TXulTw zn+Gc^>DV86 z4E8+{%qUuUxLdJKhRsB>DHk&gQ^#Ocu#((C-GKW zrF6U;>>`+WckGFcqr&A1$712RTw2#du8@E9b1EO|u(9uELSdkv`u-PDn-z3q&YWT-om?#cvmD zX^=I4M~(Y|cP0Lq&~}|7Ci2yIp4P&sxx`i$R2!SNNR;bZpe_ zX3tSjdzfDMABi*_fs`q`onD&yk~vBtsOOVrz!M}i`Ji_`d zwO()zKX+whLu4)8l>m=;_u)FwVjSIequM^J= z#Xo=O3nm_uli^ITs)!{0ETB#~Hwp^~`CQ&t9sb00iS*!`*&rITtj#*&3tcL~LYu^% zi^5Up)6LMM19g4he8vciblg7|_fwmRiqKOHPvrMF2tG3%0)y3RCFd9gADIMHxmvPu zNI1T@9Vw8{D?*Pcf}m>3E&R*<8|2<7jZ5hupBVxApTEvoHJd))>_PozNlViCl?0pK zlDRrizn!KKLfm|Tpv=hvUflYAiROVUh)9kQ6(G|_z4H9{KmK}xa>@)M1yMAS1^Yv(U!8(bKhR>F}f24aL!MbKlFKWn8+XksQ=@@kkzmbCx z)Idw9TI4F$(Xd(ZN9`x#&Y+}O;5qeo^^@%?d5S9)gA|#rL~n}B-2;q1@rU_v{ttt> zQ|w!Ru-VIn@2>d%K(#&EepJqX+;-#QsJQwZM;Od_O8KttW%|n?cjP7f9ZhhM<5lSL zk$S|!2vINSpi-zXQc*X(!jFt?v(uj`FTaxKn@595p1|x|yHr~!R8iM$+!jaC`E~Qw zCOoKw91@m-j6rR>`g(5%BQEFeFO$fDTavLUNrSXSJ@LbrN*gj9*SE*d`AE(O`TUu8 zK7=z1RoZUx8J^dIx5g*6k19GV0*u|MeDXHm2nC~b!xK=twT8~3t_TFeQD=Es&^;sH7D-6Q_~MapEO;CV(p4oTbbg$RbSnl0uOX}Orx)Ypayy+a|ZVd zzzWJz1db^WzrX;;TCtmv`@=hFId=;a1VC}(wAt=Zo(*0Pw6(i;X!Ap=e*E=VH1xQ*SPQU71&wY~8ZBe%wa0j0%FS9DE?@!6v=~C>HTB}5Xl+DJdc0SN z81-gZQBPh(!9W=!$fn?{{o0zpt{xX9rZJT|OoQvUj2M~Km?_T~tW{kc#{h1DCG@b> zG0N{~=VoaTj+#DIqcxRhkgB|_sH=J4RYKTN0gx1#v?{*b8Zvn;DgxM z;CqsbW0&o23b}*o=2pIn7pX0wozju75KeDh+l^IxN%P1u)g$;^^PMJmdtp;4D8irm z4%-{u;L^43OlWE|PiIR=rVG=ikRz{=1FzvT5KRV+6UMARbWRX?Y3i(_nZ9xP-@_;M2A=(R|DGnr#F zwnkcVRmwaw>HfGZUChn@;K_%#T2-H+tEY`D z1RpkT7i&4^=v|dED`W1-e6BL^7<<%OC$iJ8v4gK>m&8)B561!uG~SXg=cMJxn2u*u z8=90QeKHYsTN1aPvCk`>cSA2yPu3#UV7o?oX7gLK@kO4iS;oFnh zE3wi%k~lH{03s-@_?Z~?ean; z=yI7WVytUr&s31N(=QPnFO8b)?T+ksZX)V%%}Z&-qPr;_FAW-%1Eq2A z<7L!Sz3(dTL*-XIiQ>S>}`Zn-s5RQjxn`x{5341o+j*i$~VN_+*6w3BYeexsDM?iFRiexD-Gk53(& zLd?gY)pg#{^`#t!?C1F57+aLY6xFwnjKY-kDG^#uZjKr3@*#U7(w6zFUqOT(f}BxT zX5NdXdbz>&#r+BG-a|T^0w+);yY5v{@16F*oU!j}~}}wxkd?Rkqw)V)DyuDy4(E8QhD{9coT_;j@jLRqCoMK`4PMf6_i!Otgjt9Of;TJX@l*wya;b2krDk z`oY}tB|?v8C|zWbEb09kzk8Y!s26=kim&&7*sHvTT&7CE9wn z#+Q)n>mmbU5!HTsp2b*}nQmGOPe+IW@`F)(Ld$;ezMaae&V}&ua)DX=?b;E1{*M$% za9A%_NAKtiGs<%4i5^C)SXmj3_L{ci`vQopq>2bwG3kkF zSWV_rZ8HNeiyojdPWB?o&e<2#z3;~v-;`> zqQ}U)L)E|8UHu(^`T2~2!#2EjjdP-8u8b!n{;UwyKo&Tt*( zkMuZ)1=yHnVcO1B#Mya&N`ZvYm85$KT?lMzBFtKjofeA|whRU?XugV`1j!eg_tj~~ zi5A48(9Bz@Gkl9mgCbVR44Y!2^of4&P62h-@S@R_k13CE`WcK!)gF33qgTp>d}ExW ze(0!#_3yT?A)4Y(W6ab+Aq}YTt%bENVZ->XE6zwZdbaXz%mtQ_mag5r7loiGD^O=8 z2#TuelgwsMEp&I622vcF6v?uXIGN{irdmTz9$ZduQs~&ceY(oX;<2Eug^9ERBoeRfy8)6+gH$9K+sJwhIM8WcdE z0tRQCx_SMVvAPHH{ZrhPls=xAvguMyc2rFhb4qIxBAM6SkIvyvh= zR=@1tZ#l;+{{AZ0dLkAw$AX0TaSjDfWIGMQzKyOIDMvrcJ(bsjCVNXc)A%yFky)s) znDS_D!(q1cDz8v^_tdbpPyrvw_Z0Vvm(FHncV5L*Caz(;Mtd)e|F!k%p-J9Yh@zc# z^UvOwx_o7Ewz9#W{>1ER(+W{@J3b$dk;6$ITYi{vLJypH4tG8?OD{HcR$~A1{YeL4 zu-{ejNvq7x<2WqaRcaNyz9!_|^9VFD0Kl!h9%s*C*R&*pO4(Unr>-+0+Dj)x1O-Kp zoYmzt=rc&VJX`hikw#_^TKFdEVZt(BDyjfQ#48SUADO;ii*kGK(;>D9U(WQN%<_+s z^4AdnjVy1OSNUg3XmX)XqesHx^06!jWk`5?n_IM$4PSC1V#MfGwn!xAQ-GF5q8Ts< zVnA1gS&OeWxI7u5EuR?&`dmo!)NlyW1o00#LQtqcQuME#y52*~zp*ew<%9@AswukE zO!sHpc`&@`c7+ZKxa<7qDO3FuAg}9KLpmmc7j3X1dE{6)OL78kJ!jdh5*Nz}My`&~ zGiZ?1Jv4>zMn))g-}kx=$R(*6d0FwhNbfGy2(6O$zUX04i#wmE(%3n-NGO;n){L1A ziAhHVHM9p!XoxS69$=m=9CTrH;ab}@H_7i9BUsi7u0d5oy%j?JJZ&l$~1Ld+$oKiW_meSjgqOKQr!)1OnQLlt;Z8kq`hX3aY;$JaLpb#3u zpRl|662>=)zf$B|!gg@;NRGUXb0LX5N_r*y+%IC{N4VZn)0^JkT)ay;9((b2$s?iy zy$j-fuTe!-@lo_WVa#HazbHYZE{GmeU8q3WNc?`go@8pCFSD>qYrYe7xew>#I}Y@3 zYK7!-pYr$B3N=m*7W8iB;lA@#A2uFg>o2;bI?u7?aOrxRHhZh!*FCEgEopb>Dy;sy zjRPxOi=C0u#}LC4jA*>d)y_;*_N`Mhhv`@>a;Q;-JhJR!kFv5JU4nUD4Do||*@p|~ zW(!4AK6MHP5;A#vEgorvz$`m^c|3P;Le z_VMqGw5f3DelOJ0cDZVjiyUqf=gT9FdZHU7^*tAwJnlw1V+#>;f7-fTYbT#8lYoCk zYCB9z!b{jwhQoF_VXsln_$pAaYO^4mUj@jXkJ+l4a1X4`eyx{q|9r;CbF~Mgtmtm2 z9Z>3O%B{Miaoie?RO{Au{d##^3!ll}ly71C(17XTf(d(;Jxa+2I$E@OSLtf)3>n&( z=nLMcV#LNVFxUer0a6-^36`*E=Pe zc)k&~oHh}8#xC>#DOl=FALG{!Iaypp)oYn6sr;b9OV-yYGu{N{Pd*pYVTD`d zZVaTnb6gcpId<=+#dL;<*xi9rge`(qRTXGtk4}nN5EZB|b1&?W>Pp~m1Y~`29E}+_ zdxiF(_JX}*^mO&(bkS~WKAQ0twlWbM%AB=7RqqC@K0zxD9%hzpk&|L4>5RJi!b5p`!nV63@;85S5f|5gC+zZOV5O zzjQL{-m`VN%I0|Oe-`rfjhj4hs@;6Kha=2JKinN07~ihzf30LCNnVw?^DH=n&en17 zUI6NnWi)<$j9)#(f;l1_-Mk?HrH%(B$1lCF_**aYCrWa#hUHWdF%}kD`)x;XxmeGk zHU>8>H-n8u{FlKRh)foY;++g7=p3po|?-PCCkn+VdTr`Yw=-m ziQ`W*OTVfnG-DG~FW@$T88i!U-=;b<7HTQqnG*S~)SbO*F<9W`&1B8+JwZD_NAt+K z$ruf9!TOiy7jj?~{b~Kid>^sV;!4UUpMo1iXx_BhC&XF>6%U|+wf@*FtdSd=&K{;y zIA4VKjZ_IHHL(mEzph9+a7^D&HG7{aPUmd8=lV7&g51N4WG+wj@B4^VCz&BO@kgsT?!EGGX0WTl$zrw>JKDtKFC2BUB8gkuaUbX(ZL7b z3n;#-Gxv#OpJL2Q`;7cH69)NV7fs~n;As2|d}t*3jM+aJTXou{YBfW~Ki7a4{Hv|DE-q&p8%di#fLU%cl7NoNv}51akd;f48UtsQnG5Od4x{ z!f8Eg7w?&*bC}in*!g`AFgi1sZAZt(7u%nh&n>0T?w}xBZ;;rf`{uB+%i()w*{i|L z${J`U$kg+R$(}_d8OXVk9*akdrx_-J$> zqSiXmhFL(-vG<};3&N~ff}tb^BL7S61qHeyI6}OUwHldwo@&?YAM@10f-&dA6Y1vz z(Ydjk%aEufywn`K`QH1b!6;LgU*6?Py^bvFU`zbvb5l}+yVJzd=H)0}^s5QP(Kon# zH%9$I<1u5enB!Pt{?8=Qzh~`j50r?O${Wu8JTZM)4GiEgT7_)2d=)B))f`hHmrccU zk(}nVICd5D$uaYZeG2BEat6f_UQLom6rLZb`FFqO{%ioze^6f?&+B=rYv8|Hcfm!c z9K*%^4u%JYTlojoJwcQhHy#x2-OY14Ez9CI+Wi)KATfIxTc*ADOu(sIXy*e=XOEHL zF#htl%#83C#&pg$If#nwrXbJrL`sU;b2}U~f8APq{`?8Hk6(<+G1s&<1DaMWaRCujW#*r z!okFudLN=w8{gBTyusb{{-e*@sXi-ziJ*I~cD|plrvYKy1#*u?Be>RgLDn_>^g{>N zkz%8?!$2sbs!06jQgL_BE7~e5C4>yp4GDE{*w>^G`*p5hD8@by-8>&Al-XA-Wez*d z`7UwFjP51^+M#K%5R<}HVC9>JW%3E_J|M2gx~W&+bvGzZ7vDPA+JFFW#{t2=aUA`m zgvRW`JJv2`KZ`)!O|Dy}YBifhV-!#cr&96uIhH_$KX2gU^D~VWdBk;5Bb@6k8mh=?mD*hYmwV*nIC`-3&c$=7`{mVD(Upb z1{~UrlanZYtka_*b$C(DFpl(LE|t3~rf_>pBtf*U6h0$eh(*c~Dfk#w;B{>s3S{-4 z(53QL-sB(3d)ZN26`b;-i{_C}MR=hg6NCHxEp_EAOf_M6y5%PFmo$KX!4^s2o?Q#J z_TO{-Nn?{}`yZ^QkNPVTsQ^uzftm^yJ(bv8O3%r;@bK;^`Rr%G5?&JNKKX2>0tF?1 zjZLSF{qiRjdWYDZck3*gl8Y;Na!``n&NXpp znQA=;am{Jhg>&06zuZ^=)P4aL>=>_$?ELSfY=3A78{7|XMTk$f^Q$Z|MvTEdScM*0 z^-KAQBQ?UFZXJk^>eZm?3CsLOFF3l0ZpJ+tIC!{@Y?qzuH;}|sMI0h5X9bLS6Wk4A zZ2_lzlUA?|kszKpX|4$S3i6s1)~$2F5IUY5>iWF%D5kGi+Nw=d{@G@kWvt+~&|~bz zp+ju7!Y1q~P&jfnb!quqxuJ#ZfSF^rr{9RUqTxH)-daW}@vU)7wbY`WE!8(U<-v8F2Tw*9OBScmy{ zQsHBjh8@j8v1-3dG(SN89wo0TiyX!E7o?Axu7j0|pqBDXBb8uk_YA7h>)WNHoG#0u zzLplx*3YBIG211D$+0W%#q`emMc!}{@4;L>w!DTa?i1FqSL$^KV0f5Ke`k+^T$*~V z*y4bTNg0>ZC8yU%241+D68Rp+N6^V=|1Vl2XElm-VaC^_ir@-?y1j}ER=g_HR?+6mV-&RdU*D( zs@GkvTYpB2`5!ifh2d!+Vz;F8hJd2wvOP8+phdMc{krn+MkC$uV#HK}jl2Y?$#G$| zu)rd=UL+i67b}mGvaAxEEHHzo|t{R%C#wqkK472!i{xn}mWOHy?POTKb7YCGsXb>d}8#p z^^V`UIv!xZHghC(6(N8Kb270}%@ME|6+2^)eWf!?b`qr6DYEFpq~xxCKb=WZ;cw+UJ_ zw=an+Ns<(geGOJn94EkA6O1;tIWMv0?=Kyf$ZA1nZ^CuF(YPF=ilpdAt(zY-41 zr%nOOWmI~!)*b6ZDM|FmI{JJx_DpkOYkUl^}>PEz@P z^I1=W2g~Ax?5WLg!G~+2mdwM2-FtXZ4gq`NrE>-n24j&5;qNE-B~l^B0)bqe?naDh zP+vodF`pSSh0!B1i|TAZT_Omc;F|vJmZ;_v|J|Y7_pu7tR&ud(qPZpK$VV1K>$fr5 z{M!ou>{VjN@f9S~yaY^<9ywa=s(T(8>KOl-$psKZ%aAaZPk7plaFnR-(#L-#xfMFZ zY-e7e#iKl)GK}XzweA11DDmbw^8LxZamtrGOQY6NcTEMR!-o9XE&hQNn?^C@*aj_tI#Q0|~i26F!TDjJ(VPhL93 z{$*Em>{7B5;`Yr~vrb;H%t7(}u6j?UQR~Ov_HX z44ZBz(ECQmjXj3*30Lq2;b6;K*F(%D_re+5ykW6a(|rBn*Hfi>$)~5siSiob9e(}a zid`P!I80jevWsR+5cV1)CFUV3L!UgoGPhhlMWJdBub&d3G37({i3e$)_>^vLfc73J$lK!fV4DZ3@T!mTesufUeCpm?e@&aA7j zd1|)9c7a~vyj#{Eiv2QL_e6wXJj*afbWz7sEjz`N&EjM6j(@#zd@+t8!c1N5?n*3< zt|I)yiotH+dE2asK9VYLeg!JO0WB~TuCnscak{+Mg)PeMw}uo~9x zE(>AgUbfbx2xlqT@6Nkpdnm^ftqK?yo3xBQ*B|+OS@`$BqNnYOKa`bk_86PTUih z^(U#+xCqcNF^oxHP}aR3QE@-1W+>d*xQ_ zX0lA*jF9bKJ4!TJ;!)uTfjxr%3bxuFun_?|+Yf*ogqpl^T)jjX)%L)Q2rvM$9^wBd z$F1Swr->{&RbQC_wmjw8408j3WBUyd$@{e<$LgOG^4J2~f-A1w&Zx z-)Z)k*3NfH*CURQ?Em9f4ty{|Cin45sfNn6Oq$B!0w|5NLLn7rM>8%tCshfOqpWFEf zm?1q3!?8vpk-z?6#9lWJ5MP-VeIDYwF6GBxu@@vi%gdZY^DFV#iCd*Lszhgi>&zk3 z{c-C_{xLIe0UL_pBXpF?q}-yR+3~{>A3#FL?{R%ip0wjgFjIFsFsa;Udh-#t(=Vl5 zIG!;oX^yG2rqAOmV@7>EXZgs59+`P9ImU+>SJD)pa#qUVh10f|b1j|e$EY`bxO#=s zm&?+1KB%wa)ec<0Z93g&5OHZlNs0=Bj=xg(8Q88r<`d;+)=r*aoJbvW8eM%)2=B zhZcK@tmw#HzdLuhDO?JPJq2=yg1Tr)#fnutuNo`usEJzp`XUU)dvp9i%#5leg6#YX z@@MSLBW^?IB^Dt4O24Pyy*#|iL{apkn;-;{&PJGn=dI5j{qmshE*yKVq91b|b`Y5% z!$`|WaRljA7+=No4O-c>d%Ph(qZTcKuTFSWr|Gz2Zb|2oA_a=%rq4c=4=T}lk-8=1 z5$6qRK>MA+-S4WcHL^ln8Sn^5>E7lp(>IVZw{~NHheujwJbyU1KI?Aebf#*T)9S$a zQy#HgfO2U4+>fLozHIR&XyevG2=UkV$9jMpj>q3**&k_CtN;Pl8ev#PK{RA<#1Uxi9+{3B> z&Rsy&M_B+Nt5f6{vHeIfn**j7ecJA)&$Nl4uYV!{@Qr^`j6AXqs(>Lvo2MSh`QdIp z0DY_@gF2EoD1~PkPEAU%Q+2-=na3YFBE6c!N`CaP{^mv? zvPdjlGA|_GZ%~44q;O869~7{GK0o_VIFC9zzr{SaA<0@yY8u*fIDpu}rnFko`a^49q0AEEL$NGbV3y39*_VV=Q*!Xdx|x!kYf+Xq;&z-ck5{%ko8f%%y*_f(J6<%Y z%_Gzv-sFhZ0Mh&YMRQ^a(8=Uyspo5B55}Yc9-(?jpz!?f(P4V%(NpYlVx$tV$qt~^ zn0+-{YaxWKi15#==TZe5lV;vmjyLQM6&GA!Z1sDAxbokIQh#Xr3e?|ySYA@x9feo8 zYmCCQ;Y0Y@Hoi~vKM(@NkGv)!#aN@NOTOr~U*D0M%Bjmhg3Oth6EUWa z1+bQ9V_(i2bH2q`ZVZh|e(km$GZRZ14$r{ZSZhq)hy6+HPsT8*Qm3DGVtzK!s_Arq z>JGH1bY&^eDu2bhdP)Q(WLkd5vgtFqKJs_TWk@^HM-&{of6PUg*|sbv4f-gm{*Dmd zjC|-uRU)tJh#4Mb)eL$Nev?_OU%k_a&%U*-({Z2sYoOyO3W73Ty%SE&>qBsj%~vX9 z6!Tf1x0f9aetiffcDKO*xy-{YfTpRx9FT65r}tm-wdh-FVAL$jD8S-+KKLw}Tr6b~ z7_(iu7re0m3~);k@o&N7W0l`|Sb2&YA0>3DB?eI(zXQS;PgYut$m&^n7iyL=_w7Mu+kPFO zOP&FI>xq+I3YH!Yf+c`u90LF>Xbi=MNCn&&5!Qb@0h13V0KDel7hs?#?H^#s_&w0p z`4NC}tP3XQBZ;&Cd%7DD1*As!t_h&=avFD`eFP?7-Umf63t#*H8#&`mEt<`oitN?h z;r1wFp(Al9qb_yH&I|9zl#@{S zG+Q&jwMSh|#=On%$o`%H42QWCkR5QU1-2+Am1E|Vi&@kHVemmK4j+6{@_0STbXx9- z#5)0oL%}4ux%w7A3I#ECM>CAm0{eDi(pMBrGhH6uyj@cdxg%$Dj!-`mqM$*GAK5^9G1I6> zk@*QpQ;^FD;l}aVHZN;6TO?Nfv?sK3^ZZf-ym^~c?gz=@SF*|KVasElZ;ToQBjgm9 z*1H(4j;`Dvc4c+$I&%}ln2)3m+}L&wY9{OaT!P+}yfWKIf(!xb1%KT}r-rHs_SRydOO-9iER@K*Hs>jm^c~(ah`a6P5S3lnELxE`2>bV&BYG0Ns(*Euv^czUb27rzzFnhHn!Sa6r8YPGN$>XbSom)4eSE!ms`^~pyc_$As6I>iu~L~Qfj&Fm~Ey-|;gy43@o zj>?E#BYbd*Fy{ad$Ns$x8Hm%JxpcLUZ%M6QZsfUpIfi*$$k?(;?B4MR(5i~@*jLK5 z(X9WMc=|!s#Y*6YlN zyFAL&byDqFnMhKi<>&*^4hw#=t4z5~Pn9BZ;d`|Rrb;pSDN}2=_*tsr z(21?vc|=I&Rd&n2btG=jukH5u=Ng*dRE{K4cH-PGmwD0`Yc&fcMa(hR5N?$%aZ(Y| zU4BI?RHRtjBdM_-yIn z_J~-@{o0Q(A(5ru4H5}5wR%f&Z>T#I!4GQrF1$ZoUvq4dFEC@0DM2#f7|K;H+!Is$ zs^dZ`;A$a^)6ov_;q?M!2hNpk)D^Wx9==!bj=>MYYt)r@LyKZ4YQjib<=?w@- zOG*exH;6QBKw3(qrKP(?y1Tmtq>+@82I&T++0=J!yr1{E&-Y+a_6&XI9V9@6oyy{eJgh=*%!|l9DV%dRO<~^$k7dk`xtPWqazn&)7 z&E75ApC2JckE5OdTXi%t`yawYvJWsY%)t0^492nG;ti4)1jfwo<{P=1VcSJ*6cmT- z4#K6^;3+QvF$d!yEOFrEwkrmtzK){PB|{Q#fZg<)W|t=Qj}l7=15tY#%;1k`jZ!H< zxESP6G5)z1@r(Czz#sE<5$?8E{fxY#6%-h@hoj5L6AODCO@Z?K)@*`KC1ecXjjcEo^9)?5k zB^?t?VUaLK)tTm;V-WEA4){xXGlgA(ke#qsOgB~q6pE|FY0DPUy2>pv(7^Si7uK{) z$HFG=p~74&3Tc8VLwq|-`VjWh2$C23p0wI-hq`|h|3~AJZjbZLw?B|g87~I9qD98l zW*!}5A(1ZQjK5jS7*c!akg^$bIz?-^>JEf0^sGZlHS~khd31Uyia@MO*pvN(?;qsI zrh*StlH3PxjKYIX_vC&Lhh>h^_cf^s46ngFt{}vPdsY5x>4wf!#vv#i=IcJg-NO~_ z6AE!CFjUuFv820EaR8duq3Kp#XKOZh*dT+M!E%<_9~4kTo@KANQ8Q2;Dm0Z9sukcE zac)p1^ka#jTx1YBlq>Yv8I(m#avJxa+K@FkB1WD18uPA_F4Ew;HY`}>vUTDs%4_uA z1oGL!3Jb!NV0O*7umIV2qw0)y?gLsB3C^yMr3VzZpwXq&+qoJssff1dJvH+YQ^Y=y1Wr*3~F2FgfBrc7dkpPevZi;1QhoWJa$p$wH-s&c?evAY6tv}w;yXAX;_4CrKlTP9OghpJqtHiLmAn=~w9?iip z#rw+iFJdqr=&f+jIeKcvEv7h`pk-|Ff$(nhm5SF|?8MT=2 zITo;tD5aHeR8RYT?iH4Z1Vn0RRZ4DQ!lQBg7he zIM?p@YU%C^)%o`qI=*zM^SVdfqqaF@&HZlj*#xp)ZZhbheo;x94eQ>U1$TN(ilIL& zC!|v~h_TOi4pK+MjFPmP1i6Xai31JgR2z5J|jc9Xyq zekT@rFnq%;-bL2;!3-XVx!LPoYLYB2VQr*}QlRw(m=2EeAAA)BR&}^mi!D06AfFF^ zuVzwL^CWT&gg7mLbTR6Se4gcmvqeumqj$P>rO%FtD!nP3=4`yBv@=BfieZQMXRd({ z_6RD4+pAt*#ywyohzz1S;&h>-@l4IL{RoYkW}z%!qfiR z)6Eed5L6H|u{i3eN=QJJP60CB?M4(Kl(IyU$w)cVR)Rp zZ*ku@A`b(`NZ&P$KX zqc1!e6wlY6pN{iTTgefVtRBH|uWhgX^n`ePYNd9B2PP=XhZ{pbf?slh#bjxMYeRCn z&hNB?*4tDZZ7+W|H{{7PKrb{n&|9cy&kqexWnXkON zvNcQBLJri&&g%%*j^h(A{4EZp(|(UVWC)WcnxJKAPi9cAWwXL;Se13v3AgE;X}qd@ zE7ZFH1nJ@ca!}*B=43q}v==GM71`KDPTHKM-+5%c#cahb|IBvAGD#&C))7u>ghao{ zIm9z-mKgt~afQ5M{shRPY*L@r=?`5DjRaA@qn@mnt144jelzD0q>U~3{J0&9}*xiy8jn3d^QD7A$0DkpnaffDQ+OleL~=YV}ZdT;d!m(AjoO zSuV;ae-2kNn~?*8#!tV>c96SqCyHpOl`tFYTtvlRAAkvbG2~gxEUUQfveX5w1E9!(|HpW^EQ{(C%eXymVO=#5qi}m@|Jk%@bm0 zq~m#v_E{4CaJ)QCtegJ(a8SW}7@jRQ;3nlg98;_rdW5xjpFKyzGVd zv5!l%6nNJj6Z6_;Lo!*kYePYd+t*%4K@g7XU0l=`)d*5`q<}qW#5qNM!h`Klk{98x zuvGiO9J<-KQ%Zg8tby?Uqi*z|&h8hNUnH%ti87=LUEQ&WZwDaLDrmkAxKL+;xEZx` zlHTH8trEgWZ|lab+}8;jNPhx^t|%=ikyrB%ms~ka2GZm7JT%p#E|{*z#K6Jd8-*Vf zzp;<0uO5bo9{Z8xhl^uCDnWo++K;-j)*C+kKLJcE*LV_~ae}AWB*F9s-wA@$Og;diIN)Za;VKIMZarIY72VNqd$^sB{YNhP ze04cbx~C@8VT$WsND=@Y#UqUwG**2o(3cyubU!X3H?D;9i_K0r#THjN?5GL9lC%sU zXA*g!jYOSxB>AsNK!yNe=sV@S?U--2ZqF(2q%@a%`?N!*;*4?P@0ha>Oz=9*<(y5( zwS3z{Ls1Ep$@%)gel`|aCC8RWQ+ra0U>BPjyWsSTe_A0dYlzL`WI#2UyD9RK4(;lR zW09fy!ir^{nSs`JkSny&fN}ovT+Wm|a_|N3A}^l}lGQ44oY|S`+>O+mVI%(4>>&5V z%9yurT~V?hM=IC%{XKudr;%X$4#rQ~i_%HCiWh_M`BTS$FRyH-JJF)`m-BlAlkrTn z&DGBC$7va&1PVH}P84yh9VXg(cH5CtA1LHkpxeJfm2xp#e{=v8<9guVBWC;Wi_H-H z1)Y?2u{e=C2rQsz@gjP#*W$VoDf;+t1o_Mfb#_1NobzTuYWvdBdb5vW(V< zdINv*qf{3wL3g2&XBVk6tv17Bkg~LqJY=%btiW3Yekgll-n=611@~^GfZKU|LABuq zi#C4kjt$hck2qhZRzQsO#Bf5daO!2u$0EZ<+Eh_r>f zsaH;@l|mCdU|V#;%U|$Out=X(o-7mLq_u)%Y3Gn3o)yffC5^#%rH|Bbb5nB5UKV+-~=;TSnqgPBSdH!1`unhN93MYe`@qCyM_=MD*2|z?umw@~I*YyD&_h zV|vy;W4<@P`P~Q=v5?2h&R|5MUI`u0ww!}*PU~8Oil+||D}||(cmjvgJYWTpUapWq z?{CZ@A@h-5OoNcABIL#>GYX;zeg5APdepPdb1kaU#lKAxcr~{XoC%Sv91!jY&Lblu zw>$k(to&B?;|%;5W8GLU3v7WGN#z!3>OnE8ad;%kZfdjb1^uV{D~HBYRy!67WDJ6H z8@1wW$$(Vb0I>bfVd!B8ETKtA?y#?kHDTsyS(t}8!JuBHriZ=Y>9c%BM|ljq&aGK} zm-c-x93du1r#dEO=ZbS_%L`-O^=PYLFX)q`Zte|!kqCJfBa50={WBWV>YQf2$AfKU zx^*ePb-1IQY)u+>IiW6lqOFCBwo~9%=;-|}QLmuoGUNZ#OSMd9=uU&37 z;&BnfHZ42-8$3N7fa%UVbiyU+hSth5LBru%1P4o<4sl=4pVY5&;X+RKd4UCGNUu9+5POw=i%*&etKp$Eag>XGKcFjw$RA=7IMhFn4d zsTnI3jMUaLZ{pbuH$iTET*QOJr@h|raQH5+NDJY}FUBB*6v>tfZSNT*hw6Ui)1*wR zNvK^I1b?OFsqr$D#>d;uZ6n3$!5dy+vCsgSJ>43kqsBWk>Nco$8qJo@)HzJZmYi19 z@06z3ru(tXH{$`gG36YYSfiR^>fX}&0H&GfClL<-ctWuH5vNS)ICQtM)MPL*sCcCp z!i<4-3ekoS!%%Nluj+_O5S7Qbl^ugrK$>li^X_DK8e*gf_JDKTnX)h0jz!b;ln3P< zSa?K{J0NQa7d!KExhur1_4*VqVbO+KVX+X&6c3l!*ZG{`!3?Iz`=j-yI#iwVw_Xrb zS*pfVeC=3lA_%e2@efhW>2(YY40OZ$Vy2HnlSZ;6O)m=S^)Dp%)bWByBj!O`+s9ZBW#`Sb0D^Md~RFBMqa=@8m^z-6ky8GVel)Ju2$}cFRjk3)q}vv6+P<~+t%sV94jF-@7{IwCKFwwv9Z%Jsryt6@lrm? z+)1mF@t+$~?vyOG-&f=e4U%7y8LfyW>B!(5n!S3y&USjzem86X=;C6LuSlyZvxn9T zB~>2ez*{tY|JLN5=vY4gVRkFDJ2$eoH`f3h5$N88i^6K?K-7kdWS zW(5s(BhNQ3c%>;=PoZ-u+B_9(U8WPy|I^yv!(037KTCpj?vpxAfck#mfl9D15>bz@ zou+u>f`7f@euivW>#-ip_^x@^l*xts@@%@=L0kW+G!NnU10V6JxRkNf?Fkk^CyfR7 z@BSUR%=}xm0lBy{LrTBN?0!t|<=ZtSW-Rx$U%tSiBoF(weW^BBI3k``i*;4|tlw^e z0e`crj&Nky&WSD^1DSa>mz2aD|39Na5A8mg=;>?`ONy(3tgwvQpCz6imX}jubY>&& zKe{I67Mpo4zptX|@7PlnURr%uQwRPPpY$J?t!S#uA?70CS2-OTssNX91oc29x4Cwt1VbH?x&85Q%&ea zBbSg;m2SkrWWWA|aG%OyiXmTf&0)E^5MxiA`@K>2WQcq>h)fmpznCaeR|b(OTY&KX zNg;nVor{Oqdb!Wv2%?dFEzb$q>wL<|RL4EaPfBEvCjTIAk!wybS;N{NsMc-AeLE?s zTgdc(7*g3*aQG**<(_Dt5=ZcCcSLa!g(?;I2j}aP$pX;d6U+-AmRp15hAsj$BL;1S zc9`Tz5oh3f;Xc&RCx>^ra>iOe-shPISSXAM4x|!#?IXI_F87P_!#K>?XP*F4o zDoA|jQM&%*}AbGBssCnRSCau<-oX zoxGPl?yqFh2UU+_h+DB}{f=h+6(5L7L^FlEV_C`dko|mW=-vNROG4^{L86N4K^_~u z5BhQH{PqZXbJCj<;;z=L0@#=(U7V$|BUiPTY)i0Yv>i?@n^)lXuTUAY*$8p8R_w}8 z9eSBE#2&;s9C4R05!{#kW>sbeFH7CcaNm$Wt>VhVKZh`fUm%IzdCut^&?tBf(N_rYBCAb$XQ3ocALA)RF&c%8d1Nlq>R@g|NKMRECI=zs({!s^S*j1F@zttH^hY=b2EI`xIv_?;wx9YEen7SAF*L zF=_VA4PABi`;?uh`1)=NZ$tfv(FyNwU31@*_#Jm)TZA@dvQYJNR>~LoRi(*!q;HQ7 zHxOcO9{#!TU69|5*W>1%XK)O&c=;G_;A5M=jb`QiX`QIVldsPrUKLP*8q0ams=ogh z+@(N_jwI}{H41IstDVhHPlpt_JQ;z~SW>wCZljuY_}S5h8XH>r2t~D$N~)pPyaW$R zcq*1?%;C)epynha0}c=SSwjX|mwgT+%$sCnkZ>Q{Qc_GtH4t@<@Q51}_JtflHBz8P zg->;Gxc(F~$2i9;IAi;+Wkm>Tz0EKz-bU0s0xZf?$H0+f*E< z@GapprE!EX z#uWZ(pinjB7WehZ-t*C_@jQws8sclOOj9=i7?z3qyUoeUjMkiB8x?xwbR%7-hO_SX zXD(;gEz)pHUF2pFA7sJ^n~>jrg>&y+Vw8@*7H}m=quwz=WChu$k_=vxQaGL{$JsFN z-G2shCSCn8OMM=%Q@`;qxPB83^BB1n{rTtrSV{@OQks$f#WxCjtt$SUgxlo7-W+=W zGQM0qCOD4qdQO8e>02VmOSjffeU^Y>p)_3N*&ejfDEen48RAg_9F zl2Bc$Nlx;;5ZBg+29rL_0r=F)_7E{97~hoNDyFBfrQEKxIEJfeW2781>mhz0J@6apqR6YaT-Z_dnO>P!oFE%dt*D`RUS6pQLzSp6deb zW=2u|0O;NepTqg;mDa2Fd}mE9U7~egbS-f9;HbZJ2--?+F()>az7!GciM`hB3z6*; zb62pG`=dG2S@O>`YXP5Te<(MZ&}Eth^xf;Mmgz^3v(Oq7&ANJJ4-2%!+7zh zdHJ+r%oe7D>MGy$6Q#5sF{LtXEO@?_`_ZG$Gf3q-s(wR*O97WL2ag;YMD0yIv^IC z!1gU(Wj1vZbKiuz9y2@pN~7)v#V;T`Q5a`S3H$KX`?$4F_pxv^#{jIY8~U4N=hri~ zht#}s$C#%iII^#P9 zVmC|r0u&7hKY;-C$9P_j@YHFz%0Sx*>Dg(dErMa4Vw&Kx3|RAh^$asmSHnT1y<7Jn zkJvR7hRUu=p=Rjqp?F3!7bo5&P4lSeI-;?m8-;$+US$ufO5UBIi5+5it#=DkXX_q! z)kwAhlRiO+YbDk)LuwBqR;Y5Qdgp=X^^P7DUOhdEGzI5;jIA-5n*w}Kb%4$@{A`Sn zBGR|2z6j|228_A>XJUQkj>JP3uv|^cASxeSY?}KWtrT5*EW2<_mjSSj%jHac7|da?&oR%s-+@8#LpcbE7GIVV)|+s^EY$jJG8%Qonk zR+wF_C}iEe0@u}BWvm0}MUQq;nTzPj*WEVa14E%JqmM5eE+5QhIK8$+S&ZB z?sTieLooG4rkB=prR>P3)e!$$p4V!3Y+qfL!%!#n{5w1BmtMc&M3{1cLWzuhzi~=c zd5u8N76&((blI$db)sP)V`^iky@DQBS5Wq~*GBo&Bi~9g{)@`u)W1NF2UFGG;S}xv z7*1b(*(pMG9Oxu?Yky$K@eW9{8SI0GS$T5sPoCv#?>d);uHaxAEEGt-z~ko_)T~bc zKoYsteD})m-PBsHcWS3qG5Zr`a{vS5TL2ow^X2$sKl@nIT8{W6=BRNffS*JviFDS@}+$WWC&0Hz*t8BHesjT1(T5; zm_3i%P$>dsA#))1Rynzd`#a1goIxMgsu@r$$V%$&1bg?;uLn4Wvl|^i*OD_JmatV> z>*5_2&z1Q`3R20+Ipk2w5&f}W{(kk-8*z+-&zZZFC3d`^|C2|gW|XlOD-eDrLdxna zCKXy~(1xXV)!gqV913@GpBS?FwfXT}+cxfbw`%%?W^-(K>5K~h9j6&=?EAzN5 z;?&zgYY)*h_tS)WW+&utR7g1K0CtnoK)aXOVkUeqRdH14b#AQ=Sqw~IKF&Ae_FA$_ z+Nw1;L`!HJTGyeXr*rN4WIV#bJe>znaX5gzzapb=8O)z7Kvs}DMb|=c!*%ZQgvnp3%Kn|Ij{-K@1`82DDy;-5 zhiK@x7vrF8&A&hIB3G98sOHYl#!%#+$#1}U84adb3EpxG0lqxz{;AA{Zc$4=bcUJd zEEcu@xj8~&K92Z^)F%iR6`Wr7YH$9XJ0F9&6E!O{@H3ozy#^2|{%KL?%h>vYM|{Sj zi$KCGj24$B94-KG4&;Q#Vq%&q>?L3QEt~0*KOjz&>FF8m0iiTUio;J$Dp%G(FGy47 zWtV_#Fp^2>b^|;Yv@ocHY$mFt~c#huCR8&DDP@ zsrh1`jWB@$;RsMB8Sm#CH77n53%&hz4+c~}Roln=^GSd{l?K~b&H)G*Z2@SrjUL@_ z_e4%Kp99ewHUct;>kT~0)S2Fn^ofy7>vmxgyVz^OCe_7z!o)_K<`ad+_I@dyTLI;@ zeH$5~Cc|}G$`z`FnE8kDh7x_svu4C`mAX?(WKC0D_uTWky>6~A#|B?4LgjpAZ(qgF zI0~>7oLROY5iuy3U#dc157Th}a;~Yz8O$M_LPg{ym`;Do)_Hl*nnrmaxTcjm7`Bww&tFu3?zSnL(w7{W#AvYcJM{ZOu zJomfkKh04PXt#~>B))7zW$xPJOfQWP;n()KnnEbE}EL7TK)IuLFx3+}c z{D*T%oQbbi{DPucbbEXr3R#kUgFZdH!rSTy6HZ+nta8!Tw7dlM9zlI_9$dMOtMvcuD?zFY;~6|3CpnK z#+7Yr5xc`^ncPF*Azu@j!+Sz&x{ohAxX2-lB?cY!#nY+%A}Q77hqeNUW^mxejB;n~ zPWj~}@EAe5SMEs4NTg0IB~|I0E?mU$(x_Ny@ilS_58?dNk$bI znB|a(_;wK1?z3mYlcl{?=vj-5-b6lx3rrdHl?3q|#Ar<;qa^{k$6m#ss>D&SQq{>B zx*F)x@EL04kNeyq#k}>~0-Iqs+Ng)_!al{9qmALb7zIA*mxXw)E8B0RQyMYnbN6QJ z#sE_(4LDInH4{^5dkJ^KCWpm)2{lY6oM|9gcS{w9fedG|-=Oc2vw(3#gHKm;&AJ>(8?O*92LAo&M8D z{tWr)QCELmVO+{kl!NEnNOz&Q_Mk9&!J^s^+m+3i^=?Ftv#>9F9#>(UsFn9!+W*p5}l;IQE zL{&W5>$D>UKg%8p&*biKGRDrW=?^ryN@Cxkmfyuqo**bs6d3y6j8rvbd1!oDuWwX& zWBP8H=n49d@+}PSq3aLey;GfG@N4l`dv%_ zeUF@Js&noSqAw%v@I$2KAiCfbobl70)3woC&4*lWudS2`QJ)k_=tf^-&%wi6%|Xo& zuuKsl@-tj56Ha?xDP0ac_E|nJAAd+411l);Dj()7HC{jDITdz{kLZljKf+F$ziIq; zt>7W-%L#+S9oF7W6*rQZf2@3M5!)mNekGQ3$rl!)*ediTyQpw%yT7$r&L~tAQmjfb z>yzNGUlk>2DMi)uN_h}yLG8Uab@UnYn?54%9`=}FQviDX4(gh6hfA!LD*GfTCF=2| zY;a_M3@nVFa3si9{6qMk8EdbOJXYkH4YK)gXQrBw@RfD%IhlItw1Sfmtm=s1ur{8_ z!Sv5bu?A*-$Iq|-&Va-J;sja9YMtol6l%HC-T%Qfy3G=p|B?dr zozMO$BKj8J+Vl?xqi?Aj3CtL8thL-VpfT4nbK(O~ck8;&>u^$%!lwY)U-9NR^=pnG zV3`%kN=p`Rg5E}^BjVYl#+_mCU7mlbzFlyjHYb?x)@VHYlMrO}dCzH!b@q$}P6G;) zeiFQ~rI9~>C!Jhau@iqKu&qz%mSto&U#CA{#_u@Bz~pOMAN%)AVXjv`&~t|RHOd_e zI7Pqk^e+qe1zt&0PsBOZ(HB7!Jx>_9fR+(NJt&MJL%G%!Xxpf?c?E?|#+AKESq{X> zgi*vK*1||$JQ!uFJnLpQpM{+rq)`_2xC<69fOu#z$1@N`{DVF(Sp*Kp(ULTcV?@(Q z(mG6K^o90)Ba`^1GKS zjUodcmg9c(*4QyWJO8uNwT!yi?}t-->QiFfG1CZ`{iPQmg^jU39PyTKuX>D~XkHJf zQy88-!#QhT4S8^TO=k`&s$&Q)$n%QQl{`as7P4x6!$!*U0pex(o?(-M$y|7(;>&fQ zYjOpGA$kisrhUo}{JQi5iO?sM-2$lyBVU#C6tcU2>38@Wqn#DbJtX1&0Z>pTv{NN9 zyCm$QCjm9o1B$9iavQMvQmvZ8eA>%yqb3GArqj--48gLNVHL7F2kL)3#Jvu^zA17{ zjv2BJ8?x2fM7Euu#jS@ho8^4VHgeP^_)v;In=efZ1~y*wXKX=sa(4wZTfZus{M=@p zT{3h7yq|)-=c=N?m;$!56omt}V-ji;MPPwq;g1`h0tcx+#G{nL+;#cwW>r?UFZ)pD z6am7q{m%qfh=uj%KVAT){I{^Y8UwkR{hnrWd=6f8^xXLGfM47DwOv&1v3&R9sSkK9ND-B$&4z%c0m)F+gl3r(aRb5 z`9!eXOsS)&DTw}NZzOj=RuVCR^a2$_LAzLD>QXQvE zvq~beT=+_2gv~zaA<;cdI)119$2K-MR~NpRSG{v#0|({_{7$7)Bf@o>B^=;#wGmDL z&~Vv(I|6!EPi_akmk0Phv&q>WCQ?ub}S^{`P>u#(1Z5cLW;bIRB$ZBhvA zY+3`yOv+uCcK_0*_2DAMvpfM#;abh_o2n)tXj=(cG0{j02V==tT#;%Gw3hNQg$(zg zG3=2&mQHU&gQCfshxvock1!vQ=Q@-1F#71U?Ab$~M-F*dlxvIs}gVbeBWMN)^ofLZ(6q zSKmUVPAA?Levv>%atUu$7GZY`BjL`5+Y7~&JX^+_{22Ip#eS9`rrvVn+%?(qt>33= zLEBAT-$hPvdUpC0VEt~2+wzM9f14U2yaH9ceBFNtqargJ{o(qW&jbXWKwip)X!C|3 z_B_xcAE4fo7;kbEHaoAKkJf`Qn|R`Kq+@8SZH-6z{(#$^2bs?TcX~UEOeRpINgXNe z>X|+gh*{5dRF!Y^Qb%NuDGH?|0wr8g&=@ zL1g@Rqk~0MESXW?b8j<=Ku4-e`e3)9o_4hOLXB#@!NfVBSBL8`eM=w%-rp{N`Cu1D zl;aHw6ANzVXNh@!`UJm3#~9_U{K5*Yk4*J|nJuY57cn907Eo`Z#1?yx(`YPgVuusI zq~4o;3qQ8PyfR0*;BhArM?xLZ(E0sg&ZcMNSDQ}(I8PK|Mcaiu>qn&6|5=iBC8cy| z+?8)bzthFL0RGPgJ@?O9dS{<(Y?3gMkI2q=AYX|3V`hAhp~IMXf>&M!Bx;}I;^<&| zxk>N)*!v&HMR)r%wauV5@BL z(j(?>BZl;D1PKRG4@pDyM`)IN!3%WLm6-7cA&UmhR|C11a}PbEw1JzjO;bA=>%HpvNm$5a$A>4~0c1vzp( zCuu=0GYxT7T<7rjs}LkFDsUd_INqQmU!<@p!riQDF;B>xU_h%5W$W@N{r|lNE7q)o zG)8%=41aIx+4%LPpwm#n`|jYNYK&AAdb9UvjMshQG2Jo@W!uJdsq<`EoAp4X#^>OV z^n*Kz`Ala)|Ko%7kp4KzemK5qdB|&1x%KMub)=s?Tv=*tp+Dlsep+_-I3zN%iLC44 z@H-{6Z1Vjwu(&U_FWs^l%{z@`{ivOC<8snSdCuamk*S$NC9Uy?6M>chb!-pUwqc(B zpL>3Anlr`Iwuq_Xzc0mi3E>T3EuVEepux%-+l$+Dt>Yw}2lrgM}G2}{$fd|*IEzTv8G9}7l#(10EMC5P);r;he}Vqf&ri6$Erg%o z@{&GpPcxmzqaIk;k2j}>XFa~HmrS>WgDb{GLSMQ5s#*r90mWeR5cv;r_7Lo3$CMnw zOwlBs8<$V`5o!Xr0)p8wxXge=eph-0Lk`lWQS|>lQYF{HZB&FZ&0iQFxUMw(X*HZ_ z7UI%}m;`E?5v}1c@ns?3Y7GyNuzf>?8J+5lRp}$iHMgWrYqv%W_mI0Xxr3*N%BNaZ z!Y;v2E7r?$IuhH!NdqB+2x%^yj6c{M^kB5!W58O_8QIq1lO6E5V?>t}loVnay}O-1 z@W|6;PcpydH8$H%g0IGJ;Mu3iX>KGMCT7E|6Q;q)m^*z707*;V2FsJCC8%KTw ztNJ|+R|YUW9=RrTSUE5MoG`8!6K=5?MzW(q@x$qTU^HdbF}0`=`!J9XUaC~(rhI_> z`TcLcJ(~I#yK}aAO_aJ$C1mT+x~UQ(8i-o4w0@cQBRr+SI1(}8WW6ng!&Ze1idSoE zpb%S39#2=J9k zOZUN?4%#$4fcXJ5Q(pUlxXDz>?8n~q%_QJQw>4W}k~xI={eV{VYztL zN)khawb9twcU|UZyK{hOKTBPejcL^tzy0XRme}5>a0Z;)gQMw{JeHTK4=Fi!|=|A3^yJ8_WNFTxjNKhOILQYpU*YZ1z`7H}{sva#hf3L{@YT;o; z{85V}oYsYi+>6}@Znu(9`rH5SUCyD`r^NZ6CTx{Y&bBA+#NWbGViIOGpRS&9$ery@ z$8?905Ek1q!$i-3gpsQ9Z9fd60KgZuNHR*)Tewsc=h}!Yp@A65!H5@??a|r~QS6-i z*e@d^RRIhmWAs$A+d&i6NH~&uqIfeOgRIvwT&~>(A?RpaS&=4EWVX(l^}Y4NSItOX z3fJ9=P|FkE&6fSf9bb2Vma16?*%`T`1ZkS+e8DemfteFOG1?!h`Gn~XZX7Y*JgwC6 z`SqUB{O1Z!f{WKuZxnS^~5Ovgl}_WcEAnDp-nQtE#Kt@?S@BfdkW1)Aw4iJ;$A} ze;C&vE0VT)yG52p+32$V9)TaP!Nmx$4vL$|@BXYS(ON>2Q|UnEq}S@vtnu!iCwo+U z6g`CvGC%#)0~kffo5Q1{5LMyUmaD^ldoY9$HU(gA^{$7<+qa|B1u|`E#An9jXSr$M zCwD69baTNlZBVEDx*DHT1Vv}CplmL-wg#4%Ctd#=KD~mwEzY97H2Z!F$1B-;J5wzX zY!G5}bC=nP^7?j0TL>QV6_vQq?DbdYiS)|=50xGL9x4fJ8TtJE2aO5~pNRj4iEA)Y7{ra-P zc=5=-Z-C93O?W^ycV~@iS&uRQszJavN9H2BL#}z2a~8+#w#9xo;2BMS=NUa3(?WLF zFyCUodb>AML#53XSjVhY4T(%8;e3AkTer$2tTz%9(Fn*!Hi2LUcXgQpAdNVw!nXSh z%}u!YTpSLM(FvZuo>I+IAQMs3#u>GFPn9lX{1GL41YCpS4A~%UY0}O0!?tnv5VqJ^ zSrx1AH};t$ut28N3st12LXlByW_l;cH&KSZJp%Z%XD&L#EckH|2DkS` z!;>{HP^+P8CN@$MHKCsLmZr6wZWRB%i^^`?JQM5t4$PcJh%JH;G_GQGH!lYblF{UN z1!eA;PH-xvAXLli4zBLCYWoCc->OKkZHg{cw;GhIa2t zTqK~dY>d%mW#qQ&68QC&>NzN#Eu`xnz0z!S3TEjU)r5^qg7tJNI?6UNQsCHccB-l& zWOI=uEeS6i{*|}5bpLV56Dv8dlNZFf-O5Z%hTHtZRV)BKE&p{qku6xs_;C?r@Ws|z zuJscS3d=0RTjRu^j{p07DTj z6RA1x{Lz&$I5A-g@$`~Sp0|Ci$Vz&k_nL$aMdty`4H##4?Q3)Mnw>Svm+d%Uh3fkN zfeO4GDm}qsoV3gX?jqTmM=$(T4I5Cs_vPEXb?|ad^AdKpfJZ3Js1KX{><>hjYag29 z2~S(PA@x2+Ehb^MUVQe?IQb|_(%Q^=L@l?K!L9Kig zJExn6RUGzV*5kGU4emo+3$s1$hlG*aCIeSF* zW2lV>sy^#vw%lk?4JTbL;Iw`Nbp9vYeDXrJ7N^p^;Y;~<6;rE#kIXlY4o{BhN z^zWhV_PSz;=kEvf)&Twi;oW@pwM1J+M8ho2u|A-+KV~Hf2wtK>d=(VL)6T|1$q#^w zkTd9w$!HXuzLM}1i-m)4AO)oYcNRxo5^gzF^q6i!Y&vsc<6jfj-Q&CLJ9Armq`sid zM9?$6zv0rXUcOnm$kyewGoXs~cWL>5d{pgyaYDrz5iL;RenX~pq_$$yNf&PrJoeZw z%oRMt-%(MxL+kCQ{$h$Y`p9yxmznaJ3lpwcdoEv`Yo$;oW*z)aVwMgH9x*!=kn`A_ zo^Cr>9h5+{OFn(eWVY!DP$+qjJ4@XBl&?+xY;tXv{K*eOb3@++?(q5rd`ik&e9gKPv7&~tqVCUCi8OGz7fV4 zoA_~6Io8-aHM!o1;hDJ{(U@vBV4R?+zXp-X`{lqWz@EeP#Ps*e@33?m`D>G$x$C;E zaE_k00}W~XEp4mI%6v__J=fNnTczw11-;I6j?qO2H*bFSOw|mJv1(s#3H0D1u8G_e zJ+l2yf9!h?3G(_O+E=idvw!^k_C?N%g^yXJAHE?(6{uM^0M06ZAemRWcJ@90#aP|^qR{crd2fC?;jh8j;^Igm?-mJU$d2HpxK_gb8SU=oH#QF599SIJ(!%u5T z`a$oY2lg)VJQAIz)aeTYmnS=PV|j{B6kSQq+y-+2;9qeM0c{GmJaH;4@ohzPS&Y=e z)5MAFNV2Zo=qm{{wHS6kg<=|Bwv=qk97`HKW3p|_f`x1)GUvAgm;zyBu(R2|gxA)I zO5r&-MAUt@%3%-`(w3V17hCynRTWe{R4#GwoiZlJGOJXZ@<^|&0(!dGQyg}#-jR~5 z+YE)UepJaK3h5G@@i#u2%D2(3z0mikRy$$;{K|8jtoG02SEqnKE!bAQ#EvBXK zg7&w}#&zULE_uil%sWmMGYe05B2_QKJK8IY{cG^1AN04=SggWaTcaQPX)&Qtz3y0$ zRoq(M{au*l^|38lUgL6ia)`aO{8VA3lA)i0k)f<)IWXG#J3RxIydI0NlT#wEY3#s- zV-1sbgMvA~G0@E1He%S?qvnV25jUWi2y3dH=pId9dK~xYgCB+jTV*hHVX^s~Y7Ud; zS3>awHiUeFCfKdXq}Ho|t$*k}nHg%%C8+bdVWzHM_xF6h9T{2juPdvSH0vS8cV~5S zP0gC?${M_ZGRnUjW65p0DW|D6|;QlUBiA0Za1#$KH1ZG_`f> z?ycAmY$zQOL3)wiK}34*B@}5QHPSl~5KxgK5Rl$$=q+?agg`>?Jt&<}q=Xg%cd`3_ z&cDw-_nw#gaNhDj7Atd(Ilga{`HgrLfr)I*_shL0Yyiy1Y|kSa4$g0+9;*>|lX01_ z17(|7;NJMNnu#U3K70S4QE?nD;-An!_G;6LU-MiYXjiV=@Dy=KeE#%&0@rP2AOZet zN|3l7^AxyL^}g`pM;(TA{8!-S=B9}laCLeS5Ns$p{K@*(>tC&rLH4ul9WmR$cEx7M zoi1BVX6}5tKs-q?V2l2YbQ-cIiq7UD3KNMB*p65+QGSB)DUea+688R~c;t`JlzNAU z2yDShbq~Z80$N2^Infw=BVYf@ErMHAO+tRVVo#y%G+(D9tP`NI(bm!V!9QEZ8s@H6 zemHgGW{j1{NYHryP{WedtC#m$AbEsb4rX#F0m<%HUkgnb6Z8@$ePBDJq;k>gF|jnd z5hr80J%+2^m_5_5UC|gRm1gJSwfGKDQH@}ih^0>Rd|4Sg%xvRX4G+&rMnQ@7ggtP7 z$Q0wndEM9fV@{ub#WlM$ytjVGz0p}4BV8*4E1AV=9cqmo4q=)0j8!Eb{ShBvbX&7U z(Uf&p#%(T3MFVoPQy6GNt8f!*(`@jSkiX8QM?)z#k6S_?)f_p0M@fyuXh4tdtL3=Nc zrza`HflhE+4K+^k{<^`;H??9nJlr8ZyFtO1ye!As*Dt2XY?#rNnD{3oOv;_Pn6(t| zz2$9Iu8??{$Z?#(+@V_!OGW-rMD(A0v~FSP3~EOHxUzBOOJf->?VBJ0^4+=J#e!A{ z&n@FUi9Q^-1Clendmq-NGryfG?o%H!XZ!jH=(jkoeJ_$B^ z21pRwj20QN3_s{SyWQWeR_|F5vMcwK@rgEXufL;u@UK?)5^|Y7OiLu+fU2;tfOt~?!#Wq#Zr4_^dzI~}lb*as9#rm*#^I#()_u@Uh ztd2`zV_$imcP_1V6(+L|=kL>z{)meI)%z*z!D&pQl~Q{9^4LkR5)^{@dNU~1jqko^ z1?a|==Mzhz6cPF(D282DEg!JX?3eHI(SFetSxPY$iuzUU09E3x6VRe#A+xz%2r?WgT-{i+=*ulhmo^XOxC zOS+2}au{D{con$3KBNPX>`D5C0H7L&d=zi=oibLh_O|n23j{&|NVD)c9M22%pShi~ zLJ%|_Z-gC=v<5&gpTLkLo4$ zyT-2F0ApNW3Un>03TOLjRfa0aXDY{*N=nfrLkh@ISA#A+gIR)?$=CFu^Ot%eD&=(^M)<{Mq77Fc3`f_Bf*`)1N;4K?J zgknWfEKHNw=1-gYwesdH7{MO?8F3EHdRzFN;x#Kv6N>f3sDdW=x^>tp4bQ4CcDelQ z0JY`M#?{D=hOmromGRt@dtQL?psQyx2rWW-B>Q*%f{_~CW1^QG+K9yQg#*Rj$Hg?{ zFuC?Ll$(;k#9FkKk%mK|j)AVbhL^)VxmaH%RSl;FO@Z%XF|JMU=rooz04`Z!lpZ?F zN@|UdK^+kD<;A1)CPP%Ihl7s#cI6rbONB{q0-<*2m+Hc%2sJyr3YOh_7V~GnT@U)r z0pWiEzoNa-6T*Et(h3OtjI_chlGM@3b9>_`b6&&vgk10$N4`d#T9cUE?9odNDUB*8 zQiqi<``Cy8zh)`2s?{$wWzSm&W2kg*H2O?L=z4#pFl98L<-?QW)$dxc&FH8_e&bo* z0*#4;1-PA13F>bO+|whQ4SiyCfjklMs1x_g)<#_o0B(A80sW<1fY50i&;{EChzia5 z&YkE@R@*U&ZdAp%0$N9FW2Ll|a7q}a0qFk8!IelTeHUQ(@t_?mqMfG zAO6Clez%&R0tQLSKKb@*d&XQ;ph(2LDTd<<0Dr>0ieoY?X0*y=^sC5W>w34!U}aZd zv;boVUpNv+)S6XUEIhyMkA-k7!f{pa?po!vP$mk34aa7BMR+Qx9jT}CQubCzn;T*P z_~Or;45ilY#(b<=Y23lNIR{gckv-<7RW1XJXA>%t0*_2&Y1*j)i?hi=SyS}8pXDl`Lt7FOe501q&YXRg;7$&{gBHBnHle<1PaPUkmg@%zUo{12XUAEke4 z>cOWb7BL3DPiQ)Qrwda^$X7_SU;T~2Z~_blm9%bLYZ-0?+0v_M{hXr@Q^9my zx+tm?I};8)ovE>T=yU4JTW7uJs-oB`MLg;T+Alk2*6skaCIu(k*$hl*Mm{b@$L;L) zP|fi8=LduuJG4}6{4@u>gc3l*4pQyK4M&t9qFY_?L2&?CMk4K~XM5>Jk711ueAooc zD#YlueZz=_61q0Lv@F7>URu!G)`;Kc>_7@ z$v&B>?66vNghu_ilGou_sxxL3M0r^F%?IxdB}VInTvAetFLR!oLAh5A(if(6k+#gL zRY>IfhWRtUFNbax=B0fzO-rV$7d4trheTq|8j39&9FjWjwc~Cv3;#^iqm+7y`S&gV zjYIrt2%ZG&jBxEZi1X)|V!5y`V(5H4n4cxvIqcraFHBY=Mq*+xcHwIkbe%bfne7PK znY6Bhb7t#Pu)XzoVXtJc%4wtDzHHDmJTek9WD+tf!96}#q%Phb7;1hDtB~4PK+ax89L&Qg*cLVsxww+AxCx&v zfr>3IPzTAKof9xlBr_Fjd1T5xuS9G`gLbb#n77Yg>DNG?>yj5ZJ00TX+m=#jl!lT_%S$DLOZ@Z zZJw@WEVcMLsf9sJX!58|N3(>U#Oe2jK4YRNFMb?!49(jU#YGP%W# zCXGyWb|`}Hk*`OxTVAoU6;n#7SxNllpph$(sXi;>$nI)glJBlJ1ZxdkjEw#|qeHL% z8{k+fff>aKd(zUo^Ld^R+?4489LCUhYoXZ*2Xzlj*;NgQR#j9u(bc;#0Of7ZRx$dI zyyADec_MpZ$htW8W29LG-f7d@v^s<&`XMVfZhugb;8g0wKCbx_>w)~!s7E|#Lc zD%&i+o4vx#F;xyj4?c~&qe=wjNZq?hmAC2!^S!|aV>J!Zq0V7eGF0Ut8(t9%-$(hk zS&(VoKQn+{@2L#C?EbL;T@*WTmJAKO45bY>B#2r#XaxMp=w(Bm8VCRt+bh7`#K=BHh=9ukHO0L#jI?uX}cw?)gViWXK_OZ#;w zLL%{Lv}v3`)%07W#1`62_8IHf!sNmtA(FCV|B_ZsYloqbl!59%rfnl^zrb3E4-*O= zHnwoAxZq;8?s{QA1lP>7{guM%^PQY19SYr`)zgS?uAHqEJ?PzKj_fUP%{X~6vWAC! zZ*5WbTklP!qf-GCZK#eU)o3KBLedi5V^wN;Vz~fj5q%$y=o+*uq^vadRkR*xzoS5a za%V5X%RdEzcDin%uHQ_kDCNg;*D>)K6y=yij#}yF;<5op#MxJjSfFaZboAT)5L}Po zvfQZuLVS9%et>R*QkThDZ6V_t6fTiv+ML8Cf7yAq2*M_r?eG)p;uA-4k7ac`{0i;# z(FJ4Z(^nrqcs)9W%jg^E98n_c*bVmGkeMU7*o7|vDOl^)Rz;>BUVc8)<*G-5Xh|7? z1&bW2eu+X~0}gpYOia;aR9SiRqxtlJa_DU0rPi9Rr|#;x9Ts$gLl3V*A+Snm)oJvxrmX5Y1ISi-yS84VC$^EbQ3mW>;50cK-LiJh^~iRXu$5LMTGz$mw( zTo&(Cr}y}T&=Vj7&V%bHrIo9H7|eNQ?+*HV79^@e_Bv z){i_>8@1C_@0-pk-}fOgsh>H@%-L?bq^B;>N^-_fGLo%4{6@3JQeRofhWeCmwN7>P zp2)|7Egz{Nw~hfC8RFi+R^*)W;xUsChd9$nv6fZ|`LN0!Ig#$M&pO8kCUFBPV<5&s zV%6?no-Y@J4;xG+=BlhMWT!fE`0sB|X+IXLMq(acBw=fNsA2?nNbG#wR@2LpVu&av zS_zUxB;4)yES@}h?xm(#ldG_J6Y}c4FYlI*c=)|c(qR4SRkO=palSXEVbv!u#&oGD z^pX4UWh(kZ^i7Xsm%jLNvSBahEYhc52lMwirpnE$n{+pf^(m@ii~U@R4JYfD$$*Ht zjF`~Y9BKlk>fj|eopwQvXDqjIe{)Z2ltD25>wM zI!BAH#gS7DOCkG=pAe9uhM6i}KBE=iQSBmGYY2e{i=teWur+hWe{Cr~sh9kIiLHC=f(6Qmi z;K6ql9&bP&Bx9v>oyB$rY>ngcQQ9yDnws&^%R=eZq3L*^wfCUs_rf!(M{vL@|Sf`XmWWbeF~%i94rf-AaB?*a;DJ)!B#FT(Yt zh2tNgnvditkIqW%@$(+A)3G#b;2yfni@r$s_>TwH8MCE+*Rgy#N^!+*hz_Tz+YT4G z#B-E_W%MVn7|*k>nVuLo%HYjHMid_JJI_`)5Z0iP3xy4gT^^`0?}0@>A}R!ECE3B( z0-F+L7YG3|N=NPcJ@mA2`AVi~)3HXoy8Fd@ogI=%5?QGUtDMwb`$jdm(9M>d^-+r< z!bk%l{8g$XI|f}h1FK6EhH(?49BW;3KTC?R57b`0#VmJ@dln@bynly#%s<1fk)|wM zcCFhoxn8iy;Ba=sJHDC7YWpY%Q_jlo4GyDXs& zSyhR#EUtiXHTv`CM?$NXI&ts6-8SNVC=}q^w^F)@S`|o*@pc?DiddT&?E#-bbT7N4 ze)|yo4Xiy=&6<~ZI=7IK_HGfZl(IX(R>Wz@enFikIafz@1rA-=-!-ZA8`e(XwuX8b z{?M?J<9L6SM8siKk>aScstn|19L5t7cE^0ACjTUzyP7gWpF-3J%k$|5tZT>JfwEJW z$+hr-$;9*_8RClmJDH)P{`@6oqJEwatG zV}DTwh%LXN&6vtAznVPJpL@s@0mW1=3vXv4ByfYZ;SwQ zdbryc(3D$*VfDx7Y25eX@ntyg9-cJkcU(5&-#>8az{^W}piXBdT$J$8U^*{8r zA&Xh9bmDb%qrNp>f-M4VbD!8xhuWV@C#MJk_EWo?+oAOON!_i_{f$P>gyO#>6#oqA ze#cUEm8<$*14qA=6Y4%r0)DOTvM=c@IE#ozK=#ECY53NtL*sl%I=8WUDuACEBzC$X zP!SuKZI%?PAr=4W%rWy!Z3BmMvJDxmk+R>cYqv~b5)ulqw<0RsX=`j-bz{RfU6X{p zn|v%y4RbDBy#WkIt!4fA58EvsKi-6O17 z_Eu>+zTrkR(QJwz%H(QF4N3Q+;4dk+N4)=q;)|5j?yNgHrhQu+>iIPu+(;qy{Qy+! zh+o= z*p=O#*Ujtg7RcvK=(wuev0ndUeTTQHb8Jec#fQ14;#@bx4M&B0wq||cA8Ar# z+O=Mk#OBdR`{Fq(uCj_Ev+9ssh>GmXr?xAmYqu=zM$V2G4atu}Mr4XHaPqy#$t@Fi zL$ZUZ5me+sa!cq3_fyV0Oe+sh&3Yr03mYUETE}C+6STqMZ1bFy{Z8`z52nq{Do$s< zRcJNH_asiP>D*Alf)Ly4v|~6wt1f8io9flpJoa4$jN!1S2s!x2^m$5KX{4)Aaztho zpVGc+(%(F6ZXKAvB@F=g@nwp_P2C3K!js3~E$@_{0-Wgptgc(Q>;3dUo8dXTOHaJz zxtaoAY=sbJw4@l zVMai?#4-WYH86lzG*Nn}zm^>7ui-W@2znuLyl`wE>DaR{F0tY4XH+y9{%al1Ce5W$ zH{>UiHzp^n9*5Fe3rTfoAGkS9n^;%D6I7Qo|JCEBO3+g|gw{4&Z)VW8Y}kz|qMKrk zL9VO)wRbMU+?6hEO}OxCsM->gblkLE0pAAvBJ$+NZjNJ`86DbCRy!$UTffGl-PWhL zk=ynd@@@TUrWKIpp_lkEtQ-^kz)4@fM(Xr*N+o+Y4cW5RtH5aSLM?ZZTiIHzdCjpJ z6EJ$6e{`m6HHnfx|B)N@MHzg}k3cI4Po5YNTSFd-76VSl;S=F*gB8)S?VoJ18#zWi z6sI5#&Jj=Bu@br_YVcg*R^^f(I4;D#Ax}R7$4{dWtc(xtFo>|~ayGgh>JwG0bB2kx zGh2Y|^a|ByHLyiWHh~*k)KmTZO3pN;TBg9W>b+vQS;Nj^=4x)IA-l_nT!esP#Bs;D z+k1(UcxZ2AQ~vTZn5f8Mf98gr)g7j19IjYPTOYrpw_FRM)dFFrVs&N+qYlHkqinQH zus5t`kUpL-w0x(;faAl6`*;0ioS}!ta8<#TQ?A^OsbVe?Q^3@yzmOZ^XQURbDG_Tx zO?Xfh=u4zdOpk8%@s>?>sP5G(or3BrW*$GCTUybSBo#?hML`*XY z))IVsZKQaWG7;n%KGMbB62F)3uj`fV97NKo8{?bWYi9DLc<&&d`+BKMz51Lj0#&(` zLw25?xSk}o_q|-q5HKqf4L6M@XklI#Ux>XMM}8$VR0E1@z{8_ve5$U>-u7~|x;hv6 zB%GWEWUU1rle<5z>pqcDCz%-Da<;wXJ4S`?xXyyRy~Hu3H8A-cB+gZG?BDbb4pBoq z_bD0UzzK8Rhgkrov-4|6Fj_P+UL0ZJTkjp7qM?0`olz}k`^cCa-#<*nA1AFPC}@05*ls+6lKJ0a8`z=H#V#8#TGBFcHkIMCo*<{a80+= zf);fdR5`nW-_7=({0AU_pK*=Zo-{7^f#lI>dkwlS-3CNK|D6dA<9jCn)8#WSHmM_$Zp_vqLCgbp2 z28z|bJCV1)d`G(W{NicUT54x^#D%?wXD-K=8d>k8Kv^V<*DBViftZ*s9N8zpIAneG zmOL+z&Kyb>UAg>c81S#bqx=(M`w`TDBH{;IINj7j0<;&{`~)IrZ9SL*#TkQpGtn^f zw~8r7()LOniF&t<@vqy34Q>l;z{cNxqw?VFXnS>Yzx^ZOf)jl=N%pxrsd?2!S$8^H zYVPIhw*Ir_>o(&fpH?8p&{)UzB7aa!d<(;54=DGzR=4_@W6!&HAB zt%*z>hz|An%0bL0f(PVt`7PL zwnfK<|CQRH(~Yp~V%)jb-+m>&(5bsHns!1f@_mzW!LkD*%?~=wR)VE^dsWqr1?#H_@VNfZ^j|z0G--ex zMG{)%H$+Ukp6M~7(NilGxdAql84wKwAqGNV)z5zYKmV2HV*o>&BHHWeas(&i+h3A3;UoGJUm`N=_pkh zW$~%k|47$@szrGVE{PuO?HV$OG;@ePYd%$VnWCg7x$HLP(i3U!)kPd8IaIA2mUpsM z0AGb|CNiKoOffCVh3JIi>uLkeY)T3>6!&9{BBW|`@nH4M-)kdbiXZz{HnsFpMw$kN zhRj=?EVD07cfROPxND&^QW5#qwr!|JT7xmmAF_WBvn8Q1eNwN#6a)D%7fBzF2I`js zt)ID1aqdWFGkp}rStSOK%EI_Yj9jFP#{ zCjHvzJL_J8eatqiU~xm}Ivm8dT5XN_pr8jH8EQ62*iO)#C9><|=HoJ%f_Xtu7qu++ zPqvf{hcApN|KU~u#Jb!vI??fIwsKKB zuBbV*v5L%_sG|Bf;wrLw5}O5SDYnG*s<1s0>@t4DDigQ(^tUusgfA;g2W7@Dhj&=v&bQKaHh0`Tv%bW zRIf*o%JufnQSX5_re{rt)f`Ci1u}=kq0`!3pWnF_PIZep3P|o<3Y_QvGoSabj{1SY zg*4@3)%)HrUQ~Qsplgzzl679ueSb zBag-*7=EQA);^IptLu^U3T>j0=A4um#4|D%o1|Df&mXG^nGW`pPbEUaQk!iC(fkp( zAPefThm%6RLsJlTEO}3<(hrZ^(}#!li8~Lq3@VQA6Xr^ych5mtka^5@ERs30aV_C2 z1VHcegm&2Hy`#9K(U{fr^j|ul_ls^ynz9;(DA9;i*BFrn|E>i9 zX2_#~PN9*_3AiRAS}XV`3HFUvXWIP_CY9YxXXJFO&H0$~15cL^qD02k%*ctPwm`ml z{?vE3Xsx2-c6nYmDLkMo-k=K2f6o@>^v}#>7^i;=;l`oBKCm2g4bv5NKCf2bXG7-YlcyRQO`H-A6&iwI;?uPNyW{k8~wUxd>!9cqVm zy@kIiZU=u-X!XnP^9;CSHLX298R0Ja$qnhOmDjFiWE{*oSfWj9PPQ2k zXG7)-g%;&8kt+{U;Eu^zOZRBC`qn2U^EehnI<%WmK=0-`GlKy}u=O_Gs3)F^M*7E5 z*msIR>zz&*_D8)BQ^R%2d1sadKbq^N-nQ{Y7RYRJSTFKuQWC-v7I&&He}}b^M4)6( z^2ed1brinHzg}fJ22q zcNJt80BxC~xTLMLhg8En4`kIp;_M#|wy(ek(Bjt^jcJw2QTW>PFwkJ(W`$0bD z!^hP!uwx!O|C9DtfZf0Z&Pjm6)Ch0nOb2%b>|O{H zFrW^^65cZsw3>0no~2>4%0^Z^%W>_;9H2MAgsUqlU=) z)P3WM*WDA>QiYj4xoOcIPT}3Lkdwww~tD#3z_}`3br0rpkVK0|NPUXtOjk0v? ztA#AB6!5W*8JwgcSGF%+=(@eL)2%253l3a651-zrzQ(n6U940iz!SUf;z1LSRD}UL zu@PTvHUDd3cAm-uw|ES};q1<^b6_|TIYrYlrM3DMaX2fNlk3$XrP5W8?-$j2_;4oS z@0mQsX{CX&twkcwxQBypOM}mz>XsVNYFDSbY=riCobJm5S+CmwvzT@!^83527f=?E zgX2z5s~K#FC_;434k5kQQk(_EZp3J;@P}P{9xj?B6#-IRV|8Jh zKjI3!_HvScUpK%qhG_V`@(ncIJy(8WjX?K zpS}eU5!)a>;?`48sR2^YYm`oTIbTRt)WihMySK9jL=Vn`&CdZ36dknxe(TXL&=C7E zl94m~OHwBmXfNyh+$JiYw;yhff}GGs#G}>1FpGNO9DQOnS@{`|>2#}guHJ(!GOc*T zJ)LiU{6r%uYOYs4`XVq#5!_90hm3w@DWt!%6dimKsX0ykSzHAuvitheR3D4f##0j~ zcXitquk$)hgz(mPz_@=)|lytOm*)?s6 zuIv5&E&D0ZbTM5KrP93Et9sgEY#Ao#i7sqBM6k39eNTp2`_I^Lb+!MT>Oc8{W~3qI z^`*Z&-m^~v=rx#1f zPW>UXbNQz2!mGJd2g@{LfiPX>Z=%0)m}v!yi(INAblPt{=9J0v{3|u@-^Yb_>2_#r z=jS2lZ`iXEc62^lIFBXtNdtvLXl>Fy^PgSz}1s&_aS{gmrxWuPjHyXh7m zB$uZ~Ha+64fats2n3~49>#H7uD=Hp+q&r%|ww}ZfqTUbyKVT9Oom@p1?Oba=HYuNW zP#^MGkaDn!-$+`H(M}D1(sd2sQakKV{?7WIJfOW``_oaN1<_ISd`3U=a5St1IuEt! zOM^!l`&4zJDyt8g7oGO5S1vZGks?SZ9FiD$=E{oc7grW0f!@jY8||auyVMj00fNJi zzokTyb^$5a1Z6-XRi_ObTZ`-EAlyHNDR`|d3YVB%VuXFM^W!D|9^op+q>@x!@nttS zb>(ZBH@9|Vn3|B4a+5TI*vv{%3owRhpXvW=}u z8Zx!Pnc0lz;@7FRxLn0rIo&_-ZhW}TuLpNUexB`pSd!APyqV)jpZ%8hJ!UIH&wqp0 z<=L|0poFQosjW}`NvWH=dD&xGBHpXVeevk7Aho^^@=`Wj*0#LA*09X@M*2;OOLr!0 zq)~Pr)}gPnyy4KxSi3s&Vlj%spL=rhTv!2|$>aI!W( z?3v!OI?QKzG5=uZ_EV3L2T#(I&qEc}y5N$(%}ZRmu$H3=_fK6Xmt;3?7TA(JggHqk z^{k;HBCa&0q!b&tX$C|&Ubs%(#x(QPzkdF{Hv?LfJRAABM_} z=~o-wNG9qX+QwtDR&#;bIAu)FS6SE<8`1?4`OAenZv1?Q2YE`<5J~ST*ov{qR27hR zQ|jADtdnK(4=QJfHX$}N5cuN~VLNK2RX+?eFM#s6}qd6zM>gFxYuapR8~ zi_d%ImAhTj!7w(Cbj_?!xe*d6lY-I49+SiTy?d@2n+lYPKHIO@IRfe;G!_pd$x!hT z1FLrsa~wkMuP|e|SW6#kqkOA3PG&Z{VdFz`Po|K4EryKso-aZy8cV}mcDScUC1Bwe z$@Lqf;WL-y>JRfjN#Wk9wH&K5DxYXTurHI<`oVG=K@A?Z-`BP{Q&DnHx~*rp11ram zQ?7+s)>Kj{3hYnju6k^qM$nzT=!FA$jk@?8zH)XsV_o4eKSmW0r&e-18!yeg3ceSp zN$X%{BQ202gFV~XB_Rb05iF>WHjF85A2**_mqTj+?ZMbZ)hV)?6+NpJ&$^Gh9_24Y zLOjHjF_{e|G?ZkP-DwJWn$wlkTUW5ZwP=m6&)thnS#se3nW~z8<5cg{t#Ktvx4`ry zjzArfx436?%Esqk^Hn|*yc&BEz<(57eE;pgi&i?{z4m4tgorp5%=TheRMJ1xpZZLU#ijQit6-e$r?i{K0?> zGuNIrI=>C6-b=7IWw&^Mnb|6-KEs_3?!8P)7ma;61@jA}6v2G&!&AP|3YFD+bFT~CJNy^O#KYv?kXA~{!ayUOP2y{UNXr6O%?S*$_f45e@-IR;H z7GUnhhv;uqCVX~JYiRHXf%Gn`u8{nVKU*oDOpugOZ{f^VdR6c^hsBn!;B)$=6AdJk zba+4tcmMp$|J1^KPSeWh%gov!Rx327od*%|UD+4z_ryF5o3s^Z9 zQp?PoKclvr^XfL2T-(zfHA@}$dKG3Xsm~*dSkd$S7r!z<`wzeAZouasp}ENJI@q1C zYtp-4`yUEj|5>Sxgs7+T^OC?{U-!N8XXnP!!ZB9~lRgQ5Dx0ZXsgGJuUC%v`qBKy> z8hpj1`!`(kcLu7iOV9zS&`$vs5j`;wzefFL()u@~eT5&!wLraC$Ss3eBKq0qX!jNimAFXH5|&Kx~EMRLKD$7&R*yFE0sS zT#y3l(TeAmt7ygaF5q9E@|%JDX1BnqwbPZkP8c4&m_6VDf3r1cHcu&XCh8k2MytPC z;HOsFJtqM5ZnmWCL1c95%mE25dhg;^Ycqhv=6Ua8t-0sF+RTKBgU_b*{r`pG#TKJ}6({M|hN+?s#)FaPq@ zKR2t&lP`?cF{_{8uSmQ|6i=H`YB*xTxVhom;Q@C`X|d#2DaAmJ&D=>;1S5Q^KRm_ z(Cj}q`}be@PyhXoy?f09Y%MU5o#-DN{(te{Cr9Vyu9MxUyZ^->{nKhc2Krs=SXAHq zO=rV@=NJC3^Y|B!_rK2L4Shv$o3x#tk*Y`5J9K#NwmC3?fRtmvg7Uz=w}MCV=eBP9MiPW6}1x zfEg?GnEG;$P1oN3re3k(BS3Yb_-ig8l;S8l4yZD0pW65+oZEwX1c7UJ-n^8 zr^x+b^sHxp8lwY-Qox>BB}o7Z$QXu2T%ovre9h{t*dAIwhGzEJunWY8M>IjJokyEx zA#7l=A592j>xw zK1u&20btTgd}+(6VXkV*T1}{_?{@H%Y{xs8QaoqHZm%dRLUfZ^5;xIjiQ<5Neav`6 zeHKuo=)RU8u$UHD(-)8tNIS`$mlVLR8fz^hOi_b6b}?j-+> z5A>C+jSa4=nsD$y^Aa!}`0j?C#Nk|!zQS(D%p`ifYDjf3L;A|O1O|ITBT+!1{Aa4I zo&;V5&6Xc9_kL4jN-QjWUV>)JZFAZ{#BGfM%^)HCu{ zJ{;+G2j6rs8w1ESkA6)TGp(|<_Xk9#yBr%f7)5SJ-d1)bSnf$;f=@e#;a>G5^1Jx3 zv}uWSp&LBF!gH@L@`&lwgVuT+JEQ1IE|9Kr7%T3C84zE%eDnS~rP9IyquR346LF@( zk7+fb^Bv(a2WW_->FrCBXqXB5buM=8wFuQCB#T{668G7U4Z10z?+(mf)(HB%b}NqE;5+BS z`55*EVAK}NwgII04z&f}F!-s|{cTX6Bjew~V-VYnu1>l3b9nESsJxDis)uM4u;QO0S;XgM*o9u!Na3#hecSL#|uoffjwm4s& zO1a4U&I=#q>SZ4@Rr9d z;PTX}scNI#ro zvG&(G;F2N*FdNd2Iw|(4jlghQK7X@@o#tY0@`7q2pTZ{KFe(gPvrITc zi6|bPio&+zhA?elcM zFW`_%=oUY5TYR^R=ecHUpM4*m1Zdpy^hE1e&o+9MSRZ6J&E`(1tHD8%tJyKpmr^uW zJ^3QjxNV=8i2m%mHz2ni43&QhsB|qh<2GH0hZVD*2EQzb0Ww6)w;o9-xSZ*j^JQ9G zF@C-~ZV?GJgz9gf3+&0`9nL_-c2N*a(h{@wp0LkAWpt)Dy zm*;B@g=N(FmB8edftkEL#?0mB?S#0iip(0sy>fuU+}Q!-Oz$a&bC@A99uZEpyxEzB zEuaqKbR26D&aT5}m9ikBgM0rQt0DKfyWa?Y1(-44ki$y(33nUjflhL)SMUes+TytM zCeT|gXU#<9kJFh~l`1o40j;OSHCQPpVQ7^Mkf{46TmgWe#{5@cAaKSjIu;+T@H16O z{9d$=V4kY^%hcRLz$ReY$)m-fW$(vaOpz56`UMCF6}8=^o=S1UVVtcIFir}LJX%gO z)xF=%D>c}zB67L{6zOvjh27%#2$B79iSWn{~mz!miH#QnpQm^Rxu$J|5ioE|yM(6_YzMO_TgZBA(*O`Ig3c7rxHt(-W z@1D3wWBLH#V2d|)H#p^rZ>0h`*5!zu{Ae2l_(ZggQp(rhVOg_rgUqJ{x)CU zTyq9oySxrxI<2)l>`fy3BEX=^Hbt*(Ip;P`>7Tm1{5tNaiEgp!P}u5U#aW3?6l zBEoj`T{TC_G$w*4fb_qy9`^zQiF?FvI<5&98NqWSt~WW&ca(73u!M8W=hChF_4Ks{ zT|rTS8*jUdmfQW|DaWIsd4QEY&8=U)zIzYf@b*90i znkTxl_>!c8lFJ!3Ca&vjaJ%itx3-yJ<}QTpB)MyRjD+8DtnxLQ(DQjs&h7W~VwFS9 zWqi+3GWES3aC(cF!|p^bWpIu*EyjV~-$^3_Qn~lveTh(tWB+JZ+Ek;sp&P^XE{wBY zK0@Mn#n+SQR9d6X!7q%Ai?cq$hJSeI+WvK}#TPS29`~>%lrTUfz)%)sR48- zH9v2?FlOPaW7@xPr55l7bz$VgSb(MgBYT5Lr#tACYuW6EGk^?d63(T5uV4Q?Bf|Hf}0RC&N9?ZP|wdG{)i2BVeU8=0n=zB#EpEdd(IgkCwA8+{S zE}f0A47c~*N~X6!p6cYVf>`3RcB6|ob1_~|6^Zbb$IJsN|Mc{75g%9z#7t>{;Ud() zC^;D||LIyMo|paUneFkpZ*K_A{Zw~)49L}qC&fE!>@vx zUoWreGRLeA<>_e|4Rkq<79}+94JyeborI4voQaAUl$yMA!)$AYXi~6QD)Gt| z19kfep?HiRmf2@efk}srtGTtYP_Hx54NPbHk(mrfykjhe>JWcP%nQj8+~p1KcQChIymUO4@R=HA-ZVm3aj4 z0VCUNZn3=h^{s%dkZ~tLrrq{h`xfJYNmI#j5km)&ijG^+HvEblL7e&Xw_nt~$FfyamM(Vr{TT3N=8cO#LPHZ% z>yhbP!uVR`ChK*dm7nm$yjUA4$%P52y?KS9foWIn<}sPl$K9ICS%AYp0b4YkR~Z$5 zQz5hLW%*7D`*O4%Zz#%BSuB!!&pHURW}k#>q0>qpE`RNuuEUWHg|bnxTCF{2UXN&p zWdvsF3&~f%_$|me8=-HoI$HLjiIF`XV)?sefF6d)4(fRJG%Uz#;EM8q+mOu-3F4qe z^ZIz##*0*$7@y!Cd>vOgs6sSDOM7lN!?ImQSjpy2n$bO=Sf?J~CS8B)#XsQgAEP)E zMVa;8RuM7!27ze?R^cdZU!pF5WY$l|3IC+w#$kGumPfh>izUp{XnTcpQ6DRfC*Pu zO(X5nZ|nh7=Y_vWODaS{M}feoY=`xe!Z+OWzBe*^_CZsZD}b0B{MM^Dl!GSn!sM)$ zqpI323l!b@Q9nwprwqEj2&Bt1!Gr!BTVnK{#f28?nN}DDvHw;oiY0yWdWR;8`0X0h zZh0yumYZQ8g^G+QmkFY16F6;W#ehx8z|X#;U}j+)s$a;-lOm#r z%K!^xaF=X>x}y^LO?xQ*3Z%y({2Z}vljSNwr&ojv{q)&w;GV6ylJO0Qor6gcnv zR7r+{05?Y?_9;Ae37srnLC>&|)Bm0f%$tCsFE*7RBaQAIa`}1MR#dzje$JQ!>ER^ZMuyY9b8 zhcEYC{Ap*^6=J)ObgFq@bP0a`7ACf;flX-XBf<|>8lqu1U?wr#B|H2t@_e+m-0)eF zJCqp zOwfifEPWbQsdcboOZXm|-gAJR5n@qQHmN_mT;VqL~;AI0CJ-Hu>;(eUb?(J}yH1_1J?rKg4cl<>Q?UVOhS?3d4-*u$Fugj{}T?&^vr zY!tac9FU?LIO0 zWhhCqjhH`DD}53F@-v@@JM~ZNsp9oQX`K)awv_DLW@)q7H|L2iuU-)&&z;dw>AYod zcCuH}o8}`X|Mu(4)iSCuQAyfc2p3{EQGMv?A&tgrnj<+3rmcG5&df^yONW4Gi^Ee3yjx zxdE1k$TL)J_q>_d(>@-kIaQkBnR#hKza0_!%XFV*GR?3eW<`N zVdoUKeKClutQk(`Xuc&yb#MJQSaAl;-)@aD4 zl|C8nxO|DF*1_+0B-0gZ)gh6OjC@>FRor?ovuftHiFEK8@Mzsy_F%DDFhnZ)T&Aqq zMuZPTDw%G(pVcB~H(;D^^q`uoP6+Wc!o#R#^-a|CUvuz%T|MI*5z*8bhp0-ZFQ2Pt z$T`=zpBM~iIoeb8YZMyahux1IG&)t+8PyBL;9sCztK5}6$Y_+^d86#}#XAqd z!hR%t)wjCwZ>1JJ6BLl}tYmrKb{kj<)uxz5Yw)S8yDI;PojBbs`OS_~U5;R65&K1P z=dbN-w)kUx=?bEMm!I-6u!V8S`XoIymL}3j$>Ikh_zm`kdWM$od47HcmrA9s4!6Gx2A^kv}Bv_+bP>-ikDiR)>sz z!U1Jp%Ujp#jm51fKCbZrFQpl5prTr-S=V___or4+xq|JwJy-Git6n;qOjK8y7c^5Q z*fVIT7MXsk=#5xRno0udlzfEt!{|VMdPAIVN7;jQSpVD%>o-GM6Z7M`z3PW!>(t28 zPo@wK%5mJ;$lT2ai(e-MgCg2UVrXD6=>qjXs0Tm40**(7&uW~T69{g7=XLqFVFsb1Ao3+TmOrv)%GWH zK^;bTXv^ZS^W)&c9jtS4m6=x6@`=6Gm|2qfpucEeHYiE@hD?jLwWNhcz zJ>yA_Z4HD)^#iY(YD>ALF0#Io3w#^My(u=hB9!x~_Tv-(#ZHJJLOmgcU4?|p{&zU# zPmkyLsDh6t&QAA`q}~J}7bl2BCC#PD5)9Sa-tE>?bR~N~&GsSw#=ajeUl$o^yg|%W z7nZB-o?E#oLBMXQX|7g=E|zgUNoM$GGZZ>LyMfBFqPFxz^-eO^7eYqu`LFldjUq8c zkDTh0b=uqu)&MC|2*AZBWukvn`9_? z8g~X`7s>=z)8)zt3zirJ4{mS1t55chXRO{&(1di1boMAOkEyiS%cVZ&mv^((i;TAU zK3sjru1mmqKw3)|*=XxqY_Hrf^DK>0D&k)Gepv)YPWGaHK3*Nq;e4WH71|X3oI3X1 zwYP_=FF&T{Ud7IFvQ#Rjm6-VlmWl-`T~p(n1`4Ck*4~xCxpO8TXMOFkxgHwDY8KYJ zg?AIz^qP*?D3CRF{!x>JVl&t!1u9Pt^$6u=5>$9Qle)V!%VIrF4|4KVc}<}CeoWa7 zzG2gjb*$w5i}YlR?ef=eX4QTXcq@c|pT(r7P9lj`)ZXn6H^ugeh$0IjzU5fH)D?SX zAGU$Fs11Q6YlH)rb2VZzyVsOdv?#>sKYs0bWWs4xeUP%SO20Uy(s*fQq=a2Xi$^wd z!zKTXOVil1cf@T8y~H#(IHxfmy_I8qSOfbql0mDOopFM~Y?V}AYg*Coi!YtMwK9_+ zC*z_b@9n6O@L<^Mt{K3!nD!ZU4U+0=!mk*I;pWP5Vd^jAd-if4`&;!;Y4t}1{r9)T z^?N4b4zt6ja|FxNV2_4&Fo4~;kY&Hlo&ljL>gPH**_R#9hj~w3QBnZzR1=1#sgy`* z_x8QmTmNx0{IBbTxA^L1{7n7aU{M&=UB~=uoPAEZzrMW&Nw2Q1H`D-CTy`5jp@Ogo zxt_s&#aj@IzL@<|dT&`7au-EiW>d`oC%FvN6_ueR{0VNLXAmYzDE*ns381)eU~40r zlVqaevwGgJnGfCr6!h5@qR5Bj-g0xQ6k{w@KByFJ+F1wcd`uvXg~3;eT>kY@JjnH$ z;G^c|nQ^457A0}BV+fo*Zi7l;GHm6u4x01R>o^FkSAIjY7j)tZ8~~!e2|mf1ZCAU!6W49&EKF$gw^}vH_EYYYAuaDs(e3h z#*K{|SU+z@)6hh4ezNZo09su$WCyB*7Ff4Ro1CXA68eeshNfzTL-z4*NsaVqriMID z&FQpM4A)Oq4jS+7SA65-?ts0y#RF%74U-F&AXC5}NP9OWSSbvNQYokA^sw$a9S^gz z_eN}`lqf4`ch@q%lq*nW8!KyZiWA}Jr>W&H8&@48TUruD19P0n-aR6wU6`!VavWoQ zmuhi0|Dj)}FwRb1_PA{JlRl2e;Z6)?)7YGo@5!)Pn|7Ci?6kHghfOoH4Pa5Ne1(I> zTJS=C2Hm3KgF>AYVg1CsG;7^_JO^_{@*g*MT(kAllHUGgADeCt(UM&jUx=>L`|?oB zo;@D;a_VK}Wi#>9s@K&iHoN3w1BwAbwC5*Pu`92IuC>1v@iP^223<-V5J_*4si-e3 z{%D2u?4Q$k7b&Evws#_go-&T$YrYV`PLL$+ZF%rr{(!uyi^Al#Zu14TGMuNKzQ~T6 z>96Zku%YJTr5hagkUeaChE`?C_M-1O8v1sTqIDN6gEYlfe2L$~!%FB?_8 zN}w?ixvxEKe<$T^5m1sMswrkh#hP(+jDc9s7g+nSX5acO=Wq>5(p4EeBx~*9hRhZ6 z-XLHWY6u`UBW09$ACPX>HU_0enkafTg2`JxP{l^5OlZF_5O!i}woyafQ6Lt6@k}@$ z-@)K*;))%D0AU%_&|QD~iI!Iy_==g;;+MyM8;w|$NJ|`xlnr~&TUv^Hk>fM;4k)%2 zksn3*Fj=2Z*}S&H603s~m^NZd;`HnFD&Fr!o=VtXkuKrPR2fBO2uSqtBCZ7pQ|Wqy zDv>ONQGgtV$5y$o>a$R0Ooc_*RgD(k@ zqwAgzVVQ3?67XU$hJr>V!K9s>+eBZ^|8Y8#5;eZPX_TFur@dH#ruve4z$PqwWN?Oi zKHWfM6{^R$+~hR?j5Z}`t}+aPc*kv^mq~L6Q4Kj5pST>%gbN>SCp`)FC0BA>kp*-& zCloB8qkv^54^)>b$N7Fp{zEkK=f<(sNy`1k2!#l6K(YFn9mR(aO$bFf&POF3WsqcO zsn>@QP3Wm*|5K@~>ghLy{=d>Mr#)TxL|zrUD2U3sn+7^+vQyd9anwGvoj{LceFM_I zZ<5xPjv7Tr%=8!kMhN0@FFP#vK&3qFBqy)#R*zn=O zB2242rHd3%|DFZ#Y@ykqy=PEPkLNY*Kt#|0S(LtxV9g|1(!)desknggK8 z832hPK*48$5t@>T@dwL8U$r`qDX(5bLwLPWuNy#=w+-N&<=9o-!teW73Umwevs%x(gn`ZA!p2cyU%WDm@HZ=^0qK8TyRF;5+u*ew zUUMw$eUs#_id4g1w%?gVQCjcFRTJPs3GmGfJU{-BzSeI0O3{m?+l%B6e@+$Ff-o+` zIt~8!OrC5Z-hc-d2EiahKR5&WR}47Y$;pm=Ubl8xr>w)MIPy)5|K;HN|MPk9$``1f zW?yelg@O^0py|TtuG59E`2@asQHLekgsdNtsSPA}Bmx%^Z^w9f$%KU^m*%e<`H!w# zbcRM(5v>R&hh^10t)0&=AvwP%yqiLimfsCPpB{%wMoNmp>@C}(fu5QY1?oHc^*pIT zNcIScT%FuRL%ReC*0%9x6hG^i6GXp7grJNb4Zj$RU^W(&FQ*Q2{x^^+cF2A}OQHS{ zG!oX07oVx+@ESaTTClyo7qY#3C(Il6r1!Am{VbpC?94No(*C*{KDGGcsGj1>R4;I( zPZ2;;M+&io*kSN~@i8nRZv{Apry&#ZN{``A@2(KO!=fI?(idOVqBxVDqz^^&5}U^s zIBxA7pY~r|JpTnMMe-N1vFyo)Q3f@KdEZ&ASMi_pHQBcTLaYf&n@0cGaVTo&DK1^P z5eiJv5W28>23i&<69G_5Ed0z2H+IXAOBBi2ruEJbnt4Oy6>d-=9V4Z*(WVh;*cw)5 zPd`7zX(d3Q?KB%{lmx5O31WYRK^GQ2>-6bnE8`4ks4_oEiDVm-8d>YtjaQR}@yRnb zj0vwFDm9XiSO&iKiZ2WJY9C}6JRZyAR;9nUIwoun^j!5zY7^zK2`X(uj_t!KfpQ$D?Q?UrXDC_Rx$l~Hb%=m_{_MKhd@A|8rexTZ7O8B7%WztZS7u=iReCc zo=^LJ5mf;7a**h^^@k{e(-bHun|G`+`%t^hSiYcPFnRLB3Uoot?;e;2Cu0@?Z7*fw zRx^6%wpGmXXFsoIRAp8#E-pSfGgWB}sMf|oR24Y&N2Xu%@&OG=!U4b_!RvjKbq_sP zC0Cms3~@BIwSkw0hK7P8BNyILoAckJL`kU^QKznHWYuR*$&on}B=q8-rDrP7)Kho&6-#H>EO8RSQ^)3b;-Gha~ z)G0vg_$PetYWJ{YMQ}><7LHOUY^6~WQx?y~gZIf^b&Y=Maz#FCskOciBemOaUdvIA zp;GI_TnDlSL<#^!=z}Z$`at2m*8bL06n~m2-)1&OwE`jVC#s2D=eT~+7F7zvsc_ak z(5xY;Z0UXw{n}vu69|RRv#x^W)RxqHHjvA_jleq_>!CAWw@6Y_(tC!d{1=RQTe5u4 zK!2m8vDu-u7_S@}ifm$hd9ZS;#P;cQrAa)w;1=4#i&NH<<++mep=p#SL=`fhA3Mqb zgG~-moZ03(&t?-@&sQT^vSOU>GdlpjP1K1^LB;2;8PzXf|7&M_E}JP`&=G zGCb}*oHh-91c;v{Fbo|J?o`V0vJoGx)58h&oL1L|`}2=4#ymoHIKJFl-5Dz;bUof^ z6i(bZ`Xsf+pnJHNy0DQYcnp-rq1WTzE98@!A?sZx|2IwZKmITO12j){;~c@8xJOZ9 zG%nE(pS=mCRq60_=Cq#lOiE2{J=mJ#8BxjK%2N9}jTmpbl}XX%CC#Nmsica_1ijEV zq2Q8$CrHS;K6LLF-^Gvtr=((Jl^|I7gsNQ*%?hgh#AUT`25KSG#{wVLrAln~I|5yG zhmpDrEduXCvE`UL9-S(`&=w;jQSW3;hEiq=R03}P#yKiSP!Z06Pxj-<(ca7I{Z{op z0&CsFa)XOPo^~8(i&jktAxAJec^ zywhVayc57(5D-O8V3}~sR~dZ2`YX@v$RS-ZUH-R1{7Gz@t+erDKkq01Rhs_;1<0?x z?m};8rE!8ai8K2fQzBeu&A}8s1%{Gj#bhEUm;;8-pSM8gWXmmq$XiY#!}?qansu^; z9!2eBB7Pr1L=e^>Uv#B;FJGaeWv|p{*o1bm=4zT#D)@pMR^O`Y@U40IiPz-5sw+ty z5K>kSTOKXzRn>pP#!g^n+;nZJC=mlisn3kYdPS4+sD(DS2{x@WlB^$uh;JZbJaK#` ze!ek_FBh2@W|XMd`T*+1F>6VWqewAoYU+X)ziXL2RLXaFz-VaH9WY|kJ*)EFK}IGZ z7o){4pt+;N!Sh#l{|^h^qTHGp@$jqUo0_&|xUT0*KK$!wp326SHbkpH*R{frFj-Qh z%%3RQIQ<;#cQT08wUNuPK24&XFaM$zO~p7Oo*nOcHcOD{GrM$Eg6 z(%ent<$sx$^Pes$?05VRyk-xvH-V%M(yDMESV$*$^jr)!Vfqa+m@AGjLvS^U-mIOI zILu+}3J0$|;##7X44PV`G8fzePfrW6m}z~nD*HceHcRs3 zKQ``jR}d!?vYe>aqEX72_QhyOV!R#F@cz0$kjQZyhjjv6W(Jee?vJ@>5!%Lyr2JY* zFHUv_-rX&`E?47kwALQY-U?N^=1yv~a17QDw01J`{U!F-zzm9=ot~VqEe&oRMKXF& zFlv>PL#Y!ENNR>}`N#-2+DvE{=3CU8Ys5)Q`L-3=l$VOEF>=Rgu4WiSnlY5TmpwPz zV4~f4{S>`jY5x&`VX`XSO^TP|xc%W7VDAY5G9@f@W@+jW#qIR?zy|bg4>!7~o6l}V z#r-GZ`}`G@$(>Rh=BRX)`CSx0sgE5&NPM+{FUzTw$B{-~h0QJMJ2MykMTQ}EJ+KX- z4?;5^DiFR4;~?~v`sW0++7uwd>+@pQuLqHdlJoG4sls)vu^i(v>H6}TiNsWOP8zom zp1e?sFQ0DF@3ye<-TU8l_^u+pNeA}WTnrT364=OAy%&j>(c?P8rv-#k|ns&T= zl_FCmXV9$?^-H+pll?D%O(BSk4$79cvU2Af0wcgZzhh1nd5yePGepWwP~%*(G58(- zyyt96$#^lATz+Zm8Z65Uct3Z1uvH)95MY8@vAk?ftyAs#!C8U}OC-KbTtH;0Kily8 zo6Af)!s2dq)@Y^oU(B`;h04G z#b&)ZYinyGbxR&dL4O6FP=&c%_x^b&nw&0=BGaG29$+v{&}h=JuE&*6mcXUrIw`5% zp`Tkryb;jhLZ=sg3G;!}H#-)cs+$?At3Yf$Smv5t^J|XirqKEhYRuyx1!;!R2oQ;q zQc@_19}|-6aV@4Z@4k$ePS}m+9Y~u$h3wD}rK{1WGklWjxHc{$G-X_$UN0bEtbGSJ zpk9LC z4*67bcCx0krPk`m zuD`7xf{u*RrOuCNM{A}~euE=|How&d5+~(h+jE-xsFhM|?CdHm%z4eX0)_7%?XDn> z%v;9&N#Y@Q#kYBn^hjser?*=f$$z% z5I-%eY2QAVFM2dPu;g5;7Aa1nYv#p_$~w(l19dHLZO#u>>(Tu380{cHU^s(S0-+CW z_Sc`)4B_UnLwioyO7RH#9pA?AW5!?6>{bj=Xyc4^jGD<;{JA-~DH3!Zu&%Zlm}yCF ztD`z#$CETlEQ`kuS93v)mmxnpJBT~8#uLQc7YSiU@`$wJAb1BNv{tXLwP>*TYN+Ruo3KqP!*hZ$pa}8kT+N3A(c_8~D zn$!J{c7nFJLT59K9zg(uI7!Wj7+*=F(Nx))l7qE+bu1b1q_&is*6wJTZ9rbQ&OYJV>tvXr zoV_Tt-9N!n+zShgg&g0ZE0~THXSc=jJl@8L@LAe|SL0*$sPWvOeor@=Ul5}m92~Zw z@yJdC1M=>8LDnM}nwBPI5|z&#s) z{jXtJpTiyX#$E0Q1OxspjDbJyrY*EJaAW-W6iez8!`5gEYBB z0|*#$;nvYu@nsr%-&;IDs^)yToAsI3O+DZaCuupFEI#G(SjB+4u)RPS!ysav%|4)8 zZnB#`t391O&}v+U>c~qg-DelYR$7ko&Uxb^Fkij8ieilwwIsO#iU8wcc=92NoL2|Z zEroMgoor*V)h_zY=H#z;!Uj1OHxs)wFW;JK3}nn%3R#R0;TZ5x(XgDR z=km|PwYJDdaBJs|kASY38O+!3zQrCUDm)7g@*n`oL|a(?&t?vQhin2`KCwAA&lz^U zGJuC1Yet4f;#FD71Dt^WPVxSmoBW3Qx)iNl$uo`78;5hDc=y?G0a3g&sZO@xfL1-m zVL~-fsfI?BqJr2@1v)&h;(SI6r6lSqw$O;=d0D*H-B#4`3@ge^gCImAUbn|g72j!P zysF~YRg#*>N_V#`$`rkOy85D?NMV+lTTMgwlej%Th~u$gY%bj5O`JouUG zj=M8?{EfY74xM>m|Jp6v^MmmNFMdtW*$;GhSx@8NAO?*dsPg3VC@0b(SK))!i1s`r zmtE4b8#Lfn^aZpTqT>6=94nB`n#{Xfe2?w9T#G z;P*|qzyDaYt!-=oqe!I4 z#xVf#ZYM{>Sul(#n%3mJ{_Fee3n_weSMECTk2_8I^Y=AAr-0mxSd|lk)Wn+wenI+% z`-MLx#{#F*5Ly*PgqZxAUj&L1O}0Y26=#q-t#Vexol9}b9H@$Z(C*7ORN^HC*K#jNwN-9ep<6xq( zcPbrQ9hLx2R3IU%1aJh4A2bs1l)sO{t(gIPk#ryB)3r0q(igwq;ArhaS5QM_mR5x_ zA-kn{UEuYNm>{1c1D0j|O(>3oV`Eow+9%t=F5Im4QSMkRfRglLm6b8-IB+zCxd=#0 z1}M{Tf;#j)fcUY&VBWKa%)x56myuldrt;{?7H#%u?fyCm^;~%y8X2mMcW)r#@Lkt+ zfpob4gNsAAGrlv{eKREPJ+H6plE%d5kc~~GevWv~X%g$Xr}~4yg?MM` zlO&WaNYflxqfpK%N_0%~89up##S(w;9*fKXTuIFnWfX-^b3JgQb)ZLxV*1yMuB&Of z?fv$n(AGNVZbCDh++K`Yr1OKD5|Of?fMn}uEr0t1?k(Y=abLrQ#^yW*cjx8&M!%Pk z0?I*{(yBeqD*Zz{TK5yKID$J9aqCT0PyU8qi92m%!(^%?REORKa@#c$UQMJqJY3w& z!Ts!Lq7{U0!}d6mfbHsC$Xq@Q2~0b8Rz!K;>b@pxUP=OJS!Ge+?}UTG~FR6MXWbH@p_t%53M7fLuzb zmFX47AD*6_rQGSbgw`&tBfRmIq;D=Fj9x=xqS|c+jA7RD{`AC>5aTel>YgM&%I ztM%S>?(xJ`y&V)4s@bS-_E&MwrGwB2UUy-%gI@6q%>alU&(g|J-wAIHQZYeW|CY$G zu;;=YO6a@aK10$A_ak`Z&4e9sm%56SjqD&}-Wl>mf}U2$2PUj1h|LSThEVXpV;>=$1b*vw-ws)9+ZS#Bo|p#tGbi{z`E zw`Row+GXwggyVS5Zjf4y=lV~`cNYudD;pXaQN@&2mhPS%bb5pV$V%+Qsz0D#iQs)~ zHJB$*Th5=(!d4%npF0kXdh|V&P5@jIH6$?GT($1i4 zXVLN6{E+5Edfx&DYryno>ElhqXe*so9^G(mk2z|@1;H(Bu2iUN0#wDlif9CL;b33o z{9!%#uOkqxHzri}MiDb8I+_+LGqF&bcR8`e^@D-DhiL`|2CBc?BItZLhZ?87Fz}OX z=Q>1$f6!!URJ(G@3HxemUv-=YAe&IpH|Ud-9kdS2KjE<1+(K$x7*N$3WikL$X1P7) zCk$lK+Cxg-SsaILzSV}%nGBTTW+KUnSWek2A)i!3eFK1YB-p?9G0?vA9zGbSuQB35 z8C~ci(a*VhLUG~3dHL)0D@=alyN062U|9?wv8(|0&Lnud`J|1l+ zU%Ses8Mrn<&cEJ_Zy?~+4$=q&m@LJg#ZAFXYOW=eTM@@&YwlD~HP*9_rY0h@Cm`1x z7+im}LHcEK6pKux2?UZX#rsmVbCa(YW$z?2I(UW;dpL@Om`n9qP1V@zt5}O z2;Z3`b19-{q6$RRTexvlErNl-TC@T@Fa!YaKK0Pl3a}W`bkN11O>=|6R@z#T;~)53 z_TiaVgI{K=7u{hBLGNt|XIv|=n|xk!KL9Pb>o_rxH~21(3%TVxf~*6Gbx9!K{>7s^ zO#d39G9shRK(e;tZKH zm7LGdWFrE-U!fz7aoR&*;$|7*nM+qM%D|y004x@3QO5Kwf-X{-IiUFu=PGGgc+*HE z@Gd<#3wFL^Q%;KOg1QjUHL6V9r_&lnZ&8L38V8_OWfeqzGy5L2noECO%bR6H3&4!J z5|7{3_Z>d`BUVP^A|RX+YKE#0+O6=ou^O$)GdrRFnAsW73Dl=QwmkuhqVK9IPKxl# z!2;93bn5qWb+U_SsBbR_+6JC{jEbTO*D|G({uL_Au~??=2*c#(-hxz zmJI-XdV2c3$QW6D_$%}ts3WO}*ewg?v9xq?*2Jp)niI5Q%=P7SmjKUxQ(IOjEIPf@ zZKk%S52$y$@t*Repe}%KaD||nRU?1~nU|7vfDxPsXIcziceYYG_A~+YL z+{46&&+qmvhj9dPMvIG!Z+usOC_RWNiYjM(ci}oNVR|_CERVUitpc zr~7$Z#C=HEManTiL^gr>+qhlFB;a<)fn<^ni)4aCu<%$0MhB81tUh&ZRe*Aj8)-!vx$v? zXDe7g7w5Y9;SQ&bki*(IJx$g~jfV#l=gM8+S)vre0T2(``?0@!h2Fi*^%+=KR?UwxN0!L@&@$lP@Q-Qk%f}grM$OQMpfhjG zQ60-+EofPD;((ABpZ)^jM-!P=1h2eslF?WOu2Z(?ab_SKr_-NoE|Q1G`R*q!W#Ac0 zWSnM74Zv|@_-XX}A^8cPceUFQrM*I=S#bGFlRM`ELTn^{+EPK$^5a8rl)2n(3vh!1 znOUX@G$z6whJZ~=9K;n0cwwKASqLySY2Mu0(k5R(TRXNAeuIv%osCgSccAhTM#@8$ zak?JN)*R0;W^=|u{xR-rxkuHIB*yF~j!QV^vXm{tSOjUU_044r@}XIi#4Z#AO?<8E zw;z5}_qTIL`qCcc;*V(wlSRgH*|(st0VtCMMKJ9JYu43x=gr+pcmo>=saWkh1k)80 zCpjB5^S2|poeQ$mi&{!^?{RiH%Q|j|H5lQ~M%~jg>AQR$1r75*ao+oOY3f|#+o;2- zA9!#z0Jwx!P%=Umh4Zdk3z1%JCktNys7^`vb0jH`dopu<0-W`NY!<`hfDw#;D=1gr zyvwax*eT|46{-4Q>@yhzJ?w!dGPmqx zVCHyXgxp><6`Ys?QEV2bZAAg#?|S~8q4b*m;?UPrz_66*v*fc;54D>M3C?=~_pq+k z2^+glH(?xL87_ube`}pNZ8n8tPRQ%;^Nk%6QW01rkUDo$MZaN zWMoh5QqhRS6YpCgW{mp{-Zl4*0PakWZz!{`j35kdjZtF0-S67V-4oxq?(R4aLeGYy zk<=*=yw<#;`ac}*_F{;bug!D-%9U-QAc!yZo|s*&ms;hXQRx_%dQoX;Qltb^+ba@(vz+@0(bXE1f5jU z_8I`GFlfK~6x%#C1k=7oKlChjU#q9b*@xf$LCJ)B1#2#tSa8O81n0`~DE!N_vMhYs z2C~%1pws^*(W2gnZ&#%%-5ok1en-|G;lVQihQ!?mFsfn(26hF*g~n|$IWq$}!w?!i zt3}89h4r8n_Urh)v7yQMcXzR4@L3jakAb}h8QfuWdhEQkBlnJmrL(Qg&)2HvGf-s0 z*pJU86EO3h-23e{OYy8nOdpxzWKi#eTL7g{Z~*~N4ptlp&8tVg4vC)_zH=(pf%c1Nw<$gr3T_?uvCvE* zbP@o`xlz_gz2aszrv{NQe{|Z$>DfVhf zA(eBP`It6C5YoN#* zoAGrPb!Q-L64YO$pLIS2>wq&fb@(WcuVal}O@X4=yK3JowyZ%XR`q<>^(%Umc<_hl zF8a1##=vVrSdFIpQyxlLNh4+|;4CX;47q_B6`iz{Ycb|i2|9w!Vjs1~b$oq#3JPHs z(`R5y^W|*4pNona`I6$c-=<%4&(Uw79cAhk5%W)M_YXDy&y_%9AnZSnYJ8eB%KNsJ z?qd4m-mry$C-2*QcbNpY5~MgLW4?hW_d)sKB3O>c{e?}w=e{5D#iK94W7TvljNtRA zPJ23T;evF{fm-RP(Wc<8b>~xbbo9f=FCGp!En1?VYuMqxmxC%u0iKUy`tfb(`%OCC z*!P8q+NZx~LdKQXFC(m1Zow_MHF%Vf6bv0?KG2R|kkngEV)ZXIC%Sq&W?AJgf)I+g zZV<2yATU!Ht^d9jbm;cVxVtXy?AU0bJMkT~OON}g;4Uo)dRjrPuY7#DS)AL`1AyEo zlH*@j1ZpuO${`?0sgP?4+hrMnNeEzRR$+T!+N`s)b1<+Xh79u)H8oJHymYz2Ydh-) zjHUSY8KF6aew+83Ghlwgk&7!jTNB2`*@HD`jB4sJDN#CEX z>u1{%V%f`XMZevng$c0nJ4&OJJ93Gn;&{hGN*fGLg1@ur7wl^*${GI4fb@0$8ZYtB z%S`m@h3n0P&!w>W4J?B#1x9G5ffcK`1A^qQt1w$JGW-TU%tLqOSn_}6<5pq6MA;Zf zviJN!OHcWd9AMVOHZ7JBWJ(8^{589Acu9~k1-6Xat;H@&~XtG1jx)WY#Y?Ghk{$b_T+vO=0MxU zhYXed(zpq5*e?pLWC9Ty_xy=PYjM+OvCdrv_67sFeiFCsAe^%Dd4jWmdA(fZ+IG|@ z>EdwMOut7siVxbE${}ya~f+#9a1PExc?$#?3^U>D72Y zxOzVHzW29vvDOQt2b!&E<;FnRoUEj~DL+?{jv;8vUice9%E&rpKe=&_8X@KCegw1DM`6C)ozc4Kb@u#HgSZpa(y zUw|(X_Q-LQhr|%{Ub$Y2@xG1zn{rTDfhCLyxoq`e1ts2DZ%-$o?-WcFL13yO%*|n# z9m>~#r?Cjz33^ABmE8Kgq~4!YAQO`5T-sp2OKLkC z#c#*+>E8m^f3@U^38KW~MVWalwyuHAhG0z{SC$8A82KDc&Z%lC4t`_HHyLWthc2~0?lhhd&7E?mjRdDtSUlQdezN(pMzGyLlPCu7yP4F&?UvOGJX$fS$QHxG~LA3xS$e)Pz#*oTwvYFd*f zSxc1r4c|Uai1)EDb*cM+)?D1n0~&l%5p7qZ_ftOak?FRRydA1}8xH%pQzDoTK6^dy zwioZ2RWG+oKi&+lVHvOflT>N>fSV5W^Sh>EIBH-yURlNsqXrTLoruKOs-Q;257D!& zn)u5woO+g!NClVof7O@&=Pl6vn`ot(@3Q#HZaHck>Y9LIgB3+o#qD={!0aV763NtA zlijFhiJBiMqGqsMUL7uygpnAFDeqG&3F|8%jmMfl9@?=a0AoCb*#j5UaCdpg(xuX6;9FGc%lz zr6XNeBcX1CmhXBqC7w@4IUAmVwdZ3zG&+Q2FEX-|Tmy$X(OMFa8{!}d_#H8Ua8q_Q zGI-N{l*)}e8(V%^lpgrNKu;b ze8o{X!t9vRhv$6ghWZZ3WyT}DKdjJHRly$zwlyE+9YAdYKP%gzO|S`AAM-XW$m!j~ zc#)ma?6M#(;=J^tUck86kko`IB7ZQAPDGf2!M_aeQ^7K}+yMw~gPDWwWq{&C37At+R3gbq=;=*20h}14TDsU zU#3HzuYh;4H|Pi1=@@!D6y1nVBxthwR9aj-2K##?DA=? zo;*`9NrV;&N4VF9kzxSxQ)q0w3+cJ~kW!dIv-BRK+9N*F8?94nr28*XjnkZfJ|W9{ zMBL6RfAX)mWIAn@cAD{Ckt}iqI}+g(3JMAY30TKFF)-rG;#l&P2rpLk+qHqX{OQ;kf!4vX!_L)=Bi0n5nnFZ zLYDfmN3(z;H8!&VMeF8Ru?D2#ztd7leL{=X(jJSgwBncm<@s@l{5se)bR3eK)ASB< zZ+XrhnA|!sU#fSK>uh$O1}Y0o2MlwaaqRuyc2`DP!8e}lda&8xO8)jY;_1Q~95$9j z00oeh2|!Ebp?SJVLHF*zoG1#4V#W4L%6MwGlb1X8!PB1%9;}AMS<~$54Sy?+y&8~J z$}#t#|DscnR z?5xWpw-YO{bAw`MR@rXIi8w**=DWT(jm~>Js_oFNa{p63YnlqvCH?@0y?n;6g1%MO z@exAKDk!HLP9k3D>c6xXYCYZgjLwRXjA|v8F&-km`7DMlx5OnSX=ks!3w`B})`8Un zN#PR=854(^gY?}#(LLnwQYJczl&j^Qz>uN81cmU@6(Y`tZ$+AsA6+M669f57@Pp%T*$pWI@;n%3841Wk;HFMw|7Ge!SHkvH zQOex2dn-;h%Y#h%6#@}{#vPjauBE^JD@y(kjDAglJnM*64LuxuwsC<&o0ouyZ9t$P z*fXrXC}@kL*gnMVyqQF%%i(ca$w{T7t{fx*<+$IWnBo+CWI|jy;j`}dPS~G}5(XYG z>)XJrwgQ_OiNvu#jv1P%Zx3eX{XC%OuLtT1vTk*ZfiLPsrosOrLKt0XZcQld?=_JH zHi2u)uS5mkmJZtbv1o`K@#L>idKF_OAzcWyM=FW(uyRXwcXiC{j-Z1>vBC4_A~TI} zuq(9Ztv2qp;ezWi7#yF%^>r4M3RBT#4HmK=|Mz03|2+5qKvT`a_xc2F-JY4!q9j$1 zcC@#D0*3%72bVBMObhoVxCuE-T`sv-Q021+Cw zoF@6SJz{2_Mr`ge3wM$d1aSG^F{Q6t!SvJu>nV|`c9jOm%vi)m@p375$QSISmtyMgyt$&bZ z?Su2Al?$lY0k3G|50I`gFMREf(Cj4!QZY_W{sC>4#lmn=CNLE&XV3KGl)7>lJ8)RN zgpI3#qdHiz@}Mnme+lX^c1{HY^t!+khQLG;!rY1p!M~<(i+_E4?kQF!^61ec`a+s& zhT9?CTQ?^o6o2P4xN_PrDsEr@aDNU8i++`loCnOp^%XfLP8>Y zW@l%Y>{;34kfcJm$|gJHSe3n{?7cVH7T@WGF!8t(7$;mlv{~OzR*}|(*+Hd2U z9zsVp78lf)g}M+{3@j$dVX*Fm_Ga1~ATHua*rRHr{$R`K&*oRl9^Lv#TCSx;Ox^eo zGG@F-wN5mwl%AXGOpCyXSXt%`KYRLi?Hl+it%I)xBsB=bF=}+zTz4HN3!1SJ7^vkg z=z`~FqrarYgO6Pc-hENH7pe$XNF&RbP-XC{{`U7gdQjpFXD?`qF_nzWJ!LzOBsls| zW@4dqN^^w82%wK|E{LF%lSk62@{u$#P0yVUG6`$6CJlX$0S?4*XeRpBGjrSn8}o4} zE_<^}+Tl=fl-6(Q9&Cq9%_|i+EYIZ*1w)1UPGhuy8~5jsXuxHRh#HqpCq`hRr1YZ= z*e8RQ3}Cl5j+{cs$-lXwun#xRMQxwV1IEt=kkL3**TN}RrtjFTUfb)BxtZDzLUwGq zHD*F>bJj#cC0RLFy8^|Z{{yrt4&`Ar;T6E$Y%A*K4($Vm{#@78UCRQw_@n$F?`G-k zP@6)?1u^VpKyI(;(?@ywpq)$6L{E*2DvEd22z@NGT|o#@8eD}v%N*8q<&!a3*4l#i zXsBne-0DfJ?q@wL`HA@G2HE{<1tlj&LW?j5;e3Bj-sX)fEqn2WXJ#iqGF)5uR;6mc zxPnn&R$evbfwZ)|YPuGKlNEIjpfI(@zz8(zy%qqNfBGjhd!hJKc_;~K=VW1dMvJZH zMvD7&R=0b7JkpA(%sCNcXGerAw|hH&j(#pwOt-BzNh-X9?;eejff z3vIe={SEXEsQ;I9z+~eVCM82eedF0?4l`cmuRTM~Mprt6qVlT&6~BgjuCSs|j)GKi zt#tLwL`kl07Wc=p!y`cAh@7myDse6Pk18nY>EPnR11Q`Y08%4v)JH!=Fw}E`gjMG( zvaw}=yNGU&5A~{Qui%-qGjWSpSHY3j-hCbgRBKIc`y zUc(t&1AyeWKsm$opioD8MU+x(2|!Pv=YC%s*75ApJa8A`ObsvPIk9m**6|ZdnOK_(ihu|QV3zm~DbrSnV-u{Aj{AqBO-+G_R1EZ?CwGY@w+moS|#o;2dSwpGj* zFukg22cWN!5Hc0-W2l+T`l+0M6ym(ZX;`6Yxg0+|J^dQ6FyP?jFjjYjBw%Pt7`q1t z+p=2S%p_QLhr#k*Q%|3VhNB4w7(6=Z2aYHP4Qk0@9@D4R$ozxPl>5!oXu#(dJRlw_ zLF;*e{&p>tx{#UEmABy-ip1GtoW-|>Ev(j9TL>;@9H9UarwT}z0%`iIDaBox;DJ6N z@__FoxY=6g`VWv|GJ1Z(-|+JM>&GnV3hq(Sam^o5F$x|k9AWRKGu-x4Xg1BEy;BNZ z_t||hMhvM+@X8tA_Nuudkj!pZA4@J3IK%9zV4RK@U{lgv?3}wWpn}mI$gzl+te*J5 z>yri5a~`|d%L1F92;Krk?M%uh7x86i76f3@oI67mOm5n?$1nRbE?hUw^JP1ooV35* zZoEpjBi_djd|Qy0z4s;ULn))aJRJQs{MNqC=3cyAc~;D{KMkDA<;wD!i>}^9j17WG z{sT|~_z2N3rKMP1N!`ul&`Hod3>?~>;Ccic$5NRp{Uorge(zhy@Mc39CqAAQwze;` zareZPS>-7menv*_?&YnWo;QN4_QVIH9ml^lMzn=d^umN2Q*qc4b5-Zlb3Qs?q$u$yHM^#y@b@% zD?RzvN#~CrdY*Fal5;6K)74KlJ&A(QfvZJiWs81#Hl4NDJ+0) z6C>&+B1WipeR3>?nvynRKuG^+ak$t_5|ZDv{j!nJy;lMJ7xI=W$;9jvPt+DGVYfj0 znfLN(Os19oo~b&~Vm2RQ=B45bk<(W95K(CBWKBZ5mQJMY80_NT+;&GP0b+2tr^qpr zCY_ZbBW+a2PQVGW+xlbGuT)W}!W%$j>Qg_xkSn4c$O9tETR>siyRQ8uivRv39J~Ar z1+w*=mR{P8(eJDq#)%hC{JebMLinDAgEd`)lzRz-Br#U*gkzzWvrCHxsPI9V<9Xik ztF$hnCu0>BFc}<17gdEVsGf|mx^4NaU~NR&55B?>4lD9s^s)KsB({Xe; zdyC)g9B`7MWyR{h6)D5(Gqv)ZKV+sH4UD53Soa19CEbpo7j%)GoxHE!>OG32w;{}C zk=pJX+NZxJ_Lbs^f-n0)o@-6cSi zXqtJ zWTAhSa-h+*X+7)7ATY z(^?ApaG6NbO%ort=e$Y{C#Bx9!NDv<-3DKPt*S?gBH)Pwg1L?xik2}h#gkxc5 z-sp}gf7%%>A|zhTKS+&afV;`%K$}N+_I&Cy)NUo2zXXfKx+xZ7NP=-p7y=#_ z1V|r;&V6IK>t7mist=NS|D=VVWX5F^dTv!i$CFognNP~u5~=Kx(8cEGbX1mKDrU4@ z%J8nZKky1T*sJ&Z%s5tFBmr7Q6F3m$Tclm31v}yM;t4+e$~M4AkG^>`1qtFI?%ha6 zsO~6VrRX`#qH(95v*k4-w=OIb+T0iHe~Fm?%gf7AkcuD4ci>0$S%C-rp&iFKD)J5o zNXT5AJyf9Rz6kOCTZ}w|snIs+ib$aIR5SH7gcEGXYAnyi=DYEk-GAJ;tJvaAs7C>XmH-hATW<3zAJ2q0?QJ10;T4dMsDY{h(L38uDAPFagYrup zrGL1)>ag%FcSl+rY3S)COgmH02e7tnOolQd%7h_X_~7UsSN{W#$=(k>;;T4nsduOu z7wsd=`>pyr8CsUO1v`^aM8_9~eXdT^Cwj3d|T|Qg>0QR2&;m<@E@0*y((XEbq$@FXWHKW6nybnE?3E zye7=$MnG5?1BeOn-@)}efpEsCH^m9-6G=u(*v)oR!y)0^rBo)K+%jK>rTZZWvZll0q?A6dmVvW5^=&4ef8J>$GGLx=$*L>`d2Yg6H+4GyC8OYunrQjp%VAc*HoCn4b%5 z2ZK%9Ahf}VV?yzi%|d(bKIhBOkKdm(gq6~leD|By4+|y7s-)*BOv^-LQGFti%Mf}5 zTGY03hJ-MkA}nuyFYI%2sGfi2oJ&rY5{BdsvJAym_C z;|JcbZ#(c8#$+g(FgnMe*m&1p^>xZ7M2CC=T-|v?mq^y)(j?pS6OE;BVEsH+YK0BX z8Y$mygdtCFm*+yxULi#C?aS*&4TT&Oe102SR>5d^oAi7fA3t(TAh~(?yRggBnY6r& zE0Z`4br+Sl9iL7ltT3Qc8`#uUwU?tyZKg5BT`|C8habFOh*tTMc$4VeSN@(>0L8rp z)kE>{AYfVn@NIS1MQ@b54CnEo^S*X0!n>2jZNE=Elldz0_S1=+=;Rm16m zU+5?$wt+vQ4}H862QEEDmd;yUpXWMpxLt&HZw8M*CFUO_%u+F6L57t{RrF5Gn8ojfHMBZV6{UHFr<#%RZIxbp?y{qqroma$(16%ObM_F6Ii^`P z*V1tKr%5Q^v2d0tNKQ_>75|4U3I~^pbZ8OXWE32L(m*of%Y45?{x$#gVJ^<#z3;?l6aH z<$$-jbn|9k$c1)T=_3-gev_h+X0y$o@P2B%8vZn&wU=P=-U8u+LSco8PERTjXIvHg&ApjdYKm50#8?L_RPj`m znM|-^0#=gp+dwejh4u?95Be8aU0Kd861zLi+2>mx~)8=^l1!Qk0IhMQ^0bw>v-k zW0QXaFmb!?=53r}{rrUA4QL~n+-+U8`tJ1A1OCf07`=>Z(04&0aY+gz(*P<_m32t1 zUAc(s4Ly4`@{_RkT|2p6$yxXDS+k^;%Fh7y~V>m$5c_#20L_$y37>V)r8Aa9L=(h1 zE@|OX;+KbB(MlRA={s|I+BQD!BM7vRsQEq>u$%Aao`x=(ZvbPzk+aF2(d%$(@q%F4 zNdV<_QM>BwteaZUmp_1A&hs3MI<;HrbX)|0imQr3ue~fKSYBys;vs1Y=ah!TmeQuO zRtZ`-7u4#MfR98*a**?8rV-O`nClGRV5jvPX4R#|09XvXcZP|6dboW!k#{CM1DD-kiSiy zWAv*00f@pC8F(n;&o*&If#&YxzB* zGLlXDhTM@U^ol?Z*xrK!xMTfcvx zi~pMHmS+mPAvY{?!hoJ-cs@(-@F(fEW`{j$s-&F(nPa4e7 zv@_xx!gjeK9XzigMzY%?I1O{QGN+>%;!TS2hmD$_PV^cMaGQb$-9q&!NTRO*qqSA> z*)<81TwMnBT%Pp+F&lnptP3ahRSLp)ttg+ZsIu zxZF<57}oV~dZr8y>d_<+m*8xlH;7`JPGcNR@L=HA@ghQCun6YYX>m z+y($IGnN8}6KkVSwugX}qq?Uf8BET@X*aNIc^uFo0|xcV#d5??9iP{yHxCXSI&^UG zyfo&{cbW3p0er1M+meHW-0H{|7u`weR0Hjw5{FLJXe4(?rDeIT-|V&Py?zirhobLw z>q$(q)wJl+x-TuAX)C{Gt(KcD;gmBg&cu@#7Hsal!GyRJD*WQ&lhga9T_=yQU;R86 zQ@>b1K@b^+-qsn4n6&5c+HjeA&`55YFbdFLNGiVP2hAhM1(^Z7Cyhg~tq`<_%{XB^ z@j>7p8cZdWfBqaXD0#CWJ~dSa(}fYDTn&p34EYq(X+jk}qgK6!2wD;Mm%R z230nIcd@b^nswdYSjYeZUCnybd{;&^_{yELC5>Ia!Q)VvTm@NBXWLuQGdG(R4A8P^ zDJ&3Q3?DFKy(fw%bA23mf*adIxw~P!r3)9)rPBnwi-IWx+km$-g??OV{EeREW!qL& z!09gH_w0Oslk(uyB9AB;dJz+{96Lqc{WUeUv<((n66i%`e#+r^z`6+jgcNjavUB@@ zAI(SUe1IXO!zwSr!ounee44!ue*F}bu8o(9F#KM1Hv$O%KU5$&vppzXH-!NH)|+YM z56Ld`9ee+^4I|AP1@;T+peQ)F&bbJURT4r&L$7b}8{^ZXi`SqCIs@c{B9J^7?B+P~C_RCH8Pt z9md3bVH`lM$yr(L>qT*K=(<&RZ%@4xAi)-H z>&5wr7*rf_>XKpf>Nq9VZrG|nay3K+!!pegOyKIWu4B$M1{yC(ks^w#OH>z!s(BxS zicSYCx5ZG&05Oj}304mO?fZK+D6soX+}u6u?s~efKbDka^PjUH`EsJK)H6*2jn+lK zv29pd%gClfCzan3GC-SQqtQpJx^O$Y3Ol=wHR>KAGPWEnEZaW73oc&cj2I1B>*ZP4 zByGqyLVKV)5B#S9zfs3(CctAe^|e26^1m+8?{7So$IJ4H$(P5w=6Lk9aSjIJVgr-M zwc~2fRasSqhN1!<<+X>;KXb#|>{y-0UxH#q0+^QW6l)DgC#3^}En{8M2)?h(lNidR zl={fqZ4d8I(oN7Sb8|R|{@v_;oBNoxqd4KYQOtZaj|Golfv~**2hiA$X>iUh0}Unt zh5o@W{qYfZyDNgtMHj62 zr6s-!yGJ!ZsCqn$ztryUpVe1AM{n{CJDylLwWGmr+w{L&_DU2P=vO4@^ zV$S(Moezsd<}T27!lCBhRk;9pY<`#^>|@8A{v1pobmW*$U`Xs;1-eBJ9{?;im%TrQ zdGfzC1%G*$%DB-PW`^ZO85s3+@B*DJX2Da}!UQ^9+wnB;O)=R=fv}JU6rE{M;oPV_ zJv=<@1nD;ezDIwW?#+xcun2)57`an(w{zv=$7{B;-3oBdDHTk30$1@shV$sV-wS(kL+LI?wj?oj7lc!3v~3x1(9Fyf z@b5F-AL7-v3+ykinw4RX$RgtTU{3CQg-E9Z62Gk@uBoRcnxZqH)68ckWXtdC zqZbR>w{<{yem3YHcyWzx&6`3-+Df1fu5}OjhU3u*Z)NtpNcAB#fGC z0_f2eeQBCp7!P3vZmf7N@5SF64M7XIv1~C1-$Phw|FKT0wmHER_wL>6g{B4tkd|#t z&!dDvzQKwG38oH+FN?2rLL1pQ*jq#2?)&?l5q1Oq0Ya+Lhr+7WE|B#un2Ph!NBRPy z#8Q2Db=z-q(_szvM+u#l$oC=rb8!FqD#j1&CeNief`{BY&sH}zb%7J9tg6~Ma_`%= z$;qSS!AwhINEyJHvLS&+Oh9txOdKFe-T{%DdEV#LpWoN(Cn(ZUA1N~7r_M!ZPC-Z* z`}XanDrVk`f4`ZUFT?Qo>cxRMbdWAX)k74LMQq>o;l4yMv<5Ah{aB~bPjUe>(UT%& zxQF(t+;*R*jp$2PWx8Jb0)cWn#HPV^6?@+o@*ymXTV*IYOQc}mz%Yycym43P`z@F# z1O>%>o~Oi5j3DV*D&s*aLVR%ABCs%x6d?yZIKm>~N1hCTT)9rJUT(}2>;6to!dTXz z=&40;9?i-gA1--sKJn*TXg=x=r3umT@p0SvcdT$9{kOX@gs&Oss~OMj|L5)g@D;~p zI6;Ljl2Sc>oO`rLyTOdLAw3x$JEKiF`S3p@FPA_n+Cm zQHq5?AbN`&ts{lVh_2c9E9-XiUcau2iDlv${?%_|f*R1G&94~HcA8FrZmy94xal4# znZo?o4P6XEBzTQFESREG-ZKw+c4_qDZ(ux$Kb|U!&3$A<4}#0j2C7lQ6RI&TaCjAr zy_U9t?%nzQqYUO07cQhhB$=Nzj{Or`w|3$*M~3`!GaRa~D(>K7PJ@V$l>$NsE%5>< zjamRDU!Uop!nh5_7Kc-K#$jDx)`lSg0?a$8DJ%&^7~(ym`Ti@-cG#xJ8`9jkG<0`5 zNiJouz9<10D}tCyP)ng#<=Ib{kBq%I(|DU*A6Q z@UX3+4S6RY&5w(NWBi^EO!SW)^*{f6C;vFc5y|u8GcX1p2b5yPLGb{b_TaT5$m@XH zqYODb^Psx;|2U?x`1QdIe?OU<9*2ai-MYm(|D4``^U49UT1lX%$dC5+Pye@g92V04 zd!N+9KmF*B25T`6?wwVy74h9B{+m0e`bq%K=iWUM^&`J_xftBL&X>1Lf4lnr+jEss zLP)#wndRfLU%T7~?!EYhq}pGW(4b{~H(J5zk)j^^!o>BA6Z%%I0cO``2e7NA zKRjPh%kM=Gx#mIdBQh5kOLC__+&q4LQgz-WOVGV@ zf2pb0HYbygZ`HcO{-O1K%YrDa?9Z;$dC^f04n@KP9HVD{<=Ds~!2B?Cy!SPg-LKw= zbFB)_T_x{0)eRTHx9`c-ecq{`IL1GoX&3RBaUp90X}-+~9}U~7tb7f(vYyX#Z`NN64nBA5 z{MdviV-;z;KqH_gaBWQIbpqM{8o-|q`L0@w#nA@5jp<_fQxT}XVJXspxN}6$8vDZ1 z39hZr1fIBsPCbz-QHeGRP&}(qOoCvn?@iKn{7G-dm+@21^uBnMn|0kdSAXK>6z({3%PVKLQL!<3 z#I%rNU^H+yo~-^2if%eF!@J+3cUk?}It8a$F7Z9Tn6D3P{byq9Mz^PDQnnf12ya=A z-S`E&FF1a1?qNnNlZkaXFq!)LpUv3$-&6u(1BNpaTbV=jY5gCT-P z*M7z2L9ILoTMy^17JD$q6~}iUa~Ez$ML1tbdM(Zub3#(VFJ!&yAghc}7q`&u?W`MR~BUTRfI=lTawZ0Da!cTu?6R8Xviyyn`@AuHwmo1DSa zv_ZtI&>nyM>X)})X0CV0%Lux4pmJ^AM{yn(Uu|n=7`320`>v$PX{6n4wk&ogs!-&n zkCsMW(TnppqzDFdoKG3_el$!Ntjj@-b=im3&K;OA<`P}cAn=0F`oA3e|NV`2rsnHU zCY(Fb)42o%k;eKVjXc&fSy(%RsH%B#eJiCr5&6^lsQvSuSnas>4Ckj(J|%6RuqLl&PJcccG8*}$?xtFTiMD0KD?RODT{(QnY;Fsi(dOxlb11>3 z{%FMkzyG9P|BXx1Y~y~NjKlwBp^y^&NwqxdyZKH?L~s5&=iD55hGu%H>OkQQP9EFa zKr!w5g!=l>wqqXUj6T|Muktd51hG~xQaxlfKEHpPU_d9Wa5MBD{Iz~sNx`{(?yoeMZ%OBGAYSdtUz{7?b52`c030{rgz{zl<}7YK-i$ z1{zp2$`WhKmFZuSwU-)8r^95|XS%XI+R}wq1bv;UR6fT=TBbYAeDGH~?_}6RhlsFq zPjp%j&`FJ&dnm&mY>ilJ=4WuyYi%wFu(O`{8o_GXLG9e^(khavg(_6zvd4YWwXV2- zoo{WjK}BT*t@Z&<~F9>Lht7Z-?X5ln2HVa-%}p2nB2nu@e%d+hq{JH%p7*Z5vS?cg9UnTlNwVz z*&Evi&Nm9|9`w>0Q@nbYL_t38dWp!-bt2#1!u?Sf|Hrjjb~h!}4(*3txikAM9{n3F z?U_*%+OHBqqLCupIr~_g_e@c*$*Jd$RT`T#^BRptuRRiXw+Q43s@1McZzfjS+U0Xr z!Y>)040o_q333RDaSTl4Uw*7NprYDkQd~SHhP11+F@G{459zme7ALz(M4T_p#5zkb zv|3QI1dRMRP4M3h)9<9AfYdd&eJx$YnzJ``DtM?YgsS5t{8wzDr1|JS}4WbX}6WaY;=*2gS4 z8OxL&BevFX<|;|aEvZ+0Xs{=1_WVnv$Hbc7_*uX7f#=GJ%x0=H#j|a;#|Zqr+uo5$ zFfgzHC^5`?pdmcBO>2h0wClphaiJ9w+2;O|#!Da>^CVu%aUgcg9DQcQKFaM272np^ zv`3Ux8{{0h&*~%(B6J3$w2j8f>3G&JgHH6y;_G- zY{5n8l>Na5zh2+64%7r==lerxa=jnY0 z0R^p)UJ^`I=ifi8ETOTr(8{M=nYJ$}11d*ygH>XiRGC})@)0U#CtF?wYI0snjuwuT z)~9rkmQNotGE=&FX`cL9y8V^O2R8j_PUa&qD7FFKK!nLcQpDQe{9YF zQXE`a4+iC|m(G>hu`{CsxjZKDRX8%bSAwIQ`sQ^q?buHwZFLP2beV8nG}b|ige{ls zDpQ&d#Cjy5(Y*b8*~yq8Cg=zMTVqR_9ZC? zgIR^O5~y57WP=6oFU3y;SS1J!*1jZg1{7m0*a!;_UYU4X6XgvSt~;jHFlJ_>w1o;) z7{d#{s!n-?w61<&j<{eTJWOzT{dsU>;VrX+JmJE|-s9esoU#G0c~y}1VK2?ZRu0}6 z2rr~}S!B%MJuxayq3@c{8B(^&UeqdHuGbAz>DYU}B+!+&A32vXgDyoC@5M488ni8y z8!Hh`+@C34Y^)wW+I7?67d+TQSW!n^n2ggeDz&(X*@~@b&Lfp+obp-HHtTX%>z#K{ z@=gNAIw*MB@pgIw;CkS|B-WqSP zztbsle6-jwnLYCxpABWS9@b2aCDzQ^u}^qe69jIZgHp~JY)Fae*qcO=&#yKyt@ebI ztl8xt$+0)u?i2W{<;ANM@7*L-_mA?JNXYL&y_kuAU@ruD^p)p$$A+%S5@pzB%1y>% zO56W_e^Fq&Trt*3+z95&U`|4H5}l5H#g$;ZSV7mSrSLXVQ=m0?wvEMS&8fNnX=1eN zymrvBr{U!zDDBRhOsln)&IwiwqBM%)WEtQR*SEwizbr86EQI1II8Ok|CP~{CzoWFofmrhl9L!RWQYx)T_6&3c} zi59^F6(vrBD9omsCtx*AI#F1)KAp7bYB)%;aXUn=HTix|Z~iD4K6JOe()7N7Y=Sd^ z`)c?HhiAVsaIjXc7+VIvicF{PnqADI=-X<3aT%K!@vghbRI+*ZJkjNhwyNZle8uJg zQs_wcy%Eg*zArJ7@41q*7FsA`lG3VjXQ=zr!^H4SZMlvw8<+$^{~%GfQDD>?eN;dM zRbF2l#mmi3LMv`X?^JeD8QUT`r(>g; zN_?ug-<2!ZyP{Bfc9EvtmX=Hny@>}q>xScZ+{ZK|O5Nja7UsNqKR$Xj$eus-?Nskb zBjr==;b&$)JjZKoq(7t?KlqVk4uQUj&k@vPm6Bc`mAS@T zyjHtFBapF52Lgph%!C#$*kYnNL= z5q=~1(%!E;_#rIUi;#hrzy8|b*DfDC1NY7>`7e-&e~pcHMWK2SZGNfl-y03g6-Bgg z@0zbyJ^uZS!xfueP-+wCxfSgGOP4!H!@cKTnm+#52l~e|xJU%0HrJ1@uKZHs`t)Kj z+`E-zE5R?E!~oWy$CL^6Y1EJX+U3k}?}M-3QvQmu7c7&9;6tMTA z!XHq8WC<%@EIT5> z`=nR1SY$!+ftZ?cnV4EFDyLDQRIu}=bk^9Yxmd+OYEPRu)4Tl%t>R`ZgPm;seJO(w ziKz+Q`p&8D#JM|?LM4pl@g1CF!mMvC{NSv_eDNC_I!u#{$n>FOADHQ z9I0(+u&dVm6b7%DSke9O^pvl8zC<>T%(cY;5|#pw%EKW9F<<* zV&=A+vRqq-VBbwDu+legF!#33x;Mas416d^?^D;XMTL!xovbugLHeMB3ZLv@@fp3o z*;>=imQbUL^G>TFbq01aHEkp&QhK9ZL2Ckd*^3q_4<2MC3X}?Z(V4qmvn~!!>$9qs zd4TM-p%uSwcxHd-Sxo-H0vpq+!eNQakumxHmQ-#3JcH(bodL5hK{XdxveuT9Mk*I6 zK^4BwO!h>?#=?*;XlOj@lb4pK;9v4popTgX?JoLI)xkHi=60+<_BX$^FL1{#7D=VH2N)6nmM;oyLt7-=@aq-XrU$x4z_?bOaSy^XsHQ zlc(hltF3-@CPO;!ft5F%0 z=__xkcJ|l>MkKM39<(iaFNup;w@n6@LojS zp#~&_iriW;`g+FXOV*XPx`F)mLA>bu|yPa^+K z0N|h&^YNo10K8Qk9c`t0=MDjAvKe-?Ci!)FDJex!(WiZE;npAD&AyEq_#m8Amv-82 z#c#OyHOGeo3)vFKwNV1b;^y|pCHE4E2Q(26EFZD@7RK(DnKn3FALzWXKG75ItoCMy zEVC2+$&<{ytKd|0x|o2p%}_d_5t7=tuuo|$a~y$RD7k3RD5@} zP>KuZZrfK>IMy=wsG2L|-Jb~B;hc=+P?GGoJ!N~`e4L#bf{rNlsNnk0BpGzZ^F@7T z4c>}&UaO(wK)oqGNG-v~kN`eMd~W~eM!Jk18y6Qh3&e@U8wSYktpHRt1rXA{q#10! zs`DCYNbKjNZCQiY+tT;FwzX}HQgN@fllh9cxyIuwW$oo|NPR6XU`mrDk5%HvY+}JW<*&1rZPP*WEs7OZX%( z9gDD)=q<3`OS>U4y?}f>AmO9Wbe8gL+F=o;dR`fW%}NUF>F}j5rhPo+&t%kkv%+s9 zeMPboBMv#~sT?YPsLl1MCiVVj-4L@qlC4BE73~n8x};$-twExYPS!#!G^> zHFeb}6AFF)uhbP^&L2daLCl%>1*xv>+RX9(mUgCZQs~K9VniC#Hi4p^%bRj?m6gaR z6Eqa+s2!HNu3&;(<5ISq3x*lTPhN;6+#5I-VQaoM^4`%(J9Uiuh!$g!(O#1avrAv_ zgqruX{i6foV=H92CoFOhLMzt`Ib~9dF;ls)aH!M&pL-{R#GC7VR<={OM?HF(@gpR} z#7q{ye$r7F-w#{Je$b~FxgusHnJe62?6?!~DiNaY5{g*#k$TJY@2mla=!NNIUJ$8eLussk69GE2sH( zT13n2?xY1$7EfnDkD%b@e6rI?Z?ZJUO#1NNulSTZL!lX28*_)JdSkcu%qA|+(J<{^ zNZfIaP9&t;9SDt=l%wm8+d$Hrwn(?7Fg@XR&ta3_mE6*?1yYic^w>eFE z;+M#ql%5-Q&7T{)BD7-nvE@qJ1}1Q3o!} z2jk=hp{OC%YKP@E6DcoL!PxXChS0&aXJHyPR!^ksUe|X87U=uTY0WkyhdXyYoWT14EA3?N z3{}sChR}x|0SF84xJd&`HNS@PH!m-wBv@A!LR;#INvA-wIk$%9%KH=Mx8sPfM9!a) zV-!5$@>JESMPn(4+a_ArX^*-hL2OG&llX?tybJZ}PGub5FxyqJ$R&d{<7V)U14 z4V0uYM^_&>)IQ7tByg-%{GhCzg!ZHJthgOa=&RZur` zbGX$wh-7S9u=DUZNjRI+%g)vzxhzfYe6@kNnCcs}1e}Okc|()BoV|`uE9qP^Tno{n z66_sC_66ZFTNk@x^7B*p(KB+rHAKMQ(~nnAT)^Z{iuvwW{$r<)syPQ6I?<->x}+>y zxA{FQpMVw`KsIxTlskfj#qnsYnrAY?T2H+)g~w$iVxoU$Jt~^6KTT-hctNr1hW_Z2 z3B?lCaKWv0l;GBvp|>Wh6?BhFO#PDOEbS>DY-lC;p_HPE=6|C*Q?eZ5-@Ai*4bdD@ zpeiWuMy--!ug+OFfZZjXH6F?AeLgBKuR12Yq;B18IF-XWG+z~Avv9m&C2Q=HV{Mi= zfp^>LP`#?2ZC;5enuI?QU!9KE!mq{ut%;snfZ&FW@_g6s^HzPN=*4>FIQbnhskGq6 z`OX9?{JeWbBQ7TQziR?YuMMcpRz&)$h_MV(tO9K!5+eV`-zf@gY$+u-PMx! zj8_L$Mk%*^D|yo9#@yGo*D}das9=KT{t!ijVzM_P3k>XS9NeEe;>V1Gai8cR$W*eU zv!6_O**A5rD)p1rt4`;oA#7rpHB`T8gv~u_ImJ`A2J3BHm1Fp)^1YDCOHygS12ISn0CcP&(?-`~%vJX%0 zpF5XqT2{_1h1}(gQ0iWsmfBI5t(fDfyLz9O$1FdMw9qWUAt~5EU1J~ZS$o-r$0+Jq z1)cF~-U-r(?$8Hr4aFT4*>6lc$J0skY_8o;pwKQE=xljhI2lHO_|k5pv3A8uDSToN zSvnW=Id%7OvhcyIcwhb(=Lys8>SGh=F&2V_ls^n9`pBttYYSt1+VhDT`;VNnU8;6b ziG%YLK&35YHu_Y8$quU7c{~1uG4>ai>v0CoE?W0MQO=JqufLm{OSyp;bS{AYY1gNH z=T0cJD4AH-P?G20Uur|WOEsRcpy(Uwp5*Z@)C;Uar<0Hp=GhfcR~_}5RKxZ%ldCeF zSg{T|t!SP2$*A$(EcFJ1MK4YtGkxiubO|;6?kHzmcC`&{)wlp!S{_Z+^hW_oOkQyqzwYt@kr{ zuZ#`dN_r;Td){!M&H`j%YS&kYk6e@#q4!ZaH(dt>yY^{p zng)mh&-HbTcg~PB&bJYVQMnD+MNQ017sW4xqbEeL+GK~kYPaIU&OPQ8 z*ww3i@u&r3SvObrGw7#D(t%5j8fgPr+FKQz)(>Vjd5<6)n*-fnS8CqK6dyG5SnQThdmx0oG~U}3$V?Q^7#AqX;`AYZD=IkSQ9YrLv7l`q@AD0p>rOj_{q9B<%z z`iZZhqit&@j0bxdO|Y&uG@L6B!#CIY@v1Hf*bVf}>RrPBJKG$?hj%t8vb~407D3pm z^65f~YoM9)v3qkrJP@)7-Jd+cg2rGe3YjJ*)%~PzAsaITx`6SOX75_04|Yp=ls8pG z8c30QMjrdxYGNB!`a6lo8q#owIT6JMGxqZPdx{C7*B{+TGIXS5Z7C`>>}|XxFW(lp zdBn*kxR^9≷CGCq7amBFP|3$ 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

o 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 literal 0 HcmV?d00001 diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/_static/kibana-blockchain-records.png b/logisland-framework/logisland-resources/src/main/resources/docs/_static/kibana-blockchain-records.png new file mode 100644 index 0000000000000000000000000000000000000000..9c164cb61d825f7b2ccd3a111c200090ddd5e5bf GIT binary patch literal 596894 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

JHJw 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�u7{M|0qxw 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

Q?HwE_$5ur?SEubecUXAtT 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

4ZVLU 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

w=aR#!V{*^k4>8nY7 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 D%RiU|oiV-v#uxw9DdHFz1Wy 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�rS9lj`A9C>#hMl0d7%V1-9z~k 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 D>L*uW literal 0 HcmV?d00001 diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst b/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst index c6ef45dff..ac40f8d63 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst @@ -60,33 +60,76 @@ First of all we need to declare a *KafkaConnectStructuredProviderService* that w Along with this we need to put some configuration (In general you can always refer to kafka connect documentation to better understand the underlying architecture and how to configure a connector): -+-------------------------------------------+----------------------------------------------------------+ -| Property | Description | -+===========================================+==========================================================+ -| kc.connector.class | The class of the connector (Fully qualified name) | -+-------------------------------------------+----------------------------------------------------------+ -| kc.data.key.converter | The class of the converter to be used for the key. | -| | Please refer to `Chosing the right converter`_ section | -+-------------------------------------------+----------------------------------------------------------+ -| kc.data.key.converter.properties | The properties to be provided to the key converter | -| | | -+-------------------------------------------+----------------------------------------------------------+ -| kc.data.value.converter | The class of the converter to be used for the key. | -| | Please refer to `Chosing the right converter`_ section | -+-------------------------------------------+----------------------------------------------------------+ -| kc.data.value.converter.properties | The properties to be provided to the key converter | -| | | -+-------------------------------------------+----------------------------------------------------------+ -| kc.connector.properties | | -+-------------------------------------------+----------------------------------------------------------+ -| kc.worker.tasks.max | | -+-------------------------------------------+----------------------------------------------------------+ -| kc.connector.offset.backing.store | | -+-------------------------------------------+----------------------------------------------------------+ -| kc.data.value.converter | | -+-------------------------------------------+----------------------------------------------------------+ ++-------------------------------------------------+----------------------------------------------------------+ +| Property | Description | ++=================================================+==========================================================+ +| kc.connector.class | The class of the connector (Fully qualified name) | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.key.converter | The class of the converter to be used for the key. | +| | Please refer to `Choosing the right converter`_ section | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.key.converter.properties | The properties to be provided to the key converter | +| | | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.value.converter | The class of the converter to be used for the key. | +| | Please refer to `Choosing the right converter`_ section | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.data.value.converter.properties | The properties to be provided to the key converter | +| | | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.connector.properties | The properties to be provided to the connector and | +| | specific to the connector itself. | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.worker.tasks.max | How many concurrent threads to spawn for a connector | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.connector.offset.backing.store | The offset backing store to use. Choose among: | +| | | +| | * **memory** : standalone in memory | +| | * **file** : standalone file based. | +| | * **kafka** : distributed kafka topic based | +| | | +| | | ++-------------------------------------------------+----------------------------------------------------------+ +| kc.connector.offset.backing.store.properties | Specific properties to configure the chosen backing | +| | store. | ++-------------------------------------------------+----------------------------------------------------------+ + +.. note:: Please refer to `Kafka connect guide `_ for further information about offset backing store and how to configure them. + + +Choosing the right converter +---------------------------- + +Choosing the right converter is perhaps one of the most important part. In fact we're going to adapt what is coming from kafka connect to what is flowing into our logisland pipeline. +This means that we have to know how the source is managing its data. + +In order to simplify your choice, we recommend you to follow this simple approach (the same applies for both keys and values): + + ++----------------------------+-----------------------------------+-----------------------------------+ +| Source data | Kafka Converter | Logisland Encoder | ++============================+===================================+===================================+ +| String | StringConverter | StringEncoder | ++----------------------------+-----------------------------------+-----------------------------------+ +| Raw Bytes | ByteArrayConverter | BytesArraySerialiser | ++----------------------------+-----------------------------------+-----------------------------------+ +| Structured | LogIslandRecordConverter | The serializer used by the record | +| | | converter (*) | ++----------------------------+-----------------------------------+-----------------------------------+ +.. note:: + (*)In case you deal with structured data, the LogIslandRecordConverter will embed the structured object in a logisland record. In order to do this you have to specify the serializer to be used to convert your data (the serializer property **record.serializer**). Generally the *KryoSerialiser* is a good choice to start with. + + + +Putting all together +-------------------- + +In the previous two sections we explained how to configure a connector and how to choose the right serializer for it. + +The recap we can examine the following configuration example: + .. code-block:: yaml @@ -100,7 +143,6 @@ Along with this we need to put some configuration (In general you can always ref # Use kryo to serialize the inner data kc.data.value.converter.properties: | record.serializer=com.hurence.logisland.serializer.KryoSerializer - kc.data.key.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter # Use kryo to serialize the inner data kc.data.key.converter.properties: | @@ -118,9 +160,19 @@ Along with this we need to put some configuration (In general you can always ref kc.connector.offset.backing.store: memory -Chosing the right converter ---------------------------- -blablablabla -.. image:: /_static/logisland-workflow.cl --- \ No newline at end of file +In the example both key and value provided by the connector are structured objects. + +For this reason we use for that the converter *LogIslandRecordConverter*. +As well, we provide the serializer to be used for both key and value converter specifying +*record.serializer=com.hurence.logisland.serializer.KryoSerializer* among the related converter properties. + + +Going further +------------- + + +Please do not hesitate to take a look to our kafka connect tutorials for more details and practical use cases. + + diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-blockchain-transactions.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-blockchain-transactions.rst new file mode 100644 index 000000000..8c4e6e396 --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index-blockchain-transactions.rst @@ -0,0 +1,274 @@ +Index blockchain transactions +============================= + +In the following getting started tutorial, we'll explain you how to leverage logisland connectors flexibility +in order process in real time every transaction emitted by the bitcoin blockchain platform and index each record +into an elasticsearch platform. + +This will allow us to run some dashboarding and visual data analysis as well. + + +.. note:: + + Be sure to know of to launch a logisland Docker environment by reading the `prerequisites <./prerequisites.html>`_ section + + For kafka connect related information please follow as well the `connectors <../connectors.html>`_ section. + +1. Logisland job setup +---------------------- + +.. note:: + + To run this tutorial you have to package the blockchain connector into the logisland deployable jar. + You can do this simply by building logisland from sources passing the option *-DwithConnectBlockchain* to maven. + +The logisland job for this tutorial is already packaged in the tar.gz assembly and you can find it here for ElasticSearch : + +.. code-block:: sh + + vim conf/index-blockchain-transactions.yml + + + +We will start by explaining each part of the config file. + +========== +The engine +========== + +The first section configures the Spark engine (we will use a `KafkaStreamProcessingEngine <../plugins.html#kafkastreamprocessingengine>`_) to run in local mode. + +.. code-block:: yaml + + engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Index some blockchain transactions with logisland + configuration: + spark.app.name: BlockchainTest + spark.master: local[*] + spark.driver.memory: 512M + spark.driver.cores: 1 + spark.executor.memory: 512M + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 2000 + spark.streaming.backpressure.enabled: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 10000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4040 + + The `controllerServiceConfigurations` part is here to define all services that be shared by processors within the whole job. + + ================== + The parsing stream + ================== + + Here we are going to use a special processor (``KafkaConnectStructuredProviderService``) to use the kafka connect source as input for the structured stream defined below. + + For this example, we are going to use the source *com.datamountaineer.streamreactor.connect.blockchain.source.BlockchainSourceConnector* + that opens a secure websocket connections to the blockchain subscribing to any transaction update stream. + + + .. code-block:: yaml + + ControllerServiceConfigurations: + - controllerService: kc_source_service + component: com.hurence.logisland.stream.spark.provider.KafkaConnectStructuredProviderService + configuration: + kc.data.value.converter: com.hurence.logisland.connect.converter.LogIslandRecordConverter + kc.data.value.converter.properties: | + record.serializer=com.hurence.logisland.serializer.KryoSerializer + kc.data.key.converter.properties: | + schemas.enable=false + kc.data.key.converter: org.apache.kafka.connect.storage.StringConverter + kc.worker.tasks.max: 1 + kc.connector.class: com.datamountaineer.streamreactor.connect.blockchain.source.BlockchainSourceConnector + kc.connector.offset.backing.store: memory + kc.connector.properties: | + connect.blockchain.source.url=wss://ws.blockchain.info/inv + connect.blockchain.source.kafka.topic=blockchain + + + +.. note:: Our source is providing structured value hence we convert with LogInslandRecordConverter serializing with Kryo + + +.. code-block:: yaml + + # Kafka sink configuration + - controllerService: kafka_out_service + component: com.hurence.logisland.stream.spark.structured.provider.KafkaStructuredStreamProviderService + configuration: + kafka.output.topics: logisland_raw + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +So that, we can now define the *parsing stream* using those source and sink + +.. code-block:: yaml + + ######### parsing stream ############## + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``FlatMap`` processor takes out the value and key (required when using *StructuredStream* as source of records) + +.. code-block:: yaml + + processorConfigurations: + - processor: flatten + component: com.hurence.logisland.processor.FlatMap + type: processor + documentation: "Takes out data from record_value" + configuration: + keep.root.record: false + copy.root.record.fields: true + +=================== +The indexing stream +=================== + + +Inside this engine, you will run a Kafka stream of processing, so we set up input/output topics and Kafka/Zookeeper hosts. +Here the stream will read all the logs sent in ``logisland_raw`` topic and push the processing output into ``logisland_events`` topic. + +.. note:: + + We want to specify an Avro output schema to validate our output records (and force their types accordingly). + It's really for other streams to rely on a schema when processing records from a topic. + +We can define some serializers to marshall all records from and to a topic. + +.. code-block:: yaml + + + - stream: parsing_stream_source + component: com.hurence.logisland.stream.spark.structured.StructuredStream + documentation: "Takes records from the kafka source and distributes related partitions over a kafka topic. Records are then handed off to the indexing stream" + configuration: + read.topics: /a/in + read.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + read.topics.client.service: kc_source_service + write.topics: logisland_raw + write.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.key.serializer: com.hurence.logisland.serializer.KryoSerializer + write.topics.client.service: kafka_out_service + + +Within this stream, a ``BulkAddElasticsearch`` takes care of indexing a ``Record`` sending it to elasticsearch. + +.. code-block:: yaml + + - processor: es_publisher + component: com.hurence.logisland.processor.elasticsearch.BulkAddElasticsearch + type: processor + documentation: a processor that indexes processed events in elasticsearch + configuration: + elasticsearch.client.service: elasticsearch_service + default.index: logisland + default.type: event + timebased.index: yesterday + es.index.field: search_index + es.type.field: record_type + + +In details, this processor makes use of a ``Elasticsearch_5_4_0_ClientService`` controller service to interact with our Elasticsearch 5.X backend +running locally (and started as part of the docker compose configuration we mentioned above). + +Here below its configuration: + +.. code-block:: yaml + + - controllerService: elasticsearch_service + component: com.hurence.logisland.service.elasticsearch.Elasticsearch_5_4_0_ClientService + type: service + documentation: elasticsearch service + configuration: + hosts: sandbox:9300 + cluster.name: es-logisland + batch.size: 5000 + + +2. Launch the script +-------------------- +Connect a shell to your logisland container to launch the following streaming jobs. + +.. code-block:: sh + + bin/logisland.sh --conf conf/index-blockchain-transactions.yml + + +3. Do some insights and visualizations +-------------------------------------- + +With ElasticSearch, you can use Kibana. + +Open up your browser and go to http://sandbox:5601/app/kibana#/ and you should be able to explore the blockchain transactions. + + +Configure a new index pattern with ``logisland.*`` as the pattern name and ``@timestamp`` as the time value field. + +.. image:: /_static/kibana-configure-index.png + +Then if you go to Explore panel for the latest 15' time window you'll only see logisland process_metrics events which give you +insights about the processing bandwidth of your streams. + + +.. image:: /_static/kibana-blockchain-records.png + + +You can try as well to create some basic visualization in order to draw the total satoshi transacted amount (aggregating sums of ``out.value`` field). + +Below a nice example: + +.. image:: /_static/kibana-blockchain-dashboard.png + + +Ready to discover which addresses received most of the money? Give it a try ;-) + + +4. Monitor your spark jobs and Kafka topics +------------------------------------------- +Now go to `http://sandbox:4050/streaming/ `_ to see how fast Spark can process +your data + +.. image:: /_static/spark-job-monitoring.png + + +Another tool can help you to tweak and monitor your processing `http://sandbox:9000/ `_ + +.. image:: /_static/kafka-mgr.png + + From 6a3dba15ba3e38295c6fbb2e193f52494d67288d Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Thu, 19 Apr 2018 11:54:24 +0200 Subject: [PATCH 19/35] OCP-DA connectivity --- .../converter/LogIslandRecordConverter.java | 6 +- .../logisland-connectors-bundle/pom.xml | 22 +- .../logisland-connector-opcda/pom.xml | 45 +++ .../logisland/connect/opcda/OpcDaFields.java | 62 ++++ .../connect/opcda/OpcDaSourceConnector.java | 121 ++++++++ .../connect/opcda/OpcDaSourceTask.java | 271 ++++++++++++++++++ .../logisland-connectors/pom.xml | 25 ++ logisland-connect/pom.xml | 1 + logisland-documentation/connectors.rst | 2 + .../src/main/resources/docs/connectors.rst | 2 + .../solr/Solr_6_4_2_ChronixClientService.java | 4 +- pom.xml | 17 ++ 12 files changed, 573 insertions(+), 5 deletions(-) create mode 100644 logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml create mode 100644 logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaFields.java create mode 100644 logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java create mode 100644 logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java create mode 100644 logisland-connect/logisland-connectors/pom.xml diff --git a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java index cc78a58d5..361b98c88 100644 --- a/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java +++ b/logisland-connect/logisland-connect-spark/src/main/java/com/hurence/logisland/connect/converter/LogIslandRecordConverter.java @@ -88,6 +88,9 @@ public SchemaAndValue toConnectData(String topic, byte[] value) { private Field toFieldRecursive(String name, Schema schema, Object value, boolean isKey) { try { + if (value == null) { + return new Field(name, FieldType.NULL, null); + } final Schema.Type schemaType; if (schema == null) { schemaType = ConnectSchema.schemaType(value.getClass()); @@ -104,8 +107,9 @@ private Field toFieldRecursive(String name, Schema schema, Object value, boolean case INT64: return new Field(name, FieldType.LONG, value); case FLOAT32: - case FLOAT64: return new Field(name, FieldType.FLOAT, value); + case FLOAT64: + return new Field(name, FieldType.DOUBLE, value); case BOOLEAN: return new Field(name, FieldType.BOOLEAN, value); case STRING: diff --git a/logisland-connect/logisland-connectors-bundle/pom.xml b/logisland-connect/logisland-connectors-bundle/pom.xml index 7a7b56962..3f6f7b9f5 100644 --- a/logisland-connect/logisland-connectors-bundle/pom.xml +++ b/logisland-connect/logisland-connectors-bundle/pom.xml @@ -11,8 +11,25 @@ jar logisland-connectors-bundle - + + + includeOpcDaConnector + + true + + !skipDefaultConnectors + + + + + + com.hurence.logisland + logisland-connector-opcda + + + + includeConnectFtp @@ -226,7 +243,8 @@ org.codehaus.jackson - ${logisland.shade.packageName}.kc.blockchain.org.codehaus.jackson + + ${logisland.shade.packageName}.kc.blockchain.org.codehaus.jackson diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml b/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml new file mode 100644 index 000000000..c94ffa862 --- /dev/null +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + com.hurence.logisland + logisland-connectors + 0.12.2 + + jar + + logisland-connector-opcda + + + + com.github.Hurence + opc-simple + 15ea757262 + + + com.hurence.logisland + logisland-api + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + true + + + + + + + + diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaFields.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaFields.java new file mode 100644 index 000000000..34d8f0cd9 --- /dev/null +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaFields.java @@ -0,0 +1,62 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.connect.opcda; + +import com.hurence.logisland.record.FieldDictionary; + +public interface OpcDaFields { + + /** + * The update period in milliseconds. + */ + String UPDATE_PERIOD = "update_period_millis"; + /** + * The timestamp when the OPC server acquired data. + */ + String TIMESTAMP = "tag_timestamp"; + /** + * The fully qualified tag name (with group). + */ + String TAG_NAME = FieldDictionary.RECORD_NAME; + /** + * The quality of the measurement (in case server caching is used). + * The value is managed by the OPC server. + */ + String QUALITY = "quality"; + /** + * The record value. Can be missing in case an error occurred. + */ + String VALUE = FieldDictionary.RECORD_VALUE; + /** + * The OPC server error code in case the tag reading is in error. + */ + String ERROR_CODE = "error_code"; + /** + * The OPC server host generating the event. + */ + String OPC_SERVER_HOST = "server"; + /** + * The OPC server domain generating the event. + */ + String OPC_SERVER_DOMAIN = "domain"; + /** + * The tag group. + */ + String TAG_GROUP = "group"; + +} diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java new file mode 100644 index 000000000..d0e1aaa55 --- /dev/null +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java @@ -0,0 +1,121 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.connect.opcda; + +import org.apache.kafka.common.config.ConfigDef; +import org.apache.kafka.common.config.ConfigValue; +import org.apache.kafka.common.utils.Utils; +import org.apache.kafka.connect.connector.Task; +import org.apache.kafka.connect.source.SourceConnector; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * OPC-DA Connector. + * + * @author amarziali + */ +public class OpcDaSourceConnector extends SourceConnector { + + private static final Logger logger = LoggerFactory.getLogger(OpcDaSourceConnector.class); + + private Map configValues; + + public static final String PROPERTY_HOST = "host"; + public static final String PROPERTY_PORT = "port"; + public static final String PROPERTY_DOMAIN = "domain"; + public static final String PROPERTY_USER = "user"; + public static final String PROPERTY_PASSWORD = "password"; + public static final String PROPERTY_CLSID = "clsId"; + public static final String PROPERTY_PROGID = "progId"; + public static final String PROPERTY_TAGS = "tags"; + public static final String PROPERTY_SOCKET_TIMEOUT = "socketTimeoutMillis"; + public static final String PROPERTY_REFRESH_PERIOD = "refreshPeriodMillis"; + public static final String PROPERTY_DIRECT_READ = "directReadFromDevice"; + + + /** + * The configuration. + */ + private static final ConfigDef CONFIG = new ConfigDef() + .define(PROPERTY_HOST, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "The OPC-DA server host") + .define(PROPERTY_PORT, ConfigDef.Type.INT, ConfigDef.Importance.LOW, "The OPC-DA server port") + .define(PROPERTY_DOMAIN, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "The logon domain") + .define(PROPERTY_USER, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "The logon user") + .define(PROPERTY_PASSWORD, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "The logon password") + .define(PROPERTY_CLSID, ConfigDef.Type.STRING, ConfigDef.Importance.MEDIUM, "The CLSID of the OPC server COM component") + .define(PROPERTY_PROGID, ConfigDef.Type.STRING, ConfigDef.Importance.MEDIUM, "The Program ID of the OPC server COM component") + .define(PROPERTY_TAGS, ConfigDef.Type.LIST, ConfigDef.Importance.HIGH, "The tags to subscribe to") + .define(PROPERTY_SOCKET_TIMEOUT, ConfigDef.Type.LONG, ConfigDef.Importance.LOW, "The socket timeout") + .define(PROPERTY_REFRESH_PERIOD, ConfigDef.Type.LONG, 1000, ConfigDef.Importance.LOW, "The data refresh period in milliseconds") + .define(PROPERTY_DIRECT_READ, ConfigDef.Type.BOOLEAN, false, ConfigDef.Importance.LOW, "Use server cache or read directly from device"); + + + @Override + public String version() { + return getClass().getPackage().getImplementationVersion(); + } + + @Override + public void start(Map props) { + //shallow copy + configValues = config().validate(props).stream().collect(Collectors.toMap(ConfigValue::name, Function.identity())); + logger.info("Starting OPC-DA connector (version {}) on server {} reading tags {}", version(), + configValues.get(PROPERTY_HOST).value(), configValues.get(PROPERTY_TAGS).value()); + } + + @Override + public Class taskClass() { + return OpcDaSourceTask.class; + } + + @Override + public List> taskConfigs(int maxTasks) { + List tags = (List) configValues.get(PROPERTY_TAGS).value(); + int maxPartitions = Math.min(maxTasks, tags.size()); + int batchSize = (int) Math.ceil((double) tags.size() / maxPartitions); + return IntStream.range(0, maxPartitions) + .mapToObj(i -> tags.subList(i * batchSize, Math.min((i + 1) * batchSize, tags.size()))) + .map(l -> { + Map ret = configValues.entrySet().stream() + .filter(a -> a.getValue().value() != null) + .collect(Collectors.toMap(a -> a.getKey(), a -> a.getValue().value().toString())); + ret.put(PROPERTY_TAGS, Utils.join(l, ",")); + return ret; + }) + .collect(Collectors.toList()); + + + } + + @Override + public void stop() { + logger.info("Stopping OPC-DA connector (version {}) on server {}", version(), configValues.get(PROPERTY_HOST).value()); + } + + @Override + public ConfigDef config() { + return CONFIG; + } +} diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java new file mode 100644 index 000000000..9297d074b --- /dev/null +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java @@ -0,0 +1,271 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.connect.opcda; + +import com.hurence.opc.OpcData; +import com.hurence.opc.OpcOperations; +import com.hurence.opc.da.OpcDaConnectionProfile; +import com.hurence.opc.da.OpcDaOperations; +import com.hurence.opc.util.AutoReconnectOpcOperations; +import org.apache.kafka.connect.data.Schema; +import org.apache.kafka.connect.data.SchemaAndValue; +import org.apache.kafka.connect.data.SchemaBuilder; +import org.apache.kafka.connect.data.Struct; +import org.apache.kafka.connect.errors.ConnectException; +import org.apache.kafka.connect.errors.SchemaBuilderException; +import org.apache.kafka.connect.source.SourceRecord; +import org.apache.kafka.connect.source.SourceTask; +import org.jinterop.dcom.common.JIException; +import org.jinterop.dcom.core.JIVariant; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Duration; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedTransferQueue; +import java.util.concurrent.TransferQueue; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * OPC-DA Worker task. + */ +public class OpcDaSourceTask extends SourceTask { + + private static class TagInfo { + final String group; + final String name; + + public TagInfo(String tag) { + int idx = tag.lastIndexOf('.'); + if (idx > 0) { + this.group = tag.substring(0, idx); + } else { + this.group = ""; + } + this.name = tag.substring(idx + 1); + } + } + + private static final Logger logger = LoggerFactory.getLogger(OpcDaSourceTask.class); + + private OpcOperations opcOperations; + private TransferQueue transferQueue; + private long sleepTime = 1000; + private String tags[]; + private Map tagInfoMap; + private ExecutorService executorService; + private String host; + private String domain; + private volatile boolean running = false; + + private OpcDaConnectionProfile propertiesToConnectionProfile(Map properties) { + OpcDaConnectionProfile ret = new OpcDaConnectionProfile(); + ret.setHost(properties.get(OpcDaSourceConnector.PROPERTY_HOST)); + ret.setComClsId(properties.get(OpcDaSourceConnector.PROPERTY_CLSID)); + ret.setComProgId(properties.get(OpcDaSourceConnector.PROPERTY_PROGID)); + if (properties.containsKey(OpcDaSourceConnector.PROPERTY_PORT)) { + ret.setPort(Integer.parseInt(properties.get(OpcDaSourceConnector.PROPERTY_PORT))); + } + ret.setUser(properties.get(OpcDaSourceConnector.PROPERTY_USER)); + ret.setPassword(properties.get(OpcDaSourceConnector.PROPERTY_PASSWORD)); + ret.setDomain(properties.get(OpcDaSourceConnector.PROPERTY_DOMAIN)); + if (properties.containsKey(OpcDaSourceConnector.PROPERTY_DIRECT_READ)) { + ret.setDirectRead(Boolean.parseBoolean(properties.get(OpcDaSourceConnector.PROPERTY_DIRECT_READ))); + } + if (properties.containsKey(OpcDaSourceConnector.PROPERTY_REFRESH_PERIOD)) { + ret.setRefreshPeriodMillis(Long.parseLong(properties.get(OpcDaSourceConnector.PROPERTY_REFRESH_PERIOD))); + } + if (properties.containsKey(OpcDaSourceConnector.PROPERTY_SOCKET_TIMEOUT)) { + ret.setSocketTimeout(Duration.ofMillis(Long.parseLong(properties.get(OpcDaSourceConnector.PROPERTY_SOCKET_TIMEOUT)))); + } + return ret; + } + + private SchemaAndValue convertToNativeType(final JIVariant type) { + try { + if (type.isArray()) { + final ArrayList objs = new ArrayList<>(); + final Object[] array = (Object[]) type.getObjectAsArray().getArrayInstance(); + + Schema arraySchema = null; + + for (final Object element : array) { + SchemaAndValue tmp = convertToNativeType((JIVariant) element); + if (arraySchema == null) { + arraySchema = tmp.schema(); + } + objs.add(tmp.value()); + } + + return new SchemaAndValue(SchemaBuilder.array(arraySchema), objs.toArray()); + } + + switch (type.getType()) { + case JIVariant.VT_NULL: + case JIVariant.VT_ERROR: + return SchemaAndValue.NULL; + case JIVariant.VT_BSTR: + return new SchemaAndValue(SchemaBuilder.string().optional(), type.getObjectAsString().getString()); + case JIVariant.VT_I2: + case JIVariant.VT_UI2: + return new SchemaAndValue(SchemaBuilder.int16().optional(), type.getObjectAsShort()); + case JIVariant.VT_I4: + case JIVariant.VT_UI4: + return new SchemaAndValue(SchemaBuilder.int32().optional(), type.getObjectAsInt()); + case JIVariant.VT_I8: + case JIVariant.VT_UINT: + case JIVariant.VT_INT: + return new SchemaAndValue(SchemaBuilder.int64().optional(), type.getObjectAsLong()); + case JIVariant.VT_UI1: + case JIVariant.VT_I1: + return new SchemaAndValue(SchemaBuilder.int8().optional(), type.getObjectAsUnsigned().getValue()); + case JIVariant.VT_BOOL: + return new SchemaAndValue(SchemaBuilder.bool().optional(), type.getObjectAsBoolean()); + case JIVariant.VT_R4: + return new SchemaAndValue(SchemaBuilder.float32().optional(), type.getObjectAsFloat()); + case JIVariant.VT_DECIMAL: + case JIVariant.VT_R8: + return new SchemaAndValue(SchemaBuilder.float64().optional(), type.getObjectAsDouble()); + case JIVariant.VT_DATE: + return new SchemaAndValue(SchemaBuilder.int64().optional(), type.getObjectAsDate().toInstant().toEpochMilli()); + default: + throw new SchemaBuilderException("Unknown type presented (" + type.getType() + ")"); + } + } catch (final JIException e) { + throw new SchemaBuilderException("Failed to convert variant type to native object: " + e.getMessage(), e); + } + } + + private Schema buildSchema(Schema valueSchema) { + SchemaBuilder ret = SchemaBuilder.struct() + .field(OpcDaFields.TAG_NAME, SchemaBuilder.string()) + .field(OpcDaFields.TIMESTAMP, SchemaBuilder.int64()) + .field(OpcDaFields.QUALITY, SchemaBuilder.int32().optional()) + .field(OpcDaFields.UPDATE_PERIOD, SchemaBuilder.int64().optional()) + .field(OpcDaFields.TAG_GROUP, SchemaBuilder.string().optional()) + .field(OpcDaFields.OPC_SERVER_DOMAIN, SchemaBuilder.string().optional()) + .field(OpcDaFields.OPC_SERVER_HOST, SchemaBuilder.string()); + + if (valueSchema != null) { + ret = ret.field(OpcDaFields.VALUE, valueSchema); + } else { + ret = ret.field(OpcDaFields.ERROR_CODE, SchemaBuilder.int32().optional()); + } + return ret; + } + + + @Override + public void start(Map props) { + transferQueue = new LinkedTransferQueue<>(); + opcOperations = new AutoReconnectOpcOperations<>(new OpcDaOperations()); + OpcDaConnectionProfile connectionProfile = propertiesToConnectionProfile(props); + tags = props.get(OpcDaSourceConnector.PROPERTY_TAGS).split(","); + host = connectionProfile.getHost(); + domain = connectionProfile.getDomain() != null ? connectionProfile.getDomain() : ""; + tagInfoMap = Arrays.stream(tags).collect(Collectors.toMap(Function.identity(), TagInfo::new)); + sleepTime = connectionProfile.getRefreshPeriodMillis(); + opcOperations.connect(connectionProfile); + if (!opcOperations.awaitConnected()) { + throw new ConnectException("Unable to connect"); + } + logger.info("Started OPC-DA task for tags {}", tags); + + running = true; + executorService = Executors.newSingleThreadExecutor(); + executorService.execute(() -> { + while (running) { + try { + opcOperations.stream(tags) + .map(opcData -> { + SchemaAndValue tmp = convertToNativeType(opcData.getValue()); + Schema valueSchema = buildSchema(tmp.schema()); + TagInfo meta = tagInfoMap.get(opcData.getTag()); + Struct value = new Struct(valueSchema) + .put(OpcDaFields.TIMESTAMP, opcData.getTimestamp().toEpochMilli()) + .put(OpcDaFields.TAG_NAME, opcData.getTag()) + .put(OpcDaFields.QUALITY, opcData.getQuality()) + .put(OpcDaFields.UPDATE_PERIOD, sleepTime) + .put(OpcDaFields.TAG_GROUP, meta.group) + .put(OpcDaFields.OPC_SERVER_HOST, host) + .put(OpcDaFields.OPC_SERVER_DOMAIN, domain); + + if (tmp.value() != null) { + value = value.put(OpcDaFields.VALUE, tmp.value()); + } + try { + if (opcData.getValue().getType() == JIVariant.VT_ERROR) { + value.put(OpcDaFields.ERROR_CODE, opcData.getValue().getObjectAsSCODE()); + } + } catch (JIException e) { + logger.warn("Unable to extract error code from tag value"); + } + return new SourceRecord( + Collections.singletonMap(OpcDaFields.TAG_NAME, opcData.getTag()), + Collections.singletonMap(OpcDaFields.TIMESTAMP, opcData.getTimestamp().toEpochMilli()), + "", + SchemaBuilder.STRING_SCHEMA, + "/" + domain + "/" + host + "/" + opcData.getTag(), + valueSchema, + value); + }) + .forEach(sourceRecord -> { + try { + transferQueue.put(sourceRecord); + } catch (InterruptedException e) { + throw new RuntimeException("Interrupted", e); + } + }); + } catch (Throwable t) { + logger.warn("OPC-DA streaming interrupted", t); + } + } + }); + } + + @Override + public List poll() throws InterruptedException { + if (transferQueue.size() == 0) { + Thread.sleep(sleepTime); + } + List ret = new ArrayList<>(); + transferQueue.drainTo(ret); + return ret; + } + + @Override + public void stop() { + running = false; + if (opcOperations != null) { + executorService.shutdown(); + executorService = null; + opcOperations.disconnect(); + opcOperations.awaitDisconnected(); + transferQueue = null; + } + logger.info("Stopped OPC-DA task for tags {}", tags); + } + + @Override + public String version() { + return getClass().getPackage().getImplementationVersion(); + } +} diff --git a/logisland-connect/logisland-connectors/pom.xml b/logisland-connect/logisland-connectors/pom.xml new file mode 100644 index 000000000..99354d278 --- /dev/null +++ b/logisland-connect/logisland-connectors/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + com.hurence.logisland + logisland-connect + 0.12.2 + + pom + + logisland-connectors + + + org.apache.kafka + connect-api + + + + logisland-connector-opcda + + + + diff --git a/logisland-connect/pom.xml b/logisland-connect/pom.xml index 4a3ae4658..98654c44e 100644 --- a/logisland-connect/pom.xml +++ b/logisland-connect/pom.xml @@ -16,6 +16,7 @@ logisland-connect-spark logisland-connectors-bundle + logisland-connectors diff --git a/logisland-documentation/connectors.rst b/logisland-documentation/connectors.rst index ac40f8d63..8159c69f0 100644 --- a/logisland-documentation/connectors.rst +++ b/logisland-documentation/connectors.rst @@ -43,6 +43,8 @@ Please refer to the following table for the details: +==========================+=========================+========================================================+==============================+ | Simulator | https://github.com/jcustenborder/kafka-connect-simulator | None (Built in) | +--------------------------+-------------------------+--------------------------------------------------------+------------------------------+ +| OPC-DA (IIoT) | https://github.com/Hurence/logisland | None (Built in) | ++--------------------------+-------------------------+--------------------------------------------------------+------------------------------+ | FTP | https://github.com/Eneco/kafka-connect-ftp | -DwithConnectFtp | +--------------------------+----------------------------------------------------------------------------------+------------------------------+ | Blockchain | https://github.com/Landoop/stream-reactor/tree/master/kafka-connect-blockchain | -DwithConnectBlockchain | diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst b/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst index ac40f8d63..8159c69f0 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/connectors.rst @@ -43,6 +43,8 @@ Please refer to the following table for the details: +==========================+=========================+========================================================+==============================+ | Simulator | https://github.com/jcustenborder/kafka-connect-simulator | None (Built in) | +--------------------------+-------------------------+--------------------------------------------------------+------------------------------+ +| OPC-DA (IIoT) | https://github.com/Hurence/logisland | None (Built in) | ++--------------------------+-------------------------+--------------------------------------------------------+------------------------------+ | FTP | https://github.com/Eneco/kafka-connect-ftp | -DwithConnectFtp | +--------------------------+----------------------------------------------------------------------------------+------------------------------+ | Blockchain | https://github.com/Landoop/stream-reactor/tree/master/kafka-connect-blockchain | -DwithConnectBlockchain | diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java index c6066490b..0da64a8a5 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java @@ -125,12 +125,12 @@ public void init(ControllerServiceInitializationContext context) throws Initiali } /** - * Instantiate ElasticSearch Client. This chould be called by subclasses' @OnScheduled method to create a client + * Instantiate Chronix Client. This should be called by subclasses' @OnScheduled method to create a client * if one does not yet exist. If called when scheduled, closeClient() should be called by the subclasses' @OnStopped * method so the client will be destroyed when the processor is stopped. * * @param context The context for this processor - * @throws ProcessException if an error occurs while creating an Elasticsearch client + * @throws ProcessException if an error occurs while creating an Chronix client */ protected void createSolrClient(ControllerServiceInitializationContext context) throws ProcessException { if (solr != null) { diff --git a/pom.xml b/pom.xml index 95b14e141..7e49bf3dd 100644 --- a/pom.xml +++ b/pom.xml @@ -175,6 +175,18 @@ Confluent http://packages.confluent.io/maven/ + + + jitpack.io + https://jitpack.io + + + openscada + http://neutronium.openscada.org/maven/ + + true + + @@ -1262,6 +1274,11 @@ logisland-connect-spark ${project.version} + + com.hurence.logisland + logisland-connector-opcda + ${project.version} + com.hurence.logisland logisland-connectors-bundle From d9c2a1adb5dbed5af9963c85fdb5cff46695d2f0 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 23 Apr 2018 18:00:09 +0200 Subject: [PATCH 20/35] Change OCP key format --- .../com/hurence/logisland/connect/opcda/OpcDaSourceTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java index 9297d074b..a68473f5c 100644 --- a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java @@ -223,7 +223,7 @@ public void start(Map props) { Collections.singletonMap(OpcDaFields.TIMESTAMP, opcData.getTimestamp().toEpochMilli()), "", SchemaBuilder.STRING_SCHEMA, - "/" + domain + "/" + host + "/" + opcData.getTag(), + domain + "|" + host + "|" + opcData.getTag(), valueSchema, value); }) From 049844852455f5b9a8d2ab667764371c63d2e5aa Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Wed, 2 May 2018 19:31:24 +0200 Subject: [PATCH 21/35] OPC-DA connector: support of multiple refresh rates --- .../logisland-connectors-bundle/pom.xml | 6 + .../logisland-connector-opcda/pom.xml | 2 +- .../connect/opcda/OpcDaSourceConnector.java | 43 ++- .../connect/opcda/OpcDaSourceTask.java | 319 +++++++++++------- .../connect/opcda/SmartOpcOperations.java | 78 +++++ .../opcda/OpcDaSourceConnectorTest.java | 130 +++++++ 6 files changed, 448 insertions(+), 130 deletions(-) create mode 100644 logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/SmartOpcOperations.java create mode 100644 logisland-connect/logisland-connectors/logisland-connector-opcda/src/test/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnectorTest.java diff --git a/logisland-connect/logisland-connectors-bundle/pom.xml b/logisland-connect/logisland-connectors-bundle/pom.xml index 3f6f7b9f5..7e9af0430 100644 --- a/logisland-connect/logisland-connectors-bundle/pom.xml +++ b/logisland-connect/logisland-connectors-bundle/pom.xml @@ -143,6 +143,7 @@ com.google.guava:guava com.google.inject:guice com.google.inject.extensions:guice-assistedinject + org.yaml:snakeyaml @@ -175,6 +176,11 @@ ${logisland.shade.packageName}.kc.simulator.com.google + + org.yaml + ${logisland.shade.packageName}.kc.simulator.org.yaml + + diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml b/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml index c94ffa862..341474a3c 100644 --- a/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml @@ -16,7 +16,7 @@ com.github.Hurence opc-simple - 15ea757262 + 1.1.2 com.hurence.logisland diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java index d0e1aaa55..d8aaaf631 100644 --- a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnector.java @@ -18,6 +18,7 @@ package com.hurence.logisland.connect.opcda; import org.apache.kafka.common.config.ConfigDef; +import org.apache.kafka.common.config.ConfigException; import org.apache.kafka.common.config.ConfigValue; import org.apache.kafka.common.utils.Utils; import org.apache.kafka.connect.connector.Task; @@ -25,9 +26,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -51,9 +53,21 @@ public class OpcDaSourceConnector extends SourceConnector { public static final String PROPERTY_PROGID = "progId"; public static final String PROPERTY_TAGS = "tags"; public static final String PROPERTY_SOCKET_TIMEOUT = "socketTimeoutMillis"; - public static final String PROPERTY_REFRESH_PERIOD = "refreshPeriodMillis"; + public static final String PROPERTY_DEFAULT_REFRESH_PERIOD = "defaultRefreshPeriodMillis"; public static final String PROPERTY_DIRECT_READ = "directReadFromDevice"; + private static final Pattern TAG_FORMAT_MATCHER = Pattern.compile("^([^:]+)(:(\\d+))?$"); + + public static Map.Entry parseTag(String t, Long defaultRefreshPeriod) { + Matcher matcher = TAG_FORMAT_MATCHER.matcher(t); + if (matcher.matches()) { + String tagName = matcher.group(1); + String refresh = matcher.groupCount() == 3 ? matcher.group(3) : null; + return new AbstractMap.SimpleEntry<>(tagName, refresh != null ? Long.parseLong(refresh) : defaultRefreshPeriod); + } + throw new IllegalArgumentException("" + t + " does not match"); + } + /** * The configuration. @@ -66,9 +80,19 @@ public class OpcDaSourceConnector extends SourceConnector { .define(PROPERTY_PASSWORD, ConfigDef.Type.STRING, ConfigDef.Importance.HIGH, "The logon password") .define(PROPERTY_CLSID, ConfigDef.Type.STRING, ConfigDef.Importance.MEDIUM, "The CLSID of the OPC server COM component") .define(PROPERTY_PROGID, ConfigDef.Type.STRING, ConfigDef.Importance.MEDIUM, "The Program ID of the OPC server COM component") - .define(PROPERTY_TAGS, ConfigDef.Type.LIST, ConfigDef.Importance.HIGH, "The tags to subscribe to") + .define(PROPERTY_TAGS, ConfigDef.Type.LIST, Collections.emptyList(), (name, value) -> { + if (value == null) { + throw new ConfigException("Cannot be null"); + } + List list = (List) value; + for (String s : list) { + if (!TAG_FORMAT_MATCHER.matcher(s).matches()) { + throw new ConfigException("Tag list should be like [tag_name]:[refresh_period_millis] with optional refresh period"); + } + } + }, ConfigDef.Importance.HIGH, "The tags to subscribe to following format tagname:refresh_period_millis. E.g. myTag:1000") .define(PROPERTY_SOCKET_TIMEOUT, ConfigDef.Type.LONG, ConfigDef.Importance.LOW, "The socket timeout") - .define(PROPERTY_REFRESH_PERIOD, ConfigDef.Type.LONG, 1000, ConfigDef.Importance.LOW, "The data refresh period in milliseconds") + .define(PROPERTY_DEFAULT_REFRESH_PERIOD, ConfigDef.Type.LONG, 1000, ConfigDef.Importance.LOW, "The default data refresh period in milliseconds") .define(PROPERTY_DIRECT_READ, ConfigDef.Type.BOOLEAN, false, ConfigDef.Importance.LOW, "Use server cache or read directly from device"); @@ -92,16 +116,21 @@ public Class taskClass() { @Override public List> taskConfigs(int maxTasks) { - List tags = (List) configValues.get(PROPERTY_TAGS).value(); + Long defaultRefreshPeriod = (Long) configValues.get(PROPERTY_DEFAULT_REFRESH_PERIOD).value(); + //first partition tags per refresh period + Map> tagPartitions = ((List) configValues.get(PROPERTY_TAGS).value()) + .stream().collect(Collectors.groupingBy(tag -> parseTag(tag, defaultRefreshPeriod).getValue())); + List> tags = new ArrayList<>(tagPartitions.values()); int maxPartitions = Math.min(maxTasks, tags.size()); int batchSize = (int) Math.ceil((double) tags.size() / maxPartitions); + //then find the ideal partition size and flatten tag list into a comma separated string (since config is a map of string,string) return IntStream.range(0, maxPartitions) .mapToObj(i -> tags.subList(i * batchSize, Math.min((i + 1) * batchSize, tags.size()))) .map(l -> { Map ret = configValues.entrySet().stream() .filter(a -> a.getValue().value() != null) .collect(Collectors.toMap(a -> a.getKey(), a -> a.getValue().value().toString())); - ret.put(PROPERTY_TAGS, Utils.join(l, ",")); + ret.put(PROPERTY_TAGS, Utils.join(l.stream().flatMap(List::stream).collect(Collectors.toList()), ",")); return ret; }) .collect(Collectors.toList()); diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java index a68473f5c..45a00a7b0 100644 --- a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java @@ -17,11 +17,10 @@ package com.hurence.logisland.connect.opcda; -import com.hurence.opc.OpcData; -import com.hurence.opc.OpcOperations; import com.hurence.opc.da.OpcDaConnectionProfile; import com.hurence.opc.da.OpcDaOperations; -import com.hurence.opc.util.AutoReconnectOpcOperations; +import com.hurence.opc.da.OpcDaSession; +import com.hurence.opc.da.OpcDaSessionProfile; import org.apache.kafka.connect.data.Schema; import org.apache.kafka.connect.data.SchemaAndValue; import org.apache.kafka.connect.data.SchemaBuilder; @@ -30,17 +29,16 @@ import org.apache.kafka.connect.errors.SchemaBuilderException; import org.apache.kafka.connect.source.SourceRecord; import org.apache.kafka.connect.source.SourceTask; -import org.jinterop.dcom.common.JIException; -import org.jinterop.dcom.core.JIVariant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.math.BigDecimal; import java.time.Duration; +import java.time.Instant; import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedTransferQueue; -import java.util.concurrent.TransferQueue; +import java.util.concurrent.*; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; import java.util.function.Function; import java.util.stream.Collectors; @@ -52,30 +50,54 @@ public class OpcDaSourceTask extends SourceTask { private static class TagInfo { final String group; final String name; + final Long refreshPeriodMillis; - public TagInfo(String tag) { + public TagInfo(String raw, long defaultRefreshPeriod) { + Map.Entry parsed = OpcDaSourceConnector.parseTag(raw, defaultRefreshPeriod); + String tag = parsed.getKey(); + this.refreshPeriodMillis = parsed.getValue(); int idx = tag.lastIndexOf('.'); if (idx > 0) { this.group = tag.substring(0, idx); } else { this.group = ""; } - this.name = tag.substring(idx + 1); + this.name = tag; } } private static final Logger logger = LoggerFactory.getLogger(OpcDaSourceTask.class); - private OpcOperations opcOperations; + private SmartOpcOperations opcOperations; private TransferQueue transferQueue; - private long sleepTime = 1000; + private Lock lock = new ReentrantLock(); private String tags[]; + private Map sessions; private Map tagInfoMap; - private ExecutorService executorService; + private Set tagReadingQueue; + private ScheduledExecutorService executorService; private String host; private String domain; + private boolean directRead; + private long defaultRefreshPeriodMillis; + private long minWaitTime; private volatile boolean running = false; + + private synchronized void createSessionsIfNeeded() { + if (opcOperations != null && opcOperations.resetStale()) { + sessions = new HashMap<>(); + tagInfoMap.entrySet().stream().collect(Collectors.groupingBy(entry -> entry.getValue().refreshPeriodMillis)) + .forEach((a, b) -> { + OpcDaSessionProfile sessionProfile = new OpcDaSessionProfile().withDirectRead(directRead) + .withRefreshPeriodMillis(a); + OpcDaSession session = opcOperations.createSession(sessionProfile); + b.forEach(c -> sessions.put(c.getKey(), session)); + }); + } + } + + private OpcDaConnectionProfile propertiesToConnectionProfile(Map properties) { OpcDaConnectionProfile ret = new OpcDaConnectionProfile(); ret.setHost(properties.get(OpcDaSourceConnector.PROPERTY_HOST)); @@ -87,71 +109,64 @@ private OpcDaConnectionProfile propertiesToConnectionProfile(Map ret.setUser(properties.get(OpcDaSourceConnector.PROPERTY_USER)); ret.setPassword(properties.get(OpcDaSourceConnector.PROPERTY_PASSWORD)); ret.setDomain(properties.get(OpcDaSourceConnector.PROPERTY_DOMAIN)); - if (properties.containsKey(OpcDaSourceConnector.PROPERTY_DIRECT_READ)) { - ret.setDirectRead(Boolean.parseBoolean(properties.get(OpcDaSourceConnector.PROPERTY_DIRECT_READ))); - } - if (properties.containsKey(OpcDaSourceConnector.PROPERTY_REFRESH_PERIOD)) { - ret.setRefreshPeriodMillis(Long.parseLong(properties.get(OpcDaSourceConnector.PROPERTY_REFRESH_PERIOD))); - } + if (properties.containsKey(OpcDaSourceConnector.PROPERTY_SOCKET_TIMEOUT)) { ret.setSocketTimeout(Duration.ofMillis(Long.parseLong(properties.get(OpcDaSourceConnector.PROPERTY_SOCKET_TIMEOUT)))); } return ret; } - private SchemaAndValue convertToNativeType(final JIVariant type) { - try { - if (type.isArray()) { - final ArrayList objs = new ArrayList<>(); - final Object[] array = (Object[]) type.getObjectAsArray().getArrayInstance(); + private SchemaAndValue convertToNativeType(final Object value) { - Schema arraySchema = null; + Class cls = value != null ? value.getClass() : Void.class; + final ArrayList objs = new ArrayList<>(); - for (final Object element : array) { - SchemaAndValue tmp = convertToNativeType((JIVariant) element); - if (arraySchema == null) { - arraySchema = tmp.schema(); - } - objs.add(tmp.value()); - } + if (cls.isArray()) { + final Object[] array = (Object[]) value; - return new SchemaAndValue(SchemaBuilder.array(arraySchema), objs.toArray()); - } + Schema arraySchema = null; - switch (type.getType()) { - case JIVariant.VT_NULL: - case JIVariant.VT_ERROR: - return SchemaAndValue.NULL; - case JIVariant.VT_BSTR: - return new SchemaAndValue(SchemaBuilder.string().optional(), type.getObjectAsString().getString()); - case JIVariant.VT_I2: - case JIVariant.VT_UI2: - return new SchemaAndValue(SchemaBuilder.int16().optional(), type.getObjectAsShort()); - case JIVariant.VT_I4: - case JIVariant.VT_UI4: - return new SchemaAndValue(SchemaBuilder.int32().optional(), type.getObjectAsInt()); - case JIVariant.VT_I8: - case JIVariant.VT_UINT: - case JIVariant.VT_INT: - return new SchemaAndValue(SchemaBuilder.int64().optional(), type.getObjectAsLong()); - case JIVariant.VT_UI1: - case JIVariant.VT_I1: - return new SchemaAndValue(SchemaBuilder.int8().optional(), type.getObjectAsUnsigned().getValue()); - case JIVariant.VT_BOOL: - return new SchemaAndValue(SchemaBuilder.bool().optional(), type.getObjectAsBoolean()); - case JIVariant.VT_R4: - return new SchemaAndValue(SchemaBuilder.float32().optional(), type.getObjectAsFloat()); - case JIVariant.VT_DECIMAL: - case JIVariant.VT_R8: - return new SchemaAndValue(SchemaBuilder.float64().optional(), type.getObjectAsDouble()); - case JIVariant.VT_DATE: - return new SchemaAndValue(SchemaBuilder.int64().optional(), type.getObjectAsDate().toInstant().toEpochMilli()); - default: - throw new SchemaBuilderException("Unknown type presented (" + type.getType() + ")"); + for (final Object element : array) { + SchemaAndValue tmp = convertToNativeType(element); + if (arraySchema == null) { + arraySchema = tmp.schema(); + } + objs.add(tmp.value()); } - } catch (final JIException e) { - throw new SchemaBuilderException("Failed to convert variant type to native object: " + e.getMessage(), e); + + return new SchemaAndValue(SchemaBuilder.array(arraySchema), objs); } + + if (cls.isAssignableFrom(Void.class)) { + return SchemaAndValue.NULL; + } else if (cls.isAssignableFrom(String.class)) { + return new SchemaAndValue(SchemaBuilder.string().optional(), value); + } else if (cls.isAssignableFrom(Short.class)) { + return new SchemaAndValue(SchemaBuilder.int16().optional(), value); + } else if (cls.isAssignableFrom(Integer.class)) { + + return new SchemaAndValue(SchemaBuilder.int32().optional(), value); + } else if (cls.isAssignableFrom(Long.class)) { + + return new SchemaAndValue(SchemaBuilder.int64().optional(), value); + } else if (cls.isAssignableFrom(Byte.class)) { + return new SchemaAndValue(SchemaBuilder.int8().optional(), value); + } else if (cls.isAssignableFrom(Character.class)) { + return new SchemaAndValue(SchemaBuilder.int32().optional(), value == null ? null : new Integer(((char) value))); + } else if (cls.isAssignableFrom(Boolean.class)) { + return new SchemaAndValue(SchemaBuilder.bool().optional(), value); + } else if (cls.isAssignableFrom(Float.class)) { + return new SchemaAndValue(SchemaBuilder.float32().optional(), value); + } else if (cls.isAssignableFrom(BigDecimal.class)) { + return new SchemaAndValue(SchemaBuilder.float64().optional(), value == null ? null : ((BigDecimal) value).doubleValue()); + } else if (cls.isAssignableFrom(Double.class)) { + return new SchemaAndValue(SchemaBuilder.float64().optional(), value); + } else if (cls.isAssignableFrom(Instant.class)) { + return new SchemaAndValue(SchemaBuilder.int64().optional(), value == null ? null : ((Instant) value).toEpochMilli()); + + } + throw new SchemaBuilderException("Unknown type presented (" + cls + ")"); + } private Schema buildSchema(Schema valueSchema) { @@ -176,75 +191,105 @@ private Schema buildSchema(Schema valueSchema) { @Override public void start(Map props) { transferQueue = new LinkedTransferQueue<>(); - opcOperations = new AutoReconnectOpcOperations<>(new OpcDaOperations()); + opcOperations = new SmartOpcOperations<>(new OpcDaOperations()); OpcDaConnectionProfile connectionProfile = propertiesToConnectionProfile(props); tags = props.get(OpcDaSourceConnector.PROPERTY_TAGS).split(","); host = connectionProfile.getHost(); domain = connectionProfile.getDomain() != null ? connectionProfile.getDomain() : ""; - tagInfoMap = Arrays.stream(tags).collect(Collectors.toMap(Function.identity(), TagInfo::new)); - sleepTime = connectionProfile.getRefreshPeriodMillis(); + defaultRefreshPeriodMillis = Long.parseLong(props.get(OpcDaSourceConnector.PROPERTY_DEFAULT_REFRESH_PERIOD)); + directRead = Boolean.parseBoolean(props.get(OpcDaSourceConnector.PROPERTY_DIRECT_READ)); + tagInfoMap = Arrays.stream(tags).map(t -> new TagInfo(t, defaultRefreshPeriodMillis)) + .collect(Collectors.toMap(t -> t.name, Function.identity())); opcOperations.connect(connectionProfile); if (!opcOperations.awaitConnected()) { throw new ConnectException("Unable to connect"); } - logger.info("Started OPC-DA task for tags {}", tags); - + logger.info("Started OPC-DA task for tags {}", (Object) tags); + minWaitTime = Math.max(10, gcd(tagInfoMap.values().stream().mapToLong(t -> t.refreshPeriodMillis).toArray())); + tagReadingQueue = new HashSet<>(); running = true; - executorService = Executors.newSingleThreadExecutor(); - executorService.execute(() -> { - while (running) { + executorService = Executors.newSingleThreadScheduledExecutor(); + tagInfoMap.forEach((k, v) -> executorService.scheduleAtFixedRate(() -> { + try { + lock.lock(); + tagReadingQueue.add(k); + } finally { + lock.unlock(); + } + }, 0, v.refreshPeriodMillis, TimeUnit.MILLISECONDS)); + + executorService.scheduleAtFixedRate(() -> { + try { + Set tagsToRead; try { - opcOperations.stream(tags) - .map(opcData -> { - SchemaAndValue tmp = convertToNativeType(opcData.getValue()); - Schema valueSchema = buildSchema(tmp.schema()); - TagInfo meta = tagInfoMap.get(opcData.getTag()); - Struct value = new Struct(valueSchema) - .put(OpcDaFields.TIMESTAMP, opcData.getTimestamp().toEpochMilli()) - .put(OpcDaFields.TAG_NAME, opcData.getTag()) - .put(OpcDaFields.QUALITY, opcData.getQuality()) - .put(OpcDaFields.UPDATE_PERIOD, sleepTime) - .put(OpcDaFields.TAG_GROUP, meta.group) - .put(OpcDaFields.OPC_SERVER_HOST, host) - .put(OpcDaFields.OPC_SERVER_DOMAIN, domain); - - if (tmp.value() != null) { - value = value.put(OpcDaFields.VALUE, tmp.value()); - } - try { - if (opcData.getValue().getType() == JIVariant.VT_ERROR) { - value.put(OpcDaFields.ERROR_CODE, opcData.getValue().getObjectAsSCODE()); + lock.lock(); + tagsToRead = new HashSet<>(tagReadingQueue); + tagReadingQueue.clear(); + } finally { + lock.unlock(); + } + if (tagsToRead.isEmpty()) { + return; + } + createSessionsIfNeeded(); + Map> sessionTags = + tagsToRead.stream().collect(Collectors.groupingBy(sessions::get)); + logger.info("Reading {}", sessionTags); + sessionTags.entrySet().parallelStream() + .map(entry -> entry.getKey().read(entry.getValue().toArray(new String[entry.getValue().size()]))) + .flatMap(Collection::stream) + .map(opcData -> { + SchemaAndValue tmp = convertToNativeType(opcData.getValue()); + Schema valueSchema = buildSchema(tmp.schema()); + TagInfo meta = tagInfoMap.get(opcData.getTag()); + Struct value = new Struct(valueSchema) + .put(OpcDaFields.TIMESTAMP, opcData.getTimestamp().toEpochMilli()) + .put(OpcDaFields.TAG_NAME, opcData.getTag()) + .put(OpcDaFields.QUALITY, opcData.getQuality()) + .put(OpcDaFields.UPDATE_PERIOD, meta.refreshPeriodMillis) + .put(OpcDaFields.TAG_GROUP, meta.group) + .put(OpcDaFields.OPC_SERVER_HOST, host) + .put(OpcDaFields.OPC_SERVER_DOMAIN, domain); + + if (tmp.value() != null) { + value = value.put(OpcDaFields.VALUE, tmp.value()); } - } catch (JIException e) { - logger.warn("Unable to extract error code from tag value"); - } - return new SourceRecord( - Collections.singletonMap(OpcDaFields.TAG_NAME, opcData.getTag()), - Collections.singletonMap(OpcDaFields.TIMESTAMP, opcData.getTimestamp().toEpochMilli()), - "", - SchemaBuilder.STRING_SCHEMA, - domain + "|" + host + "|" + opcData.getTag(), - valueSchema, - value); - }) - .forEach(sourceRecord -> { - try { - transferQueue.put(sourceRecord); - } catch (InterruptedException e) { - throw new RuntimeException("Interrupted", e); + if (opcData.getErrorCode().isPresent()) { + value.put(OpcDaFields.ERROR_CODE, opcData.getErrorCode().get()); + } + + Map partition = new HashMap<>(); + partition.put(OpcDaFields.TAG_NAME, opcData.getTag()); + partition.put(OpcDaFields.OPC_SERVER_DOMAIN, domain); + partition.put(OpcDaFields.OPC_SERVER_HOST, host); + + + return new SourceRecord( + partition, + Collections.singletonMap(OpcDaFields.TIMESTAMP, opcData.getTimestamp().toEpochMilli()), + "", + SchemaBuilder.STRING_SCHEMA, + domain + "|" + host + "|" + opcData.getTag(), + valueSchema, + value); } - }); - } catch (Throwable t) { - logger.warn("OPC-DA streaming interrupted", t); - } + ).forEach(sourceRecord -> { + try { + transferQueue.put(sourceRecord); + } catch (InterruptedException e) { + throw new RuntimeException("Interrupted", e); + } + }); + } catch (Exception e) { + logger.error("Got exception while reading tags", e); } - }); + }, 0L, minWaitTime, TimeUnit.MILLISECONDS); } @Override public List poll() throws InterruptedException { - if (transferQueue.size() == 0) { - Thread.sleep(sleepTime); + if (transferQueue.isEmpty()) { + Thread.sleep(minWaitTime); } List ret = new ArrayList<>(); transferQueue.drainTo(ret); @@ -254,18 +299,48 @@ public List poll() throws InterruptedException { @Override public void stop() { running = false; - if (opcOperations != null) { + if (executorService != null) { executorService.shutdown(); executorService = null; + } + + if (opcOperations != null) { opcOperations.disconnect(); opcOperations.awaitDisconnected(); - transferQueue = null; } - logger.info("Stopped OPC-DA task for tags {}", tags); + //session are automatically cleaned up and detached when the connection is closed. + sessions = null; + transferQueue = null; + tagReadingQueue = null; + tagInfoMap = null; + logger.info("Stopped OPC-DA task for tags {}", (Object) tags); } @Override public String version() { return getClass().getPackage().getImplementationVersion(); } + + /** + * GCD recursive version + * + * @param x dividend + * @param y divisor + * @return + */ + private static long gcdInternal(long x, long y) { + return (y == 0) ? x : gcdInternal(y, x % y); + } + + /** + * Great common divisor (An elegant way to do it with a lambda). + * + * @param numbers list of number + * @return the GCD. + */ + private static long gcd(long... numbers) { + return Arrays.stream(numbers).reduce(0, (x, y) -> (y == 0) ? x : gcdInternal(y, x % y)); + } + + } diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/SmartOpcOperations.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/SmartOpcOperations.java new file mode 100644 index 000000000..c67f7190b --- /dev/null +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/SmartOpcOperations.java @@ -0,0 +1,78 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.connect.opcda; + +import com.hurence.opc.ConnectionProfile; +import com.hurence.opc.OpcOperations; +import com.hurence.opc.OpcSession; +import com.hurence.opc.SessionProfile; +import com.hurence.opc.util.AutoReconnectOpcOperations; + +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * A 'smart' version of {@link AutoReconnectOpcOperations}. + * It tracks a stale flag becoming true if the connection has been interrupted and recreated. + * The stale flag can be reset upon call of method {@link SmartOpcOperations#resetStale()}. + * + * @author amarziali + */ +public class SmartOpcOperations, T extends SessionProfile, U extends OpcSession> + extends AutoReconnectOpcOperations { + + private final AtomicBoolean stale = new AtomicBoolean(); + + /** + * Construct an instance. + * + * @param delegate the deletegate {@link OpcOperations}. + */ + public SmartOpcOperations(OpcOperations delegate) { + super(delegate); + } + + @Override + public void connect(S connectionProfile) { + stale.set(true); + super.connect(connectionProfile); + awaitConnected(); + } + + @Override + public void disconnect() { + super.disconnect(); + } + + /** + * Reset the connection stale flag and return previous state. + * + * @return the stale flag. + */ + public synchronized boolean resetStale() { + awaitConnected(); + return stale.getAndSet(false); + } + + @Override + public String toString() { + return "SmartOpcOperations{" + + "stale=" + stale + + "} " + super.toString(); + } +} + diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/test/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnectorTest.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/test/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnectorTest.java new file mode 100644 index 000000000..afe0c215e --- /dev/null +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/test/java/com/hurence/logisland/connect/opcda/OpcDaSourceConnectorTest.java @@ -0,0 +1,130 @@ +/* + * * Copyright (C) 2018 Hurence (support@hurence.com) + * + * 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 com.hurence.logisland.connect.opcda; + +import com.hurence.opc.OpcTagInfo; +import com.hurence.opc.da.OpcDaConnectionProfile; +import com.hurence.opc.da.OpcDaOperations; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +public class OpcDaSourceConnectorTest { + + @Test(expected = IllegalArgumentException.class) + public void parseFailureTest() { + OpcDaSourceConnector.parseTag("test1:2aj", 500L); + } + + @Test + public void tagParseTest() { + Map.Entry toTest = OpcDaSourceConnector.parseTag("test1:1000", 500L); + Assert.assertEquals("test1", toTest.getKey()); + Assert.assertEquals(new Long(1000), toTest.getValue()); + + toTest = OpcDaSourceConnector.parseTag("test2", 500L); + Assert.assertEquals("test2", toTest.getKey()); + Assert.assertEquals(new Long(500), toTest.getValue()); + } + + @Test + public void configParseAndPartitionTest() { + OpcDaSourceConnector connector = new OpcDaSourceConnector(); + Map properties = new HashMap<>(); + properties.put(OpcDaSourceConnector.PROPERTY_DOMAIN, "domain"); + properties.put(OpcDaSourceConnector.PROPERTY_SOCKET_TIMEOUT, "2000"); + properties.put(OpcDaSourceConnector.PROPERTY_PASSWORD, "password"); + properties.put(OpcDaSourceConnector.PROPERTY_USER, "user"); + properties.put(OpcDaSourceConnector.PROPERTY_HOST, "host"); + properties.put(OpcDaSourceConnector.PROPERTY_CLSID, "clsId"); + properties.put(OpcDaSourceConnector.PROPERTY_TAGS, "tag1:1000,tag2,tag3:3000,tag4:3000"); + connector.start(properties); + List> configs = connector.taskConfigs(2); + Assert.assertEquals(2, configs.size()); + System.out.println(configs); + configs.stream().map(m -> m.get(OpcDaSourceConnector.PROPERTY_TAGS)) + .map(s -> s.split(",")).forEach(a -> Assert.assertEquals(2, a.length)); + } + + @Test + @Ignore + public void e2eTest() throws Exception { + AtomicInteger atomicInteger = new AtomicInteger(5); + Random r = new Random(); + OpcDaSourceConnector connector = new OpcDaSourceConnector(); + Map properties = new HashMap<>(); + properties.put(OpcDaSourceConnector.PROPERTY_DOMAIN, "OPC-9167C0D9342"); + properties.put(OpcDaSourceConnector.PROPERTY_SOCKET_TIMEOUT, "2000"); + properties.put(OpcDaSourceConnector.PROPERTY_PASSWORD, "opc"); + properties.put(OpcDaSourceConnector.PROPERTY_USER, "OPC"); + properties.put(OpcDaSourceConnector.PROPERTY_HOST, "192.168.56.101"); + properties.put(OpcDaSourceConnector.PROPERTY_CLSID, "F8582CF2-88FB-11D0-B850-00C0F0104305"); + properties.put(OpcDaSourceConnector.PROPERTY_TAGS, listAllTags().stream() + .map(s -> s + ":" + atomicInteger.getAndAdd(r.nextInt(130))) + .collect(Collectors.joining(",")) + ); + //"Read Error.Int4:1000,Square Waves.Real8,Random.ArrayOfString:100" + connector.start(properties); + OpcDaSourceTask task = new OpcDaSourceTask(); + task.start(connector.taskConfigs(1).get(0)); + ScheduledExecutorService es = Executors.newSingleThreadScheduledExecutor(); + es.scheduleAtFixedRate(() -> { + try { + task.poll().forEach(System.out::println); + } catch (InterruptedException e) { + //do nothing + } + }, 0, 10, TimeUnit.MILLISECONDS); + + Thread.sleep(10000); + task.stop(); + es.shutdown(); + connector.stop(); + } + + private Collection listAllTags() throws Exception { + //create a connection profile + OpcDaConnectionProfile connectionProfile = new OpcDaConnectionProfile() + .withComClsId("F8582CF2-88FB-11D0-B850-00C0F0104305") + .withDomain("OPC-9167C0D9342") + .withUser("OPC") + .withPassword("opc") + .withHost("192.168.56.101") + .withSocketTimeout(Duration.of(1, ChronoUnit.SECONDS)); + + //Create an instance of a da operations + try (OpcDaOperations opcDaOperations = new OpcDaOperations()) { + //connect using our profile + opcDaOperations.connect(connectionProfile); + if (!opcDaOperations.awaitConnected()) { + throw new IllegalStateException("Unable to connect"); + } + return opcDaOperations.browseTags().stream().map(OpcTagInfo::getName).collect(Collectors.toList()); + } + } + +} From 6a0ca026702531ed06917fb34db71ab9fcb9b41b Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 4 May 2018 11:14:45 +0200 Subject: [PATCH 22/35] Ability to batch chronix inserts. Simplify chronix updater --- .../service/solr/ChronixUpdater.java | 179 +++++++++--------- .../solr/Solr_6_4_2_ChronixClientService.java | 114 +++++------ .../solr/ChronixClientServiceTest.java | 44 ++--- 3 files changed, 163 insertions(+), 174 deletions(-) diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java index f9a377411..e567923d5 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java @@ -25,17 +25,15 @@ import de.qaware.chronix.timeseries.MetricTimeSeries; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.request.UpdateRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.*; import java.util.concurrent.BlockingQueue; import java.util.function.BinaryOperator; import java.util.function.Function; +import java.util.stream.Collectors; public class ChronixUpdater implements Runnable { @@ -45,6 +43,7 @@ public class ChronixUpdater implements Runnable { private final long flushInterval; private volatile int batchedUpdates = 0; private volatile long lastTS = 0; + private final Map fieldToMetricTypeMapping = new HashMap<>(); private static volatile int threadCount = 0; protected static Function groupBy = MetricTimeSeries::getName; @@ -52,10 +51,11 @@ public class ChronixUpdater implements Runnable { private Logger logger = LoggerFactory.getLogger(ChronixUpdater.class.getName() + threadCount); - MetricTimeSeriesConverter converter = null; - ChronixSolrStorage storage = null; + private MetricTimeSeriesConverter converter = null; + private ChronixSolrStorage storage = null; - public ChronixUpdater(SolrClient solr, BlockingQueue records, int batchSize, long flushInterval) { + public ChronixUpdater(SolrClient solr, BlockingQueue records, Map fieldToMetricTypeMapping, + int batchSize, long flushInterval) { this.solr = solr; this.records = records; this.batchSize = batchSize; @@ -63,118 +63,123 @@ public ChronixUpdater(SolrClient solr, BlockingQueue records, int batchS this.lastTS = System.nanoTime(); // far in the future ... converter = new MetricTimeSeriesConverter(); storage = new ChronixSolrStorage<>(batchSize, groupBy, reduce); + if (fieldToMetricTypeMapping != null) { + this.fieldToMetricTypeMapping.putAll(fieldToMetricTypeMapping); + } + //add the defaults + this.fieldToMetricTypeMapping.put(FieldDictionary.RECORD_VALUE, RecordDictionary.METRIC); threadCount++; } @Override public void run() { + List batchBuffer = new ArrayList<>(); + while (true) { // process record if one try { Record record = records.take(); if (record != null) { - - try { - MetricTimeSeries metric = convertToMetric(record); - - List timeSeries = new ArrayList<>(); - timeSeries.add(metric); - storage.add(converter, timeSeries, solr); - - - } catch (DatastoreClientServiceException ex) { - logger.error(ex.toString() + " for record " + record.toString()); - } - + batchBuffer.add(record); batchedUpdates++; } } catch (InterruptedException e) { - e.printStackTrace(); + //here we should exit the loop + logger.warn("Interrupted while waiting", e); + break; } // try { long currentTS = System.nanoTime(); - if ((currentTS - lastTS) >= flushInterval * 1000000 || batchedUpdates >= batchSize) { - - logger.debug("commiting " + batchedUpdates + " records to Chronix after " + (currentTS - lastTS) + " ns"); + if ((currentTS - lastTS) >= flushInterval * 1000000 || batchedUpdates >= batchSize) { + //use moustache operator to avoid composing strings when not needed + logger.debug("committing {} records to Chronix after {} ns", batchedUpdates, (currentTS - lastTS)); + storage.add(converter, convertToMetric(batchBuffer), solr); solr.commit(); lastTS = currentTS; + batchBuffer = new ArrayList<>(); batchedUpdates = 0; } // Thread.sleep(10); } catch (IOException | SolrServerException e) { - e.printStackTrace(); + logger.error("Unexpected I/O exception", e); } } } - MetricTimeSeries convertToMetric(Record record) throws DatastoreClientServiceException { - - try { - long recordTS = record.getTime().getTime(); - - MetricTimeSeries.Builder builder = new MetricTimeSeries.Builder( - record.getField(FieldDictionary.RECORD_NAME).asString(), RecordDictionary.METRIC) - .start(recordTS) - .end(recordTS + 10) - .attribute("id", record.getId()) - .point(recordTS, record.getField(FieldDictionary.RECORD_VALUE).asDouble()); - - - // add all other records - record.getAllFieldsSorted().forEach(field -> { - try { - // cleanup invalid es fields characters like '.' - String fieldName = field.getName() - .replaceAll("\\.", "_"); - - if (!fieldName.equals(FieldDictionary.RECORD_TIME) && - !fieldName.equals(FieldDictionary.RECORD_NAME) && - !fieldName.equals(FieldDictionary.RECORD_VALUE) && - !fieldName.equals(FieldDictionary.RECORD_ID) && - !fieldName.equals(FieldDictionary.RECORD_TYPE)) - - - switch (field.getType()) { - - case STRING: - builder.attribute(fieldName, field.asString()); - break; - case INT: - builder.attribute(fieldName, field.asInteger()); - break; - case LONG: - builder.attribute(fieldName, field.asLong()); - break; - case FLOAT: - builder.attribute(fieldName, field.asFloat()); - break; - case DOUBLE: - builder.attribute(fieldName, field.asDouble()); - break; - case BOOLEAN: - builder.attribute(fieldName, field.asBoolean()); - break; - default: - builder.attribute(fieldName, field.getRawValue()); - break; + List convertToMetric(List records) throws DatastoreClientServiceException { + + + Record first = records.get(0); + String batchUID = UUID.randomUUID().toString(); + final long firstTS = records.get(0).getTime().getTime(); + long tmp = records.get(records.size() - 1).getTime().getTime(); + final long lastTS = tmp == firstTS ? firstTS + 1 : firstTS; + + + //extract meta + String metricName = first.getField(FieldDictionary.RECORD_NAME).asString(); + Map attributes = first.getAllFieldsSorted().stream() + .filter(field -> !fieldToMetricTypeMapping.containsKey(field.getName())) + .filter(field -> !field.getName().equals(FieldDictionary.RECORD_TIME) && + !field.getName().equals(FieldDictionary.RECORD_NAME) && + !field.getName().equals(FieldDictionary.RECORD_VALUE) && + !field.getName().equals(FieldDictionary.RECORD_ID) && + !field.getName().equals(FieldDictionary.RECORD_TYPE) + ) + .collect(Collectors.toMap(field -> field.getName().replaceAll("\\.", "_"), + field -> { + try { + switch (field.getType()) { + case STRING: + return field.asString(); + case INT: + return field.asInteger(); + case LONG: + return field.asLong(); + case FLOAT: + return field.asFloat(); + case DOUBLE: + return field.asDouble(); + case BOOLEAN: + return field.asBoolean(); + default: + return field.getRawValue(); + } + } catch (Exception e) { + logger.error("Unable to process field " + field, e); + return null; + } } - - } catch (Throwable ex) { - logger.error("unable to process a field in record : {}, {}", record, ex.toString()); - } - - - }); - - return builder.build(); - } catch (Exception ex) { - throw new DatastoreClientServiceException("bad record : " + ex.toString()); - } + )); + + return fieldToMetricTypeMapping.entrySet().stream() + .map(entry -> { + MetricTimeSeries.Builder builder = new MetricTimeSeries.Builder(metricName, entry.getValue()); + List> points = records.stream() + .filter(record -> record.hasField(entry.getKey()) && record.getField(entry.getKey()).isSet()) + .map(record -> + new AbstractMap.SimpleEntry<>(record.getTime().getTime(), + record.getField(entry.getKey()).asDouble()) + ).collect(Collectors.toList()); + if (points.isEmpty()) { + return null; + } + points.stream().forEach(kv -> builder.point(kv.getKey(), kv.getValue())); + + return builder + .attribute("id", batchUID.toString()) + .start(firstTS) + .end(lastTS) + .attributes(attributes) + .build(); + } + ).filter(a -> a != null) + .collect(Collectors.toList()); } } diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java index 0da64a8a5..cc7d16299 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java @@ -29,6 +29,7 @@ import com.hurence.logisland.service.datastore.MultiGetQueryRecord; import com.hurence.logisland.service.datastore.MultiGetResponseRecord; import com.hurence.logisland.validator.StandardValidators; +import org.apache.commons.lang3.StringUtils; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; @@ -39,12 +40,12 @@ import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; @Tags({"solr", "client"}) @CapabilityDescription("Implementation of ChronixClientService for Solr 6 4 2") @@ -52,11 +53,11 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i private static Logger logger = LoggerFactory.getLogger(Solr_6_4_2_ChronixClientService.class); protected volatile SolrClient solr; - - List updaters = null; + private ExecutorService executorService = Executors.newSingleThreadExecutor(); + private ChronixUpdater updater; final BlockingQueue queue = new ArrayBlockingQueue<>(1000000); - PropertyDescriptor SOLR_CLOUD = new PropertyDescriptor.Builder() + public static final PropertyDescriptor SOLR_CLOUD = new PropertyDescriptor.Builder() .name("solr.cloud") .description("is slor cloud enabled") .required(true) @@ -64,7 +65,7 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i .defaultValue("false") .build(); - PropertyDescriptor SOLR_CONNECTION_STRING = new PropertyDescriptor.Builder() + public static final PropertyDescriptor SOLR_CONNECTION_STRING = new PropertyDescriptor.Builder() .name("solr.connection.string") .description("zookeeper quorum host1:2181,host2:2181 for solr cloud or http address of a solr core ") .required(true) @@ -72,22 +73,15 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i .defaultValue("localhost:8983/solr") .build(); - PropertyDescriptor SOLR_COLLECTION = new PropertyDescriptor.Builder() + public static final PropertyDescriptor SOLR_COLLECTION = new PropertyDescriptor.Builder() .name("solr.collection") .description("name of the collection to use") .required(true) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .build(); - PropertyDescriptor CONCURRENT_REQUESTS = new PropertyDescriptor.Builder() - .name("solr.concurrent.requests") - .description("setConcurrentRequests") - .required(false) - .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR) - .defaultValue("2") - .build(); - PropertyDescriptor FLUSH_INTERVAL = new PropertyDescriptor.Builder() + public static final PropertyDescriptor FLUSH_INTERVAL = new PropertyDescriptor.Builder() .name("flush.interval") .description("flush interval in ms") .required(false) @@ -95,19 +89,28 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i .defaultValue("500") .build(); + public static final PropertyDescriptor METRICS_TYPE_MAPPING = new PropertyDescriptor.Builder() + .name("metrics.type.mapping") + .description("The mapping between record field name and chronix metric type. " + + "This is a comma separated list. E.g. record_value:metric,quality:quality") + .required(false) + .addValidator(StandardValidators.COMMA_SEPARATED_LIST_VALIDATOR) + .defaultValue("") + .build(); + + + @Override public List getSupportedPropertyDescriptors() { - List props = new ArrayList<>(); props.add(BATCH_SIZE); props.add(BULK_SIZE); props.add(SOLR_CLOUD); props.add(SOLR_COLLECTION); props.add(SOLR_CONNECTION_STRING); - props.add(CONCURRENT_REQUESTS); props.add(FLUSH_INTERVAL); - + props.add(METRICS_TYPE_MAPPING); return Collections.unmodifiableList(props); } @@ -119,11 +122,21 @@ public void init(ControllerServiceInitializationContext context) throws Initiali createSolrClient(context); createChronixStorage(context); } catch (Exception e) { - throw new InitializationException(e); + throw new InitializationException("Error while instantiating ChronixClientService. " + + "Please check your configuration!", e); } } } + + private Map createMetricsTypeMapping(ControllerServiceInitializationContext context) { + return Arrays.stream(context.getPropertyValue(METRICS_TYPE_MAPPING).asString() + .split(",")) + .filter(StringUtils::isNotBlank) + .map(s -> s.split(":")) + .collect(Collectors.toMap(a -> a[0], a -> a[1])); + } + /** * Instantiate Chronix Client. This should be called by subclasses' @OnScheduled method to create a client * if one does not yet exist. If called when scheduled, closeClient() should be called by the subclasses' @OnStopped @@ -136,54 +149,41 @@ protected void createSolrClient(ControllerServiceInitializationContext context) if (solr != null) { return; } - try { - // create a solr client - final boolean isCloud = context.getPropertyValue(SOLR_CLOUD).asBoolean(); - final String connectionString = context.getPropertyValue(SOLR_CONNECTION_STRING).asString(); - final String collection = context.getPropertyValue(SOLR_COLLECTION).asString(); - - - if (isCloud) { - //logInfo("creating solrCloudClient on $solrUrl for collection $collection"); - CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(connectionString).build(); - cloudSolrClient.setDefaultCollection(collection); - cloudSolrClient.setZkClientTimeout(30000); - cloudSolrClient.setZkConnectTimeout(30000); - solr = cloudSolrClient; - } else { - // logInfo(s"creating HttpSolrClient on $solrUrl for collection $collection") - solr = new HttpSolrClient.Builder(connectionString + "/" + collection).build(); - } + + // create a solr client + final boolean isCloud = context.getPropertyValue(SOLR_CLOUD).asBoolean(); + final String connectionString = context.getPropertyValue(SOLR_CONNECTION_STRING).asString(); + final String collection = context.getPropertyValue(SOLR_COLLECTION).asString(); - } catch (Exception ex) { - logger.error(ex.toString()); + if (isCloud) { + //logInfo("creating solrCloudClient on $solrUrl for collection $collection"); + CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(connectionString).build(); + cloudSolrClient.setDefaultCollection(collection); + cloudSolrClient.setZkClientTimeout(30000); + cloudSolrClient.setZkConnectTimeout(30000); + solr = cloudSolrClient; + } else { + // logInfo(s"creating HttpSolrClient on $solrUrl for collection $collection") + solr = new HttpSolrClient.Builder(connectionString + "/" + collection).build(); } + + } protected void createChronixStorage(ControllerServiceInitializationContext context) throws ProcessException { - if (updaters != null) { + if (updater != null) { return; } - try { - // setup a thread pool of solr updaters - int batchSize = context.getPropertyValue(BATCH_SIZE).asInteger(); - int numConcurrentRequests = context.getPropertyValue(CONCURRENT_REQUESTS).asInteger(); - long flushInterval = context.getPropertyValue(FLUSH_INTERVAL).asLong(); - updaters = new ArrayList<>(numConcurrentRequests); - for (int i = 0; i < numConcurrentRequests; i++) { - ChronixUpdater updater = new ChronixUpdater(solr, queue, batchSize, flushInterval); - new Thread(updater).start(); - updaters.add(updater); - } + // setup a thread pool of solr updaters + int batchSize = context.getPropertyValue(BATCH_SIZE).asInteger(); + long flushInterval = context.getPropertyValue(FLUSH_INTERVAL).asLong(); + updater = new ChronixUpdater(solr, queue, createMetricsTypeMapping(context), batchSize, flushInterval); + executorService.execute(updater); - - } catch (Exception ex) { - logger.error(ex.toString()); - } } @Override diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java index a254a76b6..966819c2b 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java @@ -60,31 +60,6 @@ protected void createSolrClient(ControllerServiceInitializationContext context) solr = solrRule.getClient(); } -// @Override -// protected void createChronixStorage(ControllerServiceInitializationContext context) throws ProcessException { -// if (storage != null) { -// return; -// } -// try { -// -// converter = new MetricTimeSeriesConverter(); -// storage = new ChronixSolrStorage<>(20, groupBy, reduce); -// -// -// } catch (Exception ex) { -// logger.error(ex.toString()); -// } -// } - - - @Override - public List getSupportedPropertyDescriptors() { - - List props = new ArrayList<>(); - - return Collections.unmodifiableList(props); - } - } private DatastoreClientService configureClientService(final TestRunner runner) throws InitializationException { @@ -92,9 +67,16 @@ private DatastoreClientService configureClientService(final TestRunner runner) t runner.setProperty(TestProcessor.SOLR_CLIENT_SERVICE, "service"); + runner.setProperty("solr.collection", "chronix"); + + //shouldn't be automatic?? + service.getSupportedPropertyDescriptors().stream() + .filter(p->p.getDefaultValue() != null) + .forEach(p->runner.setProperty(p, p.getDefaultValue())); + runner.addControllerService("service", service); runner.enableControllerService(service); - runner.assertValid(service); + //runner.assertValid(service); return service; } @@ -104,6 +86,7 @@ private Collection getRandomMetrics(int size) throws InterruptedExceptio List records = new ArrayList<>(); Random rnd = new Random(); + long now = System.currentTimeMillis(); String[] metricsType = {"disk.io", "cpu.wait", "io.wait"}; String[] hosts = {"host1", "host2", "host3"}; @@ -113,8 +96,9 @@ private Collection getRandomMetrics(int size) throws InterruptedExceptio .setStringField("host", hosts[rnd.nextInt(3)]) .setField(FieldDictionary.RECORD_TIME, FieldType.LONG, new Date().getTime()) .setField(FieldDictionary.RECORD_VALUE, FieldType.FLOAT, 100.0 * Math.random()) + .setTime(now) ); - Thread.sleep(rnd.nextInt(500)); + now+=rnd.nextInt(500); } return records; @@ -122,7 +106,7 @@ private Collection getRandomMetrics(int size) throws InterruptedExceptio @Test - public void testConvertion() throws InterruptedException { + public void testConversion() throws InterruptedException { final Date now = new Date(); final Record record = new StandardRecord(RecordDictionary.METRIC) @@ -132,8 +116,8 @@ public void testConvertion() throws InterruptedException { final BlockingQueue queue = new ArrayBlockingQueue<>(1000000); - final ChronixUpdater service = new ChronixUpdater(solrRule.getClient(), queue, 10, 1000); - MetricTimeSeries metric = service.convertToMetric(record); + final ChronixUpdater service = new ChronixUpdater(solrRule.getClient(), queue, Collections.emptyMap(), 10, 1000); + MetricTimeSeries metric = service.convertToMetric(Collections.singletonList(record)).get(0); assertTrue(metric.getName().equals("cpu.wait")); assertTrue(metric.getType().equals("metric")); From adc2d8ca681e4dce24aa3f60b459429f7123137d Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 4 May 2018 11:51:53 +0200 Subject: [PATCH 23/35] Ensure BatchID is present --- .../java/com/hurence/logisland/service/solr/ChronixUpdater.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java index e567923d5..94f995c02 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java @@ -172,10 +172,10 @@ List convertToMetric(List records) throws DatastoreCli points.stream().forEach(kv -> builder.point(kv.getKey(), kv.getValue())); return builder - .attribute("id", batchUID.toString()) .start(firstTS) .end(lastTS) .attributes(attributes) + .attribute("id", batchUID) .build(); } ).filter(a -> a != null) From 3767a9bb68c4fa2395506c398ac75aad46b2d882 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 4 May 2018 13:16:33 +0200 Subject: [PATCH 24/35] Do right grouping to avoid measurement aliasing --- .../com/hurence/logisland/service/solr/ChronixUpdater.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java index 94f995c02..583b730cc 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java @@ -96,7 +96,10 @@ public void run() { if ((currentTS - lastTS) >= flushInterval * 1000000 || batchedUpdates >= batchSize) { //use moustache operator to avoid composing strings when not needed logger.debug("committing {} records to Chronix after {} ns", batchedUpdates, (currentTS - lastTS)); - storage.add(converter, convertToMetric(batchBuffer), solr); + batchBuffer.stream().collect(Collectors.groupingBy(r -> r.getField(FieldDictionary.RECORD_NAME).asString())) + .values().forEach(list -> { + storage.add(converter, convertToMetric(list.stream().sorted(Comparator.comparing(Record::getTime)).collect(Collectors.toList())), solr); + }); solr.commit(); lastTS = currentTS; batchBuffer = new ArrayList<>(); From 8b7e768dd77e76bed2b640fd7f0fe2f846f794dd Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 4 May 2018 14:18:13 +0200 Subject: [PATCH 25/35] Reduced verbosity for opc-da source connector --- .../com/hurence/logisland/connect/opcda/OpcDaSourceTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java index 45a00a7b0..1f0d67109 100644 --- a/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/src/main/java/com/hurence/logisland/connect/opcda/OpcDaSourceTask.java @@ -234,7 +234,7 @@ public void start(Map props) { createSessionsIfNeeded(); Map> sessionTags = tagsToRead.stream().collect(Collectors.groupingBy(sessions::get)); - logger.info("Reading {}", sessionTags); + logger.debug("Reading {}", sessionTags); sessionTags.entrySet().parallelStream() .map(entry -> entry.getKey().read(entry.getValue().toArray(new String[entry.getValue().size()]))) .flatMap(Collection::stream) From 9b638568d5852333b1e58431df4e09f7bed66e87 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 4 May 2018 11:14:45 +0200 Subject: [PATCH 26/35] Ability to batch chronix inserts. Simplify chronix updater --- .../service/solr/ChronixUpdater.java | 179 +++++++++--------- .../solr/Solr_6_4_2_ChronixClientService.java | 114 +++++------ .../solr/ChronixClientServiceTest.java | 44 ++--- 3 files changed, 163 insertions(+), 174 deletions(-) diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java index f9a377411..e567923d5 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java @@ -25,17 +25,15 @@ import de.qaware.chronix.timeseries.MetricTimeSeries; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.request.UpdateRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.*; import java.util.concurrent.BlockingQueue; import java.util.function.BinaryOperator; import java.util.function.Function; +import java.util.stream.Collectors; public class ChronixUpdater implements Runnable { @@ -45,6 +43,7 @@ public class ChronixUpdater implements Runnable { private final long flushInterval; private volatile int batchedUpdates = 0; private volatile long lastTS = 0; + private final Map fieldToMetricTypeMapping = new HashMap<>(); private static volatile int threadCount = 0; protected static Function groupBy = MetricTimeSeries::getName; @@ -52,10 +51,11 @@ public class ChronixUpdater implements Runnable { private Logger logger = LoggerFactory.getLogger(ChronixUpdater.class.getName() + threadCount); - MetricTimeSeriesConverter converter = null; - ChronixSolrStorage storage = null; + private MetricTimeSeriesConverter converter = null; + private ChronixSolrStorage storage = null; - public ChronixUpdater(SolrClient solr, BlockingQueue records, int batchSize, long flushInterval) { + public ChronixUpdater(SolrClient solr, BlockingQueue records, Map fieldToMetricTypeMapping, + int batchSize, long flushInterval) { this.solr = solr; this.records = records; this.batchSize = batchSize; @@ -63,118 +63,123 @@ public ChronixUpdater(SolrClient solr, BlockingQueue records, int batchS this.lastTS = System.nanoTime(); // far in the future ... converter = new MetricTimeSeriesConverter(); storage = new ChronixSolrStorage<>(batchSize, groupBy, reduce); + if (fieldToMetricTypeMapping != null) { + this.fieldToMetricTypeMapping.putAll(fieldToMetricTypeMapping); + } + //add the defaults + this.fieldToMetricTypeMapping.put(FieldDictionary.RECORD_VALUE, RecordDictionary.METRIC); threadCount++; } @Override public void run() { + List batchBuffer = new ArrayList<>(); + while (true) { // process record if one try { Record record = records.take(); if (record != null) { - - try { - MetricTimeSeries metric = convertToMetric(record); - - List timeSeries = new ArrayList<>(); - timeSeries.add(metric); - storage.add(converter, timeSeries, solr); - - - } catch (DatastoreClientServiceException ex) { - logger.error(ex.toString() + " for record " + record.toString()); - } - + batchBuffer.add(record); batchedUpdates++; } } catch (InterruptedException e) { - e.printStackTrace(); + //here we should exit the loop + logger.warn("Interrupted while waiting", e); + break; } // try { long currentTS = System.nanoTime(); - if ((currentTS - lastTS) >= flushInterval * 1000000 || batchedUpdates >= batchSize) { - - logger.debug("commiting " + batchedUpdates + " records to Chronix after " + (currentTS - lastTS) + " ns"); + if ((currentTS - lastTS) >= flushInterval * 1000000 || batchedUpdates >= batchSize) { + //use moustache operator to avoid composing strings when not needed + logger.debug("committing {} records to Chronix after {} ns", batchedUpdates, (currentTS - lastTS)); + storage.add(converter, convertToMetric(batchBuffer), solr); solr.commit(); lastTS = currentTS; + batchBuffer = new ArrayList<>(); batchedUpdates = 0; } // Thread.sleep(10); } catch (IOException | SolrServerException e) { - e.printStackTrace(); + logger.error("Unexpected I/O exception", e); } } } - MetricTimeSeries convertToMetric(Record record) throws DatastoreClientServiceException { - - try { - long recordTS = record.getTime().getTime(); - - MetricTimeSeries.Builder builder = new MetricTimeSeries.Builder( - record.getField(FieldDictionary.RECORD_NAME).asString(), RecordDictionary.METRIC) - .start(recordTS) - .end(recordTS + 10) - .attribute("id", record.getId()) - .point(recordTS, record.getField(FieldDictionary.RECORD_VALUE).asDouble()); - - - // add all other records - record.getAllFieldsSorted().forEach(field -> { - try { - // cleanup invalid es fields characters like '.' - String fieldName = field.getName() - .replaceAll("\\.", "_"); - - if (!fieldName.equals(FieldDictionary.RECORD_TIME) && - !fieldName.equals(FieldDictionary.RECORD_NAME) && - !fieldName.equals(FieldDictionary.RECORD_VALUE) && - !fieldName.equals(FieldDictionary.RECORD_ID) && - !fieldName.equals(FieldDictionary.RECORD_TYPE)) - - - switch (field.getType()) { - - case STRING: - builder.attribute(fieldName, field.asString()); - break; - case INT: - builder.attribute(fieldName, field.asInteger()); - break; - case LONG: - builder.attribute(fieldName, field.asLong()); - break; - case FLOAT: - builder.attribute(fieldName, field.asFloat()); - break; - case DOUBLE: - builder.attribute(fieldName, field.asDouble()); - break; - case BOOLEAN: - builder.attribute(fieldName, field.asBoolean()); - break; - default: - builder.attribute(fieldName, field.getRawValue()); - break; + List convertToMetric(List records) throws DatastoreClientServiceException { + + + Record first = records.get(0); + String batchUID = UUID.randomUUID().toString(); + final long firstTS = records.get(0).getTime().getTime(); + long tmp = records.get(records.size() - 1).getTime().getTime(); + final long lastTS = tmp == firstTS ? firstTS + 1 : firstTS; + + + //extract meta + String metricName = first.getField(FieldDictionary.RECORD_NAME).asString(); + Map attributes = first.getAllFieldsSorted().stream() + .filter(field -> !fieldToMetricTypeMapping.containsKey(field.getName())) + .filter(field -> !field.getName().equals(FieldDictionary.RECORD_TIME) && + !field.getName().equals(FieldDictionary.RECORD_NAME) && + !field.getName().equals(FieldDictionary.RECORD_VALUE) && + !field.getName().equals(FieldDictionary.RECORD_ID) && + !field.getName().equals(FieldDictionary.RECORD_TYPE) + ) + .collect(Collectors.toMap(field -> field.getName().replaceAll("\\.", "_"), + field -> { + try { + switch (field.getType()) { + case STRING: + return field.asString(); + case INT: + return field.asInteger(); + case LONG: + return field.asLong(); + case FLOAT: + return field.asFloat(); + case DOUBLE: + return field.asDouble(); + case BOOLEAN: + return field.asBoolean(); + default: + return field.getRawValue(); + } + } catch (Exception e) { + logger.error("Unable to process field " + field, e); + return null; + } } - - } catch (Throwable ex) { - logger.error("unable to process a field in record : {}, {}", record, ex.toString()); - } - - - }); - - return builder.build(); - } catch (Exception ex) { - throw new DatastoreClientServiceException("bad record : " + ex.toString()); - } + )); + + return fieldToMetricTypeMapping.entrySet().stream() + .map(entry -> { + MetricTimeSeries.Builder builder = new MetricTimeSeries.Builder(metricName, entry.getValue()); + List> points = records.stream() + .filter(record -> record.hasField(entry.getKey()) && record.getField(entry.getKey()).isSet()) + .map(record -> + new AbstractMap.SimpleEntry<>(record.getTime().getTime(), + record.getField(entry.getKey()).asDouble()) + ).collect(Collectors.toList()); + if (points.isEmpty()) { + return null; + } + points.stream().forEach(kv -> builder.point(kv.getKey(), kv.getValue())); + + return builder + .attribute("id", batchUID.toString()) + .start(firstTS) + .end(lastTS) + .attributes(attributes) + .build(); + } + ).filter(a -> a != null) + .collect(Collectors.toList()); } } diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java index 0da64a8a5..cc7d16299 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/Solr_6_4_2_ChronixClientService.java @@ -29,6 +29,7 @@ import com.hurence.logisland.service.datastore.MultiGetQueryRecord; import com.hurence.logisland.service.datastore.MultiGetResponseRecord; import com.hurence.logisland.validator.StandardValidators; +import org.apache.commons.lang3.StringUtils; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; @@ -39,12 +40,12 @@ import org.slf4j.LoggerFactory; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; @Tags({"solr", "client"}) @CapabilityDescription("Implementation of ChronixClientService for Solr 6 4 2") @@ -52,11 +53,11 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i private static Logger logger = LoggerFactory.getLogger(Solr_6_4_2_ChronixClientService.class); protected volatile SolrClient solr; - - List updaters = null; + private ExecutorService executorService = Executors.newSingleThreadExecutor(); + private ChronixUpdater updater; final BlockingQueue queue = new ArrayBlockingQueue<>(1000000); - PropertyDescriptor SOLR_CLOUD = new PropertyDescriptor.Builder() + public static final PropertyDescriptor SOLR_CLOUD = new PropertyDescriptor.Builder() .name("solr.cloud") .description("is slor cloud enabled") .required(true) @@ -64,7 +65,7 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i .defaultValue("false") .build(); - PropertyDescriptor SOLR_CONNECTION_STRING = new PropertyDescriptor.Builder() + public static final PropertyDescriptor SOLR_CONNECTION_STRING = new PropertyDescriptor.Builder() .name("solr.connection.string") .description("zookeeper quorum host1:2181,host2:2181 for solr cloud or http address of a solr core ") .required(true) @@ -72,22 +73,15 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i .defaultValue("localhost:8983/solr") .build(); - PropertyDescriptor SOLR_COLLECTION = new PropertyDescriptor.Builder() + public static final PropertyDescriptor SOLR_COLLECTION = new PropertyDescriptor.Builder() .name("solr.collection") .description("name of the collection to use") .required(true) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .build(); - PropertyDescriptor CONCURRENT_REQUESTS = new PropertyDescriptor.Builder() - .name("solr.concurrent.requests") - .description("setConcurrentRequests") - .required(false) - .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR) - .defaultValue("2") - .build(); - PropertyDescriptor FLUSH_INTERVAL = new PropertyDescriptor.Builder() + public static final PropertyDescriptor FLUSH_INTERVAL = new PropertyDescriptor.Builder() .name("flush.interval") .description("flush interval in ms") .required(false) @@ -95,19 +89,28 @@ public class Solr_6_4_2_ChronixClientService extends AbstractControllerService i .defaultValue("500") .build(); + public static final PropertyDescriptor METRICS_TYPE_MAPPING = new PropertyDescriptor.Builder() + .name("metrics.type.mapping") + .description("The mapping between record field name and chronix metric type. " + + "This is a comma separated list. E.g. record_value:metric,quality:quality") + .required(false) + .addValidator(StandardValidators.COMMA_SEPARATED_LIST_VALIDATOR) + .defaultValue("") + .build(); + + + @Override public List getSupportedPropertyDescriptors() { - List props = new ArrayList<>(); props.add(BATCH_SIZE); props.add(BULK_SIZE); props.add(SOLR_CLOUD); props.add(SOLR_COLLECTION); props.add(SOLR_CONNECTION_STRING); - props.add(CONCURRENT_REQUESTS); props.add(FLUSH_INTERVAL); - + props.add(METRICS_TYPE_MAPPING); return Collections.unmodifiableList(props); } @@ -119,11 +122,21 @@ public void init(ControllerServiceInitializationContext context) throws Initiali createSolrClient(context); createChronixStorage(context); } catch (Exception e) { - throw new InitializationException(e); + throw new InitializationException("Error while instantiating ChronixClientService. " + + "Please check your configuration!", e); } } } + + private Map createMetricsTypeMapping(ControllerServiceInitializationContext context) { + return Arrays.stream(context.getPropertyValue(METRICS_TYPE_MAPPING).asString() + .split(",")) + .filter(StringUtils::isNotBlank) + .map(s -> s.split(":")) + .collect(Collectors.toMap(a -> a[0], a -> a[1])); + } + /** * Instantiate Chronix Client. This should be called by subclasses' @OnScheduled method to create a client * if one does not yet exist. If called when scheduled, closeClient() should be called by the subclasses' @OnStopped @@ -136,54 +149,41 @@ protected void createSolrClient(ControllerServiceInitializationContext context) if (solr != null) { return; } - try { - // create a solr client - final boolean isCloud = context.getPropertyValue(SOLR_CLOUD).asBoolean(); - final String connectionString = context.getPropertyValue(SOLR_CONNECTION_STRING).asString(); - final String collection = context.getPropertyValue(SOLR_COLLECTION).asString(); - - - if (isCloud) { - //logInfo("creating solrCloudClient on $solrUrl for collection $collection"); - CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(connectionString).build(); - cloudSolrClient.setDefaultCollection(collection); - cloudSolrClient.setZkClientTimeout(30000); - cloudSolrClient.setZkConnectTimeout(30000); - solr = cloudSolrClient; - } else { - // logInfo(s"creating HttpSolrClient on $solrUrl for collection $collection") - solr = new HttpSolrClient.Builder(connectionString + "/" + collection).build(); - } + + // create a solr client + final boolean isCloud = context.getPropertyValue(SOLR_CLOUD).asBoolean(); + final String connectionString = context.getPropertyValue(SOLR_CONNECTION_STRING).asString(); + final String collection = context.getPropertyValue(SOLR_COLLECTION).asString(); - } catch (Exception ex) { - logger.error(ex.toString()); + if (isCloud) { + //logInfo("creating solrCloudClient on $solrUrl for collection $collection"); + CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder().withZkHost(connectionString).build(); + cloudSolrClient.setDefaultCollection(collection); + cloudSolrClient.setZkClientTimeout(30000); + cloudSolrClient.setZkConnectTimeout(30000); + solr = cloudSolrClient; + } else { + // logInfo(s"creating HttpSolrClient on $solrUrl for collection $collection") + solr = new HttpSolrClient.Builder(connectionString + "/" + collection).build(); } + + } protected void createChronixStorage(ControllerServiceInitializationContext context) throws ProcessException { - if (updaters != null) { + if (updater != null) { return; } - try { - // setup a thread pool of solr updaters - int batchSize = context.getPropertyValue(BATCH_SIZE).asInteger(); - int numConcurrentRequests = context.getPropertyValue(CONCURRENT_REQUESTS).asInteger(); - long flushInterval = context.getPropertyValue(FLUSH_INTERVAL).asLong(); - updaters = new ArrayList<>(numConcurrentRequests); - for (int i = 0; i < numConcurrentRequests; i++) { - ChronixUpdater updater = new ChronixUpdater(solr, queue, batchSize, flushInterval); - new Thread(updater).start(); - updaters.add(updater); - } + // setup a thread pool of solr updaters + int batchSize = context.getPropertyValue(BATCH_SIZE).asInteger(); + long flushInterval = context.getPropertyValue(FLUSH_INTERVAL).asLong(); + updater = new ChronixUpdater(solr, queue, createMetricsTypeMapping(context), batchSize, flushInterval); + executorService.execute(updater); - - } catch (Exception ex) { - logger.error(ex.toString()); - } } @Override diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java index a254a76b6..966819c2b 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/test/java/com/hurence/logisland/service/solr/ChronixClientServiceTest.java @@ -60,31 +60,6 @@ protected void createSolrClient(ControllerServiceInitializationContext context) solr = solrRule.getClient(); } -// @Override -// protected void createChronixStorage(ControllerServiceInitializationContext context) throws ProcessException { -// if (storage != null) { -// return; -// } -// try { -// -// converter = new MetricTimeSeriesConverter(); -// storage = new ChronixSolrStorage<>(20, groupBy, reduce); -// -// -// } catch (Exception ex) { -// logger.error(ex.toString()); -// } -// } - - - @Override - public List getSupportedPropertyDescriptors() { - - List props = new ArrayList<>(); - - return Collections.unmodifiableList(props); - } - } private DatastoreClientService configureClientService(final TestRunner runner) throws InitializationException { @@ -92,9 +67,16 @@ private DatastoreClientService configureClientService(final TestRunner runner) t runner.setProperty(TestProcessor.SOLR_CLIENT_SERVICE, "service"); + runner.setProperty("solr.collection", "chronix"); + + //shouldn't be automatic?? + service.getSupportedPropertyDescriptors().stream() + .filter(p->p.getDefaultValue() != null) + .forEach(p->runner.setProperty(p, p.getDefaultValue())); + runner.addControllerService("service", service); runner.enableControllerService(service); - runner.assertValid(service); + //runner.assertValid(service); return service; } @@ -104,6 +86,7 @@ private Collection getRandomMetrics(int size) throws InterruptedExceptio List records = new ArrayList<>(); Random rnd = new Random(); + long now = System.currentTimeMillis(); String[] metricsType = {"disk.io", "cpu.wait", "io.wait"}; String[] hosts = {"host1", "host2", "host3"}; @@ -113,8 +96,9 @@ private Collection getRandomMetrics(int size) throws InterruptedExceptio .setStringField("host", hosts[rnd.nextInt(3)]) .setField(FieldDictionary.RECORD_TIME, FieldType.LONG, new Date().getTime()) .setField(FieldDictionary.RECORD_VALUE, FieldType.FLOAT, 100.0 * Math.random()) + .setTime(now) ); - Thread.sleep(rnd.nextInt(500)); + now+=rnd.nextInt(500); } return records; @@ -122,7 +106,7 @@ private Collection getRandomMetrics(int size) throws InterruptedExceptio @Test - public void testConvertion() throws InterruptedException { + public void testConversion() throws InterruptedException { final Date now = new Date(); final Record record = new StandardRecord(RecordDictionary.METRIC) @@ -132,8 +116,8 @@ public void testConvertion() throws InterruptedException { final BlockingQueue queue = new ArrayBlockingQueue<>(1000000); - final ChronixUpdater service = new ChronixUpdater(solrRule.getClient(), queue, 10, 1000); - MetricTimeSeries metric = service.convertToMetric(record); + final ChronixUpdater service = new ChronixUpdater(solrRule.getClient(), queue, Collections.emptyMap(), 10, 1000); + MetricTimeSeries metric = service.convertToMetric(Collections.singletonList(record)).get(0); assertTrue(metric.getName().equals("cpu.wait")); assertTrue(metric.getType().equals("metric")); From b81eaccb91fd452d6343c2fd6bf5549f748c2ccf Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 4 May 2018 11:51:53 +0200 Subject: [PATCH 27/35] Ensure BatchID is present --- .../java/com/hurence/logisland/service/solr/ChronixUpdater.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java index e567923d5..94f995c02 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java @@ -172,10 +172,10 @@ List convertToMetric(List records) throws DatastoreCli points.stream().forEach(kv -> builder.point(kv.getKey(), kv.getValue())); return builder - .attribute("id", batchUID.toString()) .start(firstTS) .end(lastTS) .attributes(attributes) + .attribute("id", batchUID) .build(); } ).filter(a -> a != null) From 07b741674353d62e7c92ed3bbd47642ddefcd04a Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Fri, 4 May 2018 13:16:33 +0200 Subject: [PATCH 28/35] Do right grouping to avoid measurement aliasing --- .../com/hurence/logisland/service/solr/ChronixUpdater.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java index 94f995c02..583b730cc 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/src/main/java/com/hurence/logisland/service/solr/ChronixUpdater.java @@ -96,7 +96,10 @@ public void run() { if ((currentTS - lastTS) >= flushInterval * 1000000 || batchedUpdates >= batchSize) { //use moustache operator to avoid composing strings when not needed logger.debug("committing {} records to Chronix after {} ns", batchedUpdates, (currentTS - lastTS)); - storage.add(converter, convertToMetric(batchBuffer), solr); + batchBuffer.stream().collect(Collectors.groupingBy(r -> r.getField(FieldDictionary.RECORD_NAME).asString())) + .values().forEach(list -> { + storage.add(converter, convertToMetric(list.stream().sorted(Comparator.comparing(Record::getTime)).collect(Collectors.toList())), solr); + }); solr.commit(); lastTS = currentTS; batchBuffer = new ArrayList<>(); From 773b36e15ffa94b72ab992c59373d0e01b91b2f0 Mon Sep 17 00:00:00 2001 From: oalam Date: Wed, 23 May 2018 17:15:12 +0200 Subject: [PATCH 29/35] add a first implementation of RedisCacheService --- .../component/AbstractPropertyValue.java | 9 + .../logisland/component/PropertyValue.java | 3 +- .../controller/AbstractControllerService.java | 17 + .../com/hurence/logisland/record/Field.java | 7 + .../hurence/logisland/util/FormatUtils.java | 263 +++++++++++ .../com/hurence/logisland/util/Tuple.java | 77 ++++ .../validator/StandardValidators.java | 43 ++ logisland-assembly/pom.xml | 5 + logisland-documentation/pom.xml | 4 + .../util/runner/MockPropertyValue.java | 6 +- .../runner/StandardProcessorTestRunner.java | 13 +- .../logisland-redis_4-client-service/pom.xml | 152 ++++++ .../logisland/redis/RedisConnectionPool.java | 43 ++ .../hurence/logisland/redis/RedisType.java | 56 +++ .../redis/service/RedisConnectionPool.java | 69 +++ .../service/RedisKeyValueCacheService.java | 262 +++++++++++ .../logisland/redis/util/RedisAction.java | 30 ++ .../logisland/redis/util/RedisUtils.java | 434 ++++++++++++++++++ .../redis/service/FakeRedisProcessor.java | 53 +++ .../ITRedisKeyValueCacheClientService.java | 297 ++++++++++++ .../TestRedisConnectionPoolService.java | 98 ++++ logisland-services/pom.xml | 1 + pom.xml | 5 + 23 files changed, 1943 insertions(+), 4 deletions(-) create mode 100644 logisland-api/src/main/java/com/hurence/logisland/util/FormatUtils.java create mode 100644 logisland-api/src/main/java/com/hurence/logisland/util/Tuple.java create mode 100644 logisland-services/logisland-redis_4-client-service/pom.xml create mode 100644 logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisConnectionPool.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisAction.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/FakeRedisProcessor.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java create mode 100644 logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java diff --git a/logisland-api/src/main/java/com/hurence/logisland/component/AbstractPropertyValue.java b/logisland-api/src/main/java/com/hurence/logisland/component/AbstractPropertyValue.java index 3be217ed8..e03db2aac 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/component/AbstractPropertyValue.java +++ b/logisland-api/src/main/java/com/hurence/logisland/component/AbstractPropertyValue.java @@ -21,6 +21,9 @@ import com.hurence.logisland.record.Record; import com.hurence.logisland.record.StandardRecord; import com.hurence.logisland.registry.VariableRegistry; +import com.hurence.logisland.util.FormatUtils; + +import java.util.concurrent.TimeUnit; /** * Created by mathieu on 08/06/17. @@ -70,6 +73,12 @@ public Double asDouble() { return (getRawValue() == null) ? null : Double.parseDouble(getRawValue().trim()); } + @Override + public Long asTimePeriod(final TimeUnit timeUnit) { + return (rawValue == null) ? null : FormatUtils.getTimeDuration(rawValue.toString().trim(), timeUnit); + } + + @Override public boolean isSet() { return getRawValue() != null; diff --git a/logisland-api/src/main/java/com/hurence/logisland/component/PropertyValue.java b/logisland-api/src/main/java/com/hurence/logisland/component/PropertyValue.java index 2ae11e761..91d220ed0 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/component/PropertyValue.java +++ b/logisland-api/src/main/java/com/hurence/logisland/component/PropertyValue.java @@ -21,6 +21,7 @@ import com.hurence.logisland.record.Record; import java.io.Serializable; +import java.util.concurrent.TimeUnit; /** *

@@ -91,7 +92,7 @@ public interface PropertyValue extends Serializable { * in terms of the specified TimeUnit; if the property is not set, returns * null */ - // public Long asTimePeriod(TimeUnit timeUnit); + public Long asTimePeriod(TimeUnit timeUnit); diff --git a/logisland-api/src/main/java/com/hurence/logisland/controller/AbstractControllerService.java b/logisland-api/src/main/java/com/hurence/logisland/controller/AbstractControllerService.java index 8809b7137..254ca0609 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/controller/AbstractControllerService.java +++ b/logisland-api/src/main/java/com/hurence/logisland/controller/AbstractControllerService.java @@ -17,6 +17,8 @@ package com.hurence.logisland.controller; +import com.hurence.logisland.annotation.lifecycle.OnDisabled; +import com.hurence.logisland.annotation.lifecycle.OnEnabled; import com.hurence.logisland.component.AbstractConfigurableComponent; import com.hurence.logisland.component.InitializationException; import com.hurence.logisland.logging.ComponentLog; @@ -26,6 +28,7 @@ public abstract class AbstractControllerService extends AbstractConfigurableComp private ControllerServiceLookup serviceLookup; private ComponentLog logger; + private volatile boolean enabled = true; @Override public final void initialize(final ControllerServiceInitializationContext context) throws InitializationException { @@ -62,4 +65,18 @@ protected ComponentLog getLogger() { return logger; } + + @OnEnabled + public final void enabled() { + this.enabled = true; + } + + @OnDisabled + public final void disabled() { + this.enabled = false; + } + + public boolean isEnabled() { + return this.enabled; + } } diff --git a/logisland-api/src/main/java/com/hurence/logisland/record/Field.java b/logisland-api/src/main/java/com/hurence/logisland/record/Field.java index 0173b9953..107a754ca 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/record/Field.java +++ b/logisland-api/src/main/java/com/hurence/logisland/record/Field.java @@ -17,10 +17,12 @@ import com.hurence.logisland.component.PropertyValue; import com.hurence.logisland.controller.ControllerService; +import com.hurence.logisland.util.FormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; +import java.util.concurrent.TimeUnit; /** * Primitive Types @@ -208,6 +210,11 @@ public Double asDouble() { } } + @Override + public Long asTimePeriod(final TimeUnit timeUnit) { + return (rawValue == null) ? null : FormatUtils.getTimeDuration(rawValue.toString().trim(), timeUnit); + } + @Override public boolean isSet() { return rawValue != null; diff --git a/logisland-api/src/main/java/com/hurence/logisland/util/FormatUtils.java b/logisland-api/src/main/java/com/hurence/logisland/util/FormatUtils.java new file mode 100644 index 000000000..0380e9dc8 --- /dev/null +++ b/logisland-api/src/main/java/com/hurence/logisland/util/FormatUtils.java @@ -0,0 +1,263 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.util; + +import java.text.NumberFormat; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +// this class is coming from Apache NIFI project +public class FormatUtils { + + private static final String UNION = "|"; + + // for Data Sizes + private static final double BYTES_IN_KILOBYTE = 1024; + private static final double BYTES_IN_MEGABYTE = BYTES_IN_KILOBYTE * 1024; + private static final double BYTES_IN_GIGABYTE = BYTES_IN_MEGABYTE * 1024; + private static final double BYTES_IN_TERABYTE = BYTES_IN_GIGABYTE * 1024; + + // for Time Durations + private static final String NANOS = join(UNION, "ns", "nano", "nanos", "nanosecond", "nanoseconds"); + private static final String MILLIS = join(UNION, "ms", "milli", "millis", "millisecond", "milliseconds"); + private static final String SECS = join(UNION, "s", "sec", "secs", "second", "seconds"); + private static final String MINS = join(UNION, "m", "min", "mins", "minute", "minutes"); + private static final String HOURS = join(UNION, "h", "hr", "hrs", "hour", "hours"); + private static final String DAYS = join(UNION, "d", "day", "days"); + private static final String WEEKS = join(UNION, "w", "wk", "wks", "week", "weeks"); + + private static final String VALID_TIME_UNITS = join(UNION, NANOS, MILLIS, SECS, MINS, HOURS, DAYS, WEEKS); + public static final String TIME_DURATION_REGEX = "(\\d+)\\s*(" + VALID_TIME_UNITS + ")"; + public static final Pattern TIME_DURATION_PATTERN = Pattern.compile(TIME_DURATION_REGEX); + + /** + * Formats the specified count by adding commas. + * + * @param count the value to add commas to + * @return the string representation of the given value with commas included + */ + public static String formatCount(final long count) { + return NumberFormat.getIntegerInstance().format(count); + } + + /** + * Formats the specified duration in 'mm:ss.SSS' format. + * + * @param sourceDuration the duration to format + * @param sourceUnit the unit to interpret the duration + * @return representation of the given time data in minutes/seconds + */ + public static String formatMinutesSeconds(final long sourceDuration, final TimeUnit sourceUnit) { + final long millis = TimeUnit.MILLISECONDS.convert(sourceDuration, sourceUnit); + + final long millisInMinute = TimeUnit.MILLISECONDS.convert(1, TimeUnit.MINUTES); + final int minutes = (int) (millis / millisInMinute); + final long secondsMillisLeft = millis - minutes * millisInMinute; + + final long millisInSecond = TimeUnit.MILLISECONDS.convert(1, TimeUnit.SECONDS); + final int seconds = (int) (secondsMillisLeft / millisInSecond); + final long millisLeft = secondsMillisLeft - seconds * millisInSecond; + + return pad2Places(minutes) + ":" + pad2Places(seconds) + "." + pad3Places(millisLeft); + } + + /** + * Formats the specified duration in 'HH:mm:ss.SSS' format. + * + * @param sourceDuration the duration to format + * @param sourceUnit the unit to interpret the duration + * @return representation of the given time data in hours/minutes/seconds + */ + public static String formatHoursMinutesSeconds(final long sourceDuration, final TimeUnit sourceUnit) { + final long millis = TimeUnit.MILLISECONDS.convert(sourceDuration, sourceUnit); + + final long millisInHour = TimeUnit.MILLISECONDS.convert(1, TimeUnit.HOURS); + final int hours = (int) (millis / millisInHour); + final long minutesSecondsMillisLeft = millis - hours * millisInHour; + + return pad2Places(hours) + ":" + formatMinutesSeconds(minutesSecondsMillisLeft, TimeUnit.MILLISECONDS); + } + + private static String pad2Places(final long val) { + return (val < 10) ? "0" + val : String.valueOf(val); + } + + private static String pad3Places(final long val) { + return (val < 100) ? "0" + pad2Places(val) : String.valueOf(val); + } + + /** + * Formats the specified data size in human readable format. + * + * @param dataSize Data size in bytes + * @return Human readable format + */ + public static String formatDataSize(final double dataSize) { + // initialize the formatter + final NumberFormat format = NumberFormat.getNumberInstance(); + format.setMaximumFractionDigits(2); + + // check terabytes + double dataSizeToFormat = dataSize / BYTES_IN_TERABYTE; + if (dataSizeToFormat > 1) { + return format.format(dataSizeToFormat) + " TB"; + } + + // check gigabytes + dataSizeToFormat = dataSize / BYTES_IN_GIGABYTE; + if (dataSizeToFormat > 1) { + return format.format(dataSizeToFormat) + " GB"; + } + + // check megabytes + dataSizeToFormat = dataSize / BYTES_IN_MEGABYTE; + if (dataSizeToFormat > 1) { + return format.format(dataSizeToFormat) + " MB"; + } + + // check kilobytes + dataSizeToFormat = dataSize / BYTES_IN_KILOBYTE; + if (dataSizeToFormat > 1) { + return format.format(dataSizeToFormat) + " KB"; + } + + // default to bytes + return format.format(dataSize) + " bytes"; + } + + public static long getTimeDuration(final String value, final TimeUnit desiredUnit) { + final Matcher matcher = TIME_DURATION_PATTERN.matcher(value.toLowerCase()); + if (!matcher.matches()) { + throw new IllegalArgumentException("Value '" + value + "' is not a valid Time Duration"); + } + + final String duration = matcher.group(1); + final String units = matcher.group(2); + TimeUnit specifiedTimeUnit = null; + switch (units.toLowerCase()) { + case "ns": + case "nano": + case "nanos": + case "nanoseconds": + specifiedTimeUnit = TimeUnit.NANOSECONDS; + break; + case "ms": + case "milli": + case "millis": + case "milliseconds": + specifiedTimeUnit = TimeUnit.MILLISECONDS; + break; + case "s": + case "sec": + case "secs": + case "second": + case "seconds": + specifiedTimeUnit = TimeUnit.SECONDS; + break; + case "m": + case "min": + case "mins": + case "minute": + case "minutes": + specifiedTimeUnit = TimeUnit.MINUTES; + break; + case "h": + case "hr": + case "hrs": + case "hour": + case "hours": + specifiedTimeUnit = TimeUnit.HOURS; + break; + case "d": + case "day": + case "days": + specifiedTimeUnit = TimeUnit.DAYS; + break; + case "w": + case "wk": + case "wks": + case "week": + case "weeks": + final long durationVal = Long.parseLong(duration); + return desiredUnit.convert(durationVal, TimeUnit.DAYS)*7; + } + + final long durationVal = Long.parseLong(duration); + return desiredUnit.convert(durationVal, specifiedTimeUnit); + } + + public static String formatUtilization(final double utilization) { + return utilization + "%"; + } + + private static String join(final String delimiter, final String... values) { + if (values.length == 0) { + return ""; + } else if (values.length == 1) { + return values[0]; + } + + final StringBuilder sb = new StringBuilder(); + sb.append(values[0]); + for (int i = 1; i < values.length; i++) { + sb.append(delimiter).append(values[i]); + } + + return sb.toString(); + } + + /** + * Formats nanoseconds in the format: + * 3 seconds, 8 millis, 3 nanos - if includeTotalNanos = false, + * 3 seconds, 8 millis, 3 nanos (3008000003 nanos) - if includeTotalNanos = true + * + * @param nanos the number of nanoseconds to format + * @param includeTotalNanos whether or not to include the total number of nanoseconds in parentheses in the returned value + * @return a human-readable String that is a formatted representation of the given number of nanoseconds. + */ + public static String formatNanos(final long nanos, final boolean includeTotalNanos) { + final StringBuilder sb = new StringBuilder(); + + final long seconds = nanos > 1000000000L ? nanos / 1000000000L : 0L; + long millis = nanos > 1000000L ? nanos / 1000000L : 0L; + final long nanosLeft = nanos % 1000000L; + + if (seconds > 0) { + sb.append(seconds).append(" seconds"); + } + if (millis > 0) { + if (seconds > 0) { + sb.append(", "); + millis -= seconds * 1000L; + } + + sb.append(millis).append(" millis"); + } + if (seconds > 0 || millis > 0) { + sb.append(", "); + } + sb.append(nanosLeft).append(" nanos"); + + if (includeTotalNanos) { + sb.append(" (").append(nanos).append(" nanos)"); + } + + return sb.toString(); + } +} diff --git a/logisland-api/src/main/java/com/hurence/logisland/util/Tuple.java b/logisland-api/src/main/java/com/hurence/logisland/util/Tuple.java new file mode 100644 index 000000000..271720567 --- /dev/null +++ b/logisland-api/src/main/java/com/hurence/logisland/util/Tuple.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.util; + +public class Tuple { + + final A key; + final B value; + + public Tuple(A key, B value) { + this.key = key; + this.value = value; + } + + public A getKey() { + return key; + } + + public B getValue() { + return value; + } + + @Override + public boolean equals(final Object other) { + if (other == null) { + return false; + } + if (other == this) { + return true; + } + if (!(other instanceof Tuple)) { + return false; + } + + final Tuple tuple = (Tuple) other; + if (key == null) { + if (tuple.key != null) { + return false; + } + } else { + if (!key.equals(tuple.key)) { + return false; + } + } + + if (value == null) { + if (tuple.value != null) { + return false; + } + } else { + if (!value.equals(tuple.value)) { + return false; + } + } + + return true; + } + + @Override + public int hashCode() { + return 581 + (this.key == null ? 0 : this.key.hashCode()) + (this.value == null ? 0 : this.value.hashCode()); + } +} diff --git a/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java b/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java index 7004f30ce..ac97a7459 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java +++ b/logisland-api/src/main/java/com/hurence/logisland/validator/StandardValidators.java @@ -16,6 +16,8 @@ package com.hurence.logisland.validator; +import com.hurence.logisland.util.FormatUtils; + import java.io.File; import java.net.URI; import java.nio.charset.Charset; @@ -327,6 +329,47 @@ public ValidationResult validate(final String subject, final String value) { } }; + /** + * {@link Validator} that ensures that value has 1+ non-whitespace + * characters + */ + public static final Validator NON_BLANK_VALIDATOR = new Validator() { + @Override + public ValidationResult validate(final String subject, final String value) { + return new ValidationResult.Builder().subject(subject).input(value) + .valid(value != null && !value.trim().isEmpty()) + .explanation(subject + + " must contain at least one character that is not white space").build(); + } + }; + + public static final Validator TIME_PERIOD_VALIDATOR = new Validator() { + private final Pattern TIME_DURATION_PATTERN = Pattern.compile(FormatUtils.TIME_DURATION_REGEX); + + @Override + public ValidationResult validate(final String subject, final String input) { + /* if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(input)) { + return new ValidationResult.Builder().subject(subject).input(input).explanation("Expression Language Present").valid(true).build(); + }*/ + + if (input == null) { + return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation("Time Period cannot be null").build(); + } + if (TIME_DURATION_PATTERN.matcher(input.toLowerCase()).matches()) { + return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); + } else { + return new ValidationResult.Builder() + .subject(subject) + .input(input) + .valid(false) + .explanation("Must be of format where is a " + + "non-negative integer and TimeUnit is a supported Time Unit, such " + + "as: nanos, millis, secs, mins, hrs, days") + .build(); + } + } + }; + // // // FACTORY METHODS FOR VALIDATORS diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index ccf45cca9..c6695a4eb 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -180,6 +180,11 @@ logisland-excel-plugin + + com.hurence.logisland + logisland-redis_4-client-service + + + 1.8.11.RELEASE + 2.9.0 + + + ${logisland.shade.packageName}.redis409 + + + UTF-8 + UTF-8 + + + + + org.slf4j + slf4j-api + + + com.hurence.logisland + logisland-api + + + com.hurence.logisland + logisland-cache_key_value-service-api + + + com.hurence.logisland + logisland-utils + + + com.esotericsoftware.kryo + kryo + + + + + + org.springframework.data + spring-data-redis + ${spring.data.redis.version} + provided + + + redis.clients + jedis + ${jedis.version} + jar + compile + + + + com.github.kstyrc + embedded-redis + 0.6 + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + -Dtests.security.manager=false + + + + org.immutables.tools + maven-shade-plugin + 4 + + + package + + shade + + + true + + + + redis.clients:* + + + + + *:* + + META-INF/license/** + META-INF/* + META-INF/maven/** + LICENSE + NOTICE + /*.txt + build.properties + + + + + + + + + + GIT commit ID + ${maven.build.timestamp} + + + + + + + io + ${shaded.package}.io + + + + + redis.clients + ${shaded.package}.redis.clients + + + + + + + + + + + + + diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisConnectionPool.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisConnectionPool.java new file mode 100644 index 000000000..9a22913c5 --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisConnectionPool.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis; + +import org.springframework.data.redis.connection.RedisConnection; + +/** + * A service that provides connections to Redis using spring-data-redis. + */ +public interface RedisConnectionPool { + + /** + * Obtains a RedisConnection instance from the pool. + * + * NOTE: Clients are responsible for ensuring the close() method of the connection is called to return it to the pool. + * + * @return a RedisConnection instance + */ + RedisConnection getConnection(); + + /** + * Some Redis operations are only supported in a specific mode. Clients should use this method to ensure + * the connection pool they are using supports their required operations. + * + * @return the type of Redis instance (i.e. standalone, clustered, sentinel) + */ + RedisType getRedisType(); + +} diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java new file mode 100644 index 000000000..1c7f9b2b8 --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis; + +/** + * Possible types of Redis instances. + */ +public enum RedisType { + + STANDALONE("Standalone", "A single standalone Redis instance."), + + SENTINEL("Sentinel", "Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel"), + + CLUSTER("Cluster", "Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec"); + + private final String displayName; + private final String description; + + RedisType(final String displayName, final String description) { + this.displayName = displayName; + this.description = description; + } + + public String getDisplayName() { + return displayName; + } + + public String getDescription() { + return description; + } + + public static RedisType fromDisplayName(final String displayName) { + for (RedisType redisType : values()) { + if (redisType.getDisplayName().equals(displayName)) { + return redisType; + } + } + + throw new IllegalArgumentException("Unknown RedisType: " + displayName); + } + +} diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java new file mode 100644 index 000000000..3e47809b5 --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis.service; + + +import com.hurence.logisland.controller.ConfigurationContext; +import com.hurence.logisland.controller.ControllerServiceInitializationContext; +import com.hurence.logisland.redis.RedisType; +import com.hurence.logisland.redis.util.RedisUtils; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; + + +public class RedisConnectionPool { + + private volatile ControllerServiceInitializationContext context; + private volatile RedisType redisType; + private volatile JedisConnectionFactory connectionFactory; + + + public void init(final ControllerServiceInitializationContext context) { + this.context = context; + + final String redisMode = context.getPropertyValue(RedisUtils.REDIS_MODE).asString(); + this.redisType = RedisType.fromDisplayName(redisMode); + } + + + public void close() { + if (connectionFactory != null) { + connectionFactory.destroy(); + connectionFactory = null; + redisType = null; + context = null; + } + } + + public RedisType getRedisType() { + return redisType; + } + + public RedisConnection getConnection() { + if (connectionFactory == null) { + synchronized (this) { + if (connectionFactory == null) { + connectionFactory = RedisUtils.createConnectionFactory(context); + } + } + } + + return connectionFactory.getConnection(); + } + + +} diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java new file mode 100644 index 000000000..a0e84be74 --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java @@ -0,0 +1,262 @@ +/** + * Copyright (C) 2016 Hurence (support@hurence.com) + *

+ * 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 com.hurence.logisland.redis.service; + +import com.hurence.logisland.annotation.documentation.CapabilityDescription; +import com.hurence.logisland.annotation.documentation.Tags; +import com.hurence.logisland.annotation.lifecycle.OnEnabled; +import com.hurence.logisland.component.InitializationException; +import com.hurence.logisland.component.PropertyDescriptor; +import com.hurence.logisland.controller.AbstractControllerService; +import com.hurence.logisland.controller.ControllerServiceInitializationContext; +import com.hurence.logisland.record.Record; +import com.hurence.logisland.redis.util.RedisAction; +import com.hurence.logisland.redis.util.RedisUtils; +import com.hurence.logisland.serializer.Deserializer; +import com.hurence.logisland.serializer.Serializer; +import com.hurence.logisland.service.cache.CacheService; +import com.hurence.logisland.service.cache.model.Cache; +import com.hurence.logisland.service.cache.model.LRUCache; +import com.hurence.logisland.util.Tuple; +import com.hurence.logisland.validator.ValidationContext; +import com.hurence.logisland.validator.ValidationResult; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.ScanOptions; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + + +/** + * Created by oalam on 23/05/2018. + *

+ *

This an implementation of an high-performance "maybe-distributed" cache using Redis + * It will cache every item automatically with put method. You just have to use get method + * to retrieve cached object.

+ *

+ *

You specify default TTL

+ */ +@Tags({"cache", "service", "key", "value", "pair", "redis"}) +@CapabilityDescription("A controller service for caching records by key value pair with LRU (last recently used) strategy. using LinkedHashMap") +public class RedisKeyValueCacheService extends AbstractControllerService implements CacheService { + + + private volatile RedisConnectionPool redisConnectionPool; + + + @Override + @OnEnabled + public void init(ControllerServiceInitializationContext context) throws InitializationException { + try { + this.redisConnectionPool = new RedisConnectionPool(); + this.redisConnectionPool.init(context); + } catch (Exception e) { + throw new InitializationException(e); + } + } + + + @Override + public List getSupportedPropertyDescriptors() { + return RedisUtils.REDIS_CONNECTION_PROPERTY_DESCRIPTORS; + } + + @Override + protected Collection customValidate(ValidationContext validationContext) { + return RedisUtils.validate(validationContext); + } + + @Override + public Record get(String string) { + return null; + } + + @Override + public void set(String string, Record record) { + + } + + + protected Cache createCache(final ControllerServiceInitializationContext context) throws IOException, InterruptedException { + final int capacity = context.getPropertyValue(CACHE_SIZE).asInteger(); + return new LRUCache(capacity); + } + + + public boolean putIfAbsent(final String key, final Record value, final Serializer keySerializer, final Serializer valueSerializer) throws IOException { + return withConnection(redisConnection -> { + final Tuple kv = serialize(key, value, keySerializer, valueSerializer); + return redisConnection.setNX(kv.getKey(), kv.getValue()); + }); + } + + public Record getAndPutIfAbsent(final String key, final Record value, final Serializer keySerializer, final Serializer valueSerializer, final Deserializer valueDeserializer) throws IOException { + return withConnection(redisConnection -> { + final Tuple kv = serialize(key, value, keySerializer, valueSerializer); + do { + // start a watch on the key and retrieve the current value + redisConnection.watch(kv.getKey()); + final byte[] existingValue = redisConnection.get(kv.getKey()); + + // start a transaction and perform the put-if-absent + redisConnection.multi(); + redisConnection.setNX(kv.getKey(), kv.getValue()); + + // execute the transaction + final List results = redisConnection.exec(); + + // if the results list was empty, then the transaction failed (i.e. key was modified after we started watching), so keep looping to retry + // if the results list has results, then the transaction succeeded and it should have the result of the setNX operation + if (results.size() > 0) { + final Object firstResult = results.get(0); + if (firstResult instanceof Boolean) { + final Boolean absent = (Boolean) firstResult; + return absent ? null : valueDeserializer.deserialize(existingValue); + } else { + // this shouldn't really happen, but just in case there is a non-boolean result then bounce out of the loop + throw new IOException("Unexpected result from Redis transaction: Expected Boolean result, but got " + + firstResult.getClass().getName() + " with value " + firstResult.toString()); + } + } + } while (isEnabled()); + + return null; + }); + } + + + public boolean containsKey(final String key, final Serializer keySerializer) throws IOException { + return withConnection(redisConnection -> { + final byte[] k = serialize(key, keySerializer); + return redisConnection.exists(k); + }); + } + + public void put(final String key, final Record value, final Serializer keySerializer, final Serializer valueSerializer) throws IOException { + withConnection(redisConnection -> { + final Tuple kv = serialize(key, value, keySerializer, valueSerializer); + redisConnection.set(kv.getKey(), kv.getValue()); + return null; + }); + } + + + public Record get(final String key, final Serializer keySerializer, final Deserializer valueDeserializer) throws IOException { + return withConnection(redisConnection -> { + final byte[] k = serialize(key, keySerializer); + final byte[] v = redisConnection.get(k); + return valueDeserializer.deserialize(v); + }); + } + + public void close() throws IOException { + try { + if (this.redisConnectionPool != null) + this.redisConnectionPool.close(); + } catch (Exception e) { + throw new IOException(e); + } + } + + public boolean remove(final String key, final Serializer keySerializer) throws IOException { + return withConnection(redisConnection -> { + final byte[] k = serialize(key, keySerializer); + final long numRemoved = redisConnection.del(k); + return numRemoved > 0; + }); + } + + public long removeByPattern(final java.lang.String regex) throws IOException { + return withConnection(redisConnection -> { + long deletedCount = 0; + final List batchKeys = new ArrayList<>(); + + // delete keys in batches of 1000 using the cursor + final Cursor cursor = redisConnection.scan(ScanOptions.scanOptions().count(100).match(regex).build()); + while (cursor.hasNext()) { + batchKeys.add(cursor.next()); + + if (batchKeys.size() == 1000) { + deletedCount += redisConnection.del(getKeys(batchKeys)); + batchKeys.clear(); + } + } + + // delete any left-over keys if some were added to the batch but never reached 1000 + if (batchKeys.size() > 0) { + deletedCount += redisConnection.del(getKeys(batchKeys)); + batchKeys.clear(); + } + + return deletedCount; + }); + } + + /** + * Convert the list of all keys to an array. + */ + private byte[][] getKeys(final List keys) { + final byte[][] allKeysArray = new byte[keys.size()][]; + for (int i = 0; i < keys.size(); i++) { + allKeysArray[i] = keys.get(i); + } + return allKeysArray; + } + + + private Tuple serialize(final K key, final Record value, final Serializer keySerializer, final Serializer valueSerializer) throws IOException { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + + keySerializer.serialize(key, out); + final byte[] k = out.toByteArray(); + + out.reset(); + + valueSerializer.serialize(value, out); + final byte[] v = out.toByteArray(); + + return new Tuple<>(k, v); + } + + private byte[] serialize(final K key, final Serializer keySerializer) throws IOException { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + + keySerializer.serialize(key, out); + return out.toByteArray(); + } + + private T withConnection(final RedisAction action) throws IOException { + RedisConnection redisConnection = null; + try { + redisConnection = redisConnectionPool.getConnection(); + return action.execute(redisConnection); + } finally { + if (redisConnection != null) { + try { + redisConnection.close(); + } catch (Exception e) { + getLogger().warn("Error closing connection: " + e.getMessage(), e); + } + } + } + } + + +} diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisAction.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisAction.java new file mode 100644 index 000000000..03cb1852e --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisAction.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis.util; + +import org.springframework.data.redis.connection.RedisConnection; + +import java.io.IOException; + +/** + * An action to be executed with a RedisConnection. + */ +public interface RedisAction { + + T execute(RedisConnection redisConnection) throws IOException; + +} diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java new file mode 100644 index 000000000..e549220b0 --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java @@ -0,0 +1,434 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis.util; + + +import com.hurence.logisland.component.AllowableValue; +import com.hurence.logisland.component.PropertyDescriptor; +import com.hurence.logisland.controller.ControllerServiceInitializationContext; +import com.hurence.logisland.redis.RedisType; +import com.hurence.logisland.util.string.StringUtils; +import com.hurence.logisland.validator.StandardValidators; +import com.hurence.logisland.validator.ValidationContext; +import com.hurence.logisland.validator.ValidationResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.redis.connection.RedisClusterConfiguration; +import org.springframework.data.redis.connection.RedisSentinelConfiguration; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.JedisShardInfo; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class RedisUtils { + + private static Logger logger = LoggerFactory.getLogger(RedisUtils.class); + + + // These properties are shared between the connection pool controller service and the state provider, the name + // is purposely set to be more human-readable since that will be referenced in state-management.xml + + public static final AllowableValue REDIS_MODE_STANDALONE = new AllowableValue(RedisType.STANDALONE.getDisplayName(), RedisType.STANDALONE.getDisplayName(), RedisType.STANDALONE.getDescription()); + public static final AllowableValue REDIS_MODE_SENTINEL = new AllowableValue(RedisType.SENTINEL.getDisplayName(), RedisType.SENTINEL.getDisplayName(), RedisType.SENTINEL.getDescription()); + public static final AllowableValue REDIS_MODE_CLUSTER = new AllowableValue(RedisType.CLUSTER.getDisplayName(), RedisType.CLUSTER.getDisplayName(), RedisType.CLUSTER.getDescription()); + + public static final PropertyDescriptor REDIS_MODE = new PropertyDescriptor.Builder() + .name("Redis Mode") + .displayName("Redis Mode") + .description("The type of Redis being communicated with - standalone, sentinel, or clustered.") + .allowableValues(REDIS_MODE_STANDALONE, REDIS_MODE_SENTINEL, REDIS_MODE_CLUSTER) + .defaultValue(REDIS_MODE_STANDALONE.getValue()) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .required(true) + .build(); + + public static final PropertyDescriptor CONNECTION_STRING = new PropertyDescriptor.Builder() + .name("Connection String") + .displayName("Connection String") + .description("The connection string for Redis. In a standalone instance this value will be of the form hostname:port. " + + "In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. " + + "In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.") + .required(true) + .addValidator(StandardValidators.NON_BLANK_VALIDATOR) + // .expressionLanguageSupported(true) + .build(); + + public static final PropertyDescriptor DATABASE = new PropertyDescriptor.Builder() + .name("Database Index") + .displayName("Database Index") + .description("The database index to be used by connections created from this connection pool. " + + "See the databases property in redis.conf, by default databases 0-15 will be available.") + .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) + .defaultValue("0") + // .expressionLanguageSupported(true) + .required(true) + .build(); + + public static final PropertyDescriptor COMMUNICATION_TIMEOUT = new PropertyDescriptor.Builder() + .name("Communication Timeout") + .displayName("Communication Timeout") + .description("The timeout to use when attempting to communicate with Redis.") + .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) + .defaultValue("10 seconds") + .required(true) + .build(); + + public static final PropertyDescriptor CLUSTER_MAX_REDIRECTS = new PropertyDescriptor.Builder() + .name("Cluster Max Redirects") + .displayName("Cluster Max Redirects") + .description("The maximum number of redirects that can be performed when clustered.") + .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) + .defaultValue("5") + .required(true) + .build(); + + public static final PropertyDescriptor SENTINEL_MASTER = new PropertyDescriptor.Builder() + .name("Sentinel Master") + .displayName("Sentinel Master") + .description("The name of the sentinel master, require when Mode is set to Sentinel") + .addValidator(StandardValidators.NON_BLANK_VALIDATOR) + // .expressionLanguageSupported(true) + .build(); + + public static final PropertyDescriptor PASSWORD = new PropertyDescriptor.Builder() + .name("Password") + .displayName("Password") + .description("The password used to authenticate to the Redis server. See the requirepass property in redis.conf.") + .addValidator(StandardValidators.NON_BLANK_VALIDATOR) + // .expressionLanguageSupported(true) + .sensitive(true) + .build(); + + public static final PropertyDescriptor POOL_MAX_TOTAL = new PropertyDescriptor.Builder() + .name("Pool - Max Total") + .displayName("Pool - Max Total") + .description("The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). " + + "A negative value indicates that there is no limit.") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("8") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_MAX_IDLE = new PropertyDescriptor.Builder() + .name("Pool - Max Idle") + .displayName("Pool - Max Idle") + .description("The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("8") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_MIN_IDLE = new PropertyDescriptor.Builder() + .name("Pool - Min Idle") + .displayName("Pool - Min Idle") + .description("The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is " + + "greater than the configured value for Max Idle, then the value of Max Idle will be used instead.") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("0") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_BLOCK_WHEN_EXHAUSTED = new PropertyDescriptor.Builder() + .name("Pool - Block When Exhausted") + .displayName("Pool - Block When Exhausted") + .description("Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. " + + "Setting this to false means an error will occur immediately when a client requests a connection and none are available.") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues("true", "false") + .defaultValue("true") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_MAX_WAIT_TIME = new PropertyDescriptor.Builder() + .name("Pool - Max Wait Time") + .displayName("Pool - Max Wait Time") + .description("The amount of time to wait for an available connection when Block When Exhausted is set to true.") + .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) + .defaultValue("10 seconds") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_MIN_EVICTABLE_IDLE_TIME = new PropertyDescriptor.Builder() + .name("Pool - Min Evictable Idle Time") + .displayName("Pool - Min Evictable Idle Time") + .description("The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.") + .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) + .defaultValue("60 seconds") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_TIME_BETWEEN_EVICTION_RUNS = new PropertyDescriptor.Builder() + .name("Pool - Time Between Eviction Runs") + .displayName("Pool - Time Between Eviction Runs") + .description("The amount of time between attempting to evict idle connections from the pool.") + .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) + .defaultValue("30 seconds") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_NUM_TESTS_PER_EVICTION_RUN = new PropertyDescriptor.Builder() + .name("Pool - Num Tests Per Eviction Run") + .displayName("Pool - Num Tests Per Eviction Run") + .description("The number of connections to tests per eviction attempt. A negative value indicates to test all connections.") + .addValidator(StandardValidators.INTEGER_VALIDATOR) + .defaultValue("-1") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_TEST_ON_CREATE = new PropertyDescriptor.Builder() + .name("Pool - Test On Create") + .displayName("Pool - Test On Create") + .description("Whether or not connections should be tested upon creation.") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues("true", "false") + .defaultValue("false") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_TEST_ON_BORROW = new PropertyDescriptor.Builder() + .name("Pool - Test On Borrow") + .displayName("Pool - Test On Borrow") + .description("Whether or not connections should be tested upon borrowing from the pool.") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues("true", "false") + .defaultValue("false") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_TEST_ON_RETURN = new PropertyDescriptor.Builder() + .name("Pool - Test On Return") + .displayName("Pool - Test On Return") + .description("Whether or not connections should be tested upon returning to the pool.") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues("true", "false") + .defaultValue("false") + .required(true) + .build(); + + public static final PropertyDescriptor POOL_TEST_WHILE_IDLE = new PropertyDescriptor.Builder() + .name("Pool - Test While Idle") + .displayName("Pool - Test While Idle") + .description("Whether or not connections should be tested while idle.") + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues("true", "false") + .defaultValue("true") + .required(true) + .build(); + + public static final List REDIS_CONNECTION_PROPERTY_DESCRIPTORS; + + static { + final List props = new ArrayList<>(); + props.add(RedisUtils.REDIS_MODE); + props.add(RedisUtils.CONNECTION_STRING); + props.add(RedisUtils.DATABASE); + props.add(RedisUtils.COMMUNICATION_TIMEOUT); + props.add(RedisUtils.CLUSTER_MAX_REDIRECTS); + props.add(RedisUtils.SENTINEL_MASTER); + props.add(RedisUtils.PASSWORD); + props.add(RedisUtils.POOL_MAX_TOTAL); + props.add(RedisUtils.POOL_MAX_IDLE); + props.add(RedisUtils.POOL_MIN_IDLE); + props.add(RedisUtils.POOL_BLOCK_WHEN_EXHAUSTED); + props.add(RedisUtils.POOL_MAX_WAIT_TIME); + props.add(RedisUtils.POOL_MIN_EVICTABLE_IDLE_TIME); + props.add(RedisUtils.POOL_TIME_BETWEEN_EVICTION_RUNS); + props.add(RedisUtils.POOL_NUM_TESTS_PER_EVICTION_RUN); + props.add(RedisUtils.POOL_TEST_ON_CREATE); + props.add(RedisUtils.POOL_TEST_ON_BORROW); + props.add(RedisUtils.POOL_TEST_ON_RETURN); + props.add(RedisUtils.POOL_TEST_WHILE_IDLE); + REDIS_CONNECTION_PROPERTY_DESCRIPTORS = Collections.unmodifiableList(props); + } + + + public static JedisConnectionFactory createConnectionFactory(final ControllerServiceInitializationContext context) { + final String redisMode = context.getPropertyValue(RedisUtils.REDIS_MODE).asString(); + final String connectionString = context.getPropertyValue(RedisUtils.CONNECTION_STRING).asString(); + final Integer dbIndex = context.getPropertyValue(RedisUtils.DATABASE).asInteger(); + final String password = context.getPropertyValue(RedisUtils.PASSWORD).asString(); + final Integer timeout = context.getPropertyValue(RedisUtils.COMMUNICATION_TIMEOUT).asTimePeriod(TimeUnit.MILLISECONDS).intValue(); + final JedisPoolConfig poolConfig = createJedisPoolConfig(context); + + JedisConnectionFactory connectionFactory; + + if (RedisUtils.REDIS_MODE_STANDALONE.getValue().equals(redisMode)) { + final JedisShardInfo jedisShardInfo = createJedisShardInfo(connectionString, timeout, password); + + logger.info("Connecting to Redis in standalone mode at " + connectionString); + connectionFactory = new JedisConnectionFactory(jedisShardInfo); + + } else if (RedisUtils.REDIS_MODE_SENTINEL.getValue().equals(redisMode)) { + final String[] sentinels = connectionString.split("[,]"); + final String sentinelMaster = context.getPropertyValue(RedisUtils.SENTINEL_MASTER).asString(); + final RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration(sentinelMaster, new HashSet<>(getTrimmedValues(sentinels))); + final JedisShardInfo jedisShardInfo = createJedisShardInfo(sentinels[0], timeout, password); + + logger.info("Connecting to Redis in sentinel mode..."); + logger.info("Redis master = " + sentinelMaster); + + for (final String sentinel : sentinels) { + logger.info("Redis sentinel at " + sentinel); + } + + connectionFactory = new JedisConnectionFactory(sentinelConfiguration, poolConfig); + connectionFactory.setShardInfo(jedisShardInfo); + + } else { + final String[] clusterNodes = connectionString.split("[,]"); + final Integer maxRedirects = context.getPropertyValue(RedisUtils.CLUSTER_MAX_REDIRECTS).asInteger(); + + final RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration(getTrimmedValues(clusterNodes)); + clusterConfiguration.setMaxRedirects(maxRedirects); + + logger.info("Connecting to Redis in clustered mode..."); + for (final String clusterNode : clusterNodes) { + logger.info("Redis cluster node at " + clusterNode); + } + + connectionFactory = new JedisConnectionFactory(clusterConfiguration, poolConfig); + } + + connectionFactory.setUsePool(true); + connectionFactory.setPoolConfig(poolConfig); + connectionFactory.setDatabase(dbIndex); + connectionFactory.setTimeout(timeout); + + if (!StringUtils.isBlank(password)) { + connectionFactory.setPassword(password); + } + + // need to call this to initialize the pool/connections + connectionFactory.afterPropertiesSet(); + return connectionFactory; + } + + private static List getTrimmedValues(final String[] values) { + final List trimmedValues = new ArrayList<>(); + for (final String value : values) { + trimmedValues.add(value.trim()); + } + return trimmedValues; + } + + private static JedisShardInfo createJedisShardInfo(final String hostAndPort, final Integer timeout, final String password) { + final String[] hostAndPortSplit = hostAndPort.split("[:]"); + final String host = hostAndPortSplit[0].trim(); + final Integer port = Integer.parseInt(hostAndPortSplit[1].trim()); + + final JedisShardInfo jedisShardInfo = new JedisShardInfo(host, port); + jedisShardInfo.setConnectionTimeout(timeout); + jedisShardInfo.setSoTimeout(timeout); + + if (!StringUtils.isEmpty(password)) { + jedisShardInfo.setPassword(password); + } + + return jedisShardInfo; + } + + private static JedisPoolConfig createJedisPoolConfig(final ControllerServiceInitializationContext context) { + final JedisPoolConfig poolConfig = new JedisPoolConfig(); + poolConfig.setMaxTotal(context.getPropertyValue(RedisUtils.POOL_MAX_TOTAL).asInteger()); + poolConfig.setMaxIdle(context.getPropertyValue(RedisUtils.POOL_MAX_IDLE).asInteger()); + poolConfig.setMinIdle(context.getPropertyValue(RedisUtils.POOL_MIN_IDLE).asInteger()); + poolConfig.setBlockWhenExhausted(context.getPropertyValue(RedisUtils.POOL_BLOCK_WHEN_EXHAUSTED).asBoolean()); + poolConfig.setMaxWaitMillis(context.getPropertyValue(RedisUtils.POOL_MAX_WAIT_TIME).asTimePeriod(TimeUnit.MILLISECONDS)); + poolConfig.setMinEvictableIdleTimeMillis(context.getPropertyValue(RedisUtils.POOL_MIN_EVICTABLE_IDLE_TIME).asTimePeriod(TimeUnit.MILLISECONDS)); + poolConfig.setTimeBetweenEvictionRunsMillis(context.getPropertyValue(RedisUtils.POOL_TIME_BETWEEN_EVICTION_RUNS).asTimePeriod(TimeUnit.MILLISECONDS)); + poolConfig.setNumTestsPerEvictionRun(context.getPropertyValue(RedisUtils.POOL_NUM_TESTS_PER_EVICTION_RUN).asInteger()); + poolConfig.setTestOnCreate(context.getPropertyValue(RedisUtils.POOL_TEST_ON_CREATE).asBoolean()); + poolConfig.setTestOnBorrow(context.getPropertyValue(RedisUtils.POOL_TEST_ON_BORROW).asBoolean()); + poolConfig.setTestOnReturn(context.getPropertyValue(RedisUtils.POOL_TEST_ON_RETURN).asBoolean()); + poolConfig.setTestWhileIdle(context.getPropertyValue(RedisUtils.POOL_TEST_WHILE_IDLE).asBoolean()); + return poolConfig; + } + + public static List validate(ValidationContext validationContext) { + final List results = new ArrayList<>(); + + final String redisMode = validationContext.getPropertyValue(RedisUtils.REDIS_MODE).asString(); + final String connectionString = validationContext.getPropertyValue(RedisUtils.CONNECTION_STRING).asString(); + final Integer dbIndex = validationContext.getPropertyValue(RedisUtils.DATABASE).asInteger(); + + if (StringUtils.isBlank(connectionString)) { + results.add(new ValidationResult.Builder() + .subject(RedisUtils.CONNECTION_STRING.getDisplayName()) + .valid(false) + .explanation("Connection String cannot be blank") + .build()); + } else if (RedisUtils.REDIS_MODE_STANDALONE.getValue().equals(redisMode)) { + final String[] hostAndPort = connectionString.split("[:]"); + if (hostAndPort == null || hostAndPort.length != 2 || StringUtils.isBlank(hostAndPort[0]) || StringUtils.isBlank(hostAndPort[1]) || !isInteger(hostAndPort[1])) { + results.add(new ValidationResult.Builder() + .subject(RedisUtils.CONNECTION_STRING.getDisplayName()) + .input(connectionString) + .valid(false) + .explanation("Standalone Connection String must be in the form host:port") + .build()); + } + } else { + for (final String connection : connectionString.split("[,]")) { + final String[] hostAndPort = connection.split("[:]"); + if (hostAndPort == null || hostAndPort.length != 2 || StringUtils.isBlank(hostAndPort[0]) || StringUtils.isBlank(hostAndPort[1]) || !isInteger(hostAndPort[1])) { + results.add(new ValidationResult.Builder() + .subject(RedisUtils.CONNECTION_STRING.getDisplayName()) + .input(connection) + .valid(false) + .explanation("Connection String must be in the form host:port,host:port,host:port,etc.") + .build()); + } + } + } + + if (RedisUtils.REDIS_MODE_CLUSTER.getValue().equals(redisMode) && dbIndex > 0) { + results.add(new ValidationResult.Builder() + .subject(RedisUtils.DATABASE.getDisplayName()) + .valid(false) + .explanation("Database Index must be 0 when using clustered Redis") + .build()); + } + + if (RedisUtils.REDIS_MODE_SENTINEL.getValue().equals(redisMode)) { + final String sentinelMaster = validationContext.getPropertyValue(RedisUtils.SENTINEL_MASTER).asString(); + if (StringUtils.isEmpty(sentinelMaster)) { + results.add(new ValidationResult.Builder() + .subject(RedisUtils.SENTINEL_MASTER.getDisplayName()) + .valid(false) + .explanation("Sentinel Master must be provided when Mode is Sentinel") + .build()); + } + } + + return results; + } + + private static boolean isInteger(final String number) { + try { + Integer.parseInt(number); + return true; + } catch (Exception e) { + return false; + } + } + +} diff --git a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/FakeRedisProcessor.java b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/FakeRedisProcessor.java new file mode 100644 index 000000000..943120ffc --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/FakeRedisProcessor.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis.service; + + +import com.hurence.logisland.component.PropertyDescriptor; +import com.hurence.logisland.processor.AbstractProcessor; +import com.hurence.logisland.processor.ProcessContext; +import com.hurence.logisland.record.Record; +import com.hurence.logisland.validator.StandardValidators; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * Fake processor used for testing RedisConnectionPoolService. + */ +public class FakeRedisProcessor extends AbstractProcessor { + + public static final PropertyDescriptor REDIS_SERVICE = new PropertyDescriptor.Builder() + .name("redis-service") + .displayName("Redis Service") + .identifiesControllerService(RedisKeyValueCacheService.class) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .required(true) + .build(); + + @Override + public List getSupportedPropertyDescriptors() { + return Collections.singletonList(REDIS_SERVICE); + } + + + @Override + public Collection process(ProcessContext context, Collection records) { + return null; + } +} diff --git a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java new file mode 100644 index 000000000..6dd6f2a9e --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java @@ -0,0 +1,297 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis.service; + + +import com.hurence.logisland.component.InitializationException; +import com.hurence.logisland.component.PropertyDescriptor; +import com.hurence.logisland.processor.AbstractProcessor; +import com.hurence.logisland.processor.ProcessContext; +import com.hurence.logisland.record.*; +import com.hurence.logisland.redis.util.RedisUtils; +import com.hurence.logisland.serializer.DeserializationException; +import com.hurence.logisland.serializer.Deserializer; +import com.hurence.logisland.serializer.SerializationException; +import com.hurence.logisland.serializer.Serializer; +import com.hurence.logisland.util.runner.TestRunner; +import com.hurence.logisland.util.runner.TestRunners; +import com.hurence.logisland.validator.StandardValidators; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import redis.embedded.RedisServer; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.StandardSocketOptions; +import java.nio.channels.SocketChannel; +import java.nio.charset.StandardCharsets; +import java.util.*; + +/** + * This is an integration test that is meant to be run against a real Redis instance. + */ +public class ITRedisKeyValueCacheClientService { + + public static final String SERVICE_IDENTIFIER = "redis-map-cache-client"; + private TestRedisProcessor proc; + private TestRunner testRunner; + private RedisServer redisServer; + private RedisKeyValueCacheService redisMapCacheClientService; + private int redisPort; + + @Before + public void setup() throws IOException { + this.redisPort = getAvailablePort(); + + this.redisServer = new RedisServer(redisPort); + redisServer.start(); + + proc = new TestRedisProcessor(); + testRunner = TestRunners.newTestRunner(proc); + } + + private int getAvailablePort() throws IOException { + try (SocketChannel socket = SocketChannel.open()) { + socket.setOption(StandardSocketOptions.SO_REUSEADDR, true); + socket.bind(new InetSocketAddress("localhost", 0)); + return socket.socket().getLocalPort(); + } + } + + @After + public void teardown() throws IOException { + if (redisServer != null) { + redisServer.stop(); + } + } + + @Test + public void testStandaloneRedis() throws InitializationException, IOException, InterruptedException { + try { + // create, configure, and enable the RedisConnectionPool service + redisMapCacheClientService = new RedisKeyValueCacheService(); + redisMapCacheClientService.setIdentifier(SERVICE_IDENTIFIER); + + + testRunner.setProperty(RedisUtils.CONNECTION_STRING, "localhost:" + redisPort); + testRunner.setProperty(RedisUtils.REDIS_MODE, RedisUtils.REDIS_MODE_STANDALONE); + testRunner.setProperty(RedisUtils.DATABASE, "0"); + testRunner.setProperty(RedisUtils.COMMUNICATION_TIMEOUT, "10 seconds"); + + testRunner.setProperty(RedisUtils.POOL_MAX_TOTAL, "8"); + testRunner.setProperty(RedisUtils.POOL_MAX_IDLE, "8"); + testRunner.setProperty(RedisUtils.POOL_MIN_IDLE, "0"); + testRunner.setProperty(RedisUtils.POOL_BLOCK_WHEN_EXHAUSTED, "true"); + testRunner.setProperty(RedisUtils.POOL_MAX_WAIT_TIME, "10 seconds"); + testRunner.setProperty(RedisUtils.POOL_MIN_EVICTABLE_IDLE_TIME, "60 seconds"); + testRunner.setProperty(RedisUtils.POOL_TIME_BETWEEN_EVICTION_RUNS, "30 seconds"); + testRunner.setProperty(RedisUtils.POOL_NUM_TESTS_PER_EVICTION_RUN, "-1"); + testRunner.setProperty(RedisUtils.POOL_TEST_ON_CREATE, "false"); + testRunner.setProperty(RedisUtils.POOL_TEST_ON_BORROW, "false"); + testRunner.setProperty(RedisUtils.POOL_TEST_ON_RETURN, "false"); + testRunner.setProperty(RedisUtils.POOL_TEST_WHILE_IDLE, "true"); + testRunner.addControllerService(SERVICE_IDENTIFIER, redisMapCacheClientService); + + // uncomment this to test using a different database index than the default 0 + //testRunner.setProperty(redisConnectionPool, RedisUtils.DATABASE, "1"); + + // uncomment this to test using a password to authenticate to redis + //testRunner.setProperty(redisConnectionPool, RedisUtils.PASSWORD, "foobared"); + + testRunner.enableControllerService(redisMapCacheClientService); + + setupRedisMapCacheClientService(); + executeProcessor(); + } finally { + if (redisMapCacheClientService != null) { + redisMapCacheClientService.close(); + } + } + } + + private void setupRedisMapCacheClientService() throws InitializationException { + // create, configure, and enable the RedisDistributedMapCacheClient service + redisMapCacheClientService = new RedisKeyValueCacheService(); + redisMapCacheClientService.setIdentifier(SERVICE_IDENTIFIER); + + testRunner.addControllerService(SERVICE_IDENTIFIER, redisMapCacheClientService); + // testRunner.setProperty(redisMapCacheClientService, RedisKeyValueCacheService.REDIS_CONNECTION_POOL, "redis-connection-pool"); + testRunner.enableControllerService(redisMapCacheClientService); + testRunner.setProperty(TestRedisProcessor.REDIS_MAP_CACHE, "redis-map-cache-client"); + } + + + private Collection getRandomMetrics(int size) throws InterruptedException { + + List records = new ArrayList<>(); + Random rnd = new Random(); + long now = System.currentTimeMillis(); + + String[] metricsType = {"disk.io", "cpu.wait", "io.wait"}; + String[] hosts = {"host1", "host2", "host3"}; + for (int i = 0; i < size; i++) { + records.add(new StandardRecord(RecordDictionary.METRIC) + .setStringField(FieldDictionary.RECORD_NAME, metricsType[rnd.nextInt(3)]) + .setStringField("host", hosts[rnd.nextInt(3)]) + .setField(FieldDictionary.RECORD_TIME, FieldType.LONG, new Date().getTime()) + .setField(FieldDictionary.RECORD_VALUE, FieldType.FLOAT, 100.0 * Math.random()) + .setTime(now) + ); + now += rnd.nextInt(500); + } + + return records; + } + + + private void executeProcessor() throws InterruptedException { + // queue a flow file to trigger the processor and executeProcessor it + testRunner.enqueue(getRandomMetrics(10)); + testRunner.run(); + testRunner.assertAllInputRecordsProcessed(); + } + + /** + * Test processor that exercises RedisDistributedMapCacheClient. + */ + private static class TestRedisProcessor extends AbstractProcessor { + + public static final PropertyDescriptor REDIS_MAP_CACHE = new PropertyDescriptor.Builder() + .name("redis-map-cache") + .displayName("Redis Map Cache") + .identifiesControllerService(RedisKeyValueCacheService.class) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .required(true) + .build(); + + + @Override + public List getSupportedPropertyDescriptors() { + return Collections.singletonList(REDIS_MAP_CACHE); + } + + + @Override + public Collection process(ProcessContext context, Collection records) { + if (records.isEmpty()) { + return records; + } + + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final Serializer stringSerializer = new StringSerializer(); + final Deserializer stringDeserializer = new StringDeserializer(); + + final RedisKeyValueCacheService cacheClient = context.getPropertyValue(REDIS_MAP_CACHE).asControllerService(RedisKeyValueCacheService.class); + + try { + final long timestamp = System.currentTimeMillis(); + final String key = "test-redis-processor-" + timestamp; + final String value = "the time is " + timestamp; + + // verify the key doesn't exists, put the key/value, then verify it exists + Assert.assertFalse(cacheClient.containsKey(key, stringSerializer)); + cacheClient.put(key, value, stringSerializer, stringSerializer); + Assert.assertTrue(cacheClient.containsKey(key, stringSerializer)); + + // verify get returns the expected value we set above + final String retrievedValue = cacheClient.get(key, stringSerializer, stringDeserializer); + Assert.assertEquals(value, retrievedValue); + + // verify remove removes the entry and contains key returns false after + Assert.assertTrue(cacheClient.remove(key, stringSerializer)); + Assert.assertFalse(cacheClient.containsKey(key, stringSerializer)); + + // verify putIfAbsent works the first time and returns false the second time + Assert.assertTrue(cacheClient.putIfAbsent(key, value, stringSerializer, stringSerializer)); + Assert.assertFalse(cacheClient.putIfAbsent(key, "some other value", stringSerializer, stringSerializer)); + Assert.assertEquals(value, cacheClient.get(key, stringSerializer, stringDeserializer)); + + // verify that getAndPutIfAbsent returns the existing value and doesn't modify it in the cache + final String getAndPutIfAbsentResult = cacheClient.getAndPutIfAbsent(key, value, stringSerializer, stringSerializer, stringDeserializer); + Assert.assertEquals(value, getAndPutIfAbsentResult); + Assert.assertEquals(value, cacheClient.get(key, stringSerializer, stringDeserializer)); + + // verify that getAndPutIfAbsent on a key that doesn't exist returns null + final String keyThatDoesntExist = key + "_DOES_NOT_EXIST"; + Assert.assertFalse(cacheClient.containsKey(keyThatDoesntExist, stringSerializer)); + final String getAndPutIfAbsentResultWhenDoesntExist = cacheClient.getAndPutIfAbsent(keyThatDoesntExist, value, stringSerializer, stringSerializer, stringDeserializer); + Assert.assertEquals(null, getAndPutIfAbsentResultWhenDoesntExist); + Assert.assertEquals(value, cacheClient.get(keyThatDoesntExist, stringSerializer, stringDeserializer)); + + /* + // verify atomic fetch returns the correct entry + final AtomicCacheEntry entry = cacheClient.fetch(key, stringSerializer, stringDeserializer); + Assert.assertEquals(key, entry.getKey()); + Assert.assertEquals(value, entry.getValue()); + Assert.assertTrue(Arrays.equals(value.getBytes(StandardCharsets.UTF_8), entry.getRevision().orElse(null))); + + final AtomicCacheEntry notLatestEntry = new AtomicCacheEntry<>(entry.getKey(), entry.getValue(), "not previous".getBytes(StandardCharsets.UTF_8)); + + // verify atomic replace does not replace when previous value is not equal + Assert.assertFalse(cacheClient.replace(notLatestEntry, stringSerializer, stringSerializer)); + Assert.assertEquals(value, cacheClient.get(key, stringSerializer, stringDeserializer)); + + // verify atomic replace does replace when previous value is equal + final String replacementValue = "this value has been replaced"; + entry.setValue(replacementValue); + Assert.assertTrue(cacheClient.replace(entry, stringSerializer, stringSerializer)); + Assert.assertEquals(replacementValue, cacheClient.get(key, stringSerializer, stringDeserializer)); + + // verify atomic replace does replace no value previous existed + final String replaceKeyDoesntExist = key + "_REPLACE_DOES_NOT_EXIST"; + final AtomicCacheEntry entryDoesNotExist = new AtomicCacheEntry<>(replaceKeyDoesntExist, replacementValue, null); + Assert.assertTrue(cacheClient.replace(entryDoesNotExist, stringSerializer, stringSerializer)); + Assert.assertEquals(replacementValue, cacheClient.get(replaceKeyDoesntExist, stringSerializer, stringDeserializer)); +*/ + final int numToDelete = 2000; + for (int i = 0; i < numToDelete; i++) { + cacheClient.put(key + "-" + i, value, stringSerializer, stringSerializer); + } + + Assert.assertTrue(cacheClient.removeByPattern("test-redis-processor-*") >= numToDelete); + Assert.assertFalse(cacheClient.containsKey(key, stringSerializer)); + + + } catch (final Exception e) { + getLogger().error("Routing to failure due to: " + e.getMessage(), e); + + } + return Collections.emptyList(); + } + + } + + private static class StringSerializer implements Serializer { + @Override + public void serialize(String value, OutputStream output) throws SerializationException, IOException { + if (value != null) { + output.write(value.getBytes(StandardCharsets.UTF_8)); + } + } + } + + private static class StringDeserializer implements Deserializer { + @Override + public String deserialize(byte[] input) throws DeserializationException, IOException { + return input == null ? null : new String(input, StandardCharsets.UTF_8); + } + } +} diff --git a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java new file mode 100644 index 000000000..8cd5e1387 --- /dev/null +++ b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java @@ -0,0 +1,98 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 com.hurence.logisland.redis.service; + + +import com.hurence.logisland.component.InitializationException; +import com.hurence.logisland.redis.util.RedisUtils; +import com.hurence.logisland.util.runner.TestRunner; +import com.hurence.logisland.util.runner.TestRunners; +import org.junit.Before; +import org.junit.Test; + +public class TestRedisConnectionPoolService { + + private TestRunner testRunner; + private FakeRedisProcessor proc; + private RedisKeyValueCacheService redisService; + + @Before + public void setup() throws InitializationException { + proc = new FakeRedisProcessor(); + testRunner = TestRunners.newTestRunner(proc); + + redisService = new RedisKeyValueCacheService(); + + testRunner.setProperty(RedisUtils.REDIS_MODE, RedisUtils.REDIS_MODE_STANDALONE); + testRunner.setProperty(RedisUtils.DATABASE, "0"); + testRunner.addControllerService("redis-service", redisService); + } + + @Test + public void testValidateConnectionString() { + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, " "); + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "${redis.connection}"); + testRunner.assertNotValid(redisService); + + /* testRunner.setProperty("redis.connection", "localhost:6379"); + testRunner.assertValid(redisService);*/ + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost"); + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost:a"); + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost:6379"); + testRunner.assertValid(redisService); + + // standalone can only have one host:port pair + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost:6379,localhost:6378"); + testRunner.assertNotValid(redisService); + + // cluster can have multiple host:port pairs + testRunner.setProperty(redisService, RedisUtils.REDIS_MODE, RedisUtils.REDIS_MODE_CLUSTER.getValue()); + testRunner.assertValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost:6379,localhost"); + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "local:host:6379,localhost:6378"); + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost:a,localhost:b"); + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost :6379, localhost :6378, localhost:6377"); + testRunner.assertValid(redisService); + } + + @Test + public void testValidateSentinelMasterRequiredInSentinelMode() { + testRunner.setProperty(redisService, RedisUtils.REDIS_MODE, RedisUtils.REDIS_MODE_SENTINEL.getValue()); + testRunner.setProperty(redisService, RedisUtils.CONNECTION_STRING, "localhost:6379,localhost:6378"); + testRunner.assertNotValid(redisService); + + testRunner.setProperty(redisService, RedisUtils.SENTINEL_MASTER, "mymaster"); + testRunner.assertValid(redisService); + } + +} diff --git a/logisland-services/pom.xml b/logisland-services/pom.xml index 0a910c17b..71f406122 100644 --- a/logisland-services/pom.xml +++ b/logisland-services/pom.xml @@ -22,5 +22,6 @@ logisland-cache_key_value-service-api logisland-ip-to-geo-service-maxmind logisland-ip-to-geo-service-api + logisland-redis_4-client-service diff --git a/pom.xml b/pom.xml index 7e49bf3dd..6d7b3dbde 100644 --- a/pom.xml +++ b/pom.xml @@ -780,6 +780,11 @@ logisland-excel-plugin ${project.version} + + com.hurence.logisland + logisland-redis_4-client-service + ${project.version} + com.hurence.logisland logisland-documentation From cec9541cda78d1a62594cb5febb052394aed193f Mon Sep 17 00:00:00 2001 From: oalam Date: Wed, 23 May 2018 17:59:48 +0200 Subject: [PATCH 30/35] add serializer to RedisCacheService --- .../service/RedisKeyValueCacheService.java | 108 ++++++++++++++++-- .../ITRedisKeyValueCacheClientService.java | 2 + .../TestRedisConnectionPoolService.java | 16 +++ 3 files changed, 118 insertions(+), 8 deletions(-) diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java index a0e84be74..91fd6a39c 100644 --- a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java @@ -18,6 +18,7 @@ import com.hurence.logisland.annotation.documentation.CapabilityDescription; import com.hurence.logisland.annotation.documentation.Tags; import com.hurence.logisland.annotation.lifecycle.OnEnabled; +import com.hurence.logisland.component.AllowableValue; import com.hurence.logisland.component.InitializationException; import com.hurence.logisland.component.PropertyDescriptor; import com.hurence.logisland.controller.AbstractControllerService; @@ -25,20 +26,23 @@ import com.hurence.logisland.record.Record; import com.hurence.logisland.redis.util.RedisAction; import com.hurence.logisland.redis.util.RedisUtils; -import com.hurence.logisland.serializer.Deserializer; -import com.hurence.logisland.serializer.Serializer; +import com.hurence.logisland.serializer.*; import com.hurence.logisland.service.cache.CacheService; import com.hurence.logisland.service.cache.model.Cache; import com.hurence.logisland.service.cache.model.LRUCache; import com.hurence.logisland.util.Tuple; +import com.hurence.logisland.validator.StandardValidators; import com.hurence.logisland.validator.ValidationContext; import com.hurence.logisland.validator.ValidationResult; +import org.apache.avro.Schema; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.ScanOptions; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -57,16 +61,50 @@ @CapabilityDescription("A controller service for caching records by key value pair with LRU (last recently used) strategy. using LinkedHashMap") public class RedisKeyValueCacheService extends AbstractControllerService implements CacheService { - + private volatile RecordSerializer recordSerializer; + private final Serializer stringSerializer = new StringSerializer(); private volatile RedisConnectionPool redisConnectionPool; + public static final AllowableValue AVRO_SERIALIZER = new AllowableValue(AvroSerializer.class.getName(), + "avro serialization", "serialize events as avro blocs"); + public static final AllowableValue JSON_SERIALIZER = new AllowableValue(JsonSerializer.class.getName(), + "avro serialization", "serialize events as json blocs"); + public static final AllowableValue KRYO_SERIALIZER = new AllowableValue(KryoSerializer.class.getName(), + "kryo serialization", "serialize events as json blocs"); + public static final AllowableValue BYTESARRAY_SERIALIZER = new AllowableValue(BytesArraySerializer.class.getName(), + "byte array serialization", "serialize events as byte arrays"); + public static final AllowableValue KURA_PROTOCOL_BUFFER_SERIALIZER = new AllowableValue(KuraProtobufSerializer.class.getName(), + "Kura Protobuf serialization", "serialize events as Kura protocol buffer"); + public static final AllowableValue NO_SERIALIZER = new AllowableValue("none", "no serialization", "send events as bytes"); + + + public static final PropertyDescriptor RECORD_SERIALIZER = new PropertyDescriptor.Builder() + .name("record.recordSerializer") + .description("the way to serialize/deserialize the record") + .required(true) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .allowableValues(KRYO_SERIALIZER, JSON_SERIALIZER, AVRO_SERIALIZER, BYTESARRAY_SERIALIZER, KURA_PROTOCOL_BUFFER_SERIALIZER, NO_SERIALIZER) + .defaultValue(JSON_SERIALIZER.getValue()) + .build(); + + + public static final PropertyDescriptor AVRO_SCHEMA = new PropertyDescriptor.Builder() + .name("record.avro.schema") + .description("the avro schema definition") + .required(false) + .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) + .build(); + @Override @OnEnabled public void init(ControllerServiceInitializationContext context) throws InitializationException { try { this.redisConnectionPool = new RedisConnectionPool(); this.redisConnectionPool.init(context); + this.recordSerializer = getSerializer( + context.getPropertyValue(RECORD_SERIALIZER).asString(), + context.getPropertyValue(AVRO_SCHEMA).asString()); } catch (Exception e) { throw new InitializationException(e); } @@ -75,7 +113,11 @@ public void init(ControllerServiceInitializationContext context) throws Initiali @Override public List getSupportedPropertyDescriptors() { - return RedisUtils.REDIS_CONNECTION_PROPERTY_DESCRIPTORS; + + List properties = new ArrayList<>(RedisUtils.REDIS_CONNECTION_PROPERTY_DESCRIPTORS); + properties.add(RECORD_SERIALIZER); + + return properties; } @Override @@ -84,13 +126,22 @@ protected Collection customValidate(ValidationContext validati } @Override - public Record get(String string) { - return null; + public Record get(String key) { + try { + return get(key, stringSerializer, (Deserializer) recordSerializer); + } catch (IOException e) { + e.printStackTrace(); + return null; + } } @Override - public void set(String string, Record record) { - + public void set(String key, Record value) { + try { + put(key, value,stringSerializer, (Serializer) recordSerializer); + } catch (IOException e) { + e.printStackTrace(); + } } @@ -258,5 +309,46 @@ private T withConnection(final RedisAction action) throws IOException { } } + /** + * build a recordSerializer + * + * @param inSerializerClass the recordSerializer type + * @param schemaContent an Avro schema + * @return the recordSerializer + */ + private RecordSerializer getSerializer(String inSerializerClass, String schemaContent) { + + if (inSerializerClass.equals(AVRO_SERIALIZER.getValue())) { + Schema.Parser parser = new Schema.Parser(); + Schema inSchema = parser.parse(schemaContent); + new AvroSerializer(inSchema); + } else if (inSerializerClass.equals(JSON_SERIALIZER.getValue())) { + return new JsonSerializer(); + } else if (inSerializerClass.equals(BYTESARRAY_SERIALIZER.getValue())) { + return new BytesArraySerializer(); + } else if (inSerializerClass.equals(KURA_PROTOCOL_BUFFER_SERIALIZER.getValue())) { + return new KuraProtobufSerializer(); + } + return new KryoSerializer(true); + + } + + private static class StringSerializer implements Serializer { + @Override + public void serialize(String value, OutputStream output) throws SerializationException, IOException { + if (value != null) { + output.write(value.getBytes(StandardCharsets.UTF_8)); + } + } + } + private static class StringDeserializer implements Deserializer { + @Override + public String deserialize(byte[] input) throws DeserializationException, IOException { + return input == null ? null : new String(input, StandardCharsets.UTF_8); + } + } } + + + diff --git a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java index 6dd6f2a9e..8eeab917b 100644 --- a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java +++ b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java @@ -108,6 +108,8 @@ public void testStandaloneRedis() throws InitializationException, IOException, I testRunner.setProperty(RedisUtils.POOL_TEST_ON_BORROW, "false"); testRunner.setProperty(RedisUtils.POOL_TEST_ON_RETURN, "false"); testRunner.setProperty(RedisUtils.POOL_TEST_WHILE_IDLE, "true"); + + testRunner.setProperty(RedisKeyValueCacheService.RECORD_SERIALIZER, "com.hurence.logisland.serializer.JsonSerializer"); testRunner.addControllerService(SERVICE_IDENTIFIER, redisMapCacheClientService); // uncomment this to test using a different database index than the default 0 diff --git a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java index 8cd5e1387..100f74e38 100644 --- a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java +++ b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/TestRedisConnectionPoolService.java @@ -37,8 +37,24 @@ public void setup() throws InitializationException { redisService = new RedisKeyValueCacheService(); + redisService.setIdentifier("redis-service"); testRunner.setProperty(RedisUtils.REDIS_MODE, RedisUtils.REDIS_MODE_STANDALONE); testRunner.setProperty(RedisUtils.DATABASE, "0"); + testRunner.setProperty(RedisUtils.COMMUNICATION_TIMEOUT, "10 seconds"); + + testRunner.setProperty(RedisUtils.POOL_MAX_TOTAL, "8"); + testRunner.setProperty(RedisUtils.POOL_MAX_IDLE, "8"); + testRunner.setProperty(RedisUtils.POOL_MIN_IDLE, "0"); + testRunner.setProperty(RedisUtils.POOL_BLOCK_WHEN_EXHAUSTED, "true"); + testRunner.setProperty(RedisUtils.POOL_MAX_WAIT_TIME, "10 seconds"); + testRunner.setProperty(RedisUtils.POOL_MIN_EVICTABLE_IDLE_TIME, "60 seconds"); + testRunner.setProperty(RedisUtils.POOL_TIME_BETWEEN_EVICTION_RUNS, "30 seconds"); + testRunner.setProperty(RedisUtils.POOL_NUM_TESTS_PER_EVICTION_RUN, "-1"); + testRunner.setProperty(RedisUtils.POOL_TEST_ON_CREATE, "false"); + testRunner.setProperty(RedisUtils.POOL_TEST_ON_BORROW, "false"); + testRunner.setProperty(RedisUtils.POOL_TEST_ON_RETURN, "false"); + testRunner.setProperty(RedisUtils.POOL_TEST_WHILE_IDLE, "true"); + testRunner.setProperty(RedisKeyValueCacheService.RECORD_SERIALIZER, "com.hurence.logisland.serializer.JsonSerializer"); testRunner.addControllerService("redis-service", redisService); } From 1a35f9d208a2830b05e5c5f6fd53ceefeb9653e5 Mon Sep 17 00:00:00 2001 From: oalam Date: Thu, 24 May 2018 15:36:12 +0200 Subject: [PATCH 31/35] add unit tests for get and set method in RedisCache --- .../logisland/serializer/Deserializer.java | 5 ++- .../serializer/RecordSerializer.java | 2 +- .../logisland/serializer/Serializer.java | 2 +- .../logisland/serializer/JsonSerializer.java | 23 +++++----- .../logisland/serializer/KryoSerializer.java | 2 + .../serializer/JsonSerializerTest.java | 3 +- .../processor/hbase/util/ObjectSerDe.java | 17 ++++---- .../processor/hbase/util/StringSerDe.java | 7 ++- .../processor/hbase/util/TestObjectSerDe.java | 43 +++++++++---------- .../logisland-redis_4-client-service/pom.xml | 4 +- .../service/RedisKeyValueCacheService.java | 29 ++++++++----- .../ITRedisKeyValueCacheClientService.java | 23 ++++++++-- 12 files changed, 95 insertions(+), 65 deletions(-) diff --git a/logisland-api/src/main/java/com/hurence/logisland/serializer/Deserializer.java b/logisland-api/src/main/java/com/hurence/logisland/serializer/Deserializer.java index 519da8203..8d8a9d3b3 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/serializer/Deserializer.java +++ b/logisland-api/src/main/java/com/hurence/logisland/serializer/Deserializer.java @@ -17,6 +17,7 @@ import java.io.IOException; +import java.io.InputStream; /** * Provides an interface for deserializing an array of bytes into an Object @@ -28,12 +29,12 @@ public interface Deserializer { /** * Deserializes the given byte array input an Object and returns that value. * - * @param input input + * @param objectDataInput input * @return returns deserialized value * @throws DeserializationException if a valid object cannot be deserialized * from the given byte array * @throws IOException ex */ - T deserialize(byte[] input) throws DeserializationException, IOException; + T deserialize(InputStream objectDataInput) throws DeserializationException, IOException; } diff --git a/logisland-api/src/main/java/com/hurence/logisland/serializer/RecordSerializer.java b/logisland-api/src/main/java/com/hurence/logisland/serializer/RecordSerializer.java index ff4424eab..d6b153826 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/serializer/RecordSerializer.java +++ b/logisland-api/src/main/java/com/hurence/logisland/serializer/RecordSerializer.java @@ -39,7 +39,7 @@ import java.io.Serializable; -public interface RecordSerializer extends Serializable { +public interface RecordSerializer extends Serializable, Serializer, Deserializer { void serialize(OutputStream objectDataOutput, Record record) throws RecordSerializationException; Record deserialize(InputStream objectDataInput) throws RecordSerializationException; diff --git a/logisland-api/src/main/java/com/hurence/logisland/serializer/Serializer.java b/logisland-api/src/main/java/com/hurence/logisland/serializer/Serializer.java index ed19bf527..47f1a77eb 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/serializer/Serializer.java +++ b/logisland-api/src/main/java/com/hurence/logisland/serializer/Serializer.java @@ -34,6 +34,6 @@ public interface Serializer { * @throws SerializationException If unable to serialize the given value * @throws IOException ex */ - void serialize(T value, OutputStream output) throws SerializationException, IOException; + void serialize(OutputStream output, T value) throws SerializationException, IOException; } diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java index c51befe3f..9260ce163 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/JsonSerializer.java @@ -84,7 +84,7 @@ public void serialize(Record record, JsonGenerator jgen, com.fasterxml.jackson.d // retrieve event field String fieldName = entry.getKey(); Field field = entry.getValue(); - Object fieldValue = field.getRawValue(); + // Object fieldValue = field.getRawValue(); String fieldType = field.getType().toString(); // dump event field as record attribute @@ -92,25 +92,26 @@ public void serialize(Record record, JsonGenerator jgen, com.fasterxml.jackson.d try { switch (fieldType.toLowerCase()) { case "string": - jgen.writeStringField(fieldName, (String) fieldValue); + jgen.writeStringField(fieldName, field.asString()); break; case "integer": - jgen.writeNumberField(fieldName, (int) fieldValue); + case "int": + jgen.writeNumberField(fieldName, field.asInteger()); break; case "long": - jgen.writeNumberField(fieldName, (long) fieldValue); + jgen.writeNumberField(fieldName, field.asLong()); break; case "float": - jgen.writeNumberField(fieldName, (float) fieldValue); + jgen.writeNumberField(fieldName, field.asFloat()); break; case "double": - jgen.writeNumberField(fieldName, (double) fieldValue); + jgen.writeNumberField(fieldName, field.asDouble()); break; case "boolean": - jgen.writeBooleanField(fieldName, (boolean) fieldValue); + jgen.writeBooleanField(fieldName, field.asBoolean()); break; default: - jgen.writeObjectField(fieldName, fieldValue); + jgen.writeObjectField(fieldName, field.asString()); break; } } catch (Exception ex) { @@ -201,9 +202,11 @@ public Record deserialize(JsonParser jp, DeserializationContext ctxt) throws IOE case VALUE_NUMBER_FLOAT: try { - fields.put(jp.getCurrentName(), new Field(jp.getCurrentName(), FieldType.FLOAT, jp.getFloatValue())); - } catch (JsonParseException ex) { + fields.put(jp.getCurrentName(), new Field(jp.getCurrentName(), FieldType.DOUBLE, jp.getDoubleValue())); + } catch (JsonParseException ex) { + + fields.put(jp.getCurrentName(), new Field(jp.getCurrentName(), FieldType.FLOAT, jp.getFloatValue())); } break; case VALUE_FALSE: diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/KryoSerializer.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/KryoSerializer.java index 11ee1fa24..ca011e2cc 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/KryoSerializer.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/serializer/KryoSerializer.java @@ -39,6 +39,7 @@ import com.hurence.logisland.record.Field; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.DeflaterOutputStream; @@ -117,4 +118,5 @@ public Record deserialize(InputStream objectDataInput) { throw new RecordSerializationException(t.getMessage(), t.getCause()); } } + } \ No newline at end of file diff --git a/logisland-framework/logisland-utils/src/test/java/com/hurence/logisland/serializer/JsonSerializerTest.java b/logisland-framework/logisland-utils/src/test/java/com/hurence/logisland/serializer/JsonSerializerTest.java index 55cdd10f3..ccc597ac0 100755 --- a/logisland-framework/logisland-utils/src/test/java/com/hurence/logisland/serializer/JsonSerializerTest.java +++ b/logisland-framework/logisland-utils/src/test/java/com/hurence/logisland/serializer/JsonSerializerTest.java @@ -29,6 +29,7 @@ import java.io.IOException; import java.util.Date; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** @@ -70,7 +71,7 @@ public void validateJsonSerialization() throws IOException { ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); Record deserializedRecord = serializer.deserialize(bais); - assertTrue(deserializedRecord.equals(record)); + assertEquals(record,deserializedRecord); } diff --git a/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/ObjectSerDe.java b/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/ObjectSerDe.java index d3d054345..62264a028 100644 --- a/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/ObjectSerDe.java +++ b/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/ObjectSerDe.java @@ -20,18 +20,19 @@ import com.hurence.logisland.serializer.Deserializer; import com.hurence.logisland.serializer.SerializationException; import com.hurence.logisland.serializer.Serializer; +import org.apache.commons.io.IOUtils; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.OutputStream; +import java.io.*; public class ObjectSerDe implements Serializer, Deserializer { @Override - public Object deserialize(byte[] input) throws DeserializationException, IOException { + public Object deserialize(InputStream is) throws DeserializationException, IOException { + if (is == null) { + return null; + } + + byte[] input = IOUtils.toByteArray(is); if (input == null || input.length == 0) { return null; } @@ -45,7 +46,7 @@ public Object deserialize(byte[] input) throws DeserializationException, IOExcep } @Override - public void serialize(Object value, OutputStream output) throws SerializationException, IOException { + public void serialize(OutputStream output, Object value) throws SerializationException, IOException { try (final ByteArrayOutputStream bOut = new ByteArrayOutputStream(); final ObjectOutputStream objOut = new ObjectOutputStream(bOut)) { objOut.writeObject(value); diff --git a/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/StringSerDe.java b/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/StringSerDe.java index dd4e0e1b2..4ddb9f0e7 100644 --- a/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/StringSerDe.java +++ b/logisland-plugins/logisland-hbase-plugin/src/main/java/com/hurence/logisland/processor/hbase/util/StringSerDe.java @@ -22,15 +22,18 @@ import com.hurence.logisland.serializer.Deserializer; import com.hurence.logisland.serializer.SerializationException; import com.hurence.logisland.serializer.Serializer; +import org.apache.commons.io.IOUtils; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; public class StringSerDe implements Serializer, Deserializer { @Override - public String deserialize(final byte[] value) throws DeserializationException, IOException { + public String deserialize(final InputStream input) throws DeserializationException, IOException { + byte[] value = IOUtils.toByteArray(input); if ( value == null ) { return null; } @@ -39,7 +42,7 @@ public String deserialize(final byte[] value) throws DeserializationException, I } @Override - public void serialize(final String value, final OutputStream out) throws SerializationException, IOException { + public void serialize(final OutputStream out, final String value) throws SerializationException, IOException { out.write(value.getBytes(StandardCharsets.UTF_8)); } diff --git a/logisland-plugins/logisland-hbase-plugin/src/test/java/com/hurence/logisland/processor/hbase/util/TestObjectSerDe.java b/logisland-plugins/logisland-hbase-plugin/src/test/java/com/hurence/logisland/processor/hbase/util/TestObjectSerDe.java index 6404aaff9..e521bb56c 100644 --- a/logisland-plugins/logisland-hbase-plugin/src/test/java/com/hurence/logisland/processor/hbase/util/TestObjectSerDe.java +++ b/logisland-plugins/logisland-hbase-plugin/src/test/java/com/hurence/logisland/processor/hbase/util/TestObjectSerDe.java @@ -1,12 +1,12 @@ /** * Copyright (C) 2016 Hurence (support@hurence.com) - * + *

* 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 - * + *

+ * 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. @@ -19,31 +19,28 @@ import org.junit.Assert; import org.junit.Test; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; +import java.io.*; public class TestObjectSerDe { - @Test + @Test public void testDeserializeSuccessful() throws IOException { - final ObjectSerDe serDe = new ObjectSerDe(); + final ObjectSerDe serDe = new ObjectSerDe(); - final String myObject = "myObject"; - final ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - final ObjectOutputStream out = new ObjectOutputStream(bOut); - out.writeObject(myObject); + final String myObject = "myObject"; + final ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + final ObjectOutputStream out = new ObjectOutputStream(bOut); + out.writeObject(myObject); - byte[] myObjectBytes = bOut.toByteArray(); - Assert.assertNotNull(myObjectBytes); - Assert.assertTrue(myObjectBytes.length > 0); + byte[] myObjectBytes = bOut.toByteArray(); + Assert.assertNotNull(myObjectBytes); + Assert.assertTrue(myObjectBytes.length > 0); - final Object deserialized = serDe.deserialize(myObjectBytes); - Assert.assertTrue(deserialized instanceof String); - Assert.assertEquals(myObject, deserialized); - } + InputStream input = new ByteArrayInputStream(myObjectBytes); + final Object deserialized = serDe.deserialize(input); + Assert.assertTrue(deserialized instanceof String); + Assert.assertEquals(myObject, deserialized); + } @Test public void testDeserializeNull() throws IOException { @@ -58,7 +55,7 @@ public void testSerialize() throws IOException, ClassNotFoundException { final String myObject = "myObject"; final ObjectSerDe serDe = new ObjectSerDe(); - serDe.serialize(myObject, out); + serDe.serialize(out, myObject); final ByteArrayInputStream bIn = new ByteArrayInputStream(out.toByteArray()); final ObjectInputStream in = new ObjectInputStream(bIn); diff --git a/logisland-services/logisland-redis_4-client-service/pom.xml b/logisland-services/logisland-redis_4-client-service/pom.xml index 0879c4b00..c3eacb43f 100644 --- a/logisland-services/logisland-redis_4-client-service/pom.xml +++ b/logisland-services/logisland-redis_4-client-service/pom.xml @@ -129,8 +129,8 @@ - io - ${shaded.package}.io + org.springframework.data + ${shaded.package}.org.springframework.data diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java index 91fd6a39c..229efa175 100644 --- a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java @@ -35,13 +35,12 @@ import com.hurence.logisland.validator.ValidationContext; import com.hurence.logisland.validator.ValidationResult; import org.apache.avro.Schema; +import org.apache.commons.io.IOUtils; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.ScanOptions; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; +import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; @@ -179,7 +178,13 @@ public Record getAndPutIfAbsent(final String key, final Record final Object firstResult = results.get(0); if (firstResult instanceof Boolean) { final Boolean absent = (Boolean) firstResult; - return absent ? null : valueDeserializer.deserialize(existingValue); + + if(absent){ + return null; + }else { + InputStream input = new ByteArrayInputStream(existingValue); + return valueDeserializer.deserialize(input); + } } else { // this shouldn't really happen, but just in case there is a non-boolean result then bounce out of the loop throw new IOException("Unexpected result from Redis transaction: Expected Boolean result, but got " @@ -213,7 +218,8 @@ public Record get(final String key, final Serializer ke return withConnection(redisConnection -> { final byte[] k = serialize(key, keySerializer); final byte[] v = redisConnection.get(k); - return valueDeserializer.deserialize(v); + InputStream input = new ByteArrayInputStream(v); + return valueDeserializer.deserialize(input); }); } @@ -275,12 +281,12 @@ private byte[][] getKeys(final List keys) { private Tuple serialize(final K key, final Record value, final Serializer keySerializer, final Serializer valueSerializer) throws IOException { final ByteArrayOutputStream out = new ByteArrayOutputStream(); - keySerializer.serialize(key, out); + keySerializer.serialize(out, key); final byte[] k = out.toByteArray(); out.reset(); - valueSerializer.serialize(value, out); + valueSerializer.serialize(out, value); final byte[] v = out.toByteArray(); return new Tuple<>(k, v); @@ -289,7 +295,7 @@ private Tuple serialize(final K key, final Record va private byte[] serialize(final K key, final Serializer keySerializer) throws IOException { final ByteArrayOutputStream out = new ByteArrayOutputStream(); - keySerializer.serialize(key, out); + keySerializer.serialize(out, key); return out.toByteArray(); } @@ -335,7 +341,7 @@ private RecordSerializer getSerializer(String inSerializerClass, String schemaCo private static class StringSerializer implements Serializer { @Override - public void serialize(String value, OutputStream output) throws SerializationException, IOException { + public void serialize(OutputStream output, String value) throws SerializationException, IOException { if (value != null) { output.write(value.getBytes(StandardCharsets.UTF_8)); } @@ -344,8 +350,9 @@ public void serialize(String value, OutputStream output) throws SerializationExc private static class StringDeserializer implements Deserializer { @Override - public String deserialize(byte[] input) throws DeserializationException, IOException { - return input == null ? null : new String(input, StandardCharsets.UTF_8); + public String deserialize(InputStream input) throws DeserializationException, IOException { + byte[] bytes = IOUtils.toByteArray(input); + return input == null ? null : new String(bytes, StandardCharsets.UTF_8); } } } diff --git a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java index 8eeab917b..fcc8151d5 100644 --- a/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java +++ b/logisland-services/logisland-redis_4-client-service/src/test/java/com/hurence/logisland/redis/service/ITRedisKeyValueCacheClientService.java @@ -30,6 +30,7 @@ import com.hurence.logisland.util.runner.TestRunner; import com.hurence.logisland.util.runner.TestRunners; import com.hurence.logisland.validator.StandardValidators; +import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -38,6 +39,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.StandardSocketOptions; @@ -154,7 +156,7 @@ private Collection getRandomMetrics(int size) throws InterruptedExceptio .setStringField(FieldDictionary.RECORD_NAME, metricsType[rnd.nextInt(3)]) .setStringField("host", hosts[rnd.nextInt(3)]) .setField(FieldDictionary.RECORD_TIME, FieldType.LONG, new Date().getTime()) - .setField(FieldDictionary.RECORD_VALUE, FieldType.FLOAT, 100.0 * Math.random()) + .setField(FieldDictionary.RECORD_VALUE, FieldType.DOUBLE, 100.0 * Math.random()) .setTime(now) ); now += rnd.nextInt(500); @@ -238,6 +240,18 @@ public Collection process(ProcessContext context, Collection rec Assert.assertEquals(null, getAndPutIfAbsentResultWhenDoesntExist); Assert.assertEquals(value, cacheClient.get(keyThatDoesntExist, stringSerializer, stringDeserializer)); + + // get/set checks with serializer + for (Record record : records) { + String recordKey = record.getId(); + cacheClient.set(recordKey, record); + Assert.assertTrue(cacheClient.containsKey(recordKey, stringSerializer)); + Record storedRecord = cacheClient.get(recordKey); + Assert.assertEquals(record,storedRecord); + cacheClient.remove(recordKey, stringSerializer); + Assert.assertFalse(cacheClient.containsKey(recordKey, stringSerializer)); + } + /* // verify atomic fetch returns the correct entry final AtomicCacheEntry entry = cacheClient.fetch(key, stringSerializer, stringDeserializer); @@ -283,7 +297,7 @@ public Collection process(ProcessContext context, Collection rec private static class StringSerializer implements Serializer { @Override - public void serialize(String value, OutputStream output) throws SerializationException, IOException { + public void serialize(OutputStream output, String value) throws SerializationException, IOException { if (value != null) { output.write(value.getBytes(StandardCharsets.UTF_8)); } @@ -292,8 +306,9 @@ public void serialize(String value, OutputStream output) throws SerializationExc private static class StringDeserializer implements Deserializer { @Override - public String deserialize(byte[] input) throws DeserializationException, IOException { - return input == null ? null : new String(input, StandardCharsets.UTF_8); + public String deserialize(InputStream input) throws DeserializationException, IOException { + byte[] bytes = IOUtils.toByteArray(input); + return input == null ? null : new String(bytes, StandardCharsets.UTF_8); } } } From f617fdfa264eb7af3425b036660ea67c647ad385 Mon Sep 17 00:00:00 2001 From: oalam Date: Thu, 24 May 2018 18:10:50 +0200 Subject: [PATCH 32/35] start tuto for redis store --- .../main/resources/conf/store-to-redis.yml | 103 ++++++++++++++++++ .../logisland-redis_4-client-service/pom.xml | 5 +- .../hurence/logisland/redis/RedisType.java | 6 +- .../service/RedisKeyValueCacheService.java | 81 +++++++++++++- .../logisland/redis/util/RedisUtils.java | 51 +++++---- 5 files changed, 220 insertions(+), 26 deletions(-) create mode 100644 logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml b/logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml new file mode 100644 index 000000000..2eb4e36ac --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml @@ -0,0 +1,103 @@ +######################################################################################################### +# Logisland configuration script tempate +######################################################################################################### + +version: 0.12.2 +documentation: LogIsland analytics main config file. Put here every engine or component config + +######################################################################################################### +# engine +engine: + component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine + type: engine + documentation: Index some apache logs with logisland + configuration: + spark.app.name: StoreToRedisDemo + spark.master: local[2] + spark.driver.memory: 1G + spark.driver.cores: 1 + spark.executor.memory: 2G + spark.executor.instances: 4 + spark.executor.cores: 2 + spark.yarn.queue: default + spark.yarn.maxAppAttempts: 4 + spark.yarn.am.attemptFailuresValidityInterval: 1h + spark.yarn.max.executor.failures: 20 + spark.yarn.executor.failuresValidityInterval: 1h + spark.task.maxFailures: 8 + spark.serializer: org.apache.spark.serializer.KryoSerializer + spark.streaming.batchDuration: 1000 + spark.streaming.backpressure.enabled: false + spark.streaming.unpersist: false + spark.streaming.blockInterval: 500 + spark.streaming.kafka.maxRatePerPartition: 3000 + spark.streaming.timeout: -1 + spark.streaming.unpersist: false + spark.streaming.kafka.maxRetries: 3 + spark.streaming.ui.retainedBatches: 200 + spark.streaming.receiver.writeAheadLog.enable: false + spark.ui.port: 4050 + + controllerServiceConfigurations: + + - controllerService: datastore_service + component: com.hurence.logisland.redis.service.RedisKeyValueCacheService + type: service + documentation: redis datastore service + configuration: + connection.string: localhost:6379 + redis.mode: standalone + database.index: 0 + communication.timeout: 10 seconds + pool.max.total: 8 + pool.max.idle: 8 + pool.min.idle: 0 + pool.block.when.exhausted: true + pool.max.wait.time: 10 seconds + pool.min.evictable.idle.time: 60 seconds + pool.time.between.eviction.runs: 30 seconds + pool.num.tests.per.eviction.run: -1 + pool.test.on.create: false + pool.test.on.borrow: false + pool.test.on.return: false + pool.test.while.idle: true + record.recordSerializer: com.hurence.logisland.serializer.JsonSerializer + + streamConfigurations: + + # main processing stream + - stream: parsing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: a processor that converts raw apache logs into structured log records + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: none + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: ${KAFKA_BROKERS} + kafka.zookeeper.quorum: ${ZK_QUORUM} + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + processorConfigurations: + + # parse apache logs into logisland records + - processor: apache_parser + component: com.hurence.logisland.processor.SplitText + type: parser + documentation: a parser that produce events from an apache log REGEX + configuration: + record.type: apache_log + value.regex: (\S+)\s+(\S+)\s+(\S+)\s+\[([\w:\/]+\s[+\-]\d{4})\]\s+"(\S+)\s+(\S+)\s*(\S*)"\s+(\S+)\s+(\S+) + value.fields: src_ip,identd,user,record_time,http_method,http_query,http_version,http_status,bytes_out + + # all the parsed records are added to datastore by bulk + - processor: solr_publisher + component: com.hurence.logisland.processor.datastore.BulkPut + type: processor + documentation: "indexes processed events in datastore" + configuration: + datastore.client.service: datastore_service diff --git a/logisland-services/logisland-redis_4-client-service/pom.xml b/logisland-services/logisland-redis_4-client-service/pom.xml index c3eacb43f..b8f128670 100644 --- a/logisland-services/logisland-redis_4-client-service/pom.xml +++ b/logisland-services/logisland-redis_4-client-service/pom.xml @@ -54,14 +54,11 @@ org.springframework.data spring-data-redis ${spring.data.redis.version} - provided redis.clients jedis ${jedis.version} - jar - compile @@ -97,6 +94,8 @@ redis.clients:* + org.springframework.data:* + org.springframework:* diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java index 1c7f9b2b8..b6a75c4c0 100644 --- a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/RedisType.java @@ -21,11 +21,11 @@ */ public enum RedisType { - STANDALONE("Standalone", "A single standalone Redis instance."), + STANDALONE("standalone", "A single standalone Redis instance."), - SENTINEL("Sentinel", "Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel"), + SENTINEL("sentinel", "Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel"), - CLUSTER("Cluster", "Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec"); + CLUSTER("cluster", "Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec"); private final String displayName; private final String description; diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java index 229efa175..7d9939951 100644 --- a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisKeyValueCacheService.java @@ -30,6 +30,10 @@ import com.hurence.logisland.service.cache.CacheService; import com.hurence.logisland.service.cache.model.Cache; import com.hurence.logisland.service.cache.model.LRUCache; +import com.hurence.logisland.service.datastore.DatastoreClientService; +import com.hurence.logisland.service.datastore.DatastoreClientServiceException; +import com.hurence.logisland.service.datastore.MultiGetQueryRecord; +import com.hurence.logisland.service.datastore.MultiGetResponseRecord; import com.hurence.logisland.util.Tuple; import com.hurence.logisland.validator.StandardValidators; import com.hurence.logisland.validator.ValidationContext; @@ -58,7 +62,7 @@ */ @Tags({"cache", "service", "key", "value", "pair", "redis"}) @CapabilityDescription("A controller service for caching records by key value pair with LRU (last recently used) strategy. using LinkedHashMap") -public class RedisKeyValueCacheService extends AbstractControllerService implements CacheService { +public class RedisKeyValueCacheService extends AbstractControllerService implements DatastoreClientService, CacheService { private volatile RecordSerializer recordSerializer; private final Serializer stringSerializer = new StringSerializer(); @@ -339,6 +343,81 @@ private RecordSerializer getSerializer(String inSerializerClass, String schemaCo } + @Override + public void createCollection(String name, int partitionsCount, int replicationFactor) throws DatastoreClientServiceException { + + } + + @Override + public void dropCollection(String name) throws DatastoreClientServiceException { + + } + + @Override + public long countCollection(String name) throws DatastoreClientServiceException { + return 0; + } + + @Override + public boolean existsCollection(String name) throws DatastoreClientServiceException { + return false; + } + + @Override + public void refreshCollection(String name) throws DatastoreClientServiceException { + + } + + @Override + public void copyCollection(String reindexScrollTimeout, String src, String dst) throws DatastoreClientServiceException { + + } + + @Override + public void createAlias(String collection, String alias) throws DatastoreClientServiceException { + + } + + @Override + public boolean putMapping(String indexName, String doctype, String mappingAsJsonString) throws DatastoreClientServiceException { + return false; + } + + @Override + public void bulkFlush() throws DatastoreClientServiceException { + + } + + @Override + public void bulkPut(String collectionName, Record record) throws DatastoreClientServiceException { + set(record.getId(),record); + } + + @Override + public void put(String collectionName, Record record, boolean asynchronous) throws DatastoreClientServiceException { + set(record.getId(),record); + } + + @Override + public List multiGet(List multiGetQueryRecords) throws DatastoreClientServiceException { + return null; + } + + @Override + public Record get(String collectionName, Record record) throws DatastoreClientServiceException { + return get(record.getId()); + } + + @Override + public Collection query(String query) { + return null; + } + + @Override + public long queryCount(String query) { + return 0; + } + private static class StringSerializer implements Serializer { @Override public void serialize(OutputStream output, String value) throws SerializationException, IOException { diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java index e549220b0..183796932 100644 --- a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java @@ -52,7 +52,7 @@ public class RedisUtils { public static final AllowableValue REDIS_MODE_CLUSTER = new AllowableValue(RedisType.CLUSTER.getDisplayName(), RedisType.CLUSTER.getDisplayName(), RedisType.CLUSTER.getDescription()); public static final PropertyDescriptor REDIS_MODE = new PropertyDescriptor.Builder() - .name("Redis Mode") + .name("redis.mode") .displayName("Redis Mode") .description("The type of Redis being communicated with - standalone, sentinel, or clustered.") .allowableValues(REDIS_MODE_STANDALONE, REDIS_MODE_SENTINEL, REDIS_MODE_CLUSTER) @@ -62,7 +62,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor CONNECTION_STRING = new PropertyDescriptor.Builder() - .name("Connection String") + .name("connection.string") .displayName("Connection String") .description("The connection string for Redis. In a standalone instance this value will be of the form hostname:port. " + "In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. " + @@ -73,7 +73,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor DATABASE = new PropertyDescriptor.Builder() - .name("Database Index") + .name("database.index") .displayName("Database Index") .description("The database index to be used by connections created from this connection pool. " + "See the databases property in redis.conf, by default databases 0-15 will be available.") @@ -84,7 +84,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor COMMUNICATION_TIMEOUT = new PropertyDescriptor.Builder() - .name("Communication Timeout") + .name("communication.timeout") .displayName("Communication Timeout") .description("The timeout to use when attempting to communicate with Redis.") .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) @@ -93,7 +93,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor CLUSTER_MAX_REDIRECTS = new PropertyDescriptor.Builder() - .name("Cluster Max Redirects") + .name("cluster.max.redirects") .displayName("Cluster Max Redirects") .description("The maximum number of redirects that can be performed when clustered.") .addValidator(StandardValidators.NON_NEGATIVE_INTEGER_VALIDATOR) @@ -102,7 +102,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor SENTINEL_MASTER = new PropertyDescriptor.Builder() - .name("Sentinel Master") + .name("sentinel.master") .displayName("Sentinel Master") .description("The name of the sentinel master, require when Mode is set to Sentinel") .addValidator(StandardValidators.NON_BLANK_VALIDATOR) @@ -110,7 +110,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor PASSWORD = new PropertyDescriptor.Builder() - .name("Password") + .name("password") .displayName("Password") .description("The password used to authenticate to the Redis server. See the requirepass property in redis.conf.") .addValidator(StandardValidators.NON_BLANK_VALIDATOR) @@ -119,7 +119,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_MAX_TOTAL = new PropertyDescriptor.Builder() - .name("Pool - Max Total") + .name("pool.max.total") .displayName("Pool - Max Total") .description("The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). " + "A negative value indicates that there is no limit.") @@ -129,7 +129,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_MAX_IDLE = new PropertyDescriptor.Builder() - .name("Pool - Max Idle") + .name("pool.max.idle") .displayName("Pool - Max Idle") .description("The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.") .addValidator(StandardValidators.INTEGER_VALIDATOR) @@ -138,7 +138,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_MIN_IDLE = new PropertyDescriptor.Builder() - .name("Pool - Min Idle") + .name("pool.min.idle") .displayName("Pool - Min Idle") .description("The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is " + "greater than the configured value for Max Idle, then the value of Max Idle will be used instead.") @@ -148,7 +148,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_BLOCK_WHEN_EXHAUSTED = new PropertyDescriptor.Builder() - .name("Pool - Block When Exhausted") + .name("pool.block.when.exhausted") .displayName("Pool - Block When Exhausted") .description("Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. " + "Setting this to false means an error will occur immediately when a client requests a connection and none are available.") @@ -159,7 +159,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_MAX_WAIT_TIME = new PropertyDescriptor.Builder() - .name("Pool - Max Wait Time") + .name("pool.max.wait.time") .displayName("Pool - Max Wait Time") .description("The amount of time to wait for an available connection when Block When Exhausted is set to true.") .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) @@ -168,7 +168,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_MIN_EVICTABLE_IDLE_TIME = new PropertyDescriptor.Builder() - .name("Pool - Min Evictable Idle Time") + .name("pool.min.evictable.idle.time") .displayName("Pool - Min Evictable Idle Time") .description("The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.") .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) @@ -177,7 +177,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_TIME_BETWEEN_EVICTION_RUNS = new PropertyDescriptor.Builder() - .name("Pool - Time Between Eviction Runs") + .name("pool.time.between.eviction.runs") .displayName("Pool - Time Between Eviction Runs") .description("The amount of time between attempting to evict idle connections from the pool.") .addValidator(StandardValidators.TIME_PERIOD_VALIDATOR) @@ -186,7 +186,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_NUM_TESTS_PER_EVICTION_RUN = new PropertyDescriptor.Builder() - .name("Pool - Num Tests Per Eviction Run") + .name("pool.num.tests.per.eviction.run") .displayName("Pool - Num Tests Per Eviction Run") .description("The number of connections to tests per eviction attempt. A negative value indicates to test all connections.") .addValidator(StandardValidators.INTEGER_VALIDATOR) @@ -195,7 +195,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_TEST_ON_CREATE = new PropertyDescriptor.Builder() - .name("Pool - Test On Create") + .name("pool.test.on.create") .displayName("Pool - Test On Create") .description("Whether or not connections should be tested upon creation.") .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) @@ -205,7 +205,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_TEST_ON_BORROW = new PropertyDescriptor.Builder() - .name("Pool - Test On Borrow") + .name("pool.test.on.borrow") .displayName("Pool - Test On Borrow") .description("Whether or not connections should be tested upon borrowing from the pool.") .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) @@ -215,7 +215,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_TEST_ON_RETURN = new PropertyDescriptor.Builder() - .name("Pool - Test On Return") + .name("pool.test.on.return") .displayName("Pool - Test On Return") .description("Whether or not connections should be tested upon returning to the pool.") .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) @@ -225,7 +225,7 @@ public class RedisUtils { .build(); public static final PropertyDescriptor POOL_TEST_WHILE_IDLE = new PropertyDescriptor.Builder() - .name("Pool - Test While Idle") + .name("pool.test.while.idle") .displayName("Pool - Test While Idle") .description("Whether or not connections should be tested while idle.") .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) @@ -234,6 +234,19 @@ public class RedisUtils { .required(true) .build(); + + + + + + + + + + + + + public static final List REDIS_CONNECTION_PROPERTY_DESCRIPTORS; static { From 03272d4d04ecd204d869933147b366d9fe20a500 Mon Sep 17 00:00:00 2001 From: oalam Date: Fri, 25 May 2018 15:26:44 +0200 Subject: [PATCH 33/35] update documentation and version to 0.13.0 --- README.rst | 12 +- launch-tuto.sh | 2 +- logisland-api/pom.xml | 2 +- .../logisland/config/DefaultConfigValues.java | 1 + logisland-assembly/pom.xml | 2 +- .../logisland-connect-spark/pom.xml | 2 +- .../resources/conf/kafka-connect-stream.yml | 2 +- .../logisland-connectors-bundle/pom.xml | 2 +- .../logisland-connector-opcda/pom.xml | 2 +- .../logisland-connectors/pom.xml | 2 +- logisland-connect/pom.xml | 2 +- logisland-docker/full-container/Dockerfile | 4 +- logisland-docker/full-container/README.rst | 10 +- .../lightweight-container/Dockerfile | 2 +- logisland-docker/pom.xml | 20 +- .../src/it/resources/data/all-tutorials.yml | 2 +- logisland-documentation/api.rst | 2 +- logisland-documentation/changes.rst | 2 +- logisland-documentation/conf.py | 4 +- logisland-documentation/developer.rst | 8 +- logisland-documentation/monitoring.rst | 4 +- logisland-documentation/overview-slides.md | 2 +- logisland-documentation/plugins_old.rst | 2 +- logisland-documentation/pom.xml | 2 +- logisland-documentation/tutorials/index.rst | 1 + .../tutorials/prerequisites.rst | 147 +-- .../tutorials/store-to-redis.rst | 180 ++++ .../logisland-spark_1_6-engine/pom.xml | 2 +- .../logisland-spark_2_1-engine/pom.xml | 2 +- .../test/resources/conf/structured-stream.yml | 2 +- logisland-engines/pom.xml | 2 +- logisland-framework/logisland-agent/README.md | 2 +- logisland-framework/logisland-agent/pom.xml | 2 +- .../logisland-bootstrap/pom.xml | 2 +- .../logisland/runner/SparkJobLauncher.java | 2 +- .../runner/StreamProcessingRunner.java | 2 +- .../logisland-hadoop-utils/pom.xml | 2 +- .../logisland-resources/pom.xml | 2 +- .../main/resources/conf/aggregate-events.yml | 2 +- .../resources/conf/configuration-template.yml | 2 +- .../main/resources/conf/docker-compose.yml | 66 +- .../resources/conf/enrich-apache-logs.yml | 2 +- .../resources/conf/future-factory-indexer.yml | 2 +- .../resources/conf/index-apache-logs-solr.yml | 2 +- .../main/resources/conf/index-apache-logs.yml | 2 +- .../conf/index-blockchain-transactions.yml | 2 +- .../resources/conf/index-network-packets.yml | 2 +- .../conf/logisland-kafka-connect.yml | 2 +- .../src/main/resources/conf/match-queries.yml | 2 +- .../main/resources/conf/mqtt-to-historian.yml | 2 +- .../main/resources/conf/outlier-detection.yml | 2 +- .../main/resources/conf/python-processing.yml | 2 +- .../conf/retrieve-data-from-elasticsearch.yml | 2 +- .../src/main/resources/conf/save-to-hdfs.yml | 2 +- .../conf/send-apache-logs-to-hbase.yml | 2 +- .../main/resources/conf/store-to-redis.yml | 12 +- .../resources/conf/timeseries-parsing.yml | 2 +- .../src/main/resources/docs/api.rst | 2 +- .../src/main/resources/docs/changes.rst | 2 +- .../src/main/resources/docs/developer.rst | 8 +- .../src/main/resources/docs/monitoring.rst | 4 +- .../src/main/resources/docs/plugins_old.rst | 2 +- .../main/resources/docs/tutorials/index.rst | 1 + .../docs/tutorials/prerequisites.rst | 11 +- .../logisland-scripting-base/pom.xml | 2 +- .../logisland-scripting-mvel/pom.xml | 2 +- .../logisland-scripting/pom.xml | 2 +- logisland-framework/logisland-utils/pom.xml | 2 +- .../StandardControllerServiceLookup.java | 1 - .../resources/configuration-templatev2.yml | 2 +- logisland-framework/pom.xml | 2 +- .../logisland-botsearch-plugin/pom.xml | 2 +- .../logisland/math/FlowDistanceMeasure.java | 2 +- .../logisland/botsearch/TraceTest.java | 8 +- .../resources/data/TracesAnalysis_samples.txt | 6 +- .../logisland-common-logs-plugin/pom.xml | 2 +- .../pom.xml | 2 +- .../datastore/AbstractDatastoreProcessor.java | 1 - .../resources/data/TracesAnalysis_samples.txt | 6 +- .../logisland-cyber-security-plugin/pom.xml | 2 +- .../logisland-elasticsearch-plugin/pom.xml | 2 +- .../logisland-enrichment-plugin/pom.xml | 2 +- .../logisland-excel-plugin/pom.xml | 2 +- .../logisland-hbase-plugin/pom.xml | 2 +- .../pom.xml | 2 +- .../logisland-querymatcher-plugin/pom.xml | 2 +- .../logisland-sampling-plugin/pom.xml | 2 +- .../src/test/resources/data/raw-data1.txt | 602 ++++++------ .../src/test/resources/data/raw-data2.txt | 856 +++++++++--------- .../logisland-scripting-plugin/pom.xml | 2 +- .../logisland-useragent-plugin/pom.xml | 2 +- .../logisland-web-analytics-plugin/pom.xml | 2 +- logisland-plugins/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../logisland-ip-to-geo-service-api/pom.xml | 2 +- .../pom.xml | 2 +- .../logisland-redis_4-client-service/pom.xml | 2 +- .../redis/service/RedisConnectionPool.java | 5 + .../logisland/redis/util/RedisUtils.java | 1 + .../logisland-solr-client-service-api/pom.xml | 2 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../pom.xml | 2 +- .../pom.xml | 6 +- .../logisland-solr-client-service/pom.xml | 2 +- logisland-services/pom.xml | 2 +- pom.xml | 2 +- 112 files changed, 1212 insertions(+), 947 deletions(-) create mode 100644 logisland-documentation/tutorials/store-to-redis.rst diff --git a/README.rst b/README.rst index e7a464e80..4d4a29608 100755 --- a/README.rst +++ b/README.rst @@ -51,7 +51,7 @@ to build from the source just clone source and package with maven cd logisland mvn install -the final package is available at `logisland-assembly/target/logisland-0.12.2-bin-hdp2.5.tar.gz` +the final package is available at `logisland-assembly/target/logisland-0.13.0-bin-hdp2.5.tar.gz` You can also download the `latest release build `_ @@ -73,14 +73,14 @@ basically **logisland** depends on Kafka and Spark, you can deploy it on any lin export SPARK_HOME=/usr/local/spark-2.1.0-bin-hadoop2.7 <<<<<<< HEAD - # install Logisland 0.12.2 - curl -s https://github.com/Hurence/logisland/releases/download/v0.10.0/logisland-0.12.2-bin-hdp2.5.tar.gz | tar -xz -C /usr/local/ - cd /usr/local/logisland-0.12.2 + # install Logisland 0.13.0 + curl -s https://github.com/Hurence/logisland/releases/download/v0.10.0/logisland-0.13.0-bin-hdp2.5.tar.gz | tar -xz -C /usr/local/ + cd /usr/local/logisland-0.13.0 ======= # install Logisland 0.11.0 curl -s https://github.com/Hurence/logisland/releases/download/v0.11.0/logisland-0.11.0-bin-hdp2.5.tar.gz | tar -xz -C /usr/local/ cd /usr/local/logisland-0.11.0 ->>>>>>> v0.12.2 +>>>>>>> v0.13.0 # launch a logisland job bin/logisland.sh --conf conf/index-apache-logs.yml @@ -105,7 +105,7 @@ The first part is the `ProcessingEngine` configuration (here a Spark streaming e .. code-block:: yaml - version: 0.12.2 + version: 0.13.0 documentation: LogIsland job config file engine: component: com.hurence.logisland.engine.spark.KafkaStreamProcessingEngine diff --git a/launch-tuto.sh b/launch-tuto.sh index 0f03c187a..6e2e62be1 100755 --- a/launch-tuto.sh +++ b/launch-tuto.sh @@ -1,4 +1,4 @@ #!/bin/bash -logisland-assembly/target/logisland-0.12.2-bin-hdp2.5/logisland-0.12.2/bin/logisland.sh \ +logisland-assembly/target/logisland-0.13.0-bin-hdp2.5/logisland-0.13.0/bin/logisland.sh \ --conf logisland-framework/logisland-resources/src/main/resources/conf/$1 diff --git a/logisland-api/pom.xml b/logisland-api/pom.xml index b42c6a132..97e856c71 100644 --- a/logisland-api/pom.xml +++ b/logisland-api/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 logisland-api jar diff --git a/logisland-api/src/main/java/com/hurence/logisland/config/DefaultConfigValues.java b/logisland-api/src/main/java/com/hurence/logisland/config/DefaultConfigValues.java index f48a1f94e..b6ae5e041 100644 --- a/logisland-api/src/main/java/com/hurence/logisland/config/DefaultConfigValues.java +++ b/logisland-api/src/main/java/com/hurence/logisland/config/DefaultConfigValues.java @@ -20,6 +20,7 @@ */ public enum DefaultConfigValues { + REDIS_CONNECTION("sandbox:6379"), ES_HOSTS("sandbox:9300"), ES_CLUSTER_NAME("es-logisland"), KAFKA_BROKERS("sandbox:9092"), diff --git a/logisland-assembly/pom.xml b/logisland-assembly/pom.xml index c6695a4eb..90d470d94 100644 --- a/logisland-assembly/pom.xml +++ b/logisland-assembly/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 logisland-assembly pom diff --git a/logisland-connect/logisland-connect-spark/pom.xml b/logisland-connect/logisland-connect-spark/pom.xml index 3c7a5721e..fec941772 100644 --- a/logisland-connect/logisland-connect-spark/pom.xml +++ b/logisland-connect/logisland-connect-spark/pom.xml @@ -6,7 +6,7 @@ com.hurence.logisland logisland-connect - 0.12.2 + 0.13.0 jar diff --git a/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml b/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml index 76158c0cc..f3df717de 100644 --- a/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml +++ b/logisland-connect/logisland-connect-spark/src/test/resources/conf/kafka-connect-stream.yml @@ -1,4 +1,4 @@ -version: 0.12.2 +version: 0.13.0 documentation: LogIsland future factory job engine: diff --git a/logisland-connect/logisland-connectors-bundle/pom.xml b/logisland-connect/logisland-connectors-bundle/pom.xml index 7e9af0430..a6a819001 100644 --- a/logisland-connect/logisland-connectors-bundle/pom.xml +++ b/logisland-connect/logisland-connectors-bundle/pom.xml @@ -6,7 +6,7 @@ com.hurence.logisland logisland-connect - 0.12.2 + 0.13.0 jar diff --git a/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml b/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml index 341474a3c..bfaae5149 100644 --- a/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml +++ b/logisland-connect/logisland-connectors/logisland-connector-opcda/pom.xml @@ -6,7 +6,7 @@ com.hurence.logisland logisland-connectors - 0.12.2 + 0.13.0 jar diff --git a/logisland-connect/logisland-connectors/pom.xml b/logisland-connect/logisland-connectors/pom.xml index 99354d278..9232401bf 100644 --- a/logisland-connect/logisland-connectors/pom.xml +++ b/logisland-connect/logisland-connectors/pom.xml @@ -6,7 +6,7 @@ com.hurence.logisland logisland-connect - 0.12.2 + 0.13.0 pom diff --git a/logisland-connect/pom.xml b/logisland-connect/pom.xml index 98654c44e..c122ef751 100644 --- a/logisland-connect/pom.xml +++ b/logisland-connect/pom.xml @@ -6,7 +6,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 pom diff --git a/logisland-docker/full-container/Dockerfile b/logisland-docker/full-container/Dockerfile index e8952a8e0..42b0f9184 100644 --- a/logisland-docker/full-container/Dockerfile +++ b/logisland-docker/full-container/Dockerfile @@ -7,11 +7,13 @@ USER root COPY logisland-*.tar.gz /usr/local/ RUN cd /usr/local; \ tar -xzf logisland-*.tar.gz; \ - ln -s /usr/local/logisland-0.12.2 /usr/local/logisland; \ + ln -s /usr/local/logisland-0.13.0 /usr/local/logisland; \ mkdir /usr/local/logisland/log; \ rm -f /usr/local/*.gz ENV LOGISLAND_HOME /usr/local/logisland RUN mv /usr/local/logisland/conf/log4j.properties /usr/local/spark/conf +ENV PATH $PATH:$LOGISLAND_HOME/bin +WORKDIR $LOGISLAND_HOME/ # update boot script diff --git a/logisland-docker/full-container/README.rst b/logisland-docker/full-container/README.rst index 97c5f7610..51dc8ffb2 100644 --- a/logisland-docker/full-container/README.rst +++ b/logisland-docker/full-container/README.rst @@ -7,7 +7,7 @@ Small standalone Hadoop distribution for development and testing purpose : - Elasticsearch 2.3.3 - Kibana 4.5.1 - Kafka 0.9.0.1 -- Logisland 0.12.2 +- Logisland 0.13.0 This repository contains a Docker file to build a Docker image with Apache Spark, HBase, Flume & Zeppelin. @@ -32,14 +32,14 @@ Building the image # build logisland mvn clean install - cp logisland-assembly/target/logisland-0.12.2-bin.tar.gz logisland-docker + cp logisland-assembly/target/logisland-0.13.0-bin.tar.gz logisland-docker The archive is generated under dist directory, you have to copy this file into your Dockerfile directory you can now issue .. code-block:: sh - docker build --rm -t hurence/logisland:0.12.2 . + docker build --rm -t hurence/logisland:0.13.0 . Running the image @@ -64,13 +64,13 @@ Running the image -p 4040-4060:4040-4060 \ --name logisland \ -h sandbox \ - hurence/logisland-hdp2.4:0.12.2 bash + hurence/logisland-hdp2.4:0.13.0 bash or .. code-block:: - docker run -d -h sandbox hurence/logisland-hdp2.4:0.12.2 -d + docker run -d -h sandbox hurence/logisland-hdp2.4:0.13.0 -d if you want to mount a directory from your host, add the following option : diff --git a/logisland-docker/lightweight-container/Dockerfile b/logisland-docker/lightweight-container/Dockerfile index bb82fd80e..400038973 100644 --- a/logisland-docker/lightweight-container/Dockerfile +++ b/logisland-docker/lightweight-container/Dockerfile @@ -1,6 +1,6 @@ FROM anapsix/alpine-java -ARG kafka_version=0.12.2.1 +ARG kafka_version=0.13.0.1 ARG scala_version=2.11 MAINTAINER wurstmeister diff --git a/logisland-docker/pom.xml b/logisland-docker/pom.xml index 900171ae1..bcd8042c0 100644 --- a/logisland-docker/pom.xml +++ b/logisland-docker/pom.xml @@ -7,10 +7,13 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 pom logisland-docker + + false + @@ -62,10 +66,10 @@ --> - - - - - - + + + + + + diff --git a/logisland-docker/src/it/resources/data/all-tutorials.yml b/logisland-docker/src/it/resources/data/all-tutorials.yml index 20d1c0927..cbedd52db 100644 --- a/logisland-docker/src/it/resources/data/all-tutorials.yml +++ b/logisland-docker/src/it/resources/data/all-tutorials.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-documentation/api.rst b/logisland-documentation/api.rst index b835bd2c8..9eee9c16c 100644 --- a/logisland-documentation/api.rst +++ b/logisland-documentation/api.rst @@ -409,7 +409,7 @@ You can then start to generate the source code from the swgger yaml file swagger-codegen generate \ --group-id com.hurence.logisland \ --artifact-id logisland-agent \ - --artifact-version 0.12.2 \ + --artifact-version 0.13.0 \ --api-package com.hurence.logisland.agent.rest.api \ --model-package com.hurence.logisland.agent.rest.model \ -o logisland-framework/logisland-agent \ diff --git a/logisland-documentation/changes.rst b/logisland-documentation/changes.rst index 5873217d2..cdeae8308 100644 --- a/logisland-documentation/changes.rst +++ b/logisland-documentation/changes.rst @@ -3,7 +3,7 @@ What's new in logisland ? -v0.12.2 +v0.13.0 ------- - add support for SOLR diff --git a/logisland-documentation/conf.py b/logisland-documentation/conf.py index e484b608a..6b6a30609 100644 --- a/logisland-documentation/conf.py +++ b/logisland-documentation/conf.py @@ -71,9 +71,9 @@ # built documents. # # The short X.Y version. -version = '0.12.2' +version = '0.13.0' # The full version, including alpha/beta/rc tags. -release = '0.12.2' +release = '0.13.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/logisland-documentation/developer.rst b/logisland-documentation/developer.rst index 647b68d1b..65c0fc64c 100644 --- a/logisland-documentation/developer.rst +++ b/logisland-documentation/developer.rst @@ -204,14 +204,14 @@ to release artifacts (if you're allowed to), follow this guide `release to OSS S .. code-block:: sh - mvn versions:set -DnewVersion=0.12.2 + mvn versions:set -DnewVersion=0.13.0 mvn license:format mvn test mvn -DperformRelease=true clean deploy mvn versions:commit - git tag -a v0.12.2 -m "new logisland release 0.12.2" - git push origin v0.12.2 + git tag -a v0.13.0 -m "new logisland release 0.13.0" + git push origin v0.13.0 follow the staging procedure in `oss.sonatype.org `_ or read `Sonatype book `_ @@ -224,7 +224,7 @@ Publish release assets to github please refer to `https://developer.github.com/v3/repos/releases `_ -curl -XPOST https://uploads.github.com/repos/Hurence/logisland/releases/8905079/assets?name=logisland-0.12.2-bin-hdp2.5.tar.gz -v --data-binary @logisland-assembly/target/logisland-0.10.3-bin-hdp2.5.tar.gz --user oalam -H 'Content-Type: application/gzip' +curl -XPOST https://uploads.github.com/repos/Hurence/logisland/releases/8905079/assets?name=logisland-0.13.0-bin-hdp2.5.tar.gz -v --data-binary @logisland-assembly/target/logisland-0.10.3-bin-hdp2.5.tar.gz --user oalam -H 'Content-Type: application/gzip' diff --git a/logisland-documentation/monitoring.rst b/logisland-documentation/monitoring.rst index 809001ed9..0927fe3a0 100644 --- a/logisland-documentation/monitoring.rst +++ b/logisland-documentation/monitoring.rst @@ -63,8 +63,8 @@ Manual mode : # download the latest build of Node Exporter cd /opt - wget https://github.com/prometheus/node_exporter/releases/download/0.12.2/node_exporter-0.12.2.linux-amd64.tar.gz -O /tmp/node_exporter-0.12.2.linux-amd64.tar.gz - sudo tar -xvzf /tmp/node_exporter-0.12.2.linux-amd64.tar.gz + wget https://github.com/prometheus/node_exporter/releases/download/0.13.0/node_exporter-0.13.0.linux-amd64.tar.gz -O /tmp/node_exporter-0.13.0.linux-amd64.tar.gz + sudo tar -xvzf /tmp/node_exporter-0.13.0.linux-amd64.tar.gz # Create a soft link to the node_exporter binary in /usr/bin. sudo ln -s /opt/node_exporter /usr/bin diff --git a/logisland-documentation/overview-slides.md b/logisland-documentation/overview-slides.md index 1c2f2e41e..ed33b565a 100644 --- a/logisland-documentation/overview-slides.md +++ b/logisland-documentation/overview-slides.md @@ -369,7 +369,7 @@ you configure here your Spark job parameters Download the latest release from [github](https://github.com/Hurence/logisland/releases) - tar -xzf logisland-0.12.2-bin.tar.gz + tar -xzf logisland-0.13.0-bin.tar.gz Create a job configuration diff --git a/logisland-documentation/plugins_old.rst b/logisland-documentation/plugins_old.rst index 03e55da19..116df25e7 100644 --- a/logisland-documentation/plugins_old.rst +++ b/logisland-documentation/plugins_old.rst @@ -60,7 +60,7 @@ Write your a custom LogParser for your super-plugin in ``/src/main/java/com/hure Our parser will analyze some Proxy Log String in the following form : - "Thu Jan 02 08:43:39 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.12.226/Images/RightJauge.gif 724 409 false false" + "Thu Jan 02 08:43:39 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.13.026/Images/RightJauge.gif 724 409 false false" .. code-block:: java diff --git a/logisland-documentation/pom.xml b/logisland-documentation/pom.xml index dbed1c7ac..b03a9286c 100644 --- a/logisland-documentation/pom.xml +++ b/logisland-documentation/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 logisland-documentation diff --git a/logisland-documentation/tutorials/index.rst b/logisland-documentation/tutorials/index.rst index 35d5c0ffe..269c82959 100644 --- a/logisland-documentation/tutorials/index.rst +++ b/logisland-documentation/tutorials/index.rst @@ -24,6 +24,7 @@ Contents: prerequisites index-apache-logs + store-to-redis match-queries aggregate-events enrich-apache-logs diff --git a/logisland-documentation/tutorials/prerequisites.rst b/logisland-documentation/tutorials/prerequisites.rst index 543bd9ac9..61c9995ae 100644 --- a/logisland-documentation/tutorials/prerequisites.rst +++ b/logisland-documentation/tutorials/prerequisites.rst @@ -15,72 +15,83 @@ To facilitate integration testing and to easily run tutorials, you can create a .. code-block:: yaml - # Zookeeper container 172.17.0.1 - zookeeper: - image: hurence/zookeeper - hostname: zookeeper - container_name: zookeeper - ports: - - "2181:2181" - - # Kafka container - kafka: - image: hurence/kafka - hostname: kafka - container_name: kafka - links: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_ADVERTISED_PORT: 9092 - KAFKA_ADVERTISED_HOST_NAME: sandbox - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_JMX_PORT: 7071 - - # ES container - elasticsearch: - environment: - - ES_JAVA_OPT="-Xms1G -Xmx1G" - - cluster.name=es-logisland - - http.host=0.0.0.0 - - transport.host=0.0.0.0 - - xpack.security.enabled=false - hostname: elasticsearch - container_name: elasticsearch - image: 'docker.elastic.co/elasticsearch/elasticsearch:5.4.0' - ports: - - '9200:9200' - - '9300:9300' - - # Kibana container - kibana: - environment: - - 'ELASTICSEARCH_URL=http://elasticsearch:9200' - image: 'docker.elastic.co/kibana/kibana:5.4.0' - container_name: kibana - links: - - elasticsearch - ports: - - '5601:5601' - - # Logisland container : does nothing but launching - logisland: - image: hurence/logisland - command: tail -f bin/logisland.sh - #command: bin/logisland.sh --conf /conf/index-apache-logs.yml - links: - - zookeeper - - kafka - - elasticsearch - ports: - - "4050:4050" - volumes: - - ./conf/logisland:/conf - - ./data/logisland:/data - container_name: logisland - extra_hosts: - - "sandbox:172.17.0.1" + version: "2" + services: + + zookeeper: + container_name: zookeeper + image: hurence/zookeeper + hostname: zookeeper + ports: + - "2181:2181" + + kafka: + container_name: kafka + image: hurence/kafka + hostname: kafka + links: + - zookeeper + ports: + - "9092:9092" + environment: + KAFKA_ADVERTISED_PORT: 9092 + KAFKA_ADVERTISED_HOST_NAME: sandbox + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_JMX_PORT: 7071 + + # ES container + elasticsearch: + container_name: elasticsearch + environment: + - ES_JAVA_OPT="-Xms1G -Xmx1G" + - cluster.name=es-logisland + - http.host=0.0.0.0 + - transport.host=0.0.0.0 + - xpack.security.enabled=false + hostname: elasticsearch + container_name: elasticsearch + image: 'docker.elastic.co/elasticsearch/elasticsearch:5.4.0' + ports: + - '9200:9200' + - '9300:9300' + + # Kibana container + kibana: + container_name: kibana + environment: + - 'ELASTICSEARCH_URL=http://elasticsearch:9200' + image: 'docker.elastic.co/kibana/kibana:5.4.0' + container_name: kibana + links: + - elasticsearch + ports: + - '5601:5601' + + # Logisland container : does nothing but launching + logisland: + container_name: logisland + image: hurence/logisland:0.13.0 + command: tail -f bin/logisland.sh + #command: bin/logisland.sh --conf /conf/index-apache-logs.yml + links: + - zookeeper + - kafka + - elasticsearch + - redis + ports: + - "4050:4050" + volumes: + - ./conf/logisland:/conf + - ./data/logisland:/data + container_name: logisland + extra_hosts: + - "sandbox:172.17.0.1" + + redis: + container_name: redis + image: 'redis:latest' + ports: + - '6379:6379' Once you have this file you can run a `docker-compose` command to launch all the needed services (zookeeper, kafka, es, kibana and logisland) @@ -115,10 +126,10 @@ From an edge node of your cluster : .. code-block:: sh cd /opt - sudo wget https://github.com/Hurence/logisland/releases/download/v0.12.2/logisland-0.12.2-bin-hdp2.5.tar.gz + sudo wget https://github.com/Hurence/logisland/releases/download/v0.13.0/logisland-0.13.0-bin-hdp2.5.tar.gz export SPARK_HOME=/opt/spark-2.1.0-bin-hadoop2.7/ export HADOOP_CONF_DIR=$SPARK_HOME/conf - sudo /opt/logisland-0.12.2/bin/logisland.sh --conf /home/hurence/tom/logisland-conf/v0.10.0/future-factory.yml + sudo /opt/logisland-0.13.0/bin/logisland.sh --conf /home/hurence/tom/logisland-conf/v0.10.0/future-factory.yml diff --git a/logisland-documentation/tutorials/store-to-redis.rst b/logisland-documentation/tutorials/store-to-redis.rst new file mode 100644 index 000000000..f7e69291a --- /dev/null +++ b/logisland-documentation/tutorials/store-to-redis.rst @@ -0,0 +1,180 @@ +Store Apache logs to Redis K/V store +==================================== + +In the following getting started tutorial we'll drive you through the process of Apache log mining with LogIsland platform. + +.. note:: + + Be sure to know of to launch a logisland Docker environment by reading the `prerequisites <./prerequisites.html>`_ section + +Note, it is possible to store data in different datastores. In this tutorial, we will see the case of Redis, if you need more in-depth explanations you can read the previous tutorial on indexing apache logs to elasticsearch or solr : `index-apache-logs.html`_ . + +1. Logisland job setup +---------------------- +The logisland job for this tutorial is already packaged in the tar.gz assembly and you can find it here : + +.. code-block:: sh + + docker exec -i -t logisland vim conf/store-to-redis.yml + +We will start by explaining each part of the config file. + +The `controllerServiceConfigurations` part is here to define all services that be shared by processors within the whole job, here a Redis KV cache service that will be used later in the ``BulkPut`` processor. + +.. code-block:: yaml + + - controllerService: datastore_service + component: com.hurence.logisland.redis.service.RedisKeyValueCacheService + type: service + documentation: redis datastore service + configuration: + connection.string: localhost:6379 + redis.mode: standalone + database.index: 0 + communication.timeout: 10 seconds + pool.max.total: 8 + pool.max.idle: 8 + pool.min.idle: 0 + pool.block.when.exhausted: true + pool.max.wait.time: 10 seconds + pool.min.evictable.idle.time: 60 seconds + pool.time.between.eviction.runs: 30 seconds + pool.num.tests.per.eviction.run: -1 + pool.test.on.create: false + pool.test.on.borrow: false + pool.test.on.return: false + pool.test.while.idle: true + record.recordSerializer: com.hurence.logisland.serializer.JsonSerializer + + +Here the stream will read all the logs sent in ``logisland_raw`` topic and push the processing output into ``logisland_events`` topic. + +.. note:: + + We want to specify an Avro output schema to validate our ouput records (and force their types accordingly). + It's really for other streams to rely on a schema when processing records from a topic. + +We can define some serializers to marshall all records from and to a topic. + +.. code-block:: yaml + + - stream: parsing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: a processor that converts raw apache logs into structured log records + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: none + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +Within this stream a ``SplitText`` processor takes a log line as a String and computes a ``Record`` as a sequence of fields. + +.. code-block:: yaml + + # parse apache logs + - processor: apache_parser + component: com.hurence.logisland.processor.SplitText + type: parser + documentation: a parser that produce events from an apache log REGEX + configuration: + value.regex: (\S+)\s+(\S+)\s+(\S+)\s+\[([\w:\/]+\s[+\-]\d{4})\]\s+"(\S+)\s+(\S+)\s*(\S*)"\s+(\S+)\s+(\S+) + value.fields: src_ip,identd,user,record_time,http_method,http_query,http_version,http_status,bytes_out + +This stream will process log entries as soon as they will be queued into `logisland_raw` Kafka topics, each log will +be parsed as an event which will be pushed back to Kafka in the ``logisland_events`` topic. + +The second processor will handle ``Records`` produced by the ``SplitText`` to index them into datastore previously defined (Redis) + +.. code-block:: yaml + + # all the parsed records are added to datastore by bulk + - processor: datastore_publisher + component: com.hurence.logisland.processor.datastore.BulkPut + type: processor + documentation: "indexes processed events in datastore" + configuration: + datastore.client.service: datastore_service + + + +2. Launch the script +-------------------- +For this tutorial we will handle some apache logs with a splitText parser and send them to Elastiscearch +Connect a shell to your logisland container to launch the following streaming jobs. + +For ElasticSearch : + +.. code-block:: sh + + docker exec -i -t logisland bin/logisland.sh --conf conf/store-to-redis.yml + + +3. Inject some Apache logs into the system +------------------------------------------ +Now we're going to send some logs to ``logisland_raw`` Kafka topic. + +We could setup a logstash or flume agent to load some apache logs into a kafka topic +but there's a super useful tool in the Kafka ecosystem : `kafkacat `_, +a *generic command line non-JVM Apache Kafka producer and consumer* which can be easily installed. + + +If you don't have your own httpd logs available, you can use some freely available log files from +`NASA-HTTP `_ web site access: + +- `Jul 01 to Jul 31, ASCII format, 20.7 MB gzip compressed `_ +- `Aug 04 to Aug 31, ASCII format, 21.8 MB gzip compressed `_ + +Let's send the first 500000 lines of NASA http access over July 1995 to LogIsland with kafkacat to ``logisland_raw`` Kafka topic + +.. code-block:: sh + + cd /tmp + wget ftp://ita.ee.lbl.gov/traces/NASA_access_log_Jul95.gz + gunzip NASA_access_log_Jul95.gz + head -500000 NASA_access_log_Jul95 | kafkacat -b sandbox:9092 -t logisland_raw + + + +4. Inspect the logs +------------------- + +For this part of the tutorial we will use `redis-py a Python client for Redis `_. You can install it by following instructions given on `redis-py `_. + +To install redis-py, simply: + +.. code-block:: sh + + $ sudo pip install redis + + +Getting Started, check if you can connect with Redis + +.. code-block:: python + + >>> import redis + >>> r = redis.StrictRedis(host='localhost', port=6379, db=0) + >>> r.set('foo', 'bar') + >>> r.get('foo') + +Then we want to grab some logs that have been collected to Redis. We first find some keys with a pattern and get the json content of one + +.. code-block:: python + + >>> r.keys('1234*') +['123493eb-93df-4e57-a1c1-4a8e844fa92c', '123457d5-8ccc-4f0f-b4ba-d70967aa48eb', '12345e06-6d72-4ce8-8254-a7cc4bab5e31'] + + >>> r.get('123493eb-93df-4e57-a1c1-4a8e844fa92c') +'{\n "id" : "123493eb-93df-4e57-a1c1-4a8e844fa92c",\n "type" : "apache_log",\n "creationDate" : 804574829000,\n "fields" : {\n "src_ip" : "204.191.209.4",\n "record_id" : "123493eb-93df-4e57-a1c1-4a8e844fa92c",\n "http_method" : "GET",\n "http_query" : "/images/WORLD-logosmall.gif",\n "bytes_out" : "669",\n "identd" : "-",\n "http_version" : "HTTP/1.0",\n "record_raw_value" : "204.191.209.4 - - [01/Jul/1995:01:00:29 -0400] \\"GET /images/WORLD-logosmall.gif HTTP/1.0\\" 200 669",\n "http_status" : "200",\n "record_time" : 804574829000,\n "user" : "-",\n "record_type" : "apache_log"\n }\n}' + + >>> import json + >>> record = json.loads(r.get('123493eb-93df-4e57-a1c1-4a8e844fa92c')) + >>> record['fields']['bytes_out'] + diff --git a/logisland-engines/logisland-spark_1_6-engine/pom.xml b/logisland-engines/logisland-spark_1_6-engine/pom.xml index cb5ebac07..50b24b778 100644 --- a/logisland-engines/logisland-spark_1_6-engine/pom.xml +++ b/logisland-engines/logisland-spark_1_6-engine/pom.xml @@ -23,7 +23,7 @@ http://www.w3.org/2001/XMLSchema-instance "> com.hurence.logisland logisland-engines - 0.12.2 + 0.13.0 logisland-spark_1_6-engine_${scala.binary.version} jar diff --git a/logisland-engines/logisland-spark_2_1-engine/pom.xml b/logisland-engines/logisland-spark_2_1-engine/pom.xml index d3b694152..ad40007d0 100644 --- a/logisland-engines/logisland-spark_2_1-engine/pom.xml +++ b/logisland-engines/logisland-spark_2_1-engine/pom.xml @@ -23,7 +23,7 @@ http://www.w3.org/2001/XMLSchema-instance "> com.hurence.logisland logisland-engines - 0.12.2 + 0.13.0 logisland-spark_2_1-engine_${scala.binary.version} jar diff --git a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/structured-stream.yml b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/structured-stream.yml index f4bed8147..cb502d7e0 100644 --- a/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/structured-stream.yml +++ b/logisland-engines/logisland-spark_2_1-engine/src/test/resources/conf/structured-stream.yml @@ -1,4 +1,4 @@ -version: 0.12.2 +version: 0.13.0 documentation: LogIsland future factory job engine: diff --git a/logisland-engines/pom.xml b/logisland-engines/pom.xml index 92f30f251..1ed791fb0 100644 --- a/logisland-engines/pom.xml +++ b/logisland-engines/pom.xml @@ -6,7 +6,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 pom diff --git a/logisland-framework/logisland-agent/README.md b/logisland-framework/logisland-agent/README.md index 9d6f4ade7..d56677ded 100644 --- a/logisland-framework/logisland-agent/README.md +++ b/logisland-framework/logisland-agent/README.md @@ -32,5 +32,5 @@ swagger-ui will be directed to that host and not localhost! ``` -swagger-codegen generate --group-id com.hurence.logisland --artifact-id logisland-agent --artifact-version 0.12.2 --api-package com.hurence.logisland.agent.rest.api --model-package com.hurence.logisland.agent.rest.model -o logisland-framework/logisland-agent -l jaxrs --template-dir logisland-framework/logisland-agent/src/main/raml/templates -i logisland-framework/logisland-agent/src/main/raml/api-swagger.yaml +swagger-codegen generate --group-id com.hurence.logisland --artifact-id logisland-agent --artifact-version 0.13.0 --api-package com.hurence.logisland.agent.rest.api --model-package com.hurence.logisland.agent.rest.model -o logisland-framework/logisland-agent -l jaxrs --template-dir logisland-framework/logisland-agent/src/main/raml/templates -i logisland-framework/logisland-agent/src/main/raml/api-swagger.yaml ``` diff --git a/logisland-framework/logisland-agent/pom.xml b/logisland-framework/logisland-agent/pom.xml index b6250965d..ab064734f 100644 --- a/logisland-framework/logisland-agent/pom.xml +++ b/logisland-framework/logisland-agent/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-framework - 0.12.2 + 0.13.0 logisland-agent jar diff --git a/logisland-framework/logisland-bootstrap/pom.xml b/logisland-framework/logisland-bootstrap/pom.xml index 458592dc8..f293eed5e 100644 --- a/logisland-framework/logisland-bootstrap/pom.xml +++ b/logisland-framework/logisland-bootstrap/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-framework - 0.12.2 + 0.13.0 logisland-bootstrap jar diff --git a/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/SparkJobLauncher.java b/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/SparkJobLauncher.java index 234e7f777..a290d2caa 100644 --- a/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/SparkJobLauncher.java +++ b/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/SparkJobLauncher.java @@ -72,7 +72,7 @@ public static void main(String[] args) { "██║ ██║ ██║██║ ███╗ ██║███████╗██║ ███████║██╔██╗ ██║██║ ██║\n" + "██║ ██║ ██║██║ ██║ ██║╚════██║██║ ██╔══██║██║╚██╗██║██║ ██║\n" + "███████╗╚██████╔╝╚██████╔╝ ██║███████║███████╗██║ ██║██║ ╚████║██████╔╝\n" + - "╚══════╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ v0.12.2\n\n\n"; + "╚══════╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ v0.13.0\n\n\n"; System.out.println(logisland); Optional engineInstance = Optional.empty(); diff --git a/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/StreamProcessingRunner.java b/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/StreamProcessingRunner.java index 72afcb97b..35f44da4f 100644 --- a/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/StreamProcessingRunner.java +++ b/logisland-framework/logisland-bootstrap/src/main/java/com/hurence/logisland/runner/StreamProcessingRunner.java @@ -65,7 +65,7 @@ public static void main(String[] args) { "██║ ██║ ██║██║ ███╗ ██║███████╗██║ ███████║██╔██╗ ██║██║ ██║\n" + "██║ ██║ ██║██║ ██║ ██║╚════██║██║ ██╔══██║██║╚██╗██║██║ ██║\n" + "███████╗╚██████╔╝╚██████╔╝ ██║███████║███████╗██║ ██║██║ ╚████║██████╔╝\n" + - "╚══════╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ v0.12.2\n\n\n"; + "╚══════╝ ╚═════╝ ╚═════╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ v0.13.0\n\n\n"; System.out.println(logisland); Optional engineInstance = Optional.empty(); diff --git a/logisland-framework/logisland-hadoop-utils/pom.xml b/logisland-framework/logisland-hadoop-utils/pom.xml index afd0d3a6d..30201ede1 100644 --- a/logisland-framework/logisland-hadoop-utils/pom.xml +++ b/logisland-framework/logisland-hadoop-utils/pom.xml @@ -19,7 +19,7 @@ com.hurence.logisland logisland-framework - 0.12.2 + 0.13.0 logisland-hadoop-utils jar diff --git a/logisland-framework/logisland-resources/pom.xml b/logisland-framework/logisland-resources/pom.xml index aa99ba7d6..724663aa0 100644 --- a/logisland-framework/logisland-resources/pom.xml +++ b/logisland-framework/logisland-resources/pom.xml @@ -21,7 +21,7 @@ com.hurence.logisland logisland-framework - 0.12.2 + 0.13.0 logisland-resources pom diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/aggregate-events.yml b/logisland-framework/logisland-resources/src/main/resources/conf/aggregate-events.yml index 2229a8e25..3151dc58c 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/aggregate-events.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/aggregate-events.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/configuration-template.yml b/logisland-framework/logisland-resources/src/main/resources/conf/configuration-template.yml index 4da8d353b..0c7b0b733 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/configuration-template.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/configuration-template.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/docker-compose.yml b/logisland-framework/logisland-resources/src/main/resources/conf/docker-compose.yml index 8ca45bb2a..8f71646e6 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/docker-compose.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/docker-compose.yml @@ -1,9 +1,15 @@ -zookeeper: +version: "2" +services: + + zookeeper: + container_name: zookeeper image: hurence/zookeeper hostname: zookeeper ports: - "2181:2181" -kafka: + + kafka: + container_name: kafka image: hurence/kafka hostname: kafka links: @@ -14,4 +20,58 @@ kafka: KAFKA_ADVERTISED_PORT: 9092 KAFKA_ADVERTISED_HOST_NAME: sandbox KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_JMX_PORT: 7071 \ No newline at end of file + KAFKA_JMX_PORT: 7071 + + # ES container + elasticsearch: + container_name: elasticsearch + environment: + - ES_JAVA_OPT="-Xms1G -Xmx1G" + - cluster.name=es-logisland + - http.host=0.0.0.0 + - transport.host=0.0.0.0 + - xpack.security.enabled=false + hostname: elasticsearch + container_name: elasticsearch + image: 'docker.elastic.co/elasticsearch/elasticsearch:5.4.0' + ports: + - '9200:9200' + - '9300:9300' + + # Kibana container + kibana: + container_name: kibana + environment: + - 'ELASTICSEARCH_URL=http://elasticsearch:9200' + image: 'docker.elastic.co/kibana/kibana:5.4.0' + container_name: kibana + links: + - elasticsearch + ports: + - '5601:5601' + + # Logisland container : does nothing but launching + logisland: + container_name: logisland + image: hurence/logisland:0.13.0 + command: tail -f bin/logisland.sh + #command: bin/logisland.sh --conf /conf/index-apache-logs.yml + links: + - zookeeper + - kafka + - elasticsearch + - redis + ports: + - "4050:4050" + volumes: + - ./conf/logisland:/conf + - ./data/logisland:/data + container_name: logisland + extra_hosts: + - "sandbox:172.17.0.1" + + redis: + container_name: redis + image: 'redis:latest' + ports: + - '6379:6379' \ No newline at end of file diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/enrich-apache-logs.yml b/logisland-framework/logisland-resources/src/main/resources/conf/enrich-apache-logs.yml index 1e0a766fc..2709fd956 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/enrich-apache-logs.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/enrich-apache-logs.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/future-factory-indexer.yml b/logisland-framework/logisland-resources/src/main/resources/conf/future-factory-indexer.yml index e43482c23..3eed1698f 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/future-factory-indexer.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/future-factory-indexer.yml @@ -2,7 +2,7 @@ # Logisland configuration for future factory project ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland future factory job ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs-solr.yml b/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs-solr.yml index 550299a67..f167b2d03 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs-solr.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs-solr.yml @@ -2,7 +2,7 @@ # Logisland configuration script tempate ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs.yml b/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs.yml index ce24a782d..a156aa9b0 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/index-apache-logs.yml @@ -2,7 +2,7 @@ # Logisland configuration script tempate ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml b/logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml index c5d511eb9..97d01bcde 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/index-blockchain-transactions.yml @@ -1,4 +1,4 @@ -version: 0.12.2 +version: 0.13.0 documentation: LogIsland future factory job engine: diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/index-network-packets.yml b/logisland-framework/logisland-resources/src/main/resources/conf/index-network-packets.yml index 7dc019042..023f86fb0 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/index-network-packets.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/index-network-packets.yml @@ -2,7 +2,7 @@ # Logisland configuration script example: parse network packets and display them in Kibana ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml b/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml index 91589adf6..ede884068 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/logisland-kafka-connect.yml @@ -1,4 +1,4 @@ -version: 0.12.2 +version: 0.13.0 documentation: LogIsland Kafka Connect Integration engine: diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/match-queries.yml b/logisland-framework/logisland-resources/src/main/resources/conf/match-queries.yml index 76b05de18..8b023410b 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/match-queries.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/match-queries.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/mqtt-to-historian.yml b/logisland-framework/logisland-resources/src/main/resources/conf/mqtt-to-historian.yml index 640539dd9..eafcf87c5 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/mqtt-to-historian.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/mqtt-to-historian.yml @@ -1,4 +1,4 @@ -version: 0.12.2 +version: 0.13.0 documentation: LogIsland future factory job engine: diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/outlier-detection.yml b/logisland-framework/logisland-resources/src/main/resources/conf/outlier-detection.yml index 6637b81bc..372d27c70 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/outlier-detection.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/outlier-detection.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/python-processing.yml b/logisland-framework/logisland-resources/src/main/resources/conf/python-processing.yml index d600914f7..d433a75e6 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/python-processing.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/python-processing.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/retrieve-data-from-elasticsearch.yml b/logisland-framework/logisland-resources/src/main/resources/conf/retrieve-data-from-elasticsearch.yml index 2a52c68fa..a4cde65a6 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/retrieve-data-from-elasticsearch.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/retrieve-data-from-elasticsearch.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/save-to-hdfs.yml b/logisland-framework/logisland-resources/src/main/resources/conf/save-to-hdfs.yml index ac2bf2a1e..9060002c3 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/save-to-hdfs.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/save-to-hdfs.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/send-apache-logs-to-hbase.yml b/logisland-framework/logisland-resources/src/main/resources/conf/send-apache-logs-to-hbase.yml index 4f213b356..9a8252375 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/send-apache-logs-to-hbase.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/send-apache-logs-to-hbase.yml @@ -2,7 +2,7 @@ # Logisland configuration script template ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: This tutorial job sends apache logs to an HBase table ######################################################################################################### diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml b/logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml index 2eb4e36ac..4e2efeaca 100644 --- a/logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/store-to-redis.yml @@ -2,7 +2,7 @@ # Logisland configuration script tempate ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### @@ -19,12 +19,6 @@ engine: spark.executor.memory: 2G spark.executor.instances: 4 spark.executor.cores: 2 - spark.yarn.queue: default - spark.yarn.maxAppAttempts: 4 - spark.yarn.am.attemptFailuresValidityInterval: 1h - spark.yarn.max.executor.failures: 20 - spark.yarn.executor.failuresValidityInterval: 1h - spark.task.maxFailures: 8 spark.serializer: org.apache.spark.serializer.KryoSerializer spark.streaming.batchDuration: 1000 spark.streaming.backpressure.enabled: false @@ -45,7 +39,7 @@ engine: type: service documentation: redis datastore service configuration: - connection.string: localhost:6379 + connection.string: ${REDIS_CONNECTION} redis.mode: standalone database.index: 0 communication.timeout: 10 seconds @@ -95,7 +89,7 @@ engine: value.fields: src_ip,identd,user,record_time,http_method,http_query,http_version,http_status,bytes_out # all the parsed records are added to datastore by bulk - - processor: solr_publisher + - processor: datastore_publisher component: com.hurence.logisland.processor.datastore.BulkPut type: processor documentation: "indexes processed events in datastore" diff --git a/logisland-framework/logisland-resources/src/main/resources/conf/timeseries-parsing.yml b/logisland-framework/logisland-resources/src/main/resources/conf/timeseries-parsing.yml index 56f62673c..5b5e11dd7 100755 --- a/logisland-framework/logisland-resources/src/main/resources/conf/timeseries-parsing.yml +++ b/logisland-framework/logisland-resources/src/main/resources/conf/timeseries-parsing.yml @@ -55,7 +55,7 @@ engine: documentation: "store an in-memory cache coming from CSV" configuration: csv.format: excel_fr - csv.file.path: "logisland-assembly/target/logisland-0.12.2-bin-hdp2.5/logisland-0.12.2/conf/timeseries-lookup.csv" + csv.file.path: "logisland-assembly/target/logisland-0.13.0-bin-hdp2.5/logisland-0.13.0/conf/timeseries-lookup.csv" first.line.header: true row.key: tagname encoding.charset: ISO-8859-1 diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/api.rst b/logisland-framework/logisland-resources/src/main/resources/docs/api.rst index b835bd2c8..9eee9c16c 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/api.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/api.rst @@ -409,7 +409,7 @@ You can then start to generate the source code from the swgger yaml file swagger-codegen generate \ --group-id com.hurence.logisland \ --artifact-id logisland-agent \ - --artifact-version 0.12.2 \ + --artifact-version 0.13.0 \ --api-package com.hurence.logisland.agent.rest.api \ --model-package com.hurence.logisland.agent.rest.model \ -o logisland-framework/logisland-agent \ diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/changes.rst b/logisland-framework/logisland-resources/src/main/resources/docs/changes.rst index 5873217d2..cdeae8308 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/changes.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/changes.rst @@ -3,7 +3,7 @@ What's new in logisland ? -v0.12.2 +v0.13.0 ------- - add support for SOLR diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst b/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst index 647b68d1b..65c0fc64c 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst @@ -204,14 +204,14 @@ to release artifacts (if you're allowed to), follow this guide `release to OSS S .. code-block:: sh - mvn versions:set -DnewVersion=0.12.2 + mvn versions:set -DnewVersion=0.13.0 mvn license:format mvn test mvn -DperformRelease=true clean deploy mvn versions:commit - git tag -a v0.12.2 -m "new logisland release 0.12.2" - git push origin v0.12.2 + git tag -a v0.13.0 -m "new logisland release 0.13.0" + git push origin v0.13.0 follow the staging procedure in `oss.sonatype.org `_ or read `Sonatype book `_ @@ -224,7 +224,7 @@ Publish release assets to github please refer to `https://developer.github.com/v3/repos/releases `_ -curl -XPOST https://uploads.github.com/repos/Hurence/logisland/releases/8905079/assets?name=logisland-0.12.2-bin-hdp2.5.tar.gz -v --data-binary @logisland-assembly/target/logisland-0.10.3-bin-hdp2.5.tar.gz --user oalam -H 'Content-Type: application/gzip' +curl -XPOST https://uploads.github.com/repos/Hurence/logisland/releases/8905079/assets?name=logisland-0.13.0-bin-hdp2.5.tar.gz -v --data-binary @logisland-assembly/target/logisland-0.10.3-bin-hdp2.5.tar.gz --user oalam -H 'Content-Type: application/gzip' diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/monitoring.rst b/logisland-framework/logisland-resources/src/main/resources/docs/monitoring.rst index 809001ed9..0927fe3a0 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/monitoring.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/monitoring.rst @@ -63,8 +63,8 @@ Manual mode : # download the latest build of Node Exporter cd /opt - wget https://github.com/prometheus/node_exporter/releases/download/0.12.2/node_exporter-0.12.2.linux-amd64.tar.gz -O /tmp/node_exporter-0.12.2.linux-amd64.tar.gz - sudo tar -xvzf /tmp/node_exporter-0.12.2.linux-amd64.tar.gz + wget https://github.com/prometheus/node_exporter/releases/download/0.13.0/node_exporter-0.13.0.linux-amd64.tar.gz -O /tmp/node_exporter-0.13.0.linux-amd64.tar.gz + sudo tar -xvzf /tmp/node_exporter-0.13.0.linux-amd64.tar.gz # Create a soft link to the node_exporter binary in /usr/bin. sudo ln -s /opt/node_exporter /usr/bin diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/plugins_old.rst b/logisland-framework/logisland-resources/src/main/resources/docs/plugins_old.rst index 03e55da19..116df25e7 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/plugins_old.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/plugins_old.rst @@ -60,7 +60,7 @@ Write your a custom LogParser for your super-plugin in ``/src/main/java/com/hure Our parser will analyze some Proxy Log String in the following form : - "Thu Jan 02 08:43:39 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.12.226/Images/RightJauge.gif 724 409 false false" + "Thu Jan 02 08:43:39 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.13.026/Images/RightJauge.gif 724 409 false false" .. code-block:: java diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst index 35d5c0ffe..269c82959 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst @@ -24,6 +24,7 @@ Contents: prerequisites index-apache-logs + store-to-redis match-queries aggregate-events enrich-apache-logs diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst index 543bd9ac9..3d07f331b 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst @@ -82,6 +82,13 @@ To facilitate integration testing and to easily run tutorials, you can create a extra_hosts: - "sandbox:172.17.0.1" + redis: + container_name: redis + image: 'redis:latest' + ports: + - '6379:6379' + network_mode: bridge + Once you have this file you can run a `docker-compose` command to launch all the needed services (zookeeper, kafka, es, kibana and logisland) .. code-block:: sh @@ -115,10 +122,10 @@ From an edge node of your cluster : .. code-block:: sh cd /opt - sudo wget https://github.com/Hurence/logisland/releases/download/v0.12.2/logisland-0.12.2-bin-hdp2.5.tar.gz + sudo wget https://github.com/Hurence/logisland/releases/download/v0.13.0/logisland-0.13.0-bin-hdp2.5.tar.gz export SPARK_HOME=/opt/spark-2.1.0-bin-hadoop2.7/ export HADOOP_CONF_DIR=$SPARK_HOME/conf - sudo /opt/logisland-0.12.2/bin/logisland.sh --conf /home/hurence/tom/logisland-conf/v0.10.0/future-factory.yml + sudo /opt/logisland-0.13.0/bin/logisland.sh --conf /home/hurence/tom/logisland-conf/v0.10.0/future-factory.yml diff --git a/logisland-framework/logisland-scripting/logisland-scripting-base/pom.xml b/logisland-framework/logisland-scripting/logisland-scripting-base/pom.xml index 9744fb95c..becdef7ee 100644 --- a/logisland-framework/logisland-scripting/logisland-scripting-base/pom.xml +++ b/logisland-framework/logisland-scripting/logisland-scripting-base/pom.xml @@ -4,7 +4,7 @@ com.hurence.logisland logisland-scripting - 0.12.2 + 0.13.0 logisland-scripting-base diff --git a/logisland-framework/logisland-scripting/logisland-scripting-mvel/pom.xml b/logisland-framework/logisland-scripting/logisland-scripting-mvel/pom.xml index fb95f6ffb..3f62c6f25 100644 --- a/logisland-framework/logisland-scripting/logisland-scripting-mvel/pom.xml +++ b/logisland-framework/logisland-scripting/logisland-scripting-mvel/pom.xml @@ -4,7 +4,7 @@ com.hurence.logisland logisland-scripting - 0.12.2 + 0.13.0 logisland-scripting-mvel diff --git a/logisland-framework/logisland-scripting/pom.xml b/logisland-framework/logisland-scripting/pom.xml index 43c6d7f2e..9b329529a 100644 --- a/logisland-framework/logisland-scripting/pom.xml +++ b/logisland-framework/logisland-scripting/pom.xml @@ -21,7 +21,7 @@ com.hurence.logisland logisland-framework - 0.12.2 + 0.13.0 logisland-scripting diff --git a/logisland-framework/logisland-utils/pom.xml b/logisland-framework/logisland-utils/pom.xml index 16025b2a2..82686174b 100644 --- a/logisland-framework/logisland-utils/pom.xml +++ b/logisland-framework/logisland-utils/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-framework - 0.12.2 + 0.13.0 logisland-utils jar diff --git a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/controller/StandardControllerServiceLookup.java b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/controller/StandardControllerServiceLookup.java index 22ff5182d..3b3c7fc99 100644 --- a/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/controller/StandardControllerServiceLookup.java +++ b/logisland-framework/logisland-utils/src/main/java/com/hurence/logisland/controller/StandardControllerServiceLookup.java @@ -92,7 +92,6 @@ public ControllerService getControllerService(String serviceIdentifier) { } } - logger.debug("getting controller service {}", new Object[]{serviceIdentifier}); return controllerServiceMap.get(serviceIdentifier); } diff --git a/logisland-framework/logisland-utils/src/test/resources/configuration-templatev2.yml b/logisland-framework/logisland-utils/src/test/resources/configuration-templatev2.yml index 1c78bcd2a..4e63607c3 100644 --- a/logisland-framework/logisland-utils/src/test/resources/configuration-templatev2.yml +++ b/logisland-framework/logisland-utils/src/test/resources/configuration-templatev2.yml @@ -2,7 +2,7 @@ # Logisland configuration script tempate ######################################################################################################### -version: 0.12.2 +version: 0.13.0 documentation: LogIsland analytics main config file. Put here every engine or component config ######################################################################################################### diff --git a/logisland-framework/pom.xml b/logisland-framework/pom.xml index ea5e9441c..56b8ead06 100644 --- a/logisland-framework/pom.xml +++ b/logisland-framework/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 logisland-framework diff --git a/logisland-plugins/logisland-botsearch-plugin/pom.xml b/logisland-plugins/logisland-botsearch-plugin/pom.xml index ab56941ac..cb3c255bc 100644 --- a/logisland-plugins/logisland-botsearch-plugin/pom.xml +++ b/logisland-plugins/logisland-botsearch-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-botsearch-plugin diff --git a/logisland-plugins/logisland-botsearch-plugin/src/main/java/com/hurence/logisland/math/FlowDistanceMeasure.java b/logisland-plugins/logisland-botsearch-plugin/src/main/java/com/hurence/logisland/math/FlowDistanceMeasure.java index 327a48d9d..721b470e8 100755 --- a/logisland-plugins/logisland-botsearch-plugin/src/main/java/com/hurence/logisland/math/FlowDistanceMeasure.java +++ b/logisland-plugins/logisland-botsearch-plugin/src/main/java/com/hurence/logisland/math/FlowDistanceMeasure.java @@ -116,7 +116,7 @@ private static double dn(HttpFlow e1, HttpFlow e2) { * * We define dv(rk, rh) to be equal to the normalized Levenshtein distance * between strings obtained by concatenating the parameter values (e.g., - * 0.12.2US). + * 0.13.0US). */ private static double dv(HttpFlow e1, HttpFlow e2) { List v1 = e1.getUrlQueryValues(); diff --git a/logisland-plugins/logisland-botsearch-plugin/src/test/java/com/hurence/logisland/botsearch/TraceTest.java b/logisland-plugins/logisland-botsearch-plugin/src/test/java/com/hurence/logisland/botsearch/TraceTest.java index eac6486fb..f484be549 100755 --- a/logisland-plugins/logisland-botsearch-plugin/src/test/java/com/hurence/logisland/botsearch/TraceTest.java +++ b/logisland-plugins/logisland-botsearch-plugin/src/test/java/com/hurence/logisland/botsearch/TraceTest.java @@ -37,12 +37,12 @@ private static Trace getSampleTrace() { String[] flows - = {"Thu Jan 02 08:43:39 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.12.226/Images/RightJauge.gif 724 409 false false", - "Thu Jan 02 08:43:40 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.12.226/Images/fondJauge.gif 723 402 false false", + = {"Thu Jan 02 08:43:39 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.13.026/Images/RightJauge.gif 724 409 false false", + "Thu Jan 02 08:43:40 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.13.026/Images/fondJauge.gif 723 402 false false", "Thu Jan 02 08:43:42 CET 2014 GET 10.118.32.164 193.252.23.209 http static1.lecloud.wanadoo.fr 80 /home/fr_FR/20131202100641/img/sprite-icons.pn 495 92518 false false", "Thu Jan 02 08:43:43 CET 2014 GET 10.118.32.164 173.194.66.94 https www.google.fr 443 /complete/search 736 812 false false", - "Thu Jan 02 08:43:45 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.12.226/Images/digiposte/archiver-btn.png 736 2179 false false", - "Thu Jan 02 08:43:49 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.12.226/Images/picto_trash.gif 725 544 false false"}; + "Thu Jan 02 08:43:45 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.13.026/Images/digiposte/archiver-btn.png 736 2179 false false", + "Thu Jan 02 08:43:49 CET 2014 GET 10.118.32.164 193.251.214.117 http webmail.laposte.net 80 /webmail/fr_FR/Images/Images-2013090.13.026/Images/picto_trash.gif 725 544 false false"}; for (String flowString : flows) { String[] split = flowString.split("\t"); diff --git a/logisland-plugins/logisland-botsearch-plugin/src/test/resources/data/TracesAnalysis_samples.txt b/logisland-plugins/logisland-botsearch-plugin/src/test/resources/data/TracesAnalysis_samples.txt index 0e5774336..e56790b5f 100755 --- a/logisland-plugins/logisland-botsearch-plugin/src/test/resources/data/TracesAnalysis_samples.txt +++ b/logisland-plugins/logisland-botsearch-plugin/src/test/resources/data/TracesAnalysis_samples.txt @@ -75,8 +75,8 @@ 2012-10-19T10:12:00.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 1942 MICROSOFT BITS/6.7 false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:12:06.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 472 MICROSOFT BITS/6.7 false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:12:19.000 GMT 10.112.123.187 CONNECT TCP_MISS_SSL/200 tunnel dl.google.com / 443 - 0 39 MICROSOFT BITS/6.7 false false false false false null 173.194.34.224 9q9hyebw8m76 37.41920471191406 -122.05740356445312 United States 43 null -2012-10-19T10:12:20.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null -2012-10-19T10:12:25.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 472 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null +2012-10-19T10.13.00.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null +2012-10-19T10.13.05.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 472 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:12:37.000 GMT 10.112.123.187 CONNECT TCP_MISS_SSL/200 tunnel dl.google.com / 443 - 0 39 - false false false false false null 173.194.34.224 9q9hyebw8m76 37.41920471191406 -122.05740356445312 United States 43 null 2012-10-19T10:17:45.000 GMT 10.112.123.187 POST TCP_DENIED/407 http tools.google.com /service/update2 80 - 0 1942 GOOGLE UPDATE/1.3.21.99,WINHTTP false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:17:51.000 GMT 10.112.123.187 POST TCP_DENIED/407 http tools.google.com /service/update2 80 - 0 472 GOOGLE UPDATE/1.3.21.99,WINHTTP false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null @@ -444,4 +444,4 @@ 2012-10-25T11:34:45.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talk.google.com / 5222 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 44 null 2012-10-25T11:34:45.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talkx.l.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 44 null 2012-10-25T11:34:45.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talkx.l.google.com / 5222 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 44 null -2012-10-25T13:04:46.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talk.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 \ No newline at end of file +2012-10-25T13:04:46.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talk.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 diff --git a/logisland-plugins/logisland-common-logs-plugin/pom.xml b/logisland-plugins/logisland-common-logs-plugin/pom.xml index bac8edb72..3cfcf050a 100644 --- a/logisland-plugins/logisland-common-logs-plugin/pom.xml +++ b/logisland-plugins/logisland-common-logs-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-common-logs-plugin diff --git a/logisland-plugins/logisland-common-processors-plugin/pom.xml b/logisland-plugins/logisland-common-processors-plugin/pom.xml index 9f4fa8b2a..b6f5b528e 100644 --- a/logisland-plugins/logisland-common-processors-plugin/pom.xml +++ b/logisland-plugins/logisland-common-processors-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-common-processors-plugin diff --git a/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/datastore/AbstractDatastoreProcessor.java b/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/datastore/AbstractDatastoreProcessor.java index 97e17aa25..8a4d2598e 100644 --- a/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/datastore/AbstractDatastoreProcessor.java +++ b/logisland-plugins/logisland-common-processors-plugin/src/main/java/com/hurence/logisland/processor/datastore/AbstractDatastoreProcessor.java @@ -45,7 +45,6 @@ public boolean hasControllerService() { @Override public void init(final ProcessContext context) { - logger.info("Datastore client service initialization"); datastoreClientService = context.getPropertyValue(DATASTORE_CLIENT_SERVICE).asControllerService(DatastoreClientService.class); if (datastoreClientService == null) { logger.error("Datastore client service is not initialized!"); diff --git a/logisland-plugins/logisland-common-processors-plugin/src/test/resources/data/TracesAnalysis_samples.txt b/logisland-plugins/logisland-common-processors-plugin/src/test/resources/data/TracesAnalysis_samples.txt index 17da1ef5d..cb32805bf 100644 --- a/logisland-plugins/logisland-common-processors-plugin/src/test/resources/data/TracesAnalysis_samples.txt +++ b/logisland-plugins/logisland-common-processors-plugin/src/test/resources/data/TracesAnalysis_samples.txt @@ -59,8 +59,8 @@ 2012-10-19T10:12:00.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 1942 MICROSOFT BITS/6.7 false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:12:06.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 472 MICROSOFT BITS/6.7 false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:12:19.000 GMT 10.112.123.187 CONNECT TCP_MISS_SSL/200 tunnel dl.google.com / 443 - 0 39 MICROSOFT BITS/6.7 false false false false false null 173.194.34.224 9q9hyebw8m76 37.41920471191406 -122.05740356445312 United States 43 null -2012-10-19T10:12:20.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null -2012-10-19T10:12:25.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 472 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null +2012-10-19T10.13.00.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null +2012-10-19T10.13.05.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel dl.google.com / 443 - 0 472 - false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:12:37.000 GMT 10.112.123.187 CONNECT TCP_MISS_SSL/200 tunnel dl.google.com / 443 - 0 39 - false false false false false null 173.194.34.224 9q9hyebw8m76 37.41920471191406 -122.05740356445312 United States 43 null 2012-10-19T10:17:45.000 GMT 10.112.123.187 POST TCP_DENIED/407 http tools.google.com /service/update2 80 - 0 1942 GOOGLE UPDATE/1.3.21.99,WINHTTP false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null 2012-10-19T10:17:51.000 GMT 10.112.123.187 POST TCP_DENIED/407 http tools.google.com /service/update2 80 - 0 472 GOOGLE UPDATE/1.3.21.99,WINHTTP false false false false false null 255.255.255.255 null 0.0 0.0 null 43 null @@ -428,4 +428,4 @@ 2012-10-25T11:34:45.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talk.google.com / 5222 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 44 null 2012-10-25T11:34:45.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talkx.l.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 44 null 2012-10-25T11:34:45.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talkx.l.google.com / 5222 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 null 44 null -2012-10-25T13:04:46.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talk.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 \ No newline at end of file +2012-10-25T13:04:46.000 GMT 10.112.123.187 CONNECT TCP_DENIED/407 tunnel talk.google.com / 443 - 0 1942 - false false false false false null 255.255.255.255 null 0.0 0.0 diff --git a/logisland-plugins/logisland-cyber-security-plugin/pom.xml b/logisland-plugins/logisland-cyber-security-plugin/pom.xml index 17c57baf7..66fad828c 100644 --- a/logisland-plugins/logisland-cyber-security-plugin/pom.xml +++ b/logisland-plugins/logisland-cyber-security-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-cyber-security-plugin diff --git a/logisland-plugins/logisland-elasticsearch-plugin/pom.xml b/logisland-plugins/logisland-elasticsearch-plugin/pom.xml index ae682bac5..4cfae185d 100644 --- a/logisland-plugins/logisland-elasticsearch-plugin/pom.xml +++ b/logisland-plugins/logisland-elasticsearch-plugin/pom.xml @@ -23,7 +23,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-elasticsearch-plugin diff --git a/logisland-plugins/logisland-enrichment-plugin/pom.xml b/logisland-plugins/logisland-enrichment-plugin/pom.xml index eaca1c2b5..8ed56d372 100644 --- a/logisland-plugins/logisland-enrichment-plugin/pom.xml +++ b/logisland-plugins/logisland-enrichment-plugin/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-enrichment-plugin diff --git a/logisland-plugins/logisland-excel-plugin/pom.xml b/logisland-plugins/logisland-excel-plugin/pom.xml index ae213a192..04bf696b2 100644 --- a/logisland-plugins/logisland-excel-plugin/pom.xml +++ b/logisland-plugins/logisland-excel-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-excel-plugin diff --git a/logisland-plugins/logisland-hbase-plugin/pom.xml b/logisland-plugins/logisland-hbase-plugin/pom.xml index 5aa1c0e84..0f5b41f9d 100644 --- a/logisland-plugins/logisland-hbase-plugin/pom.xml +++ b/logisland-plugins/logisland-hbase-plugin/pom.xml @@ -5,7 +5,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-hbase-plugin Support for interacting with HBase diff --git a/logisland-plugins/logisland-outlier-detection-plugin/pom.xml b/logisland-plugins/logisland-outlier-detection-plugin/pom.xml index 1b74322fa..8c988ff78 100644 --- a/logisland-plugins/logisland-outlier-detection-plugin/pom.xml +++ b/logisland-plugins/logisland-outlier-detection-plugin/pom.xml @@ -25,7 +25,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 jar diff --git a/logisland-plugins/logisland-querymatcher-plugin/pom.xml b/logisland-plugins/logisland-querymatcher-plugin/pom.xml index 3bba613f0..fb16567c7 100644 --- a/logisland-plugins/logisland-querymatcher-plugin/pom.xml +++ b/logisland-plugins/logisland-querymatcher-plugin/pom.xml @@ -26,7 +26,7 @@ http://www.w3.org/2001/XMLSchema-instance "> com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 jar diff --git a/logisland-plugins/logisland-sampling-plugin/pom.xml b/logisland-plugins/logisland-sampling-plugin/pom.xml index 5c8610378..4d7ffc6ab 100644 --- a/logisland-plugins/logisland-sampling-plugin/pom.xml +++ b/logisland-plugins/logisland-sampling-plugin/pom.xml @@ -26,7 +26,7 @@ http://www.w3.org/2001/XMLSchema-instance "> com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 jar diff --git a/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data1.txt b/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data1.txt index ab32b658c..19fdcbd6c 100644 --- a/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data1.txt +++ b/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data1.txt @@ -76,7 +76,7 @@ 1370551800000,0.10000 1370552100000,0.10400 1370552400000,0.11250 -1370552700000,0.12.20 +1370552700000,0.13.00 1370553000000,0.11450 1370553300000,0.10950 1370553600000,0.10500 @@ -210,14 +210,14 @@ 1370592000000,0.10200 1370592300000,0.10300 1370592600000,0.10950 -1370592900000,0.12.20 -1370593200000,0.12.20 -1370593500000,0.12.20 +1370592900000,0.13.00 +1370593200000,0.13.00 +1370593500000,0.13.00 1370593800000,0.11350 1370594100000,0.11350 -1370594400000,0.12.20 +1370594400000,0.13.00 1370594700000,0.11750 -1370595000000,0.12.20 +1370595000000,0.13.00 1370595300000,0.11850 1370595600000,0.11850 1370595900000,0.12100 @@ -229,26 +229,26 @@ 1370597700000,0.12400 1370598000000,0.12350 1370598300000,0.12050 -1370598600000,0.12.20 +1370598600000,0.13.00 1370598900000,0.11550 1370599200000,0.11550 -1370599500000,0.12.20 -1370599800000,0.12.20 -1370600100000,0.12.20 -1370600400000,0.12.20 -1370600700000,0.12.20 -1370601000000,0.12.20 +1370599500000,0.13.00 +1370599800000,0.13.00 +1370600100000,0.13.00 +1370600400000,0.13.00 +1370600700000,0.13.00 +1370601000000,0.13.00 1370601300000,0.11250 1370601600000,0.11250 -1370601900000,0.12.20 +1370601900000,0.13.00 1370602200000,0.11350 1370602500000,0.11750 -1370602800000,0.12.20 +1370602800000,0.13.00 1370603100000,0.11250 1370603400000,0.10900 1370603700000,0.10800 1370604000000,0.11050 -1370604300000,0.12.20 +1370604300000,0.13.00 1370604600000,0.10900 1370604900000,0.10900 1370605200000,0.10600 @@ -271,9 +271,9 @@ 1370610300000,0.09150 1370610600000,0.09200 1370610900000,0.09150 -1370.12.20000,0.09500 -1370.12.20000,0.09550 -1370.12.20000,0.09300 +1370.13.00000,0.09500 +1370.13.00000,0.09550 +1370.13.00000,0.09300 1370612100000,0.09200 1370612400000,0.09250 1370612700000,0.09400 @@ -438,14 +438,14 @@ 1371144900000,0.11050 1371145200000,0.11250 1371145500000,0.11250 -1371145800000,0.12.20 +1371145800000,0.13.00 1371146100000,0.11250 1371146400000,0.11150 1371146700000,0.11250 -1371147000000,0.12.20 +1371147000000,0.13.00 1371147300000,0.11250 1371147600000,0.11550 -1371147900000,0.12.20 +1371147900000,0.13.00 1371148200000,0.12050 1371148500000,0.12750 1371148800000,0.13500 @@ -495,8 +495,8 @@ 1371162000000,0.11850 1371162300000,0.11850 1371162600000,0.11350 -1371162900000,0.12.20 -1371163200000,0.12.20 +1371162900000,0.13.00 +1371163200000,0.13.00 1371163500000,0.11050 1371163800000,0.10850 1371164100000,0.10650 @@ -611,28 +611,28 @@ 1371196800000,0.10650 1371197100000,0.10550 1371197400000,0.10900 -1371197700000,0.12.20 +1371197700000,0.13.00 1371198000000,0.11450 -1371198300000,0.12.20 +1371198300000,0.13.00 1371198600000,0.11050 1371198900000,0.11050 1371199200000,0.10900 -1371199500000,0.12.20 -1371199800000,0.12.20 -1371200100000,0.12.20 -1371200400000,0.12.20 +1371199500000,0.13.00 +1371199800000,0.13.00 +1371200100000,0.13.00 +1371200400000,0.13.00 1371200700000,0.11150 1371201000000,0.11550 -1371201300000,0.12.20 +1371201300000,0.13.00 1371201600000,0.11550 1371201900000,0.11550 1371202200000,0.11450 1371202500000,0.11550 -1371202800000,0.12.20 +1371202800000,0.13.00 1371203100000,0.11350 -1371203400000,0.12.20 -1371203700000,0.12.20 -1371204000000,0.12.20 +1371203400000,0.13.00 +1371203700000,0.13.00 +1371204000000,0.13.00 1371204300000,0.11150 1371204600000,0.11250 1371204900000,0.11250 @@ -912,30 +912,30 @@ 1371287100000,0.10350 1371287400000,0.10700 1371287700000,0.10950 -1371288000000,0.12.20 -1371288300000,0.12.20 -1371288600000,0.12.20 +1371288000000,0.13.00 +1371288300000,0.13.00 +1371288600000,0.13.00 1371288900000,0.11550 -1371289200000,0.12.20 -1371289500000,0.12.20 -1371289800000,0.12.20 +1371289200000,0.13.00 +1371289500000,0.13.00 +1371289800000,0.13.00 1371290100000,0.11050 1371290400000,0.11350 -1371290700000,0.12.20 -1371291000000,0.12.20 +1371290700000,0.13.00 +1371291000000,0.13.00 1371291300000,0.11650 -1371291600000,0.12.20 +1371291600000,0.13.00 1371291900000,0.11650 -1371292200000,0.12.20 -1371292500000,0.12.20 +1371292200000,0.13.00 +1371292500000,0.13.00 1371292800000,0.11650 -1371293100000,0.12.20 +1371293100000,0.13.00 1371293400000,0.11850 -1371293700000,0.12.20 +1371293700000,0.13.00 1371294000000,0.11850 -1371294300000,0.12.20 +1371294300000,0.13.00 1371294600000,0.11750 -1371294900000,0.12.20 +1371294900000,0.13.00 1371295200000,0.12000 1371295500000,0.12150 1371295800000,0.12000 @@ -944,28 +944,28 @@ 1371296700000,0.11950 1371297000000,0.12100 1371297300000,0.11950 -1371297600000,0.12.20 +1371297600000,0.13.00 1371297900000,0.11350 -1371298200000,0.12.20 +1371298200000,0.13.00 1371298500000,0.11150 -1371298800000,0.12.20 -1371299100000,0.12.20 -1371299400000,0.12.20 -1371299700000,0.12.20 +1371298800000,0.13.00 +1371299100000,0.13.00 +1371299400000,0.13.00 +1371299700000,0.13.00 1371300000000,0.11350 1371300300000,0.11750 -1371300600000,0.12.20 -1371300900000,0.12.20 -1371301200000,0.12.20 -1371301500000,0.12.20 +1371300600000,0.13.00 +1371300900000,0.13.00 +1371301200000,0.13.00 +1371301500000,0.13.00 1371301800000,0.11450 -1371302100000,0.12.20 +1371302100000,0.13.00 1371302400000,0.11150 -1371302700000,0.12.20 +1371302700000,0.13.00 1371303000000,0.11250 -1371303300000,0.12.20 +1371303300000,0.13.00 1371303600000,0.11050 -1371303900000,0.12.20 +1371303900000,0.13.00 1371304200000,0.11050 1371304500000,0.11050 1371304800000,0.10950 @@ -980,7 +980,7 @@ 1371307500000,0.10500 1371307800000,0.10900 1371308100000,0.11150 -1371308400000,0.12.20 +1371308400000,0.13.00 1371308700000,0.10900 1371309000000,0.10650 1371309300000,0.10400 @@ -1216,55 +1216,55 @@ 1371378300000,0.10200 1371378600000,0.10600 1371378900000,0.10900 -1371379200000,0.12.20 -1371379500000,0.12.20 -1371379800000,0.12.20 -1371380100000,0.12.20 -1371380400000,0.12.20 -1371380700000,0.12.20 +1371379200000,0.13.00 +1371379500000,0.13.00 +1371379800000,0.13.00 +1371380100000,0.13.00 +1371380400000,0.13.00 +1371380700000,0.13.00 1371381000000,0.11750 -1371381300000,0.12.20 -1371381600000,0.12.20 -1371381900000,0.12.20 -1371382200000,0.12.20 +1371381300000,0.13.00 +1371381600000,0.13.00 +1371381900000,0.13.00 +1371382200000,0.13.00 1371382500000,0.11650 -1371382800000,0.12.20 -1371383100000,0.12.20 +1371382800000,0.13.00 +1371383100000,0.13.00 1371383400000,0.11450 -1371383700000,0.12.20 -1371384000000,0.12.20 +1371383700000,0.13.00 +1371384000000,0.13.00 1371384300000,0.11250 1371384600000,0.11650 1371384900000,0.11750 1371385200000,0.11750 1371385500000,0.11650 -1371385800000,0.12.20 +1371385800000,0.13.00 1371386100000,0.11650 1371386400000,0.12050 1371386700000,0.12300 1371387000000,0.12200 1371387300000,0.12050 1371387600000,0.12000 -1371387900000,0.12.20 -1371388200000,0.12.20 -1371388500000,0.12.20 +1371387900000,0.13.00 +1371388200000,0.13.00 +1371388500000,0.13.00 1371388800000,0.11450 1371389100000,0.11350 1371389400000,0.11450 1371389700000,0.11550 1371390000000,0.11750 1371390300000,0.11650 -1371390600000,0.12.20 -1371390900000,0.12.20 +1371390600000,0.13.00 +1371390900000,0.13.00 1371391200000,0.11350 -1371391500000,0.12.20 -1371391800000,0.12.20 +1371391500000,0.13.00 +1371391800000,0.13.00 1371392100000,0.11350 -1371392400000,0.12.20 +1371392400000,0.13.00 1371392700000,0.11250 -1371393000000,0.12.20 -1371393300000,0.12.20 -1371393600000,0.12.20 +1371393000000,0.13.00 +1371393300000,0.13.00 +1371393600000,0.13.00 1371393900000,0.11050 1371394200000,0.10800 1371394500000,0.10550 @@ -1563,7 +1563,7 @@ 1371482400000,0.12450 1371482700000,0.12000 1371483000000,0.11550 -1371483300000,0.12.20 +1371483300000,0.13.00 1371483600000,0.11450 1371483900000,0.10950 1371484200000,0.10600 @@ -1765,34 +1765,34 @@ 1371543000000,0.10550 1371543300000,0.10850 1371543600000,0.11150 -1371543900000,0.12.20 +1371543900000,0.13.00 1371544200000,0.11450 -1371544500000,0.12.20 -1371544800000,0.12.20 +1371544500000,0.13.00 +1371544800000,0.13.00 1371545100000,0.11350 -1371545400000,0.12.20 +1371545400000,0.13.00 1371545700000,0.11450 -1371546000000,0.12.20 +1371546000000,0.13.00 1371546300000,0.11450 1371546600000,0.11150 1371546900000,0.10850 1371547200000,0.10750 1371547500000,0.10800 -1371547800000,0.12.20 -1371548100000,0.12.20 +1371547800000,0.13.00 +1371548100000,0.13.00 1371548400000,0.11550 1371548700000,0.11250 -1371549000000,0.12.20 +1371549000000,0.13.00 1371549300000,0.10900 -1371549600000,0.12.20 +1371549600000,0.13.00 1371549900000,0.10950 -1371550200000,0.12.20 -1371550500000,0.12.20 -1371550800000,0.12.20 +1371550200000,0.13.00 +1371550500000,0.13.00 +1371550800000,0.13.00 1371551100000,0.11550 1371551400000,0.11450 1371551700000,0.11250 -1371552000000,0.12.20 +1371552000000,0.13.00 1371552300000,0.10850 1371552600000,0.10550 1371552900000,0.10400 @@ -2046,31 +2046,31 @@ 1371627300000,0.10650 1371627600000,0.10700 1371627900000,0.10950 -1371628200000,0.12.20 +1371628200000,0.13.00 1371628500000,0.11050 -1371628800000,0.12.20 -1371629100000,0.12.20 -1371629400000,0.12.20 -1371629700000,0.12.20 -1371630000000,0.12.20 +1371628800000,0.13.00 +1371629100000,0.13.00 +1371629400000,0.13.00 +1371629700000,0.13.00 +1371630000000,0.13.00 1371630300000,0.10850 1371630600000,0.11150 -1371630900000,0.12.20 +1371630900000,0.13.00 1371631200000,0.11250 -1371631500000,0.12.20 -1371631800000,0.12.20 +1371631500000,0.13.00 +1371631800000,0.13.00 1371632100000,0.10850 1371632400000,0.11050 1371632700000,0.11050 1371633000000,0.11050 -1371633300000,0.12.20 -1371633600000,0.12.20 +1371633300000,0.13.00 +1371633600000,0.13.00 1371633900000,0.11350 1371634200000,0.11150 1371634500000,0.11050 1371634800000,0.10850 -1371635100000,0.12.20 -1371635400000,0.12.20 +1371635100000,0.13.00 +1371635400000,0.13.00 1371635700000,0.10900 1371636000000,0.10750 1371636300000,0.10800 @@ -2338,31 +2338,31 @@ 1371714900000,0.10250 1371715200000,0.10400 1371715500000,0.10700 -1371715800000,0.12.20 +1371715800000,0.13.00 1371716100000,0.10850 1371716400000,0.10800 1371716700000,0.10750 1371717000000,0.10900 1371717300000,0.10800 -1371717600000,0.12.20 -1371717900000,0.12.20 -1371718200000,0.12.20 -1371718500000,0.12.20 -1371718800000,0.12.20 -1371719100000,0.12.20 -1371719400000,0.12.20 -1371719700000,0.12.20 +1371717600000,0.13.00 +1371717900000,0.13.00 +1371718200000,0.13.00 +1371718500000,0.13.00 +1371718800000,0.13.00 +1371719100000,0.13.00 +1371719400000,0.13.00 +1371719700000,0.13.00 1371720000000,0.11150 1371720300000,0.11050 -1371720600000,0.12.20 -1371720900000,0.12.20 +1371720600000,0.13.00 +1371720900000,0.13.00 1371721200000,0.10850 1371721500000,0.10950 -1371721800000,0.12.20 -1371722100000,0.12.20 +1371721800000,0.13.00 +1371722100000,0.13.00 1371722400000,0.11350 1371722700000,0.11550 -1371723000000,0.12.20 +1371723000000,0.13.00 1371723300000,0.10950 1371723600000,0.10800 1371723900000,0.10750 @@ -2422,13 +2422,13 @@ 1371740100000,0.12600 1371740400000,0.12450 1371740700000,0.12100 -1371741000000,0.12.20 +1371741000000,0.13.00 1371741300000,0.11950 1371741600000,0.11850 -1371741900000,0.12.20 -1371742200000,0.12.20 +1371741900000,0.13.00 +1371742200000,0.13.00 1371742500000,0.11350 -1371742800000,0.12.20 +1371742800000,0.13.00 1371743100000,0.12250 1371743400000,0.12750 1371743700000,0.12800 @@ -2438,7 +2438,7 @@ 1371744900000,0.12300 1371745200000,0.12300 1371745500000,0.12150 -1371745800000,0.12.20 +1371745800000,0.13.00 1371746100000,0.11150 1371746400000,0.10900 1371746700000,0.10800 @@ -2532,8 +2532,8 @@ 1371773100000,0.10300 1371773400000,0.10350 1371773700000,0.10600 -1371774000000,0.12.20 -1371774300000,0.12.20 +1371774000000,0.13.00 +1371774300000,0.13.00 1371774600000,0.12300 1371774900000,0.12950 1371775200000,0.13300 @@ -2561,7 +2561,7 @@ 1371781800000,0.12650 1371782100000,0.12450 1371782400000,0.12100 -1371782700000,0.12.20 +1371782700000,0.13.00 1371783000000,0.11750 1371783300000,0.11650 1371783600000,0.11150 @@ -2630,33 +2630,33 @@ 1371802500000,0.10150 1371802800000,0.10000 1371803100000,0.10650 -1371803400000,0.12.20 +1371803400000,0.13.00 1371803700000,0.11250 -1371804000000,0.12.20 -1371804300000,0.12.20 +1371804000000,0.13.00 +1371804300000,0.13.00 1371804600000,0.11250 1371804900000,0.11250 1371805200000,0.11450 -1371805500000,0.12.20 +1371805500000,0.13.00 1371805800000,0.11550 -1371806100000,0.12.20 -1371806400000,0.12.20 +1371806100000,0.13.00 +1371806400000,0.13.00 1371806700000,0.11450 -1371807000000,0.12.20 -1371807300000,0.12.20 -1371807600000,0.12.20 -1371807900000,0.12.20 +1371807000000,0.13.00 +1371807300000,0.13.00 +1371807600000,0.13.00 +1371807900000,0.13.00 1371808200000,0.11350 -1371808500000,0.12.20 -1371808800000,0.12.20 -1371809100000,0.12.20 -1371809400000,0.12.20 +1371808500000,0.13.00 +1371808800000,0.13.00 +1371809100000,0.13.00 +1371809400000,0.13.00 1371809700000,0.11250 1371810000000,0.11450 1371810300000,0.11550 -1371810600000,0.12.20 -1371810900000,0.12.20 -1371811200000,0.12.20 +1371810600000,0.13.00 +1371810900000,0.13.00 +1371811200000,0.13.00 1371811500000,0.10900 1371811800000,0.10750 1371812100000,0.10600 @@ -2713,7 +2713,7 @@ 1371827400000,0.10800 1371827700000,0.11050 1371828000000,0.11150 -1371828300000,0.12.20 +1371828300000,0.13.00 1371828600000,0.11150 1371828900000,0.10850 1371829200000,0.10700 @@ -2735,13 +2735,13 @@ 1371834000000,0.09900 1371834300000,0.10800 1371834600000,0.11050 -1371834900000,0.12.20 -1371835200000,0.12.20 +1371834900000,0.13.00 +1371835200000,0.13.00 1371835500000,0.11150 -1371835800000,0.12.20 -1371836100000,0.12.20 -1371836400000,0.12.20 -1371836700000,0.12.20 +1371835800000,0.13.00 +1371836100000,0.13.00 +1371836400000,0.13.00 +1371836700000,0.13.00 1371837000000,0.12350 1371837300000,0.12700 1371837600000,0.12800 @@ -2754,10 +2754,10 @@ 1371839700000,0.12750 1371840000000,0.12350 1371840300000,0.12250 -1371840600000,0.12.20 -1371840900000,0.12.20 -1371841200000,0.12.20 -1371841500000,0.12.20 +1371840600000,0.13.00 +1371840900000,0.13.00 +1371841200000,0.13.00 +1371841500000,0.13.00 1371841800000,0.11350 1371842100000,0.11150 1371842400000,0.11050 @@ -2935,22 +2935,22 @@ 1371894000000,0.10600 1371894300000,0.10950 1371894600000,0.11050 -1371894900000,0.12.20 +1371894900000,0.13.00 1371895200000,0.11350 -1371895500000,0.12.20 +1371895500000,0.13.00 1371895800000,0.12300 1371896100000,0.11050 1371896400000,0.10900 -1371896700000,0.12.20 -1371897000000,0.12.20 -1371897300000,0.12.20 -1371897600000,0.12.20 -1371897900000,0.12.20 +1371896700000,0.13.00 +1371897000000,0.13.00 +1371897300000,0.13.00 +1371897600000,0.13.00 +1371897900000,0.13.00 1371898200000,0.11750 1371898500000,0.11450 1371898800000,0.11350 -1371899100000,0.12.20 -1371899400000,0.12.20 +1371899100000,0.13.00 +1371899400000,0.13.00 1371899700000,0.11250 1371900000000,0.12100 1371900300000,0.12100 @@ -2964,16 +2964,16 @@ 1371902700000,0.12150 1371903000000,0.12050 1371903300000,0.11950 -1371903600000,0.12.20 +1371903600000,0.13.00 1371903900000,0.11750 -1371904200000,0.12.20 +1371904200000,0.13.00 1371904500000,0.11550 1371904800000,0.12000 -1371905100000,0.12.20 -1371905400000,0.12.20 +1371905100000,0.13.00 +1371905400000,0.13.00 1371905700000,0.11350 1371906000000,0.11250 -1371906300000,0.12.20 +1371906300000,0.13.00 1371906600000,0.11050 1371906900000,0.10950 1371907200000,0.10950 @@ -3226,13 +3226,13 @@ 1371981300000,0.11050 1371981600000,0.11450 1371981900000,0.11350 -1371982200000,0.12.20 -1371982500000,0.12.20 +1371982200000,0.13.00 +1371982500000,0.13.00 1371982800000,0.11250 1371983100000,0.11550 1371983400000,0.11450 1371983700000,0.11250 -1371984000000,0.12.20 +1371984000000,0.13.00 1371984300000,0.11450 1371984600000,0.11350 1371984900000,0.11650 @@ -3246,8 +3246,8 @@ 1371987300000,0.12150 1371987600000,0.12100 1371987900000,0.11950 -1371988200000,0.12.20 -1371988500000,0.12.20 +1371988200000,0.13.00 +1371988500000,0.13.00 1371988800000,0.11850 1371989100000,0.11850 1371989400000,0.11950 @@ -3265,23 +3265,23 @@ 1371993000000,0.12350 1371993300000,0.12400 1371993600000,0.11950 -1371993900000,0.12.20 -1371994200000,0.12.20 +1371993900000,0.13.00 +1371994200000,0.13.00 1371994500000,0.11750 1371994800000,0.12050 1371995100000,0.12200 1371995400000,0.11950 -1371995700000,0.12.20 -1371996000000,0.12.20 +1371995700000,0.13.00 +1371996000000,0.13.00 1371996300000,0.11650 -1371996600000,0.12.20 -1371996900000,0.12.20 -1371997200000,0.12.20 +1371996600000,0.13.00 +1371996900000,0.13.00 +1371997200000,0.13.00 1371997500000,0.11550 -1371997800000,0.12.20 -1371998100000,0.12.20 -1371998400000,0.12.20 -1371998700000,0.12.20 +1371997800000,0.13.00 +1371998100000,0.13.00 +1371998400000,0.13.00 +1371998700000,0.13.00 1371999000000,0.11650 1371999300000,0.10750 1371999600000,0.10450 @@ -3289,7 +3289,7 @@ 1372000200000,0.10150 1372000500000,0.10050 1372000800000,0.10000 -13720.12.2000,0.09900 +13720.13.0000,0.09900 1372001400000,0.10100 1372001700000,0.10200 1372002000000,0.10050 @@ -3389,7 +3389,7 @@ 1372030200000,0.09200 1372030500000,0.09350 1372030800000,0.09400 -13720.12.2000,0.09350 +13720.13.0000,0.09350 1372031400000,0.09350 1372031700000,0.09300 1372032000000,0.09050 @@ -3489,7 +3489,7 @@ 1372060200000,0.09700 1372060500000,0.09600 1372060800000,0.09650 -13720.12.2000,0.09950 +13720.13.0000,0.09950 1372061400000,0.09900 1372061700000,0.09900 1372062000000,0.10000 @@ -3500,23 +3500,23 @@ 1372063500000,0.10950 1372063800000,0.11150 1372064100000,0.11150 -1372064400000,0.12.20 +1372064400000,0.13.00 1372064700000,0.11350 -1372065000000,0.12.20 +1372065000000,0.13.00 1372065300000,0.11250 -1372065600000,0.12.20 -1372065900000,0.12.20 -1372066200000,0.12.20 -1372066500000,0.12.20 +1372065600000,0.13.00 +1372065900000,0.13.00 +1372066200000,0.13.00 +1372066500000,0.13.00 1372066800000,0.11650 -1372067100000,0.12.20 +1372067100000,0.13.00 1372067400000,0.11450 1372067700000,0.11150 -1372068000000,0.12.20 -1372068300000,0.12.20 +1372068000000,0.13.00 +1372068300000,0.13.00 1372068600000,0.10950 1372068900000,0.10850 -1372069200000,0.12.20 +1372069200000,0.13.00 1372069500000,0.10900 1372069800000,0.10850 1372070100000,0.11050 @@ -3589,7 +3589,7 @@ 1372090200000,0.08600 1372090500000,0.08700 1372090800000,0.08500 -13720.12.2000,0.08350 +13720.13.0000,0.08350 1372091400000,0.08250 1372091700000,0.08350 1372092000000,0.08550 @@ -3794,8 +3794,8 @@ 1372151700000,0.10900 1372152000000,0.10950 1372152300000,0.10900 -1372152600000,0.12.20 -1372152900000,0.12.20 +1372152600000,0.13.00 +1372152900000,0.13.00 1372153200000,0.11350 1372153500000,0.11150 1372153800000,0.10800 @@ -4082,7 +4082,7 @@ 1372238100000,0.11250 1372238400000,0.11150 1372238700000,0.10950 -1372239000000,0.12.20 +1372239000000,0.13.00 1372239300000,0.10900 1372239600000,0.10650 1372239900000,0.10450 @@ -4348,33 +4348,33 @@ 1372317900000,0.10550 1372318200000,0.10550 1372318500000,0.10950 -1372318800000,0.12.20 -1372319100000,0.12.20 +1372318800000,0.13.00 +1372319100000,0.13.00 1372319400000,0.11350 -1372319700000,0.12.20 -1372320000000,0.12.20 +1372319700000,0.13.00 +1372320000000,0.13.00 1372320300000,0.10700 1372320600000,0.10700 1372320900000,0.10900 1372321200000,0.10850 -1372321500000,0.12.20 -1372321800000,0.12.20 +1372321500000,0.13.00 +1372321800000,0.13.00 1372322100000,0.11150 -1372322400000,0.12.20 +1372322400000,0.13.00 1372322700000,0.11450 1372323000000,0.11350 -1372323300000,0.12.20 -1372323600000,0.12.20 -1372323900000,0.12.20 -1372324200000,0.12.20 +1372323300000,0.13.00 +1372323600000,0.13.00 +1372323900000,0.13.00 +1372324200000,0.13.00 1372324500000,0.11050 -1372324800000,0.12.20 +1372324800000,0.13.00 1372325100000,0.11050 1372325400000,0.10850 1372325700000,0.10650 1372326000000,0.10700 1372326300000,0.11050 -1372326600000,0.12.20 +1372326600000,0.13.00 1372326900000,0.11250 1372327200000,0.11250 1372327500000,0.10700 @@ -4702,13 +4702,13 @@ 1372424100000,0.12100 1372424400000,0.12100 1372424700000,0.11850 -1372425000000,0.12.20 -1372425300000,0.12.20 +1372425000000,0.13.00 +1372425300000,0.13.00 1372425600000,0.12050 1372425900000,0.12150 1372426200000,0.11750 -1372426500000,0.12.20 -1372426800000,0.12.20 +1372426500000,0.13.00 +1372426800000,0.13.00 1372427100000,0.10900 1372427400000,0.10950 1372427700000,0.10600 @@ -4845,30 +4845,30 @@ 1372467000000,0.10800 1372467300000,0.10950 1372467600000,0.10950 -1372467900000,0.12.20 +1372467900000,0.13.00 1372468200000,0.11750 1372468500000,0.11550 -1372468800000,0.12.20 +1372468800000,0.13.00 1372469100000,0.11750 -1372469400000,0.12.20 -1372469700000,0.12.20 -1372470000000,0.12.20 -1372470300000,0.12.20 -1372470600000,0.12.20 +1372469400000,0.13.00 +1372469700000,0.13.00 +1372470000000,0.13.00 +1372470300000,0.13.00 +1372470600000,0.13.00 1372470900000,0.11950 1372471200000,0.11950 -1372471500000,0.12.20 +1372471500000,0.13.00 1372471800000,0.11550 1372472100000,0.11450 -1372472400000,0.12.20 +1372472400000,0.13.00 1372472700000,0.11450 1372473000000,0.11450 1372473300000,0.11450 -1372473600000,0.12.20 +1372473600000,0.13.00 1372473900000,0.11250 1372474200000,0.11250 -1372474500000,0.12.20 -1372474800000,0.12.20 +1372474500000,0.13.00 +1372474800000,0.13.00 1372475100000,0.13050 1372475400000,0.13600 1372475700000,0.13800 @@ -4915,8 +4915,8 @@ 1372488000000,0.11850 1372488300000,0.11450 1372488600000,0.11250 -1372488900000,0.12.20 -1372489200000,0.12.20 +1372488900000,0.13.00 +1372489200000,0.13.00 1372489500000,0.10450 1372489800000,0.10350 1372490100000,0.10000 @@ -4951,52 +4951,52 @@ 1372498800000,0.10450 1372499100000,0.10550 1372499400000,0.10850 -1372499700000,0.12.20 -1372500000000,0.12.20 -1372500300000,0.12.20 -1372500600000,0.12.20 -1372500900000,0.12.20 -1372501200000,0.12.20 +1372499700000,0.13.00 +1372500000000,0.13.00 +1372500300000,0.13.00 +1372500600000,0.13.00 +1372500900000,0.13.00 +1372501200000,0.13.00 1372501500000,0.11350 1372501800000,0.11550 -1372502100000,0.12.20 +1372502100000,0.13.00 1372502400000,0.11650 1372502700000,0.11750 1372503000000,0.11750 -1372503300000,0.12.20 -1372503600000,0.12.20 +1372503300000,0.13.00 +1372503600000,0.13.00 1372503900000,0.11550 1372504200000,0.11650 -1372504500000,0.12.20 -1372504800000,0.12.20 +1372504500000,0.13.00 +1372504800000,0.13.00 1372505100000,0.11650 1372505400000,0.11850 1372505700000,0.12050 -1372506000000,0.12.20 -1372506300000,0.12.20 -1372506600000,0.12.20 +1372506000000,0.13.00 +1372506300000,0.13.00 +1372506600000,0.13.00 1372506900000,0.11450 1372507200000,0.11450 -1372507500000,0.12.20 -1372507800000,0.12.20 +1372507500000,0.13.00 +1372507800000,0.13.00 1372508100000,0.11450 1372508400000,0.11450 -1372508700000,0.12.20 -1372509000000,0.12.20 -1372509300000,0.12.20 +1372508700000,0.13.00 +1372509000000,0.13.00 +1372509300000,0.13.00 1372509600000,0.11850 1372509900000,0.12050 -1372510200000,0.12.20 -1372510500000,0.12.20 -1372510800000,0.12.20 +1372510200000,0.13.00 +1372510500000,0.13.00 +1372510800000,0.13.00 1372511100000,0.11150 1372511400000,0.10950 -1372511700000,0.12.20 +1372511700000,0.13.00 1372512000000,0.10900 -1372512300000,0.12.20 +1372512300000,0.13.00 1372512600000,0.11150 -1372512900000,0.12.20 -1372513200000,0.12.20 +1372512900000,0.13.00 +1372513200000,0.13.00 1372513500000,0.10900 1372513800000,0.10900 1372514100000,0.10850 @@ -5248,62 +5248,62 @@ 1372587900000,0.10900 1372588200000,0.10950 1372588500000,0.11050 -1372588800000,0.12.20 +1372588800000,0.13.00 1372589100000,0.11250 1372589400000,0.11450 -1372589700000,0.12.20 -1372590000000,0.12.20 +1372589700000,0.13.00 +1372590000000,0.13.00 1372590300000,0.11750 -1372590600000,0.12.20 +1372590600000,0.13.00 1372590900000,0.11850 -1372591200000,0.12.20 -1372591500000,0.12.20 +1372591200000,0.13.00 +1372591500000,0.13.00 1372591800000,0.11650 -1372592100000,0.12.20 +1372592100000,0.13.00 1372592400000,0.12000 1372592700000,0.12250 1372593000000,0.12000 1372593300000,0.12000 1372593600000,0.12000 -1372593900000,0.12.20 +1372593900000,0.13.00 1372594200000,0.11850 1372594500000,0.11850 -1372594800000,0.12.20 -1372595100000,0.12.20 +1372594800000,0.13.00 +1372595100000,0.13.00 1372595400000,0.11850 -1372595700000,0.12.20 +1372595700000,0.13.00 1372596000000,0.11450 1372596300000,0.11450 -1372596600000,0.12.20 +1372596600000,0.13.00 1372596900000,0.11650 1372597200000,0.11650 1372597500000,0.11750 1372597800000,0.12050 1372598100000,0.11450 -1372598400000,0.12.20 -1372598700000,0.12.20 -1372599000000,0.12.20 -1372599300000,0.12.20 -1372599600000,0.12.20 -1372599900000,0.12.20 -1372600200000,0.12.20 +1372598400000,0.13.00 +1372598700000,0.13.00 +1372599000000,0.13.00 +1372599300000,0.13.00 +1372599600000,0.13.00 +1372599900000,0.13.00 +1372600200000,0.13.00 1372600500000,0.11450 1372600800000,0.11450 1372601100000,0.11450 -1372601400000,0.12.20 -1372601700000,0.12.20 -1372602000000,0.12.20 -1372602300000,0.12.20 +1372601400000,0.13.00 +1372601700000,0.13.00 +1372602000000,0.13.00 +1372602300000,0.13.00 1372602600000,0.11250 -1372602900000,0.12.20 -1372603200000,0.12.20 -1372603500000,0.12.20 +1372602900000,0.13.00 +1372603200000,0.13.00 +1372603500000,0.13.00 1372603800000,0.10850 1372604100000,0.10500 1372604400000,0.10500 1372604700000,0.10650 -1372605000000,0.12.20 -1372605300000,0.12.20 +1372605000000,0.13.00 +1372605300000,0.13.00 1372605600000,0.10800 1372605900000,0.10450 1372606200000,0.10250 @@ -5506,4 +5506,4 @@ 1372665300000,0.09950 1372665600000,0.09950 1372665900000,0.09950 -1372666200000,0.12.20 +1372666200000,0.13.00 diff --git a/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data2.txt b/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data2.txt index 682efb01a..8c6769d81 100644 --- a/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data2.txt +++ b/logisland-plugins/logisland-sampling-plugin/src/test/resources/data/raw-data2.txt @@ -75,7 +75,7 @@ 1370551800000,0.10000 1370552100000,0.10400 1370552400000,0.11250 -1370552700000,0.12.20 +1370552700000,0.13.00 1370553000000,0.11450 1370553300000,0.10950 1370553600000,0.10500 @@ -209,14 +209,14 @@ 1370592000000,0.10200 1370592300000,0.10300 1370592600000,0.10950 -1370592900000,0.12.20 -1370593200000,0.12.20 -1370593500000,0.12.20 +1370592900000,0.13.00 +1370593200000,0.13.00 +1370593500000,0.13.00 1370593800000,0.11350 1370594100000,0.11350 -1370594400000,0.12.20 +1370594400000,0.13.00 1370594700000,0.11750 -1370595000000,0.12.20 +1370595000000,0.13.00 1370595300000,0.11850 1370595600000,0.11850 1370595900000,0.12100 @@ -228,26 +228,26 @@ 1370597700000,0.12400 1370598000000,0.12350 1370598300000,0.12050 -1370598600000,0.12.20 +1370598600000,0.13.00 1370598900000,0.11550 1370599200000,0.11550 -1370599500000,0.12.20 -1370599800000,0.12.20 -1370600100000,0.12.20 -1370600400000,0.12.20 -1370600700000,0.12.20 -1370601000000,0.12.20 +1370599500000,0.13.00 +1370599800000,0.13.00 +1370600100000,0.13.00 +1370600400000,0.13.00 +1370600700000,0.13.00 +1370601000000,0.13.00 1370601300000,0.11250 1370601600000,0.11250 -1370601900000,0.12.20 +1370601900000,0.13.00 1370602200000,0.11350 1370602500000,0.11750 -1370602800000,0.12.20 +1370602800000,0.13.00 1370603100000,0.11250 1370603400000,0.10900 1370603700000,0.10800 1370604000000,0.11050 -1370604300000,0.12.20 +1370604300000,0.13.00 1370604600000,0.10900 1370604900000,0.10900 1370605200000,0.10600 @@ -270,9 +270,9 @@ 1370610300000,0.09150 1370610600000,0.09200 1370610900000,0.09150 -1370.12.20000,0.09500 -1370.12.20000,0.09550 -1370.12.20000,0.09300 +1370.13.00000,0.09500 +1370.13.00000,0.09550 +1370.13.00000,0.09300 1370612100000,0.09200 1370612400000,0.09250 1370612700000,0.09400 @@ -514,51 +514,51 @@ 1370683500000,0.10200 1370683800000,0.10250 1370684100000,0.10800 -1370684400000,0.12.20 +1370684400000,0.13.00 1370684700000,0.11950 1370685000000,0.12350 1370685300000,0.12450 1370685600000,0.12150 -1370685900000,0.12.20 -1370686200000,0.12.20 +1370685900000,0.13.00 +1370686200000,0.13.00 1370686500000,0.11750 1370686800000,0.11550 1370687100000,0.11750 1370687400000,0.11750 1370687700000,0.11550 -1370688000000,0.12.20 -1370688300000,0.12.20 +1370688000000,0.13.00 +1370688300000,0.13.00 1370688600000,0.11750 1370688900000,0.11750 1370689200000,0.11650 -1370689500000,0.12.20 -1370689800000,0.12.20 +1370689500000,0.13.00 +1370689800000,0.13.00 1370690100000,0.11750 -1370690400000,0.12.20 -1370690700000,0.12.20 +1370690400000,0.13.00 +1370690700000,0.13.00 1370691000000,0.11850 1370691300000,0.11750 1370691600000,0.11750 -1370691900000,0.12.20 +1370691900000,0.13.00 1370692200000,0.11550 -1370692500000,0.12.20 +1370692500000,0.13.00 1370692800000,0.11450 -1370693100000,0.12.20 -1370693400000,0.12.20 -1370693700000,0.12.20 -1370694000000,0.12.20 +1370693100000,0.13.00 +1370693400000,0.13.00 +1370693700000,0.13.00 +1370694000000,0.13.00 1370694300000,0.11550 -1370694600000,0.12.20 +1370694600000,0.13.00 1370694900000,0.11250 -1370695200000,0.12.20 +1370695200000,0.13.00 1370695500000,0.11650 -1370695800000,0.12.20 +1370695800000,0.13.00 1370696100000,0.11250 1370696400000,0.11150 1370696700000,0.11150 -1370697000000,0.12.20 +1370697000000,0.13.00 1370697300000,0.11050 -1370697600000,0.12.20 +1370697600000,0.13.00 1370697900000,0.10850 1370698200000,0.10750 1370698500000,0.10500 @@ -603,9 +603,9 @@ 1370710200000,0.09600 1370710500000,0.09850 1370710800000,0.09800 -1370.12.20000,0.09550 -1370.12.20000,0.09550 -1370.12.20000,0.09500 +1370.13.00000,0.09550 +1370.13.00000,0.09550 +1370.13.00000,0.09500 1370712000000,0.09550 1370712300000,0.09550 1370712600000,0.09800 @@ -620,8 +620,8 @@ 1370715300000,0.10150 1370715600000,0.10450 1370715900000,0.10800 -1370716200000,0.12.20 -1370716500000,0.12.20 +1370716200000,0.13.00 +1370716500000,0.13.00 1370716800000,0.11450 1370717100000,0.11150 1370717400000,0.11050 @@ -765,9 +765,9 @@ 1370758800000,0.06500 1370759100000,0.07500 1370759400000,0.10850 -1370759700000,0.12.20 -1370760000000,0.12.20 -1370760300000,0.12.20 +1370759700000,0.13.00 +1370760000000,0.13.00 +1370760300000,0.13.00 1370760600000,0.10950 1370760900000,0.10750 1370761200000,0.10450 @@ -801,7 +801,7 @@ 1370769600000,0.09250 1370769900000,0.09950 1370770200000,0.10750 -1370770500000,0.12.20 +1370770500000,0.13.00 1370770800000,0.12450 1370771100000,0.12950 1370771400000,0.13450 @@ -827,7 +827,7 @@ 1370777400000,0.12200 1370777700000,0.12100 1370778000000,0.11850 -1370778300000,0.12.20 +1370778300000,0.13.00 1370778600000,0.12050 1370778900000,0.12050 1370779200000,0.12100 @@ -842,39 +842,39 @@ 1370781900000,0.12650 1370782200000,0.12300 1370782500000,0.11950 -1370782800000,0.12.20 +1370782800000,0.13.00 1370783100000,0.11750 1370783400000,0.11850 1370783700000,0.11750 -1370784000000,0.12.20 +1370784000000,0.13.00 1370784300000,0.11450 -1370784600000,0.12.20 +1370784600000,0.13.00 1370784900000,0.11650 1370785200000,0.11750 1370785500000,0.11750 1370785800000,0.12100 -1370786100000,0.12.20 -1370786400000,0.12.20 -1370786700000,0.12.20 -1370787000000,0.12.20 +1370786100000,0.13.00 +1370786400000,0.13.00 +1370786700000,0.13.00 +1370787000000,0.13.00 1370787300000,0.11150 -1370787600000,0.12.20 -1370787900000,0.12.20 -1370788200000,0.12.20 -1370788500000,0.12.20 -1370788800000,0.12.20 +1370787600000,0.13.00 +1370787900000,0.13.00 +1370788200000,0.13.00 +1370788500000,0.13.00 +1370788800000,0.13.00 1370789100000,0.11550 1370789400000,0.11450 -1370789700000,0.12.20 +1370789700000,0.13.00 1370790000000,0.11450 1370790300000,0.11450 1370790600000,0.11350 -1370790900000,0.12.20 -1370791200000,0.12.20 +1370790900000,0.13.00 +1370791200000,0.13.00 1370791500000,0.11150 -1370791800000,0.12.20 +1370791800000,0.13.00 1370792100000,0.11250 -1370792400000,0.12.20 +1370792400000,0.13.00 1370792700000,0.10850 1370793000000,0.10750 1370793300000,0.10500 @@ -931,15 +931,15 @@ 1370808600000,0.11050 1370808900000,0.10950 1370809200000,0.11050 -1370809500000,0.12.20 +1370809500000,0.13.00 1370809800000,0.10900 1370810100000,0.10600 1370810400000,0.10550 1370810700000,0.10500 -1370.12.20000,0.10600 -1370.12.20000,0.10850 -1370.12.20000,0.10700 -1370.12.20000,0.10750 +1370.13.00000,0.10600 +1370.13.00000,0.10850 +1370.13.00000,0.10700 +1370.13.00000,0.10750 1370812200000,0.10800 1370812500000,0.10750 1370812800000,0.10500 @@ -1065,51 +1065,51 @@ 1370848800000,0.09600 1370849100000,0.09850 1370849400000,0.10100 -1370849700000,0.12.20 -1370850000000,0.12.20 +1370849700000,0.13.00 +1370850000000,0.13.00 1370850300000,0.11950 -1370850600000,0.12.20 -1370850900000,0.12.20 +1370850600000,0.13.00 +1370850900000,0.13.00 1370851200000,0.10900 1370851500000,0.10550 1370851800000,0.10550 1370852100000,0.10800 -1370852400000,0.12.20 -1370852700000,0.12.20 +1370852400000,0.13.00 +1370852700000,0.13.00 1370853000000,0.11850 1370853300000,0.11950 1370853600000,0.11750 1370853900000,0.11650 -1370854200000,0.12.20 +1370854200000,0.13.00 1370854500000,0.11650 -1370854800000,0.12.20 +1370854800000,0.13.00 1370855100000,0.11650 -1370855400000,0.12.20 +1370855400000,0.13.00 1370855700000,0.11550 -1370856000000,0.12.20 -1370856300000,0.12.20 +1370856000000,0.13.00 +1370856300000,0.13.00 1370856600000,0.11550 1370856900000,0.11750 1370857200000,0.11750 1370857500000,0.11850 1370857800000,0.12100 1370858100000,0.12050 -1370858400000,0.12.20 -1370858700000,0.12.20 -1370859000000,0.12.20 -1370859300000,0.12.20 +1370858400000,0.13.00 +1370858700000,0.13.00 +1370859000000,0.13.00 +1370859300000,0.13.00 1370859600000,0.11350 -1370859900000,0.12.20 +1370859900000,0.13.00 1370860200000,0.11250 -1370860500000,0.12.20 +1370860500000,0.13.00 1370860800000,0.10900 1370861100000,0.10850 1370861400000,0.11150 1370861700000,0.11050 -1370862000000,0.12.20 +1370862000000,0.13.00 1370862300000,0.10900 -1370862600000,0.12.20 -1370862900000,0.12.20 +1370862600000,0.13.00 +1370862900000,0.13.00 1370863200000,0.10850 1370863500000,0.10900 1370863800000,0.10750 @@ -1119,7 +1119,7 @@ 1370865000000,0.10100 1370865300000,0.10700 1370865600000,0.11050 -1370865900000,0.12.20 +1370865900000,0.13.00 1370866200000,0.10700 1370866500000,0.10650 1370866800000,0.10500 @@ -1270,9 +1270,9 @@ 1370910300000,0.08650 1370910600000,0.08450 1370910900000,0.08450 -1370.12.20000,0.08450 -1370.12.20000,0.08350 -1370.12.20000,0.08250 +1370.13.00000,0.08450 +1370.13.00000,0.08350 +1370.13.00000,0.08250 1370912100000,0.08100 1370912400000,0.08000 1370912700000,0.07800 @@ -1360,32 +1360,32 @@ 1370937300000,0.10200 1370937600000,0.10800 1370937900000,0.11050 -1370938200000,0.12.20 +1370938200000,0.13.00 1370938500000,0.11350 1370938800000,0.11550 -1370939100000,0.12.20 -1370939400000,0.12.20 +1370939100000,0.13.00 +1370939400000,0.13.00 1370939700000,0.11750 -1370940000000,0.12.20 +1370940000000,0.13.00 1370940300000,0.12000 1370940600000,0.11850 1370940900000,0.11650 -1370941200000,0.12.20 -1370941500000,0.12.20 -1370941800000,0.12.20 +1370941200000,0.13.00 +1370941500000,0.13.00 +1370941800000,0.13.00 1370942100000,0.11350 1370942400000,0.11250 1370942700000,0.11050 -1370943000000,0.12.20 +1370943000000,0.13.00 1370943300000,0.11150 -1370943600000,0.12.20 +1370943600000,0.13.00 1370943900000,0.11450 1370944200000,0.11550 1370944500000,0.11550 -1370944800000,0.12.20 +1370944800000,0.13.00 1370945100000,0.11350 -1370945400000,0.12.20 -1370945700000,0.12.20 +1370945400000,0.13.00 +1370945700000,0.13.00 1370946000000,0.11150 1370946300000,0.10950 1370946600000,0.10750 @@ -1395,10 +1395,10 @@ 1370947800000,0.10800 1370948100000,0.10850 1370948400000,0.10800 -1370948700000,0.12.20 -1370949000000,0.12.20 +1370948700000,0.13.00 +1370949000000,0.13.00 1370949300000,0.11050 -1370949600000,0.12.20 +1370949600000,0.13.00 1370949900000,0.10750 1370950200000,0.10550 1370950500000,0.10550 @@ -1603,7 +1603,7 @@ 1371010200000,0.05100 1371010500000,0.04800 1371010800000,0.04700 -13710.12.2000,0.04850 +13710.13.0000,0.04850 1371011400000,0.04900 1371011700000,0.04800 1371012000000,0.04750 @@ -1649,34 +1649,34 @@ 1371024000000,0.10550 1371024300000,0.10700 1371024600000,0.10850 -1371024900000,0.12.20 +1371024900000,0.13.00 1371025200000,0.11550 1371025500000,0.11950 1371025800000,0.12150 -1371026100000,0.12.20 +1371026100000,0.13.00 1371026400000,0.11750 1371026700000,0.11750 -1371027000000,0.12.20 +1371027000000,0.13.00 1371027300000,0.11750 -1371027600000,0.12.20 +1371027600000,0.13.00 1371027900000,0.11650 -1371028200000,0.12.20 -1371028500000,0.12.20 +1371028200000,0.13.00 +1371028500000,0.13.00 1371028800000,0.11950 -1371029100000,0.12.20 -1371029400000,0.12.20 +1371029100000,0.13.00 +1371029400000,0.13.00 1371029700000,0.11850 -1371030000000,0.12.20 -1371030300000,0.12.20 -1371030600000,0.12.20 -1371030900000,0.12.20 +1371030000000,0.13.00 +1371030300000,0.13.00 +1371030600000,0.13.00 +1371030900000,0.13.00 1371031200000,0.11750 -1371031500000,0.12.20 -1371031800000,0.12.20 -1371032100000,0.12.20 -1371032400000,0.12.20 +1371031500000,0.13.00 +1371031800000,0.13.00 +1371032100000,0.13.00 +1371032400000,0.13.00 1371032700000,0.11550 -1371033000000,0.12.20 +1371033000000,0.13.00 1371033300000,0.11250 1371033600000,0.10900 1371033900000,0.10500 @@ -1703,7 +1703,7 @@ 1371040200000,0.09900 1371040500000,0.09750 1371040800000,0.09700 -13710.12.2000,0.09700 +13710.13.0000,0.09700 1371041400000,0.09650 1371041700000,0.09800 1371042000000,0.09550 @@ -1803,7 +1803,7 @@ 1371070200000,0.10050 1371070500000,0.09900 1371070800000,0.09850 -13710.12.2000,0.09800 +13710.13.0000,0.09800 1371071400000,0.09800 1371071700000,0.09600 1371072000000,0.09450 @@ -1931,42 +1931,42 @@ 1371108600000,0.10450 1371108900000,0.10750 1371109200000,0.10850 -1371109500000,0.12.20 -1371109800000,0.12.20 +1371109500000,0.13.00 +1371109800000,0.13.00 1371110100000,0.10800 1371110400000,0.10700 1371110700000,0.11050 1371111000000,0.11250 -1371111300000,0.12.20 +1371111300000,0.13.00 1371111600000,0.11050 -1371111900000,0.12.20 -1371112200000,0.12.20 +1371111900000,0.13.00 +1371112200000,0.13.00 1371112500000,0.12150 1371112800000,0.12000 1371113100000,0.11950 -1371113400000,0.12.20 -1371113700000,0.12.20 +1371113400000,0.13.00 +1371113700000,0.13.00 1371114000000,0.11850 1371114300000,0.12150 1371114600000,0.12150 1371114900000,0.12050 1371115200000,0.11950 -1371115500000,0.12.20 -1371115800000,0.12.20 +1371115500000,0.13.00 +1371115800000,0.13.00 1371116100000,0.11450 -1371116400000,0.12.20 +1371116400000,0.13.00 1371116700000,0.11350 -1371117000000,0.12.20 +1371117000000,0.13.00 1371117300000,0.11150 1371117600000,0.11350 1371117900000,0.11650 1371118200000,0.11550 1371118500000,0.11450 -1371118800000,0.12.20 -1371119100000,0.12.20 +1371118800000,0.13.00 +1371119100000,0.13.00 1371119400000,0.11350 1371119700000,0.11350 -1371120000000,0.12.20 +1371120000000,0.13.00 1371120300000,0.10900 1371120600000,0.10950 1371120900000,0.10950 @@ -1978,8 +1978,8 @@ 1371122700000,0.10500 1371123000000,0.10500 1371123300000,0.10800 -1371123600000,0.12.20 -1371123900000,0.12.20 +1371123600000,0.13.00 +1371123900000,0.13.00 1371124200000,0.10950 1371124500000,0.10650 1371124800000,0.10200 @@ -2052,14 +2052,14 @@ 1371144900000,0.11050 1371145200000,0.11250 1371145500000,0.11250 -1371145800000,0.12.20 +1371145800000,0.13.00 1371146100000,0.11250 1371146400000,0.11150 1371146700000,0.11250 -1371147000000,0.12.20 +1371147000000,0.13.00 1371147300000,0.11250 1371147600000,0.11550 -1371147900000,0.12.20 +1371147900000,0.13.00 1371148200000,0.12050 1371148500000,0.12750 1371148800000,0.13500 @@ -2109,8 +2109,8 @@ 1371162000000,0.11850 1371162300000,0.11850 1371162600000,0.11350 -1371162900000,0.12.20 -1371163200000,0.12.20 +1371162900000,0.13.00 +1371163200000,0.13.00 1371163500000,0.11050 1371163800000,0.10850 1371164100000,0.10650 @@ -2225,28 +2225,28 @@ 1371196800000,0.10650 1371197100000,0.10550 1371197400000,0.10900 -1371197700000,0.12.20 +1371197700000,0.13.00 1371198000000,0.11450 -1371198300000,0.12.20 +1371198300000,0.13.00 1371198600000,0.11050 1371198900000,0.11050 1371199200000,0.10900 -1371199500000,0.12.20 -1371199800000,0.12.20 -1371200100000,0.12.20 -1371200400000,0.12.20 +1371199500000,0.13.00 +1371199800000,0.13.00 +1371200100000,0.13.00 +1371200400000,0.13.00 1371200700000,0.11150 1371201000000,0.11550 -1371201300000,0.12.20 +1371201300000,0.13.00 1371201600000,0.11550 1371201900000,0.11550 1371202200000,0.11450 1371202500000,0.11550 -1371202800000,0.12.20 +1371202800000,0.13.00 1371203100000,0.11350 -1371203400000,0.12.20 -1371203700000,0.12.20 -1371204000000,0.12.20 +1371203400000,0.13.00 +1371203700000,0.13.00 +1371204000000,0.13.00 1371204300000,0.11150 1371204600000,0.11250 1371204900000,0.11250 @@ -2526,30 +2526,30 @@ 1371287100000,0.10350 1371287400000,0.10700 1371287700000,0.10950 -1371288000000,0.12.20 -1371288300000,0.12.20 -1371288600000,0.12.20 +1371288000000,0.13.00 +1371288300000,0.13.00 +1371288600000,0.13.00 1371288900000,0.11550 -1371289200000,0.12.20 -1371289500000,0.12.20 -1371289800000,0.12.20 +1371289200000,0.13.00 +1371289500000,0.13.00 +1371289800000,0.13.00 1371290100000,0.11050 1371290400000,0.11350 -1371290700000,0.12.20 -1371291000000,0.12.20 +1371290700000,0.13.00 +1371291000000,0.13.00 1371291300000,0.11650 -1371291600000,0.12.20 +1371291600000,0.13.00 1371291900000,0.11650 -1371292200000,0.12.20 -1371292500000,0.12.20 +1371292200000,0.13.00 +1371292500000,0.13.00 1371292800000,0.11650 -1371293100000,0.12.20 +1371293100000,0.13.00 1371293400000,0.11850 -1371293700000,0.12.20 +1371293700000,0.13.00 1371294000000,0.11850 -1371294300000,0.12.20 +1371294300000,0.13.00 1371294600000,0.11750 -1371294900000,0.12.20 +1371294900000,0.13.00 1371295200000,0.12000 1371295500000,0.12150 1371295800000,0.12000 @@ -2558,28 +2558,28 @@ 1371296700000,0.11950 1371297000000,0.12100 1371297300000,0.11950 -1371297600000,0.12.20 +1371297600000,0.13.00 1371297900000,0.11350 -1371298200000,0.12.20 +1371298200000,0.13.00 1371298500000,0.11150 -1371298800000,0.12.20 -1371299100000,0.12.20 -1371299400000,0.12.20 -1371299700000,0.12.20 +1371298800000,0.13.00 +1371299100000,0.13.00 +1371299400000,0.13.00 +1371299700000,0.13.00 1371300000000,0.11350 1371300300000,0.11750 -1371300600000,0.12.20 -1371300900000,0.12.20 -1371301200000,0.12.20 -1371301500000,0.12.20 +1371300600000,0.13.00 +1371300900000,0.13.00 +1371301200000,0.13.00 +1371301500000,0.13.00 1371301800000,0.11450 -1371302100000,0.12.20 +1371302100000,0.13.00 1371302400000,0.11150 -1371302700000,0.12.20 +1371302700000,0.13.00 1371303000000,0.11250 -1371303300000,0.12.20 +1371303300000,0.13.00 1371303600000,0.11050 -1371303900000,0.12.20 +1371303900000,0.13.00 1371304200000,0.11050 1371304500000,0.11050 1371304800000,0.10950 @@ -2594,7 +2594,7 @@ 1371307500000,0.10500 1371307800000,0.10900 1371308100000,0.11150 -1371308400000,0.12.20 +1371308400000,0.13.00 1371308700000,0.10900 1371309000000,0.10650 1371309300000,0.10400 @@ -2830,55 +2830,55 @@ 1371378300000,0.10200 1371378600000,0.10600 1371378900000,0.10900 -1371379200000,0.12.20 -1371379500000,0.12.20 -1371379800000,0.12.20 -1371380100000,0.12.20 -1371380400000,0.12.20 -1371380700000,0.12.20 +1371379200000,0.13.00 +1371379500000,0.13.00 +1371379800000,0.13.00 +1371380100000,0.13.00 +1371380400000,0.13.00 +1371380700000,0.13.00 1371381000000,0.11750 -1371381300000,0.12.20 -1371381600000,0.12.20 -1371381900000,0.12.20 -1371382200000,0.12.20 +1371381300000,0.13.00 +1371381600000,0.13.00 +1371381900000,0.13.00 +1371382200000,0.13.00 1371382500000,0.11650 -1371382800000,0.12.20 -1371383100000,0.12.20 +1371382800000,0.13.00 +1371383100000,0.13.00 1371383400000,0.11450 -1371383700000,0.12.20 -1371384000000,0.12.20 +1371383700000,0.13.00 +1371384000000,0.13.00 1371384300000,0.11250 1371384600000,0.11650 1371384900000,0.11750 1371385200000,0.11750 1371385500000,0.11650 -1371385800000,0.12.20 +1371385800000,0.13.00 1371386100000,0.11650 1371386400000,0.12050 1371386700000,0.12300 1371387000000,0.12200 1371387300000,0.12050 1371387600000,0.12000 -1371387900000,0.12.20 -1371388200000,0.12.20 -1371388500000,0.12.20 +1371387900000,0.13.00 +1371388200000,0.13.00 +1371388500000,0.13.00 1371388800000,0.11450 1371389100000,0.11350 1371389400000,0.11450 1371389700000,0.11550 1371390000000,0.11750 1371390300000,0.11650 -1371390600000,0.12.20 -1371390900000,0.12.20 +1371390600000,0.13.00 +1371390900000,0.13.00 1371391200000,0.11350 -1371391500000,0.12.20 -1371391800000,0.12.20 +1371391500000,0.13.00 +1371391800000,0.13.00 1371392100000,0.11350 -1371392400000,0.12.20 +1371392400000,0.13.00 1371392700000,0.11250 -1371393000000,0.12.20 -1371393300000,0.12.20 -1371393600000,0.12.20 +1371393000000,0.13.00 +1371393300000,0.13.00 +1371393600000,0.13.00 1371393900000,0.11050 1371394200000,0.10800 1371394500000,0.10550 @@ -3177,7 +3177,7 @@ 1371482400000,0.12450 1371482700000,0.12000 1371483000000,0.11550 -1371483300000,0.12.20 +1371483300000,0.13.00 1371483600000,0.11450 1371483900000,0.10950 1371484200000,0.10600 @@ -3379,34 +3379,34 @@ 1371543000000,0.10550 1371543300000,0.10850 1371543600000,0.11150 -1371543900000,0.12.20 +1371543900000,0.13.00 1371544200000,0.11450 -1371544500000,0.12.20 -1371544800000,0.12.20 +1371544500000,0.13.00 +1371544800000,0.13.00 1371545100000,0.11350 -1371545400000,0.12.20 +1371545400000,0.13.00 1371545700000,0.11450 -1371546000000,0.12.20 +1371546000000,0.13.00 1371546300000,0.11450 1371546600000,0.11150 1371546900000,0.10850 1371547200000,0.10750 1371547500000,0.10800 -1371547800000,0.12.20 -1371548100000,0.12.20 +1371547800000,0.13.00 +1371548100000,0.13.00 1371548400000,0.11550 1371548700000,0.11250 -1371549000000,0.12.20 +1371549000000,0.13.00 1371549300000,0.10900 -1371549600000,0.12.20 +1371549600000,0.13.00 1371549900000,0.10950 -1371550200000,0.12.20 -1371550500000,0.12.20 -1371550800000,0.12.20 +1371550200000,0.13.00 +1371550500000,0.13.00 +1371550800000,0.13.00 1371551100000,0.11550 1371551400000,0.11450 1371551700000,0.11250 -1371552000000,0.12.20 +1371552000000,0.13.00 1371552300000,0.10850 1371552600000,0.10550 1371552900000,0.10400 @@ -3660,31 +3660,31 @@ 1371627300000,0.10650 1371627600000,0.10700 1371627900000,0.10950 -1371628200000,0.12.20 +1371628200000,0.13.00 1371628500000,0.11050 -1371628800000,0.12.20 -1371629100000,0.12.20 -1371629400000,0.12.20 -1371629700000,0.12.20 -1371630000000,0.12.20 +1371628800000,0.13.00 +1371629100000,0.13.00 +1371629400000,0.13.00 +1371629700000,0.13.00 +1371630000000,0.13.00 1371630300000,0.10850 1371630600000,0.11150 -1371630900000,0.12.20 +1371630900000,0.13.00 1371631200000,0.11250 -1371631500000,0.12.20 -1371631800000,0.12.20 +1371631500000,0.13.00 +1371631800000,0.13.00 1371632100000,0.10850 1371632400000,0.11050 1371632700000,0.11050 1371633000000,0.11050 -1371633300000,0.12.20 -1371633600000,0.12.20 +1371633300000,0.13.00 +1371633600000,0.13.00 1371633900000,0.11350 1371634200000,0.11150 1371634500000,0.11050 1371634800000,0.10850 -1371635100000,0.12.20 -1371635400000,0.12.20 +1371635100000,0.13.00 +1371635400000,0.13.00 1371635700000,0.10900 1371636000000,0.10750 1371636300000,0.10800 @@ -3952,31 +3952,31 @@ 1371714900000,0.10250 1371715200000,0.10400 1371715500000,0.10700 -1371715800000,0.12.20 +1371715800000,0.13.00 1371716100000,0.10850 1371716400000,0.10800 1371716700000,0.10750 1371717000000,0.10900 1371717300000,0.10800 -1371717600000,0.12.20 -1371717900000,0.12.20 -1371718200000,0.12.20 -1371718500000,0.12.20 -1371718800000,0.12.20 -1371719100000,0.12.20 -1371719400000,0.12.20 -1371719700000,0.12.20 +1371717600000,0.13.00 +1371717900000,0.13.00 +1371718200000,0.13.00 +1371718500000,0.13.00 +1371718800000,0.13.00 +1371719100000,0.13.00 +1371719400000,0.13.00 +1371719700000,0.13.00 1371720000000,0.11150 1371720300000,0.11050 -1371720600000,0.12.20 -1371720900000,0.12.20 +1371720600000,0.13.00 +1371720900000,0.13.00 1371721200000,0.10850 1371721500000,0.10950 -1371721800000,0.12.20 -1371722100000,0.12.20 +1371721800000,0.13.00 +1371722100000,0.13.00 1371722400000,0.11350 1371722700000,0.11550 -1371723000000,0.12.20 +1371723000000,0.13.00 1371723300000,0.10950 1371723600000,0.10800 1371723900000,0.10750 @@ -4036,13 +4036,13 @@ 1371740100000,0.12600 1371740400000,0.12450 1371740700000,0.12100 -1371741000000,0.12.20 +1371741000000,0.13.00 1371741300000,0.11950 1371741600000,0.11850 -1371741900000,0.12.20 -1371742200000,0.12.20 +1371741900000,0.13.00 +1371742200000,0.13.00 1371742500000,0.11350 -1371742800000,0.12.20 +1371742800000,0.13.00 1371743100000,0.12250 1371743400000,0.12750 1371743700000,0.12800 @@ -4052,7 +4052,7 @@ 1371744900000,0.12300 1371745200000,0.12300 1371745500000,0.12150 -1371745800000,0.12.20 +1371745800000,0.13.00 1371746100000,0.11150 1371746400000,0.10900 1371746700000,0.10800 @@ -4146,8 +4146,8 @@ 1371773100000,0.10300 1371773400000,0.10350 1371773700000,0.10600 -1371774000000,0.12.20 -1371774300000,0.12.20 +1371774000000,0.13.00 +1371774300000,0.13.00 1371774600000,0.12300 1371774900000,0.12950 1371775200000,0.13300 @@ -4175,7 +4175,7 @@ 1371781800000,0.12650 1371782100000,0.12450 1371782400000,0.12100 -1371782700000,0.12.20 +1371782700000,0.13.00 1371783000000,0.11750 1371783300000,0.11650 1371783600000,0.11150 @@ -4244,33 +4244,33 @@ 1371802500000,0.10150 1371802800000,0.10000 1371803100000,0.10650 -1371803400000,0.12.20 +1371803400000,0.13.00 1371803700000,0.11250 -1371804000000,0.12.20 -1371804300000,0.12.20 +1371804000000,0.13.00 +1371804300000,0.13.00 1371804600000,0.11250 1371804900000,0.11250 1371805200000,0.11450 -1371805500000,0.12.20 +1371805500000,0.13.00 1371805800000,0.11550 -1371806100000,0.12.20 -1371806400000,0.12.20 +1371806100000,0.13.00 +1371806400000,0.13.00 1371806700000,0.11450 -1371807000000,0.12.20 -1371807300000,0.12.20 -1371807600000,0.12.20 -1371807900000,0.12.20 +1371807000000,0.13.00 +1371807300000,0.13.00 +1371807600000,0.13.00 +1371807900000,0.13.00 1371808200000,0.11350 -1371808500000,0.12.20 -1371808800000,0.12.20 -1371809100000,0.12.20 -1371809400000,0.12.20 +1371808500000,0.13.00 +1371808800000,0.13.00 +1371809100000,0.13.00 +1371809400000,0.13.00 1371809700000,0.11250 1371810000000,0.11450 1371810300000,0.11550 -1371810600000,0.12.20 -1371810900000,0.12.20 -1371811200000,0.12.20 +1371810600000,0.13.00 +1371810900000,0.13.00 +1371811200000,0.13.00 1371811500000,0.10900 1371811800000,0.10750 1371812100000,0.10600 @@ -4327,7 +4327,7 @@ 1371827400000,0.10800 1371827700000,0.11050 1371828000000,0.11150 -1371828300000,0.12.20 +1371828300000,0.13.00 1371828600000,0.11150 1371828900000,0.10850 1371829200000,0.10700 @@ -4349,13 +4349,13 @@ 1371834000000,0.09900 1371834300000,0.10800 1371834600000,0.11050 -1371834900000,0.12.20 -1371835200000,0.12.20 +1371834900000,0.13.00 +1371835200000,0.13.00 1371835500000,0.11150 -1371835800000,0.12.20 -1371836100000,0.12.20 -1371836400000,0.12.20 -1371836700000,0.12.20 +1371835800000,0.13.00 +1371836100000,0.13.00 +1371836400000,0.13.00 +1371836700000,0.13.00 1371837000000,0.12350 1371837300000,0.12700 1371837600000,0.12800 @@ -4368,10 +4368,10 @@ 1371839700000,0.12750 1371840000000,0.12350 1371840300000,0.12250 -1371840600000,0.12.20 -1371840900000,0.12.20 -1371841200000,0.12.20 -1371841500000,0.12.20 +1371840600000,0.13.00 +1371840900000,0.13.00 +1371841200000,0.13.00 +1371841500000,0.13.00 1371841800000,0.11350 1371842100000,0.11150 1371842400000,0.11050 @@ -4549,22 +4549,22 @@ 1371894000000,0.10600 1371894300000,0.10950 1371894600000,0.11050 -1371894900000,0.12.20 +1371894900000,0.13.00 1371895200000,0.11350 -1371895500000,0.12.20 +1371895500000,0.13.00 1371895800000,0.12300 1371896100000,0.11050 1371896400000,0.10900 -1371896700000,0.12.20 -1371897000000,0.12.20 -1371897300000,0.12.20 -1371897600000,0.12.20 -1371897900000,0.12.20 +1371896700000,0.13.00 +1371897000000,0.13.00 +1371897300000,0.13.00 +1371897600000,0.13.00 +1371897900000,0.13.00 1371898200000,0.11750 1371898500000,0.11450 1371898800000,0.11350 -1371899100000,0.12.20 -1371899400000,0.12.20 +1371899100000,0.13.00 +1371899400000,0.13.00 1371899700000,0.11250 1371900000000,0.12100 1371900300000,0.12100 @@ -4578,16 +4578,16 @@ 1371902700000,0.12150 1371903000000,0.12050 1371903300000,0.11950 -1371903600000,0.12.20 +1371903600000,0.13.00 1371903900000,0.11750 -1371904200000,0.12.20 +1371904200000,0.13.00 1371904500000,0.11550 1371904800000,0.12000 -1371905100000,0.12.20 -1371905400000,0.12.20 +1371905100000,0.13.00 +1371905400000,0.13.00 1371905700000,0.11350 1371906000000,0.11250 -1371906300000,0.12.20 +1371906300000,0.13.00 1371906600000,0.11050 1371906900000,0.10950 1371907200000,0.10950 @@ -4840,13 +4840,13 @@ 1371981300000,0.11050 1371981600000,0.11450 1371981900000,0.11350 -1371982200000,0.12.20 -1371982500000,0.12.20 +1371982200000,0.13.00 +1371982500000,0.13.00 1371982800000,0.11250 1371983100000,0.11550 1371983400000,0.11450 1371983700000,0.11250 -1371984000000,0.12.20 +1371984000000,0.13.00 1371984300000,0.11450 1371984600000,0.11350 1371984900000,0.11650 @@ -4860,8 +4860,8 @@ 1371987300000,0.12150 1371987600000,0.12100 1371987900000,0.11950 -1371988200000,0.12.20 -1371988500000,0.12.20 +1371988200000,0.13.00 +1371988500000,0.13.00 1371988800000,0.11850 1371989100000,0.11850 1371989400000,0.11950 @@ -4879,23 +4879,23 @@ 1371993000000,0.12350 1371993300000,0.12400 1371993600000,0.11950 -1371993900000,0.12.20 -1371994200000,0.12.20 +1371993900000,0.13.00 +1371994200000,0.13.00 1371994500000,0.11750 1371994800000,0.12050 1371995100000,0.12200 1371995400000,0.11950 -1371995700000,0.12.20 -1371996000000,0.12.20 +1371995700000,0.13.00 +1371996000000,0.13.00 1371996300000,0.11650 -1371996600000,0.12.20 -1371996900000,0.12.20 -1371997200000,0.12.20 +1371996600000,0.13.00 +1371996900000,0.13.00 +1371997200000,0.13.00 1371997500000,0.11550 -1371997800000,0.12.20 -1371998100000,0.12.20 -1371998400000,0.12.20 -1371998700000,0.12.20 +1371997800000,0.13.00 +1371998100000,0.13.00 +1371998400000,0.13.00 +1371998700000,0.13.00 1371999000000,0.11650 1371999300000,0.10750 1371999600000,0.10450 @@ -4903,7 +4903,7 @@ 1372000200000,0.10150 1372000500000,0.10050 1372000800000,0.10000 -13720.12.2000,0.09900 +13720.13.0000,0.09900 1372001400000,0.10100 1372001700000,0.10200 1372002000000,0.10050 @@ -5003,7 +5003,7 @@ 1372030200000,0.09200 1372030500000,0.09350 1372030800000,0.09400 -13720.12.2000,0.09350 +13720.13.0000,0.09350 1372031400000,0.09350 1372031700000,0.09300 1372032000000,0.09050 @@ -5103,7 +5103,7 @@ 1372060200000,0.09700 1372060500000,0.09600 1372060800000,0.09650 -13720.12.2000,0.09950 +13720.13.0000,0.09950 1372061400000,0.09900 1372061700000,0.09900 1372062000000,0.10000 @@ -5114,23 +5114,23 @@ 1372063500000,0.10950 1372063800000,0.11150 1372064100000,0.11150 -1372064400000,0.12.20 +1372064400000,0.13.00 1372064700000,0.11350 -1372065000000,0.12.20 +1372065000000,0.13.00 1372065300000,0.11250 -1372065600000,0.12.20 -1372065900000,0.12.20 -1372066200000,0.12.20 -1372066500000,0.12.20 +1372065600000,0.13.00 +1372065900000,0.13.00 +1372066200000,0.13.00 +1372066500000,0.13.00 1372066800000,0.11650 -1372067100000,0.12.20 +1372067100000,0.13.00 1372067400000,0.11450 1372067700000,0.11150 -1372068000000,0.12.20 -1372068300000,0.12.20 +1372068000000,0.13.00 +1372068300000,0.13.00 1372068600000,0.10950 1372068900000,0.10850 -1372069200000,0.12.20 +1372069200000,0.13.00 1372069500000,0.10900 1372069800000,0.10850 1372070100000,0.11050 @@ -5203,7 +5203,7 @@ 1372090200000,0.08600 1372090500000,0.08700 1372090800000,0.08500 -13720.12.2000,0.08350 +13720.13.0000,0.08350 1372091400000,0.08250 1372091700000,0.08350 1372092000000,0.08550 @@ -5408,8 +5408,8 @@ 1372151700000,0.10900 1372152000000,0.10950 1372152300000,0.10900 -1372152600000,0.12.20 -1372152900000,0.12.20 +1372152600000,0.13.00 +1372152900000,0.13.00 1372153200000,0.11350 1372153500000,0.11150 1372153800000,0.10800 @@ -5696,7 +5696,7 @@ 1372238100000,0.11250 1372238400000,0.11150 1372238700000,0.10950 -1372239000000,0.12.20 +1372239000000,0.13.00 1372239300000,0.10900 1372239600000,0.10650 1372239900000,0.10450 @@ -5962,33 +5962,33 @@ 1372317900000,0.10550 1372318200000,0.10550 1372318500000,0.10950 -1372318800000,0.12.20 -1372319100000,0.12.20 +1372318800000,0.13.00 +1372319100000,0.13.00 1372319400000,0.11350 -1372319700000,0.12.20 -1372320000000,0.12.20 +1372319700000,0.13.00 +1372320000000,0.13.00 1372320300000,0.10700 1372320600000,0.10700 1372320900000,0.10900 1372321200000,0.10850 -1372321500000,0.12.20 -1372321800000,0.12.20 +1372321500000,0.13.00 +1372321800000,0.13.00 1372322100000,0.11150 -1372322400000,0.12.20 +1372322400000,0.13.00 1372322700000,0.11450 1372323000000,0.11350 -1372323300000,0.12.20 -1372323600000,0.12.20 -1372323900000,0.12.20 -1372324200000,0.12.20 +1372323300000,0.13.00 +1372323600000,0.13.00 +1372323900000,0.13.00 +1372324200000,0.13.00 1372324500000,0.11050 -1372324800000,0.12.20 +1372324800000,0.13.00 1372325100000,0.11050 1372325400000,0.10850 1372325700000,0.10650 1372326000000,0.10700 1372326300000,0.11050 -1372326600000,0.12.20 +1372326600000,0.13.00 1372326900000,0.11250 1372327200000,0.11250 1372327500000,0.10700 @@ -6316,13 +6316,13 @@ 1372424100000,0.12100 1372424400000,0.12100 1372424700000,0.11850 -1372425000000,0.12.20 -1372425300000,0.12.20 +1372425000000,0.13.00 +1372425300000,0.13.00 1372425600000,0.12050 1372425900000,0.12150 1372426200000,0.11750 -1372426500000,0.12.20 -1372426800000,0.12.20 +1372426500000,0.13.00 +1372426800000,0.13.00 1372427100000,0.10900 1372427400000,0.10950 1372427700000,0.10600 @@ -6459,30 +6459,30 @@ 1372467000000,0.10800 1372467300000,0.10950 1372467600000,0.10950 -1372467900000,0.12.20 +1372467900000,0.13.00 1372468200000,0.11750 1372468500000,0.11550 -1372468800000,0.12.20 +1372468800000,0.13.00 1372469100000,0.11750 -1372469400000,0.12.20 -1372469700000,0.12.20 -1372470000000,0.12.20 -1372470300000,0.12.20 -1372470600000,0.12.20 +1372469400000,0.13.00 +1372469700000,0.13.00 +1372470000000,0.13.00 +1372470300000,0.13.00 +1372470600000,0.13.00 1372470900000,0.11950 1372471200000,0.11950 -1372471500000,0.12.20 +1372471500000,0.13.00 1372471800000,0.11550 1372472100000,0.11450 -1372472400000,0.12.20 +1372472400000,0.13.00 1372472700000,0.11450 1372473000000,0.11450 1372473300000,0.11450 -1372473600000,0.12.20 +1372473600000,0.13.00 1372473900000,0.11250 1372474200000,0.11250 -1372474500000,0.12.20 -1372474800000,0.12.20 +1372474500000,0.13.00 +1372474800000,0.13.00 1372475100000,0.13050 1372475400000,0.13600 1372475700000,0.13800 @@ -6529,8 +6529,8 @@ 1372488000000,0.11850 1372488300000,0.11450 1372488600000,0.11250 -1372488900000,0.12.20 -1372489200000,0.12.20 +1372488900000,0.13.00 +1372489200000,0.13.00 1372489500000,0.10450 1372489800000,0.10350 1372490100000,0.10000 @@ -6565,52 +6565,52 @@ 1372498800000,0.10450 1372499100000,0.10550 1372499400000,0.10850 -1372499700000,0.12.20 -1372500000000,0.12.20 -1372500300000,0.12.20 -1372500600000,0.12.20 -1372500900000,0.12.20 -1372501200000,0.12.20 +1372499700000,0.13.00 +1372500000000,0.13.00 +1372500300000,0.13.00 +1372500600000,0.13.00 +1372500900000,0.13.00 +1372501200000,0.13.00 1372501500000,0.11350 1372501800000,0.11550 -1372502100000,0.12.20 +1372502100000,0.13.00 1372502400000,0.11650 1372502700000,0.11750 1372503000000,0.11750 -1372503300000,0.12.20 -1372503600000,0.12.20 +1372503300000,0.13.00 +1372503600000,0.13.00 1372503900000,0.11550 1372504200000,0.11650 -1372504500000,0.12.20 -1372504800000,0.12.20 +1372504500000,0.13.00 +1372504800000,0.13.00 1372505100000,0.11650 1372505400000,0.11850 1372505700000,0.12050 -1372506000000,0.12.20 -1372506300000,0.12.20 -1372506600000,0.12.20 +1372506000000,0.13.00 +1372506300000,0.13.00 +1372506600000,0.13.00 1372506900000,0.11450 1372507200000,0.11450 -1372507500000,0.12.20 -1372507800000,0.12.20 +1372507500000,0.13.00 +1372507800000,0.13.00 1372508100000,0.11450 1372508400000,0.11450 -1372508700000,0.12.20 -1372509000000,0.12.20 -1372509300000,0.12.20 +1372508700000,0.13.00 +1372509000000,0.13.00 +1372509300000,0.13.00 1372509600000,0.11850 1372509900000,0.12050 -1372510200000,0.12.20 -1372510500000,0.12.20 -1372510800000,0.12.20 +1372510200000,0.13.00 +1372510500000,0.13.00 +1372510800000,0.13.00 1372511100000,0.11150 1372511400000,0.10950 -1372511700000,0.12.20 +1372511700000,0.13.00 1372512000000,0.10900 -1372512300000,0.12.20 +1372512300000,0.13.00 1372512600000,0.11150 -1372512900000,0.12.20 -1372513200000,0.12.20 +1372512900000,0.13.00 +1372513200000,0.13.00 1372513500000,0.10900 1372513800000,0.10900 1372514100000,0.10850 @@ -6862,62 +6862,62 @@ 1372587900000,0.10900 1372588200000,0.10950 1372588500000,0.11050 -1372588800000,0.12.20 +1372588800000,0.13.00 1372589100000,0.11250 1372589400000,0.11450 -1372589700000,0.12.20 -1372590000000,0.12.20 +1372589700000,0.13.00 +1372590000000,0.13.00 1372590300000,0.11750 -1372590600000,0.12.20 +1372590600000,0.13.00 1372590900000,0.11850 -1372591200000,0.12.20 -1372591500000,0.12.20 +1372591200000,0.13.00 +1372591500000,0.13.00 1372591800000,0.11650 -1372592100000,0.12.20 +1372592100000,0.13.00 1372592400000,0.12000 1372592700000,0.12250 1372593000000,0.12000 1372593300000,0.12000 1372593600000,0.12000 -1372593900000,0.12.20 +1372593900000,0.13.00 1372594200000,0.11850 1372594500000,0.11850 -1372594800000,0.12.20 -1372595100000,0.12.20 +1372594800000,0.13.00 +1372595100000,0.13.00 1372595400000,0.11850 -1372595700000,0.12.20 +1372595700000,0.13.00 1372596000000,0.11450 1372596300000,0.11450 -1372596600000,0.12.20 +1372596600000,0.13.00 1372596900000,0.11650 1372597200000,0.11650 1372597500000,0.11750 1372597800000,0.12050 1372598100000,0.11450 -1372598400000,0.12.20 -1372598700000,0.12.20 -1372599000000,0.12.20 -1372599300000,0.12.20 -1372599600000,0.12.20 -1372599900000,0.12.20 -1372600200000,0.12.20 +1372598400000,0.13.00 +1372598700000,0.13.00 +1372599000000,0.13.00 +1372599300000,0.13.00 +1372599600000,0.13.00 +1372599900000,0.13.00 +1372600200000,0.13.00 1372600500000,0.11450 1372600800000,0.11450 1372601100000,0.11450 -1372601400000,0.12.20 -1372601700000,0.12.20 -1372602000000,0.12.20 -1372602300000,0.12.20 +1372601400000,0.13.00 +1372601700000,0.13.00 +1372602000000,0.13.00 +1372602300000,0.13.00 1372602600000,0.11250 -1372602900000,0.12.20 -1372603200000,0.12.20 -1372603500000,0.12.20 +1372602900000,0.13.00 +1372603200000,0.13.00 +1372603500000,0.13.00 1372603800000,0.10850 1372604100000,0.10500 1372604400000,0.10500 1372604700000,0.10650 -1372605000000,0.12.20 -1372605300000,0.12.20 +1372605000000,0.13.00 +1372605300000,0.13.00 1372605600000,0.10800 1372605900000,0.10450 1372606200000,0.10250 @@ -7120,4 +7120,4 @@ 1372665300000,0.09950 1372665600000,0.09950 1372665900000,0.09950 -1372666200000,0.12.20 +1372666200000,0.13.00 diff --git a/logisland-plugins/logisland-scripting-plugin/pom.xml b/logisland-plugins/logisland-scripting-plugin/pom.xml index 807759929..8924f9fb1 100644 --- a/logisland-plugins/logisland-scripting-plugin/pom.xml +++ b/logisland-plugins/logisland-scripting-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-scripting-plugin diff --git a/logisland-plugins/logisland-useragent-plugin/pom.xml b/logisland-plugins/logisland-useragent-plugin/pom.xml index edd99e753..ba3989c8f 100644 --- a/logisland-plugins/logisland-useragent-plugin/pom.xml +++ b/logisland-plugins/logisland-useragent-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-useragent-plugin diff --git a/logisland-plugins/logisland-web-analytics-plugin/pom.xml b/logisland-plugins/logisland-web-analytics-plugin/pom.xml index e6b883ce5..7602985d1 100644 --- a/logisland-plugins/logisland-web-analytics-plugin/pom.xml +++ b/logisland-plugins/logisland-web-analytics-plugin/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland-plugins - 0.12.2 + 0.13.0 logisland-web-analytics-plugin diff --git a/logisland-plugins/pom.xml b/logisland-plugins/pom.xml index f7bfe1bfb..5c8517bb1 100644 --- a/logisland-plugins/pom.xml +++ b/logisland-plugins/pom.xml @@ -22,7 +22,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 logisland-plugins diff --git a/logisland-services/logisland-cache_key_value-service-api/pom.xml b/logisland-services/logisland-cache_key_value-service-api/pom.xml index f855ea29b..79f81b088 100644 --- a/logisland-services/logisland-cache_key_value-service-api/pom.xml +++ b/logisland-services/logisland-cache_key_value-service-api/pom.xml @@ -7,7 +7,7 @@ logisland-services com.hurence.logisland - 0.12.2 + 0.13.0 logisland-cache_key_value-service-api diff --git a/logisland-services/logisland-elasticsearch-client-service-api/pom.xml b/logisland-services/logisland-elasticsearch-client-service-api/pom.xml index 74cdb21cd..fd3453783 100644 --- a/logisland-services/logisland-elasticsearch-client-service-api/pom.xml +++ b/logisland-services/logisland-elasticsearch-client-service-api/pom.xml @@ -21,7 +21,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 logisland-elasticsearch-client-service-api diff --git a/logisland-services/logisland-elasticsearch_2_4_0-client-service/pom.xml b/logisland-services/logisland-elasticsearch_2_4_0-client-service/pom.xml index 16409a3dc..2f45d6e60 100644 --- a/logisland-services/logisland-elasticsearch_2_4_0-client-service/pom.xml +++ b/logisland-services/logisland-elasticsearch_2_4_0-client-service/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 logisland-elasticsearch_2_4_0-client-service diff --git a/logisland-services/logisland-elasticsearch_5_4_0-client-service/pom.xml b/logisland-services/logisland-elasticsearch_5_4_0-client-service/pom.xml index 18608f4f8..9e60bb364 100644 --- a/logisland-services/logisland-elasticsearch_5_4_0-client-service/pom.xml +++ b/logisland-services/logisland-elasticsearch_5_4_0-client-service/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 logisland-elasticsearch_5_4_0-client-service diff --git a/logisland-services/logisland-hbase-client-service-api/pom.xml b/logisland-services/logisland-hbase-client-service-api/pom.xml index e2bf9519c..ef7987127 100644 --- a/logisland-services/logisland-hbase-client-service-api/pom.xml +++ b/logisland-services/logisland-hbase-client-service-api/pom.xml @@ -21,7 +21,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 logisland-hbase-client-service-api diff --git a/logisland-services/logisland-hbase_1_1_2-client-service/pom.xml b/logisland-services/logisland-hbase_1_1_2-client-service/pom.xml index 3604add8b..afd5fb6d3 100644 --- a/logisland-services/logisland-hbase_1_1_2-client-service/pom.xml +++ b/logisland-services/logisland-hbase_1_1_2-client-service/pom.xml @@ -19,7 +19,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 logisland-hbase_1_1_2-client-service diff --git a/logisland-services/logisland-ip-to-geo-service-api/pom.xml b/logisland-services/logisland-ip-to-geo-service-api/pom.xml index 9218d5f10..6a6cbc4ca 100644 --- a/logisland-services/logisland-ip-to-geo-service-api/pom.xml +++ b/logisland-services/logisland-ip-to-geo-service-api/pom.xml @@ -5,7 +5,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 4.0.0 diff --git a/logisland-services/logisland-ip-to-geo-service-maxmind/pom.xml b/logisland-services/logisland-ip-to-geo-service-maxmind/pom.xml index e0b1ac332..1697252b1 100644 --- a/logisland-services/logisland-ip-to-geo-service-maxmind/pom.xml +++ b/logisland-services/logisland-ip-to-geo-service-maxmind/pom.xml @@ -5,7 +5,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 diff --git a/logisland-services/logisland-redis_4-client-service/pom.xml b/logisland-services/logisland-redis_4-client-service/pom.xml index b8f128670..07b8c7156 100644 --- a/logisland-services/logisland-redis_4-client-service/pom.xml +++ b/logisland-services/logisland-redis_4-client-service/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 logisland-redis_4-client-service diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java index 3e47809b5..dd68e0ec1 100644 --- a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/service/RedisConnectionPool.java @@ -21,6 +21,8 @@ import com.hurence.logisland.controller.ControllerServiceInitializationContext; import com.hurence.logisland.redis.RedisType; import com.hurence.logisland.redis.util.RedisUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; @@ -31,6 +33,8 @@ public class RedisConnectionPool { private volatile RedisType redisType; private volatile JedisConnectionFactory connectionFactory; + private static Logger logger = LoggerFactory.getLogger(RedisConnectionPool.class); + public void init(final ControllerServiceInitializationContext context) { this.context = context; @@ -57,6 +61,7 @@ public RedisConnection getConnection() { if (connectionFactory == null) { synchronized (this) { if (connectionFactory == null) { + logger.info("creating Redis connection factory"); connectionFactory = RedisUtils.createConnectionFactory(context); } } diff --git a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java index 183796932..0cc336506 100644 --- a/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java +++ b/logisland-services/logisland-redis_4-client-service/src/main/java/com/hurence/logisland/redis/util/RedisUtils.java @@ -332,6 +332,7 @@ public static JedisConnectionFactory createConnectionFactory(final ControllerSer // need to call this to initialize the pool/connections connectionFactory.afterPropertiesSet(); + logger.info("done creating Connection factory"); return connectionFactory; } diff --git a/logisland-services/logisland-solr-client-service/logisland-solr-client-service-api/pom.xml b/logisland-services/logisland-solr-client-service/logisland-solr-client-service-api/pom.xml index 3d2fd1ff1..ae5569b89 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr-client-service-api/pom.xml +++ b/logisland-services/logisland-solr-client-service/logisland-solr-client-service-api/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-solr-client-service - 0.12.2 + 0.13.0 logisland-solr-client-service-api diff --git a/logisland-services/logisland-solr-client-service/logisland-solr-client-service-test/pom.xml b/logisland-services/logisland-solr-client-service/logisland-solr-client-service-test/pom.xml index d4d491172..43d9c24e1 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr-client-service-test/pom.xml +++ b/logisland-services/logisland-solr-client-service/logisland-solr-client-service-test/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-solr-client-service - 0.12.2 + 0.13.0 logisland-solr-client-service-test @@ -29,7 +29,7 @@ com.hurence.logisland logisland-solr-client-service-api - 0.12.2 + 0.13.0 org.apache.solr diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_5_5_5-client-service/pom.xml b/logisland-services/logisland-solr-client-service/logisland-solr_5_5_5-client-service/pom.xml index 521d6de95..a7b73c5b7 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_5_5_5-client-service/pom.xml +++ b/logisland-services/logisland-solr-client-service/logisland-solr_5_5_5-client-service/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-solr-client-service - 0.12.2 + 0.13.0 logisland-solr_5_5_5-client-service @@ -33,7 +33,7 @@ com.hurence.logisland logisland-solr-client-service-test - 0.12.2 + 0.13.0 test diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/pom.xml b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/pom.xml index c638a4572..7afe8120b 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/pom.xml +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_4_2-chronix-client-service/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-solr-client-service - 0.12.2 + 0.13.0 logisland-solr_6_4_2-chronix-client-service diff --git a/logisland-services/logisland-solr-client-service/logisland-solr_6_6_2-client-service/pom.xml b/logisland-services/logisland-solr-client-service/logisland-solr_6_6_2-client-service/pom.xml index 2828dfaad..4c5adbcf0 100644 --- a/logisland-services/logisland-solr-client-service/logisland-solr_6_6_2-client-service/pom.xml +++ b/logisland-services/logisland-solr-client-service/logisland-solr_6_6_2-client-service/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-solr-client-service - 0.12.2 + 0.13.0 @@ -30,12 +30,12 @@ com.hurence.logisland logisland-solr-client-service-api - 0.12.2 + 0.13.0 com.hurence.logisland logisland-solr-client-service-test - 0.12.2 + 0.13.0 test diff --git a/logisland-services/logisland-solr-client-service/pom.xml b/logisland-services/logisland-solr-client-service/pom.xml index 739aaf241..5d880e12a 100644 --- a/logisland-services/logisland-solr-client-service/pom.xml +++ b/logisland-services/logisland-solr-client-service/pom.xml @@ -7,7 +7,7 @@ com.hurence.logisland logisland-services - 0.12.2 + 0.13.0 logisland-solr-client-service diff --git a/logisland-services/pom.xml b/logisland-services/pom.xml index 71f406122..4700be5ee 100644 --- a/logisland-services/pom.xml +++ b/logisland-services/pom.xml @@ -6,7 +6,7 @@ com.hurence.logisland logisland - 0.12.2 + 0.13.0 pom diff --git a/pom.xml b/pom.xml index 6d7b3dbde..03de3b3b3 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 4.0.0 com.hurence.logisland logisland - 0.12.2 + 0.13.0 pom LogIsland is an event mining platform based on Kafka to handle a huge amount of data in realtime. From d70556309ef092e1f995d312c1c9770148cb8b5f Mon Sep 17 00:00:00 2001 From: oalam Date: Fri, 25 May 2018 15:58:40 +0200 Subject: [PATCH 34/35] update documentation and version to 0.13.0 --- README.rst | 53 +++++++++++++++++++++++++++++++++++++++++------------ ROADMAP.rst | 20 +++++++------------- 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/README.rst b/README.rst index 4d4a29608..9ffdad01e 100755 --- a/README.rst +++ b/README.rst @@ -16,6 +16,8 @@ chat with us on `gitter `_ **LogIsland is an event mining scalable platform designed to handle a high throughput of events.** +It is highly inspired from DataFlow programming tools such as Apache Nifi, but with a highly scalable architecture. + Event mining Workflow --------------------- @@ -49,18 +51,20 @@ to build from the source just clone source and package with maven git clone https://github.com/Hurence/logisland.git cd logisland - mvn install + mvn clean install the final package is available at `logisland-assembly/target/logisland-0.13.0-bin-hdp2.5.tar.gz` You can also download the `latest release build `_ +Quick start +----------- Local Setup ------------ -basically **logisland** depends on Kafka and Spark, you can deploy it on any linux server ++++++++++++ +Alternatively you can deploy **logisland** on any linux server from which Kafka and Spark are available -.. code-block:: +.. code-block:: sh # install Kafka 0.10.0.0 & start a zookeeper node + a broker curl -s http://apache.crihan.fr/dist/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz | tar -xz -C /usr/local/ @@ -72,15 +76,9 @@ basically **logisland** depends on Kafka and Spark, you can deploy it on any lin curl -s http://d3kbcqa49mib13.cloudfront.net/spark-2.1.0-bin-hadoop2.7.tgz | tar -xz -C /usr/local/ export SPARK_HOME=/usr/local/spark-2.1.0-bin-hadoop2.7 -<<<<<<< HEAD # install Logisland 0.13.0 curl -s https://github.com/Hurence/logisland/releases/download/v0.10.0/logisland-0.13.0-bin-hdp2.5.tar.gz | tar -xz -C /usr/local/ cd /usr/local/logisland-0.13.0 -======= - # install Logisland 0.11.0 - curl -s https://github.com/Hurence/logisland/releases/download/v0.11.0/logisland-0.11.0-bin-hdp2.5.tar.gz | tar -xz -C /usr/local/ - cd /usr/local/logisland-0.11.0 ->>>>>>> v0.13.0 # launch a logisland job bin/logisland.sh --conf conf/index-apache-logs.yml @@ -88,6 +86,33 @@ basically **logisland** depends on Kafka and Spark, you can deploy it on any lin you can find some **logisland** job configuration samples under `$LOGISLAND_HOME/conf` folder +Docker setup +++++++++++++ +The easiest way to start is the launch a docker compose stack + +.. code-block:: sh + + # launch logisland environment + cd /tmp + curl -s https://raw.githubusercontent.com/Hurence/logisland/master/logisland-framework/logisland-resources/src/main/resources/conf/docker-compose.yml > docker-compose.yml + docker-compose up + + # sample execution of a logisland job + docker exec -i -t logisland conf/index-apache-logs.yml + + +Hadoop distribution setup ++++++++++++++++++++++++++ +Launching logisland streaming apps is just easy as unarchiving logisland distribution on an edge node, editing a config with YARN parameters and submitting job. + +.. code-block:: sh + + # install Logisland 0.13.0 + curl -s https://github.com/Hurence/logisland/releases/download/v0.10.0/logisland-0.13.0-bin-hdp2.5.tar.gz | tar -xz -C /usr/local/ + cd /usr/local/logisland-0.13.0 + bin/logisland.sh --conf conf/index-apache-logs.yml + + Start a stream processing job ----------------------------- @@ -113,7 +138,7 @@ The first part is the `ProcessingEngine` configuration (here a Spark streaming e documentation: Index some apache logs with logisland configuration: spark.app.name: IndexApacheLogsDemo - spark.master: local[4] + spark.master: yarn-cluster spark.driver.memory: 1G spark.driver.cores: 1 spark.executor.memory: 2G @@ -210,7 +235,11 @@ Once you've edited your configuration file, you can submit it to execution engin .. code-block:: bash - bin/process-stream.sh -conf conf/job-configuration.yml + bin/logisland.sh -conf conf/job-configuration.yml + + +You should jump to the `tutorials section `_ of the documentation. +And then continue with `components documentation`_ Contributing ------------ diff --git a/ROADMAP.rst b/ROADMAP.rst index e1ae5ad72..fe19c04a1 100755 --- a/ROADMAP.rst +++ b/ROADMAP.rst @@ -1,27 +1,21 @@ -Log Island Roadmap and future work -==== +Logisland Roadmap and future work +================================= follow the roadmap through `github issues `_ too -GUI ----- - -- manage visualy the streams -- search kafka topics Engine ----- +------ -- Add KafkaStreamEngine -- Add autoscaler component -- move offsets management from Zookeeper to Kafka +- Dynamic config via REST API +- Autoscaler - whole integration test framework (file => kafka topic => process stream => es => query) Components ----- +---------- +- Alert & threshold managment - add EventField mutator based on EL -- add an HDFS bulk loader - add a generic parser that infers a Regexp from a list (Streaming Deep Learning) From c9f2bd56cd9d0aa070d9e9d1ca4c94ad690f8d11 Mon Sep 17 00:00:00 2001 From: oalam Date: Fri, 25 May 2018 17:39:55 +0200 Subject: [PATCH 35/35] update documentation and version to 0.13.0 --- logisland-documentation/conf.py | 2 +- logisland-documentation/developer.rst | 8 +- logisland-documentation/tutorials/index.rst | 6 +- .../src/main/resources/docs/developer.rst | 8 +- .../main/resources/docs/tutorials/index.rst | 6 +- .../docs/tutorials/prerequisites.rst | 138 +++++++------- .../docs/tutorials/store-to-redis.rst | 180 ++++++++++++++++++ 7 files changed, 268 insertions(+), 80 deletions(-) create mode 100644 logisland-framework/logisland-resources/src/main/resources/docs/tutorials/store-to-redis.rst diff --git a/logisland-documentation/conf.py b/logisland-documentation/conf.py index 6b6a30609..00338dfd8 100644 --- a/logisland-documentation/conf.py +++ b/logisland-documentation/conf.py @@ -21,7 +21,7 @@ #sys.path.insert(0, os.path.abspath('.')) -from recommonmark.parser import CommonMarkParser +#from recommonmark.parser import CommonMarkParser source_parsers = { '.md': CommonMarkParser, diff --git a/logisland-documentation/developer.rst b/logisland-documentation/developer.rst index 65c0fc64c..76ffccd5c 100644 --- a/logisland-documentation/developer.rst +++ b/logisland-documentation/developer.rst @@ -204,14 +204,12 @@ to release artifacts (if you're allowed to), follow this guide `release to OSS S .. code-block:: sh - mvn versions:set -DnewVersion=0.13.0 + ./update-version.sh -o 0.13.0 -n 14.4 mvn license:format mvn test - mvn -DperformRelease=true clean deploy + mvn -DperformRelease=true clean deploy -Phdp2.5 mvn versions:commit - git tag -a v0.13.0 -m "new logisland release 0.13.0" - git push origin v0.13.0 follow the staging procedure in `oss.sonatype.org `_ or read `Sonatype book `_ @@ -235,7 +233,7 @@ Building the image .. code-block:: sh # build logisland - mvn clean install -DskipTests -Pdocker -Dhdp=2.4 + mvn clean install -DskipTests -Pdocker -Dhdp2.5 # verify image build docker images diff --git a/logisland-documentation/tutorials/index.rst b/logisland-documentation/tutorials/index.rst index 269c82959..a9f443d19 100644 --- a/logisland-documentation/tutorials/index.rst +++ b/logisland-documentation/tutorials/index.rst @@ -32,4 +32,8 @@ Contents: indexing-bro-events indexing-netflow-events indexing-network-packets - + generate_unique_ids + index-blockchain-transactions + index-excel-spreadsheets + mqtt-to-historian + integrate-kafka-connect diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst b/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst index 65c0fc64c..76ffccd5c 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/developer.rst @@ -204,14 +204,12 @@ to release artifacts (if you're allowed to), follow this guide `release to OSS S .. code-block:: sh - mvn versions:set -DnewVersion=0.13.0 + ./update-version.sh -o 0.13.0 -n 14.4 mvn license:format mvn test - mvn -DperformRelease=true clean deploy + mvn -DperformRelease=true clean deploy -Phdp2.5 mvn versions:commit - git tag -a v0.13.0 -m "new logisland release 0.13.0" - git push origin v0.13.0 follow the staging procedure in `oss.sonatype.org `_ or read `Sonatype book `_ @@ -235,7 +233,7 @@ Building the image .. code-block:: sh # build logisland - mvn clean install -DskipTests -Pdocker -Dhdp=2.4 + mvn clean install -DskipTests -Pdocker -Dhdp2.5 # verify image build docker images diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst index 269c82959..a9f443d19 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/index.rst @@ -32,4 +32,8 @@ Contents: indexing-bro-events indexing-netflow-events indexing-network-packets - + generate_unique_ids + index-blockchain-transactions + index-excel-spreadsheets + mqtt-to-historian + integrate-kafka-connect diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst index 3d07f331b..61c9995ae 100644 --- a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/prerequisites.rst @@ -15,79 +15,83 @@ To facilitate integration testing and to easily run tutorials, you can create a .. code-block:: yaml - # Zookeeper container 172.17.0.1 - zookeeper: - image: hurence/zookeeper - hostname: zookeeper - container_name: zookeeper - ports: - - "2181:2181" - - # Kafka container - kafka: - image: hurence/kafka - hostname: kafka - container_name: kafka - links: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_ADVERTISED_PORT: 9092 - KAFKA_ADVERTISED_HOST_NAME: sandbox - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_JMX_PORT: 7071 - - # ES container - elasticsearch: - environment: - - ES_JAVA_OPT="-Xms1G -Xmx1G" - - cluster.name=es-logisland - - http.host=0.0.0.0 - - transport.host=0.0.0.0 - - xpack.security.enabled=false - hostname: elasticsearch - container_name: elasticsearch - image: 'docker.elastic.co/elasticsearch/elasticsearch:5.4.0' - ports: - - '9200:9200' - - '9300:9300' - - # Kibana container - kibana: - environment: - - 'ELASTICSEARCH_URL=http://elasticsearch:9200' - image: 'docker.elastic.co/kibana/kibana:5.4.0' - container_name: kibana - links: - - elasticsearch - ports: - - '5601:5601' - - # Logisland container : does nothing but launching - logisland: - image: hurence/logisland - command: tail -f bin/logisland.sh - #command: bin/logisland.sh --conf /conf/index-apache-logs.yml - links: - - zookeeper - - kafka - - elasticsearch - ports: - - "4050:4050" - volumes: - - ./conf/logisland:/conf - - ./data/logisland:/data - container_name: logisland - extra_hosts: - - "sandbox:172.17.0.1" + version: "2" + services: + + zookeeper: + container_name: zookeeper + image: hurence/zookeeper + hostname: zookeeper + ports: + - "2181:2181" + + kafka: + container_name: kafka + image: hurence/kafka + hostname: kafka + links: + - zookeeper + ports: + - "9092:9092" + environment: + KAFKA_ADVERTISED_PORT: 9092 + KAFKA_ADVERTISED_HOST_NAME: sandbox + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_JMX_PORT: 7071 + + # ES container + elasticsearch: + container_name: elasticsearch + environment: + - ES_JAVA_OPT="-Xms1G -Xmx1G" + - cluster.name=es-logisland + - http.host=0.0.0.0 + - transport.host=0.0.0.0 + - xpack.security.enabled=false + hostname: elasticsearch + container_name: elasticsearch + image: 'docker.elastic.co/elasticsearch/elasticsearch:5.4.0' + ports: + - '9200:9200' + - '9300:9300' + + # Kibana container + kibana: + container_name: kibana + environment: + - 'ELASTICSEARCH_URL=http://elasticsearch:9200' + image: 'docker.elastic.co/kibana/kibana:5.4.0' + container_name: kibana + links: + - elasticsearch + ports: + - '5601:5601' + + # Logisland container : does nothing but launching + logisland: + container_name: logisland + image: hurence/logisland:0.13.0 + command: tail -f bin/logisland.sh + #command: bin/logisland.sh --conf /conf/index-apache-logs.yml + links: + - zookeeper + - kafka + - elasticsearch + - redis + ports: + - "4050:4050" + volumes: + - ./conf/logisland:/conf + - ./data/logisland:/data + container_name: logisland + extra_hosts: + - "sandbox:172.17.0.1" redis: container_name: redis image: 'redis:latest' ports: - '6379:6379' - network_mode: bridge Once you have this file you can run a `docker-compose` command to launch all the needed services (zookeeper, kafka, es, kibana and logisland) diff --git a/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/store-to-redis.rst b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/store-to-redis.rst new file mode 100644 index 000000000..f7e69291a --- /dev/null +++ b/logisland-framework/logisland-resources/src/main/resources/docs/tutorials/store-to-redis.rst @@ -0,0 +1,180 @@ +Store Apache logs to Redis K/V store +==================================== + +In the following getting started tutorial we'll drive you through the process of Apache log mining with LogIsland platform. + +.. note:: + + Be sure to know of to launch a logisland Docker environment by reading the `prerequisites <./prerequisites.html>`_ section + +Note, it is possible to store data in different datastores. In this tutorial, we will see the case of Redis, if you need more in-depth explanations you can read the previous tutorial on indexing apache logs to elasticsearch or solr : `index-apache-logs.html`_ . + +1. Logisland job setup +---------------------- +The logisland job for this tutorial is already packaged in the tar.gz assembly and you can find it here : + +.. code-block:: sh + + docker exec -i -t logisland vim conf/store-to-redis.yml + +We will start by explaining each part of the config file. + +The `controllerServiceConfigurations` part is here to define all services that be shared by processors within the whole job, here a Redis KV cache service that will be used later in the ``BulkPut`` processor. + +.. code-block:: yaml + + - controllerService: datastore_service + component: com.hurence.logisland.redis.service.RedisKeyValueCacheService + type: service + documentation: redis datastore service + configuration: + connection.string: localhost:6379 + redis.mode: standalone + database.index: 0 + communication.timeout: 10 seconds + pool.max.total: 8 + pool.max.idle: 8 + pool.min.idle: 0 + pool.block.when.exhausted: true + pool.max.wait.time: 10 seconds + pool.min.evictable.idle.time: 60 seconds + pool.time.between.eviction.runs: 30 seconds + pool.num.tests.per.eviction.run: -1 + pool.test.on.create: false + pool.test.on.borrow: false + pool.test.on.return: false + pool.test.while.idle: true + record.recordSerializer: com.hurence.logisland.serializer.JsonSerializer + + +Here the stream will read all the logs sent in ``logisland_raw`` topic and push the processing output into ``logisland_events`` topic. + +.. note:: + + We want to specify an Avro output schema to validate our ouput records (and force their types accordingly). + It's really for other streams to rely on a schema when processing records from a topic. + +We can define some serializers to marshall all records from and to a topic. + +.. code-block:: yaml + + - stream: parsing_stream + component: com.hurence.logisland.stream.spark.KafkaRecordStreamParallelProcessing + type: stream + documentation: a processor that converts raw apache logs into structured log records + configuration: + kafka.input.topics: logisland_raw + kafka.output.topics: logisland_events + kafka.error.topics: logisland_errors + kafka.input.topics.serializer: none + kafka.output.topics.serializer: com.hurence.logisland.serializer.KryoSerializer + kafka.error.topics.serializer: com.hurence.logisland.serializer.JsonSerializer + kafka.metadata.broker.list: sandbox:9092 + kafka.zookeeper.quorum: sandbox:2181 + kafka.topic.autoCreate: true + kafka.topic.default.partitions: 4 + kafka.topic.default.replicationFactor: 1 + +Within this stream a ``SplitText`` processor takes a log line as a String and computes a ``Record`` as a sequence of fields. + +.. code-block:: yaml + + # parse apache logs + - processor: apache_parser + component: com.hurence.logisland.processor.SplitText + type: parser + documentation: a parser that produce events from an apache log REGEX + configuration: + value.regex: (\S+)\s+(\S+)\s+(\S+)\s+\[([\w:\/]+\s[+\-]\d{4})\]\s+"(\S+)\s+(\S+)\s*(\S*)"\s+(\S+)\s+(\S+) + value.fields: src_ip,identd,user,record_time,http_method,http_query,http_version,http_status,bytes_out + +This stream will process log entries as soon as they will be queued into `logisland_raw` Kafka topics, each log will +be parsed as an event which will be pushed back to Kafka in the ``logisland_events`` topic. + +The second processor will handle ``Records`` produced by the ``SplitText`` to index them into datastore previously defined (Redis) + +.. code-block:: yaml + + # all the parsed records are added to datastore by bulk + - processor: datastore_publisher + component: com.hurence.logisland.processor.datastore.BulkPut + type: processor + documentation: "indexes processed events in datastore" + configuration: + datastore.client.service: datastore_service + + + +2. Launch the script +-------------------- +For this tutorial we will handle some apache logs with a splitText parser and send them to Elastiscearch +Connect a shell to your logisland container to launch the following streaming jobs. + +For ElasticSearch : + +.. code-block:: sh + + docker exec -i -t logisland bin/logisland.sh --conf conf/store-to-redis.yml + + +3. Inject some Apache logs into the system +------------------------------------------ +Now we're going to send some logs to ``logisland_raw`` Kafka topic. + +We could setup a logstash or flume agent to load some apache logs into a kafka topic +but there's a super useful tool in the Kafka ecosystem : `kafkacat `_, +a *generic command line non-JVM Apache Kafka producer and consumer* which can be easily installed. + + +If you don't have your own httpd logs available, you can use some freely available log files from +`NASA-HTTP `_ web site access: + +- `Jul 01 to Jul 31, ASCII format, 20.7 MB gzip compressed `_ +- `Aug 04 to Aug 31, ASCII format, 21.8 MB gzip compressed `_ + +Let's send the first 500000 lines of NASA http access over July 1995 to LogIsland with kafkacat to ``logisland_raw`` Kafka topic + +.. code-block:: sh + + cd /tmp + wget ftp://ita.ee.lbl.gov/traces/NASA_access_log_Jul95.gz + gunzip NASA_access_log_Jul95.gz + head -500000 NASA_access_log_Jul95 | kafkacat -b sandbox:9092 -t logisland_raw + + + +4. Inspect the logs +------------------- + +For this part of the tutorial we will use `redis-py a Python client for Redis `_. You can install it by following instructions given on `redis-py `_. + +To install redis-py, simply: + +.. code-block:: sh + + $ sudo pip install redis + + +Getting Started, check if you can connect with Redis + +.. code-block:: python + + >>> import redis + >>> r = redis.StrictRedis(host='localhost', port=6379, db=0) + >>> r.set('foo', 'bar') + >>> r.get('foo') + +Then we want to grab some logs that have been collected to Redis. We first find some keys with a pattern and get the json content of one + +.. code-block:: python + + >>> r.keys('1234*') +['123493eb-93df-4e57-a1c1-4a8e844fa92c', '123457d5-8ccc-4f0f-b4ba-d70967aa48eb', '12345e06-6d72-4ce8-8254-a7cc4bab5e31'] + + >>> r.get('123493eb-93df-4e57-a1c1-4a8e844fa92c') +'{\n "id" : "123493eb-93df-4e57-a1c1-4a8e844fa92c",\n "type" : "apache_log",\n "creationDate" : 804574829000,\n "fields" : {\n "src_ip" : "204.191.209.4",\n "record_id" : "123493eb-93df-4e57-a1c1-4a8e844fa92c",\n "http_method" : "GET",\n "http_query" : "/images/WORLD-logosmall.gif",\n "bytes_out" : "669",\n "identd" : "-",\n "http_version" : "HTTP/1.0",\n "record_raw_value" : "204.191.209.4 - - [01/Jul/1995:01:00:29 -0400] \\"GET /images/WORLD-logosmall.gif HTTP/1.0\\" 200 669",\n "http_status" : "200",\n "record_time" : 804574829000,\n "user" : "-",\n "record_type" : "apache_log"\n }\n}' + + >>> import json + >>> record = json.loads(r.get('123493eb-93df-4e57-a1c1-4a8e844fa92c')) + >>> record['fields']['bytes_out'] +