You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cg...@apache.org on 2023/02/28 17:49:24 UTC

[plc4x] branch feat/hop created (now 239d61d79d)

This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a change to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


      at 239d61d79d Apache Hop integration.

This branch includes the following new commits:

     new 13937d5314 Update repo.
     new d28ada7e35 Update local repo.
     new 10aa8e39ba New feature _lastitem.
     new 82bad92b17 Update local repo.
     new f2545f931f Update repo.
     new 3ff9b6761a Update repo.
     new 239d61d79d Apache Hop integration.

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[plc4x] 05/07: Update repo.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit f2545f931f649e51dcdd6acdeb46ab01ad436d23
Author: César García <ce...@ceos.com.ve>
AuthorDate: Wed Feb 22 20:02:32 2023 -0400

    Update repo.
---
 .../java/bacnetip/readwrite/BACnetVendorId.java    |  2 --
 .../java/s7/readwrite/S7VarPayloadDataItem.java    | 34 ++--------------------
 2 files changed, 3 insertions(+), 33 deletions(-)

diff --git a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
index 85246822a6..3ad63e9cba 100644
--- a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
+++ b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
@@ -1609,14 +1609,12 @@ public enum BACnetVendorId {
   KOMFORTIQ_INC((int) 1397, (int) 1397, (String) "Komfort IQ, Inc."),
   COOL_TERA_LIMITED((int) 1398, (int) 1398, (String) "CoolTera Limited"),
   HADRON_SOLUTIONS_SRLS((int) 1399, (int) 1399, (String) "Hadron Solutions S.r.l.s"),
-
   BITPOOL((int) 1401, (int) 1401, (String) "Bitpool"),
   SONICULLC((int) 1402, (int) 1402, (String) "Sonicu, LLC"),
   RISHABH_INSTRUMENTS_LIMITED((int) 1403, (int) 1403, (String) "Rishabh Instruments Limited"),
   THING_WAREHOUSELLC((int) 1404, (int) 1404, (String) "Thing Warehouse LLC"),
   INNOFRIENDS_GMBH((int) 1405, (int) 1405, (String) "Innofriends GmbH"),
   METRONICAKP_SPJ((int) 1406, (int) 1406, (String) "Metronic AKP Sp. J."),
-
   UNKNOWN_VENDOR((int) 0xFFFF, (int) 0xFFFF, (String) "Unknown");
   private static final Map<Integer, BACnetVendorId> map;
 
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
index 2ef8f4bb00..4483814eac 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
@@ -41,18 +41,13 @@ public class S7VarPayloadDataItem implements Message {
   protected final DataTransportErrorCode returnCode;
   protected final DataTransportSize transportSize;
   protected final byte[] data;
-  protected final Boolean hasNext;
 
   public S7VarPayloadDataItem(
-      DataTransportErrorCode returnCode,
-      DataTransportSize transportSize,
-      byte[] data,
-      Boolean hasNext) {
+      DataTransportErrorCode returnCode, DataTransportSize transportSize, byte[] data) {
     super();
     this.returnCode = returnCode;
     this.transportSize = transportSize;
     this.data = data;
-    this.hasNext = hasNext;
   }
 
   public DataTransportErrorCode getReturnCode() {
@@ -67,10 +62,6 @@ public class S7VarPayloadDataItem implements Message {
     return data;
   }
 
-  public Boolean getHasNext() {
-    return hasNext;
-  }
-
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
@@ -110,9 +101,6 @@ public class S7VarPayloadDataItem implements Message {
     // Array Field (data)
     writeByteArrayField("data", data, writeByteArray(writeBuffer, 8));
 
-    // Optional Field (hasNext) (Can be skipped, if the value is null)
-    writeOptionalField("hasNext", hasNext, writeBoolean(writeBuffer));
-
     // Padding Field (padding)
     writePaddingField(
         "padding",
@@ -148,17 +136,8 @@ public class S7VarPayloadDataItem implements Message {
       lengthInBits += 8 * data.length;
     }
 
-    // Optional Field (hasNext)
-    if (hasNext != null) {
-      lengthInBits += 1;
-    }
-
     // Padding Field (padding)
-<<<<<<< HEAD
     int _timesPadding = (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0));
-=======
-    int _timesPadding = (int) (((PADCOUNT(data, hasNext)) % (2)));
->>>>>>> fe65e60f40 (Test for S7VarPayloadItem.)
     while (_timesPadding-- > 0) {
       lengthInBits += 8;
     }
@@ -201,19 +180,13 @@ public class S7VarPayloadDataItem implements Message {
             Math.toIntExact(
                 ((transportSize.getSizeInBits()) ? CEIL((dataLength) / (8.0)) : dataLength)));
 
-<<<<<<< HEAD
     readPaddingField(
         readUnsignedShort(readBuffer, 8), (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)));
-=======
-    Boolean hasNext = readOptionalField("hasNext", readBoolean(readBuffer), (dataLength) < (-(1)));
-
-    readPaddingField(readUnsignedShort(readBuffer, 8), (int) (((PADCOUNT(data, hasNext)) % (2))));
->>>>>>> fe65e60f40 (Test for S7VarPayloadItem.)
 
     readBuffer.closeContext("S7VarPayloadDataItem");
     // Create the instance
     S7VarPayloadDataItem _s7VarPayloadDataItem;
-    _s7VarPayloadDataItem = new S7VarPayloadDataItem(returnCode, transportSize, data, hasNext);
+    _s7VarPayloadDataItem = new S7VarPayloadDataItem(returnCode, transportSize, data);
     return _s7VarPayloadDataItem;
   }
 
@@ -229,13 +202,12 @@ public class S7VarPayloadDataItem implements Message {
     return (getReturnCode() == that.getReturnCode())
         && (getTransportSize() == that.getTransportSize())
         && (getData() == that.getData())
-        && (getHasNext() == that.getHasNext())
         && true;
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(getReturnCode(), getTransportSize(), getData(), getHasNext());
+    return Objects.hash(getReturnCode(), getTransportSize(), getData());
   }
 
   @Override


[plc4x] 01/07: Update repo.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 13937d531453c72774ce809c41fccf201ee22079
Author: César García <ce...@ceos.com.ve>
AuthorDate: Thu Feb 16 11:08:53 2023 -0400

    Update repo.
---
 .../java/bacnetip/readwrite/BACnetVendorId.java    |  2 ++
 .../java/s7/readwrite/S7VarPayloadDataItem.java    | 36 +++++++++++++++++++---
 2 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
index 3ad63e9cba..85246822a6 100644
--- a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
+++ b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
@@ -1609,12 +1609,14 @@ public enum BACnetVendorId {
   KOMFORTIQ_INC((int) 1397, (int) 1397, (String) "Komfort IQ, Inc."),
   COOL_TERA_LIMITED((int) 1398, (int) 1398, (String) "CoolTera Limited"),
   HADRON_SOLUTIONS_SRLS((int) 1399, (int) 1399, (String) "Hadron Solutions S.r.l.s"),
+
   BITPOOL((int) 1401, (int) 1401, (String) "Bitpool"),
   SONICULLC((int) 1402, (int) 1402, (String) "Sonicu, LLC"),
   RISHABH_INSTRUMENTS_LIMITED((int) 1403, (int) 1403, (String) "Rishabh Instruments Limited"),
   THING_WAREHOUSELLC((int) 1404, (int) 1404, (String) "Thing Warehouse LLC"),
   INNOFRIENDS_GMBH((int) 1405, (int) 1405, (String) "Innofriends GmbH"),
   METRONICAKP_SPJ((int) 1406, (int) 1406, (String) "Metronic AKP Sp. J."),
+
   UNKNOWN_VENDOR((int) 0xFFFF, (int) 0xFFFF, (String) "Unknown");
   private static final Map<Integer, BACnetVendorId> map;
 
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
index 4483814eac..05ed37389e 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
@@ -41,13 +41,18 @@ public class S7VarPayloadDataItem implements Message {
   protected final DataTransportErrorCode returnCode;
   protected final DataTransportSize transportSize;
   protected final byte[] data;
+  protected final Boolean hasNext;
 
   public S7VarPayloadDataItem(
-      DataTransportErrorCode returnCode, DataTransportSize transportSize, byte[] data) {
+      DataTransportErrorCode returnCode,
+      DataTransportSize transportSize,
+      byte[] data,
+      Boolean hasNext) {
     super();
     this.returnCode = returnCode;
     this.transportSize = transportSize;
     this.data = data;
+    this.hasNext = hasNext;
   }
 
   public DataTransportErrorCode getReturnCode() {
@@ -62,6 +67,10 @@ public class S7VarPayloadDataItem implements Message {
     return data;
   }
 
+  public Boolean getHasNext() {
+    return hasNext;
+  }
+
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
     boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
@@ -101,10 +110,13 @@ public class S7VarPayloadDataItem implements Message {
     // Array Field (data)
     writeByteArrayField("data", data, writeByteArray(writeBuffer, 8));
 
+    // Optional Field (hasNext) (Can be skipped, if the value is null)
+    writeOptionalField("hasNext", hasNext, writeBoolean(writeBuffer));
+
     // Padding Field (padding)
     writePaddingField(
         "padding",
-        (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)),
+	(int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)),
         (short) 0x00,
         writeUnsignedShort(writeBuffer, 8));
 
@@ -136,8 +148,17 @@ public class S7VarPayloadDataItem implements Message {
       lengthInBits += 8 * data.length;
     }
 
+    // Optional Field (hasNext)
+    if (hasNext != null) {
+      lengthInBits += 1;
+    }
+
     // Padding Field (padding)
+<<<<<<< HEAD
     int _timesPadding = (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0));
+=======
+    int _timesPadding = (int) (((PADCOUNT(data, hasNext)) % (2)));
+>>>>>>> fe65e60f40 (Test for S7VarPayloadItem.)
     while (_timesPadding-- > 0) {
       lengthInBits += 8;
     }
@@ -180,13 +201,19 @@ public class S7VarPayloadDataItem implements Message {
             Math.toIntExact(
                 ((transportSize.getSizeInBits()) ? CEIL((dataLength) / (8.0)) : dataLength)));
 
+<<<<<<< HEAD
     readPaddingField(
         readUnsignedShort(readBuffer, 8), (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)));
+=======
+    Boolean hasNext = readOptionalField("hasNext", readBoolean(readBuffer), (dataLength) < (-(1)));
+
+    readPaddingField(readUnsignedShort(readBuffer, 8), (int) (((PADCOUNT(data, hasNext)) % (2))));
+>>>>>>> fe65e60f40 (Test for S7VarPayloadItem.)
 
     readBuffer.closeContext("S7VarPayloadDataItem");
     // Create the instance
     S7VarPayloadDataItem _s7VarPayloadDataItem;
-    _s7VarPayloadDataItem = new S7VarPayloadDataItem(returnCode, transportSize, data);
+    _s7VarPayloadDataItem = new S7VarPayloadDataItem(returnCode, transportSize, data, hasNext);
     return _s7VarPayloadDataItem;
   }
 
@@ -202,12 +229,13 @@ public class S7VarPayloadDataItem implements Message {
     return (getReturnCode() == that.getReturnCode())
         && (getTransportSize() == that.getTransportSize())
         && (getData() == that.getData())
+        && (getHasNext() == that.getHasNext())
         && true;
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(getReturnCode(), getTransportSize(), getData());
+    return Objects.hash(getReturnCode(), getTransportSize(), getData(), getHasNext());
   }
 
   @Override


[plc4x] 02/07: Update local repo.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit d28ada7e35d8e73dff867dd61d7f28c8398747c0
Author: César García <ce...@ceos.com.ve>
AuthorDate: Thu Feb 16 11:01:22 2023 -0400

    Update local repo.
---
 .../org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
index 05ed37389e..2ef8f4bb00 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
@@ -116,7 +116,7 @@ public class S7VarPayloadDataItem implements Message {
     // Padding Field (padding)
     writePaddingField(
         "padding",
-	(int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)),
+        (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)),
         (short) 0x00,
         writeUnsignedShort(writeBuffer, 8));
 


[plc4x] 07/07: Apache Hop integration.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 239d61d79d39873529d814cbbcf638f65f93da15
Author: César García <ce...@ceos.com.ve>
AuthorDate: Tue Feb 28 13:48:37 2023 -0400

    Apache Hop integration.
---
 .../apache-hop/plc4x-hop-actions/pom.xml           |  146 +++
 .../plc4x/hop/actions/ActionSampleMetaData.java    |   35 +
 .../plc4x/hop/actions/Plc4xCheckConnections.java   |  271 ++++
 .../hop/actions/Plc4xCheckConnectionsDialog.java   |  371 ++++++
 .../hop/actions/messages/messages_en_US.properties |   49 +
 .../src/main/resources/plc4x_toddy.svg             | 1306 ++++++++++++++++++++
 .../plc4x-hop-assemblies-action/pom.xml            |   82 ++
 .../src/assembly/assembly.xml                      |   52 +
 .../src/main/resources/version.xml                 |   20 +
 .../plc4x-hop-assemblies-metadata/pom.xml          |   82 ++
 .../src/assembly/assembly.xml                      |   69 ++
 .../src/main/resources/version.xml                 |   20 +
 .../plc4x-hop-assemblies-transform/pom.xml         |   82 ++
 .../src/assembly/assembly.xml                      |   52 +
 .../src/main/resources/version.xml                 |   20 +
 .../{ => apache-hop/plc4x-hop-assemblies}/pom.xml  |   59 +-
 .../apache-hop/plc4x-hop-metadata/pom.xml          |  129 ++
 .../apache/plc4x/hop/metadata/Plc4xConnection.java |   73 ++
 .../plc4x/hop/metadata/Plc4xConnectionEditor.java  |  148 +++
 .../metadata/messages/messages_en_US.properties    |   22 +
 .../src/main/resources/plc4x_toddy.svg             | 1306 ++++++++++++++++++++
 .../apache-hop/plc4x-hop-transformer/pom.xml       |  143 +++
 .../hop/transforms/plc4xevent/Plc4xEvent.java      |  346 ++++++
 .../hop/transforms/plc4xevent/Plc4xEventData.java  |   50 +
 .../transforms/plc4xevent/Plc4xEventDialog.java    |  663 ++++++++++
 .../hop/transforms/plc4xevent/Plc4xEventMeta.java  |  239 ++++
 .../plc4x/hop/transforms/plc4xinput/Plc4xRead.java |  446 +++++++
 .../hop/transforms/plc4xinput/Plc4xReadData.java   |   48 +
 .../hop/transforms/plc4xinput/Plc4xReadDialog.java |  600 +++++++++
 .../hop/transforms/plc4xinput/Plc4xReadMeta.java   |  308 +++++
 .../hop/transforms/plc4xoutput/Plc4xWrite.java     |  478 +++++++
 .../hop/transforms/plc4xoutput/Plc4xWriteData.java |   49 +
 .../transforms/plc4xoutput/Plc4xWriteDialog.java   |  674 ++++++++++
 .../hop/transforms/plc4xoutput/Plc4xWriteMeta.java |  310 +++++
 .../plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java  |  446 +++++++
 .../hop/transforms/plc4xsubs/Plc4xSubsData.java    |   49 +
 .../hop/transforms/plc4xsubs/Plc4xSubsDialog.java  |  601 +++++++++
 .../hop/transforms/plc4xsubs/Plc4xSubsMeta.java    |  310 +++++
 .../plc4x/hop/transforms/util/Plc4xDataType.java   |  115 ++
 .../hop/transforms/util/Plc4xGeneratorField.java   |  275 +++++
 .../plc4x/hop/transforms/util/Plc4xPlcField.java   |  148 +++
 .../transforms/util/Plc4xWrapperConnection.java    |   60 +
 .../plc4xevent/messages/messages_en_US.properties  |   69 ++
 .../plc4xevent/messages/messages_es_ES.properties  |   69 ++
 .../plc4xinput/messages/messages_en_US.properties  |   69 ++
 .../plc4xinput/messages/messages_es_ES.properties  |   69 ++
 .../plc4xoutput/messages/messages_en_US.properties |   69 ++
 .../plc4xoutput/messages/messages_es_ES.properties |   69 ++
 .../plc4xsubs/messages/messages_en_US.properties   |   69 ++
 .../plc4xsubs/messages/messages_es_ES.properties   |   69 ++
 .../src/main/resources/plc4x_action.svg            | 1306 ++++++++++++++++++++
 .../src/main/resources/plc4x_event.svg             |  822 ++++++++++++
 .../src/main/resources/plc4x_read.svg              |  813 ++++++++++++
 .../src/main/resources/plc4x_subs.svg              |  743 +++++++++++
 .../src/main/resources/plc4x_write.svg             |  810 ++++++++++++
 .../plc4x-hop-utils/hop-plc4x-grafana/pom.xml      |  138 +++
 .../hop/utils/transforms/grafana/GrafanaPost.java  |  589 +++++++++
 .../grafana/GrafanaPostArgumentField.java          |   70 ++
 .../utils/transforms/grafana/GrafanaPostData.java  |   66 +
 .../transforms/grafana/GrafanaPostDialog.java      | 1098 ++++++++++++++++
 .../grafana/GrafanaPostLoookupField.java           |   65 +
 .../utils/transforms/grafana/GrafanaPostMeta.java  |  425 +++++++
 .../utils/transforms/grafana/GrafanaPostQuery.java |   57 +
 .../transforms/grafana/GrafanaPostResultField.java |   90 ++
 .../src/main/resources/grafana.svg                 |  103 ++
 .../grafana/messages/messages_en_US.properties     |  138 +++
 .../{ => apache-hop/plc4x-hop-utils}/pom.xml       |   50 +-
 plc4j/integrations/apache-hop/pom.xml              |  251 ++++
 plc4j/integrations/pom.xml                         |    1 +
 .../protocols/ads/images/ads-statemachine.svg      |    1 +
 src/site/asciidoc/images/plc4x-architecture.png    |  Bin 0 -> 24761 bytes
 src/site/asciidoc/images/protocols-s7-osi.png      |  Bin 0 -> 49183 bytes
 72 files changed, 18868 insertions(+), 72 deletions(-)

diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-actions/pom.xml
new file mode 100644
index 0000000000..ee58270dbc
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/pom.xml
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4j-apache-hop</artifactId>
+        <version>0.11.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>plc4x-hop-action</artifactId>
+    <packaging>jar</packaging>
+    <name>PLC4J: Integrations: Apache Hop: Action</name>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.jboss.jandex</groupId>
+                <artifactId>jandex-maven-plugin</artifactId>
+                <version>1.0.8</version>
+                <executions>
+                    <execution>
+                        <id>make-index</id>
+                        <goals>
+                            <goal>jandex</goal>
+                        </goals>
+                        <!-- phase is 'process-classes by default' -->
+                        <configuration>
+                            <!-- Nothing needed here for simple cases -->
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <configuration>
+                    <ignoredDependencies>
+                        <dependency>org.apache.plc4x:plc4j-api:jar:${project.version}</dependency>                        
+                        <dependency>org.apache.plc4x:plc4j-spi:jar:${project.version}</dependency>
+                        <dependency>org.apache.plc4x:plc4j-driver-s7:jar:${project.version}</dependency>
+                        <dependency>org.apache.plc4x:plc4j-transport-tcp:jar:${project.version}</dependency> 
+                    </ignoredDependencies>
+                </configuration>
+            </plugin>                   
+        </plugins>
+    </build>    
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-core</artifactId>
+            <version>${hop.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>               
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-ui</artifactId>
+            <version>${hop.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.hop</groupId>
+                    <artifactId>hop-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.platform</groupId>
+            <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
+            <version>${org.eclipse.platform.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-s7</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-spi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-transport-tcp</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>plc4x-hop-metadata</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-engine</artifactId>
+            <version>${hop.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>               
+        </dependency>
+        <!--
+        <dependency>
+          <groupId>org.w3c</groupId>
+          <artifactId>dom</artifactId>
+          <version>2.3.0-jaxb-1.0.6</version>
+          <scope>provided</scope>
+        </dependency>        
+                -->
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/ActionSampleMetaData.java b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/ActionSampleMetaData.java
new file mode 100644
index 0000000000..ecaaf6efdf
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/ActionSampleMetaData.java
@@ -0,0 +1,35 @@
+/*
+ * 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 org.apache.plc4x.hop.actions;
+
+import org.apache.hop.metadata.api.HopMetadata;
+import org.apache.hop.metadata.api.HopMetadataBase;
+import org.apache.hop.metadata.api.IHopMetadata;
+
+/**
+ *
+ * @author cgarcia
+ */
+@HopMetadata(
+    key = "Xplc4xconnection",
+    name = "PLC4x Connection",
+    description = "A shared PLC4x connection to a PLC",
+    image = "plc4x_toddy.svg",
+    documentationUrl = "/metadata-types/neo4j/neo4j-connection.html")
+public class ActionSampleMetaData extends HopMetadataBase implements IHopMetadata {
+    
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java
new file mode 100644
index 0000000000..752890f7f2
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnections.java
@@ -0,0 +1,271 @@
+/*
+ * 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 org.apache.plc4x.hop.actions;
+
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.Result;
+import org.apache.hop.core.annotations.Action;
+import org.apache.hop.core.exception.HopXmlException;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.core.xml.XmlHandler;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.workflow.WorkflowMeta;
+import org.apache.hop.workflow.action.ActionBase;
+import org.apache.hop.workflow.action.IAction;
+
+
+import java.util.List;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.exception.HopException;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.w3c.dom.Node;
+
+
+@Action(
+    id = "CHECK_PLC4X_CONNECTIONS",
+    name = "i18n::Plc4xAction.Name",
+    description = "i18n::Plc4xAction.Description",
+    image = "plc4x_toddy.svg",
+    categoryDescription = "i18n:org.apache.hop.workflow:ActionCategory.Category.Conditions",
+    keywords = "i18n::Plc4xAction.keyword",
+    documentationUrl = "/workflow/actions/checkdbconnection.html")
+public class Plc4xCheckConnections extends ActionBase implements Cloneable, IAction {
+  private static final Class<?> PKG = Plc4xCheckConnections.class; // Needed by Translator
+
+  
+  private Plc4xConnection[] connections;  
+  
+  protected static final String[] unitTimeDesc =
+      new String[] {
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.UnitTimeMilliSecond.Label"),
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.UnitTimeSecond.Label"),
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.UnitTimeMinute.Label"),
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.UnitTimeHour.Label"),
+      };
+  protected static final String[] unitTimeCode =
+      new String[] {"millisecond", "second", "minute", "hour"};
+
+  public static final int UNIT_TIME_MILLI_SECOND = 0;
+  public static final int UNIT_TIME_SECOND = 1;
+  public static final int UNIT_TIME_MINUTE = 2;
+  public static final int UNIT_TIME_HOUR = 3;
+
+  private String[] waitfors;
+  private int[] waittimes;
+
+  private long timeStart;
+  private long now;  
+     
+  public Plc4xCheckConnections( String name) {
+    super(name, "");
+    //connections = null;
+    waitfors = null;
+    waittimes = null;
+  }
+
+  public Plc4xCheckConnections() {
+    this( "");
+  }
+  
+  public Object clone() {
+    Plc4xCheckConnections c = (Plc4xCheckConnections) super.clone();
+    return c;
+  }
+
+
+  public Plc4xConnection[] getConnections() {
+    return connections;
+  }
+
+  public void setConnections(Plc4xConnection[] connections) {
+    this.connections = connections;
+  }
+
+  public String[] getWaitfors() {
+    return waitfors;
+  }
+
+  public void setWaitfors(String[] waitfors) {
+    this.waitfors = waitfors;
+  }
+
+  public int[] getWaittimes() {
+    return waittimes;
+  }
+
+  public void setWaittimes(int[] waittimes) {
+    this.waittimes = waittimes;
+  }
+
+  public long getTimeStart() {
+    return timeStart;
+  }
+
+  public long getNow() {
+    return now;
+  }
+
+  private static String getWaitTimeCode(int i) {
+    if (i < 0 || i >= unitTimeCode.length) {
+      return unitTimeCode[0];
+    }
+    return unitTimeCode[i];
+  }
+
+  public static String getWaitTimeDesc(int i) {
+    if (i < 0 || i >= unitTimeDesc.length) {
+      return unitTimeDesc[0];
+    }
+    return unitTimeDesc[i];
+  }
+
+  public static int getWaitTimeByDesc(String tt) {
+    if (tt == null) {
+      return 0;
+    }
+
+    for (int i = 0; i < unitTimeDesc.length; i++) {
+      if (unitTimeDesc[i].equalsIgnoreCase(tt)) {
+        return i;
+      }
+    }
+
+    // If this fails, try to match using the code.
+    return getWaitTimeByCode(tt);
+  }
+
+  private static int getWaitTimeByCode(String tt) {
+    if (tt == null) {
+      return 0;
+    }
+
+    for (int i = 0; i < unitTimeCode.length; i++) {
+      if (unitTimeCode[i].equalsIgnoreCase(tt)) {
+        return i;
+      }
+    }
+    return 0;
+  }
+  
+  
+  
+  /**
+   *
+   * Save values to XML
+   *
+   * @return
+   */
+  @Override
+  public String getXml() {
+    StringBuilder xml = new StringBuilder(120);
+    xml.append(super.getXml());
+    xml.append("      <connections>").append(Const.CR);
+    if (connections != null) {
+      for (int i = 0; i < connections.length; i++) {
+        xml.append("        <connection>").append(Const.CR);
+        xml.append("          ")
+            .append(
+                XmlHandler.addTagValue(
+                    "name", connections[i] == null ? null : connections[i].getName()));
+        xml.append("          ").append(XmlHandler.addTagValue("waitfor", waitfors[i]));
+        xml.append("          ")
+            .append(XmlHandler.addTagValue("waittime", getWaitTimeCode(waittimes[i])));
+        xml.append("        </connection>").append(Const.CR);
+      }
+    }
+    xml.append("      </connections>").append(Const.CR);
+
+    return xml.toString();
+  }
+
+  /**
+   *
+   * Read the XML and get the values needed for the acton
+   *
+   * @param entrynode
+   * @param metadataProvider
+   * @throws HopXmlException
+   */
+  @Override
+  public void loadXml( Node entrynode, IHopMetadataProvider metadataProvider, IVariables variables ) throws HopXmlException {
+    try {
+      super.loadXml(entrynode);
+      Node fields = XmlHandler.getSubNode(entrynode, "connections");
+
+      // How many hosts?
+      int nrFields = XmlHandler.countNodes(fields, "connection");
+      connections = new Plc4xConnection[nrFields];
+      waitfors = new String[nrFields];
+      waittimes = new int[nrFields];
+      // Read them all...
+      for (int i = 0; i < nrFields; i++) {
+        Node fnode = XmlHandler.getSubNodeByNr(fields, "connection", i);
+        String dbname = XmlHandler.getTagValue(fnode, "name");
+        
+        //connections[i] = Plc4xConnection.loadDatabase(metadataProvider, dbname);
+        if (dbname != null) {
+            connections[i] = metadataProvider.getSerializer(Plc4xConnection.class).load(dbname);
+            waitfors[i] = XmlHandler.getTagValue(fnode, "waitfor");
+            waittimes[i] = getWaitTimeByCode(Const.NVL(XmlHandler.getTagValue(fnode, "waittime"), ""));
+        };
+      }
+    } catch (HopXmlException xe) {
+      throw new HopXmlException(
+          BaseMessages.getString(
+              PKG,
+              "Plc4xCheckConnections.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node",
+              xe.getMessage()));
+    } catch (HopException ex) {
+       throw new HopXmlException(
+          BaseMessages.getString(
+              PKG,
+              "Plc4xCheckConnections.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node",
+              ex.getMessage()));
+      }
+  }
+
+  /**
+   * Execute this action and return the result. In this case it means, just set the result boolean in the Result
+   * class.
+   *
+   * @param result The result of the previous execution
+   * @return The Result of the execution.
+   */
+  @Override
+  public Result execute( Result result, int nr ) {
+      result.setResult(true);
+      System.out.println("NR: " + nr);
+
+    return result;
+  }
+
+  /**
+   *
+   * Add checks to report warnings
+   *
+   * @param remarks
+   * @param workflowMeta
+   * @param variables
+   * @param metadataProvider
+   */
+  @Override
+  public void check( List<ICheckResult> remarks, WorkflowMeta workflowMeta, IVariables variables,
+                     IHopMetadataProvider metadataProvider ) {
+  }
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnectionsDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnectionsDialog.java
new file mode 100644
index 0000000000..791d3b8861
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/java/org/apache/plc4x/hop/actions/Plc4xCheckConnectionsDialog.java
@@ -0,0 +1,371 @@
+/*
+ * 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 org.apache.plc4x.hop.actions;
+
+import java.util.ArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.gui.WindowProperty;
+import org.apache.hop.ui.core.widget.ColumnInfo;
+import org.apache.hop.ui.core.widget.TableView;
+import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
+import org.apache.hop.ui.workflow.action.ActionDialog;
+import org.apache.hop.ui.workflow.dialog.WorkflowDialog;
+import org.apache.hop.workflow.WorkflowMeta;
+import org.apache.hop.workflow.action.IAction;
+import org.apache.hop.workflow.action.IActionDialog;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.*;
+
+import org.apache.hop.metadata.api.IHopMetadata;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
+import org.apache.hop.ui.core.metadata.MetadataManager;
+import org.apache.hop.ui.core.widget.MetaSelectionLine;
+
+
+public class Plc4xCheckConnectionsDialog extends ActionDialog implements IActionDialog {
+  private static final Class<?> PKG = Plc4xCheckConnectionsDialog.class; // Needed by Translator
+
+  private Shell shell;
+
+  private Text wName;
+
+  private Plc4xCheckConnections action;
+
+  private boolean changed;
+
+  private TableView wFields;
+  
+  private MetaSelectionLine<Plc4xConnection> wConnection;  
+
+  public Plc4xCheckConnectionsDialog(Shell parent, IAction action, WorkflowMeta workflowMeta, IVariables variables) {
+    super( parent, workflowMeta, variables );
+    this.action = (Plc4xCheckConnections) action;
+    if ( this.action.getName() == null ) {       
+      this.action.setName( BaseMessages.getString( PKG, "Plc4xCheckConnections.Label" ) );
+    }
+  }
+
+  @Override
+  public IAction open() {
+    Shell parent = getParent();
+
+    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.MIN | SWT.MAX | SWT.RESIZE);
+    props.setLook(shell);
+    WorkflowDialog.setShellImage(shell, action);
+
+    ModifyListener lsMod = (ModifyEvent e) -> action.setChanged();
+    changed = action.hasChanged();
+
+    FormLayout formLayout = new FormLayout();
+    formLayout.marginWidth = Const.FORM_MARGIN;
+    formLayout.marginHeight = Const.FORM_MARGIN;
+
+    shell.setLayout(formLayout);
+    shell.setText(BaseMessages.getString(PKG, "Plc4xCheckonnections.Title"));
+
+    int middle = props.getMiddlePct();
+    int margin = Const.MARGIN;
+
+    // Buttons at the bottom
+    //
+    Button wOk = new Button(shell, SWT.PUSH);
+    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
+    wOk.addListener(SWT.Selection, (Event e) -> ok());
+    Button wCancel = new Button(shell, SWT.PUSH);
+    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
+    wCancel.addListener(SWT.Selection, (Event e) -> cancel());
+    BaseTransformDialog.positionBottomButtons(shell, new Button[] {wOk, wCancel}, margin, null);
+
+    // Filename line
+    Label wlName = new Label(shell, SWT.RIGHT);
+    wlName.setText(BaseMessages.getString(PKG, "Plc4xCheckConnections.Name.Label"));
+    props.setLook(wlName);
+    FormData fdlName = new FormData();
+    fdlName.left = new FormAttachment(0, 0);
+    fdlName.right = new FormAttachment(middle, -margin);
+    fdlName.top = new FormAttachment(0, margin);
+    wlName.setLayoutData(fdlName);
+    wName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wName);
+    wName.addModifyListener(lsMod);
+    FormData fdName = new FormData();
+    fdName.left = new FormAttachment(middle, 0);
+    fdName.top = new FormAttachment(0, margin);
+    fdName.right = new FormAttachment(100, 0);
+    wName.setLayoutData(fdName);
+
+    Label wlFields = new Label(shell, SWT.NONE);
+    wlFields.setText(BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.Label"));
+    props.setLook(wlFields);
+    FormData fdlFields = new FormData();
+    fdlFields.left = new FormAttachment(0, 0);
+    // fdlFields.right= new FormAttachment(middle, -margin);
+    fdlFields.top = new FormAttachment(wName, 2 * margin);
+    wlFields.setLayoutData(fdlFields);
+    
+
+    wConnection =
+        new MetaSelectionLine<>(
+            variables,
+            metadataProvider,
+            Plc4xConnection.class,
+            shell,
+            SWT.NONE,
+            BaseMessages.getString(PKG, "Plc4xCheckConnections.Connection.Label"),
+            BaseMessages.getString(PKG, "Plc4xCheckConnections.Connection.Tooltip"));
+    props.setLook(wConnection);
+    FormData fdConnection = new FormData();
+    fdConnection.left = new FormAttachment(0, 0);
+    fdConnection.right = new FormAttachment(100, 0);
+    //fdConnection.top = new FormAttachment(wTransformName, margin);
+    wConnection.setLayoutData(fdConnection);
+
+    try {
+      wConnection.fillItems();
+    } catch (Exception e) {
+      new ErrorDialog(shell, "Error", "Error listing Cassandra connection metadata objects", e);
+    }    
+    
+
+    // Buttons to the right of the screen...
+    Button wbGetConnections = new Button(shell, SWT.PUSH | SWT.CENTER);
+    props.setLook(wbGetConnections);
+    wbGetConnections.setText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.GetConnections"));
+    wbGetConnections.setToolTipText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.GetConnections.Tooltip"));
+    FormData fdbGetConnections = new FormData();
+    fdbGetConnections.right = new FormAttachment(100, -margin);
+    fdbGetConnections.top = new FormAttachment(wlFields, margin);
+    wbGetConnections.setLayoutData(fdbGetConnections);
+
+    // Buttons to the right of the screen...
+    Button wbdSourceFileFolder = new Button(shell, SWT.PUSH | SWT.CENTER);
+    props.setLook(wbdSourceFileFolder);
+    wbdSourceFileFolder.setText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.DeleteEntry"));
+    wbdSourceFileFolder.setToolTipText(
+        BaseMessages.getString(PKG, "Plc4xCheckConnections.DeleteSourceFileButton.Label"));
+    FormData fdbdSourceFileFolder = new FormData();
+    fdbdSourceFileFolder.right = new FormAttachment(100, -margin);
+    fdbdSourceFileFolder.top = new FormAttachment(wbGetConnections, margin);
+    wbdSourceFileFolder.setLayoutData(fdbdSourceFileFolder);
+
+    int rows =
+        action.getConnections() == null
+            ? 1
+            : (action.getConnections().length == 0 ? 0 : action.getConnections().length);
+
+    final int FieldsRows = rows;
+
+    ColumnInfo[] colinf =
+        new ColumnInfo[] {
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.Argument.Label"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              this.getWorkflowMeta().getDatabaseNames(),
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.WaitFor.Label"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.WaitForTime.Label"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              Plc4xCheckConnections.unitTimeDesc,
+              false),
+        };
+
+    colinf[0].setToolTip(BaseMessages.getString(PKG, "Plc4xCheckConnections.Fields.Column"));
+    colinf[1].setUsingVariables(true);
+    colinf[1].setToolTip(BaseMessages.getString(PKG, "Plc4xCheckConnections.WaitFor.ToolTip"));
+
+    wFields =
+        new TableView(
+            variables,
+            shell,
+            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
+            colinf,
+            FieldsRows,
+            lsMod,
+            props);
+
+    FormData fdFields = new FormData();
+    fdFields.left = new FormAttachment(0, 0);
+    fdFields.top = new FormAttachment(wlFields, margin);
+    fdFields.right = new FormAttachment(wbGetConnections, -margin);
+    fdFields.bottom = new FormAttachment(wOk, -2 * margin);
+    wFields.setLayoutData(fdFields);
+
+    // Delete files from the list of files...
+    wbdSourceFileFolder.addListener(
+        SWT.Selection,
+        e -> {
+          int[] idx = wFields.getSelectionIndices();
+          wFields.remove(idx);
+          wFields.removeEmptyRows();
+          wFields.setRowNums();
+        });
+
+    // get connections...
+    wbGetConnections.addListener(SWT.Selection, e -> getConnections());
+
+    getData();
+
+    BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());
+
+    return action;
+  }
+
+  //  public void addDatabases() {
+  //    connections = workflowMeta.getDatabaseNames();
+  //  }
+
+  public void getConnections() {
+      /*
+    this.workflowMeta.getMetadataProvider().getMetadataClasses().forEach(
+           (c) -> {
+               System.out.println("Name: " + c.getName());
+           });
+    IHopMetadataProvider hmdp = this.workflowMeta.getMetadataProvider();
+      */
+    Class<IHopMetadata> metadataClass = null;
+
+    java.util.List<Plc4xConnection> databases = new ArrayList<>(); //this.workflowMeta.getMetadataProvider().
+      try {
+          metadataClass = metadataProvider.getMetadataClassForKey("plc4x-connection");
+            MetadataManager<IHopMetadata> manager = new MetadataManager<>(variables, metadataProvider, metadataClass, null);          
+            manager.getNames().forEach((s)->{
+              try {
+                  databases.add((Plc4xConnection) manager.loadElement(s));
+              } catch (HopException ex) {
+                  Logger.getLogger(Plc4xCheckConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+              }
+            });
+          
+      } catch (Exception ex) {
+          Logger.getLogger(Plc4xCheckConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+      }
+      
+     
+    wFields.removeAll();
+
+    for (Plc4xConnection ci : databases) {
+      if (ci != null) {
+        wFields.add(new String[] {ci.getName(), "0", Plc4xCheckConnections.unitTimeDesc[0]});
+      }
+    }
+    wFields.removeEmptyRows();
+    wFields.setRowNums();
+    wFields.optWidth(true);
+  }
+
+  public void dispose() {
+    WindowProperty winprop = new WindowProperty(shell);
+    props.setScreen(winprop);
+    shell.dispose();
+  }
+
+  /** Copy information from the meta-data input to the dialog fields. */
+  public void getData() {
+    if (action.getName() != null) {
+      wName.setText(action.getName());
+    }
+
+    if (action.getConnections() != null) {
+      for (int i = 0; i < action.getConnections().length; i++) {
+        TableItem ti = wFields.table.getItem(i);
+        if (action.getConnections()[i] != null) {
+          ti.setText(1, action.getConnections()[i].getName());
+          ti.setText(2, "" + Const.toInt(action.getWaitfors()[i], 0));
+          ti.setText(3, Plc4xCheckConnections.getWaitTimeDesc(action.getWaittimes()[i]));
+        }
+      }
+      wFields.setRowNums();
+      wFields.optWidth(true);
+    }
+    wName.selectAll();
+    wName.setFocus();
+  }
+
+  private void cancel() {
+    action.setChanged(changed);
+    action = null;
+    dispose();
+  }
+
+  private void ok() {
+    if (Utils.isEmpty(wName.getText())) {
+      MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
+      mb.setText(BaseMessages.getString(PKG, "System.TransformActionNameMissing.Title"));
+      mb.setMessage(BaseMessages.getString(PKG, "System.ActionNameMissing.Msg"));
+      mb.open();
+      return;
+    }
+    Class<IHopMetadata> metadataClass = null;
+    action.setName(wName.getText());
+
+    int nrItems = wFields.nrNonEmpty();
+    System.out.println("Numero de items: " + nrItems);
+    
+    Plc4xConnection[] connections = new Plc4xConnection[nrItems];
+    String[] waitfors = new String[nrItems];
+    int[] waittimes = new int[nrItems];
+    
+    
+      try {
+          metadataClass = metadataProvider.getMetadataClassForKey("plc4x-connection");
+      } catch (HopException ex) {
+          Logger.getLogger(Plc4xCheckConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+      }
+    MetadataManager<IHopMetadata> manager = new MetadataManager<>(variables, metadataProvider, metadataClass, null);        
+
+    for (int i = 0; i < nrItems; i++) {
+        String arg = wFields.getNonEmpty(i).getText(1);
+        Plc4xConnection conn;
+        try {
+            conn = (Plc4xConnection) manager.loadElement(arg);
+            if (conn != null) {
+                connections[i] = conn;
+                waitfors[i] = "" + Const.toInt(wFields.getNonEmpty(i).getText(2), 0);
+                waittimes[i] =
+                    Plc4xCheckConnections.getWaitTimeByDesc(wFields.getNonEmpty(i).getText(3));
+          }            
+        } catch (HopException ex) {
+            Logger.getLogger(Plc4xCheckConnectionsDialog.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+    }
+    action.setConnections(connections);
+    action.setWaitfors(waitfors);
+    action.setWaittimes(waittimes);
+
+    dispose();
+  }
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/org/apache/plc4x/hop/actions/messages/messages_en_US.properties b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/org/apache/plc4x/hop/actions/messages/messages_en_US.properties
new file mode 100644
index 0000000000..f13f6255eb
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/org/apache/plc4x/hop/actions/messages/messages_en_US.properties
@@ -0,0 +1,49 @@
+#
+#
+# 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.
+#
+#
+#
+Plc4xCheckConnections.Name=Check PLC connections
+Plc4xCheckConnections.Description=Check if we can connect to one or several databases.
+Plc4xCheckConnections.ConnectionOK=We can successfully connect to database [{0}] (connection [{1}])
+Plc4xCheckConnections.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node=Unable to load action of type 'Check Db connection' from XML node. Exception : {0}
+Plc4xCheckConnections.Exception=Cannot connect to database [{0}] (connection [{1}]). Exception : [{2}]
+Plc4xCheckConnections.Log.Info.ConnectionsInSuccess=[{0}] connections were successfully checked.
+Plc4xCheckConnections.Log.Info.ConnectionsInError=[{0}] connections were in error.
+Plc4xCheckConnections.UnitTimeMilliSecond.Label=Milliseconds
+Plc4xCheckConnections.UnitTimeSecond.Label=Seconds
+Plc4xCheckConnections.UnitTimeMinute.Label=Minutes
+Plc4xCheckConnections.UnitTimeHour.Label=Hours
+Plc4xCheckConnections.Connected=Connected to database [{0}] (connection [{1}])...
+Plc4xCheckConnections.Wait=We need to leave the connection open {0} {1} ...
+Plc4xCheckConnections.WaitTimeIsElapsed.Label=Wait time is elapsed for plc [{0}] (connection [{1}]). The connection will be closed ...
+Plc4xCheckConnections.Title=Check PLC connections
+Plc4xCheckConnections.Name.Default=Check PLC connections
+Plc4xCheckConnections.Name.Label=Action name
+Plc4xCheckConnections.Fields.Argument.Label=Connection
+Plc4xCheckConnections.Fields.Label=Connections
+Plc4xCheckConnections.Fields.Column=Connections
+Plc4xCheckConnections.Fields.WaitFor.Label=Wait
+Plc4xCheckConnections.Fields.WaitForTime.Label=Units of time
+Plc4xCheckConnections.WaitFor.ToolTip=After the connection was opened\nwait x (s, mn,..)
+Plc4xCheckConnections.DeleteSourceFileButton.Label=Remove selected items from the list.
+Plc4xCheckConnections.DeleteEntry=Delete
+Plc4xCheckConnections.GetConnections=Get connections
+Plc4xCheckConnections.GetConnections.Tooltip=Get available connections
+Plc4xCheckConnections.keyword=check,plc,database,connection
+Plc4xCheckConnections.Connection.Label
+Plc4xCheckConnections.Connection.Tooltip
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/plc4x_toddy.svg b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/plc4x_toddy.svg
new file mode 100644
index 0000000000..01694ecd5d
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-actions/src/main/resources/plc4x_toddy.svg
@@ -0,0 +1,1306 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="16"
+   height="16"
+   viewBox="0 0 16 16"
+   version="1.1"
+   id="svg5"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   sodipodi:docname="iconotoddyconplc2.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview7"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:document-units="px"
+     showgrid="false"
+     inkscape:zoom="101.5"
+     inkscape:cx="8.3201971"
+     inkscape:cy="4.5960591"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer52" />
+  <defs
+     id="defs2">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath78260">
+      <path
+         id="path78262"
+         style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="m 324.28906,352.80664 v 76.18359 h 20.58203 c -0.0462,-0.10335 -0.0829,-0.21015 -0.10742,-0.31835 -0.43816,-10e-6 -0.87632,-3e-5 -1.31445,0 -0.55264,8e-5 -1.10556,9.9e-4 -1.6582,0 -0.64072,-10e-4 -1.28115,0.007 -1.92188,0.002 -0.35799,-0.003 -0.73573,0.008 -1.09766,-0.0156 -0.003,0 0.007,-0.003 0.01,-0.004 0.0863,-0.0166 0.17347,-0.0342 0.25977,-0.0508 -0.2144,0.025 -0.42708,0.0642 -0.64063,0.0957 -0.49177,-0.0339 -0.98416,-0.0786 -1.47656,-0.10156 -0.0774,-0.004 0.30541,0.05 [...]
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath81911">
+      <path
+         id="path81913"
+         style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1.2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="m 395.09961,461.69922 v 42.96484 c 0.0746,-0.0504 0.14872,-0.10118 0.22266,-0.15234 0.93912,-0.64976 1.92039,-1.23589 2.85742,-1.88867 1.25063,-0.87125 2.48887,-1.7632 3.73242,-2.64453 1.05963,-0.76014 2.1181,-1.51916 3.17773,-2.2793 1.81669,-1.30323 3.50814,-1.82371 4.91016,-1.78711 0.85754,0.0224 1.60218,0.25706 2.20508,0.64258 0.23436,-0.0636 0.46865,-0.12661 0.70117,-0.19531 0.40305,-0.0456 0.80391,-0.11562 1.20898,-0.13672 0.21987,-0.0113 0.43985,-0.0169 0.66016,-0.0156  [...]
+    </clipPath>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer52"
+     inkscape:label="Capa 2">
+    <path
+       style="fill:#f5f5f5;stroke:#f5f5f5;stroke-width:0.9355px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+       d="M 5.1062072,5.7391588 6.8487514,7.1431509 8.7779937,7.0574466 9.7326615,6.3436554 10.276258,4.8805204 9.7326615,4.1109178 6.1778718,4.5009157 Z"
+       id="path1177" />
+  </g>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline;opacity:1"
+     sodipodi:insensitive="true">
+    <g
+       id="g1481"
+       transform="matrix(0.01850365,0,0,0.01824053,1.5356497,-1.2454454)">
+      <g
+         inkscape:label="Image"
+         id="g830"
+         style="display:none;opacity:1">
+        <image
+           width="696.6618"
+           height="985.07983"
+           preserveAspectRatio="none"
+           style="image-rendering:optimizeSpeed"
+           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAWGCAYAAAAcjY/0AAAACXBIWXMAADXTAAA10wEMIUN3AAAA B3RJTUUH5AMeFSExccvdCgAAIABJREFUeJzs3Xl83PV97/v3bxbNSCNrl7yMx+s4YGOMjTzYjLGd mIMzEGhZ0kKBljRtgSaFkJySntKQk5w4t7nNuU3vOb23hXNOcnqT9qa5N8staXFCSxsIDsaYGDBe sAy2ZSTbsrVY1jrL7/7xG1mLtcyMfrPq9eQxWJ75zff3ndHImvd8vosEAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [...]
+           id="image832" />
+      </g>
+      <g
+         id="layer45"
+         inkscape:label="bracitoplc 2"
+         style="display:inline">
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1712"
+           width="13.140327"
+           height="54.751366"
+           x="555.72638"
+           y="753.92633" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1714"
+           width="13.140317"
+           height="54.203869"
+           x="555.72638"
+           y="699.72247" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1721"
+           width="13.961588"
+           height="47.359943"
+           x="555.72638"
+           y="652.36255" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1723"
+           width="12.866549"
+           height="47.907455"
+           x="569.68799"
+           y="651.815" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1725"
+           width="13.687866"
+           height="54.203857"
+           x="568.8667"
+           y="699.72247" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1727"
+           width="13.687866"
+           height="54.751343"
+           x="568.8667"
+           y="753.92633" />
+      </g>
+      <g
+         id="layer47"
+         inkscape:label="bracitoplc 4"
+         style="display:inline">
+        <path
+           style="display:inline;fill:#acacb8;fill-opacity:0.992157;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path7828"
+           sodipodi:type="arc"
+           sodipodi:cx="575.69299"
+           sodipodi:cy="659.0755"
+           sodipodi:rx="2.4196913"
+           sodipodi:ry="2.564873"
+           sodipodi:start="0"
+           sodipodi:end="6.2519963"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 578.11268,659.0755 a 2.4196913,2.564873 0 0 1 -2.40082,2.5648 2.4196913,2.564873 0 0 1 -2.43826,-2.5248 2.4196913,2.564873 0 0 1 2.3628,-2.60417 2.4196913,2.564873 0 0 1 2.47511,2.48419" />
+        <path
+           style="display:inline;fill:#acacb8;fill-opacity:0.992157;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path7828-6"
+           sodipodi:type="arc"
+           sodipodi:cx="572.78937"
+           sodipodi:cy="803.04718"
+           sodipodi:rx="2.4196913"
+           sodipodi:ry="2.564873"
+           sodipodi:start="0"
+           sodipodi:end="6.2519963"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 575.20906,803.04718 a 2.4196913,2.564873 0 0 1 -2.40083,2.5648 2.4196913,2.564873 0 0 1 -2.43826,-2.5248 2.4196913,2.564873 0 0 1 2.3628,-2.60417 2.4196913,2.564873 0 0 1 2.47511,2.48419" />
+        <path
+           style="display:inline;fill:#acacb8;fill-opacity:0.992157;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path7828-6-9"
+           sodipodi:type="arc"
+           sodipodi:cx="561.36841"
+           sodipodi:cy="802.36963"
+           sodipodi:rx="2.4196913"
+           sodipodi:ry="2.564873"
+           sodipodi:start="0"
+           sodipodi:end="6.2519963"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 563.7881,802.36963 a 2.4196913,2.564873 0 0 1 -2.40083,2.56479 2.4196913,2.564873 0 0 1 -2.43826,-2.52479 2.4196913,2.564873 0 0 1 2.3628,-2.60417 2.4196913,2.564873 0 0 1 2.47511,2.48419" />
+      </g>
+      <g
+         id="layer46"
+         inkscape:label="bracitoplc 3"
+         style="display:inline">
+        <path
+           style="fill:#9d9eab;fill-opacity:0.996078;stroke:#432c33;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 580.77512,652.91004 9.44461,1.77942 0.13688,27.23881 -9.44461,4.92762 7.93895,1.09503 -1.09503,23.81684 -7.52831,0.27376 z"
+           id="path1763" />
+        <path
+           style="fill:#939d4d;fill-opacity:0.992157;stroke:#432c33;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 578.9957,808.13017 7.52831,-6.70704 v -14.78287 l -6.84392,-4.24323 7.80207,-0.13688 0.27376,-22.72182 -8.62334,-0.27376 z"
+           id="path1765" />
+        <rect
+           style="fill:#939d4d;fill-opacity:0.992157;stroke:#432c33;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1789"
+           width="8.6233397"
+           height="47.496811"
+           x="579.13257"
+           y="711.76776" />
+      </g>
+      <g
+         id="layer35"
+         inkscape:label="bracitoplc 1"
+         style="display:inline">
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1687"
+           width="138.26697"
+           height="114.77483"
+           x="425.67212"
+           y="619.44098" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1689"
+           width="42.706066"
+           height="10.40276"
+           x="439.65347"
+           y="734.21582" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1691"
+           width="42.706074"
+           height="11.497789"
+           x="482.35953"
+           y="734.21582" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1693"
+           width="41.611038"
+           height="96.909912"
+           x="439.65347"
+           y="744.61859" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1695"
+           width="43.801086"
+           height="95.81488"
+           x="481.26453"
+           y="745.71362" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1697"
+           width="13.414075"
+           height="106.49141"
+           x="525.06561"
+           y="735.03711" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1699"
+           width="15.877909"
+           height="102.93256"
+           x="538.47968"
+           y="735.03711" />
+      </g>
+      <g
+         id="layer48"
+         inkscape:label="bracitoplc 5"
+         style="display:inline">
+        <rect
+           style="fill:#6d9ed8;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14676"
+           width="31.552776"
+           height="10.646642"
+           x="435.73804"
+           y="632.60413" />
+        <rect
+           style="fill:#d3c9b7;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14678"
+           width="4.6458073"
+           height="5.4201088"
+           x="437.28662"
+           y="645.18652" />
+        <rect
+           style="fill:#f56a9e;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14680"
+           width="4.6458073"
+           height="16.647476"
+           x="437.28662"
+           y="655.25244" />
+        <rect
+           style="fill:#a6b27c;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14682"
+           width="4.8393826"
+           height="11.420943"
+           x="437.48019"
+           y="677.51361" />
+        <rect
+           style="fill:#191928;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14684"
+           width="7.9365878"
+           height="11.614519"
+           x="440.57742"
+           y="699.58118" />
+        <rect
+           style="fill:#191928;fill-opacity:1;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14686"
+           width="7.9365878"
+           height="11.808094"
+           x="440.771"
+           y="716.61578" />
+        <rect
+           style="fill:#9fbfc1;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14688"
+           width="8.7108889"
+           height="61.944099"
+           x="487.03549"
+           y="637.83063" />
+        <rect
+           style="fill:#72a2b1;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14690"
+           width="5.2265334"
+           height="11.227368"
+           x="487.42264"
+           y="715.45435" />
+        <rect
+           style="fill:#4e4d53;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14692"
+           width="7.1622868"
+           height="10.646642"
+           x="526.52484"
+           y="701.51691" />
+        <rect
+           style="fill:#4d4c52;fill-opacity:1;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14694"
+           width="6.775136"
+           height="9.4851904"
+           x="545.10809"
+           y="701.71051" />
+      </g>
+      <g
+         id="layer49"
+         inkscape:label="bracitoplc 6"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#432c33;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 480.6475,733.45686 479.48605,617.8924"
+           id="path33186" />
+        <path
+           style="fill:none;stroke:#422d34;stroke-width:3.4723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 521.10445,618.08707 0.96846,116.53014"
+           id="path33188" />
+        <path
+           style="fill:none;stroke:#432c33;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 541.8173,735.19904 0.38715,-116.72592"
+           id="path33190" />
+      </g>
+      <g
+         id="layer50"
+         inkscape:label="bracitoplc 7"
+         style="display:inline">
+        <rect
+           style="fill:#acacb8;fill-opacity:0.996078;stroke:#422d34;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect36118"
+           width="11.808094"
+           height="41.037968"
+           x="495.16565"
+           y="766.17108" />
+        <rect
+           style="fill:#acacb8;fill-opacity:1;stroke:#422d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect36120"
+           width="7.549437"
+           height="41.812267"
+           x="526.71844"
+           y="762.29956" />
+        <rect
+           style="fill:#acacb8;fill-opacity:1;stroke:#422d34;stroke-width:1.0613;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect36120-1"
+           width="7.549437"
+           height="47.095997"
+           x="541.91406"
+           y="762.04877" />
+        <rect
+           style="fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396"
+           width="3.7518525"
+           height="13.356678"
+           x="530.37915"
+           y="762.42542" />
+        <rect
+           style="fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:0.927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396-3"
+           width="3.7518525"
+           height="13.356678"
+           x="545.71167"
+           y="762.04877" />
+        <rect
+           style="display:inline;fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:0.927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396-3-0"
+           width="3.7518525"
+           height="13.356678"
+           x="528.73328"
+           y="786.12146"
+           inkscape:transform-center-x="-15.877896"
+           inkscape:transform-center-y="-23.679966" />
+        <rect
+           style="display:inline;fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:0.927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396-3-0-9"
+           width="3.7518525"
+           height="13.356678"
+           x="543.72144"
+           y="789.26965"
+           inkscape:transform-center-x="-15.877896"
+           inkscape:transform-center-y="-23.679966" />
+      </g>
+      <g
+         id="layer51"
+         inkscape:label="bracitoplc 8">
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="692.67322" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="688.22467" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="683.77612" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="679.32758" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="674.87903" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="670.43048" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="665.98193" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="661.53339" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="657.08484" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="652.63629" />
+        <rect
+           style="fill:#a6b27c;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="648.18774" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5-8"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="643.7392" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-7"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="693.17474" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="688.7262" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="684.27765" />
+        <rect
+           style="fill:#a5b17b;fill-opacity:1;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-8"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="679.8291" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-6"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="675.38055" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="670.93201" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="666.48346" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-0"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="662.03491" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-2"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="657.58636" />
+        <rect
+           style="fill:#a5b17b;fill-opacity:1;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="653.13782" />
+        <rect
+           style="fill:#a6b27c;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5-9"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="648.68927" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5-8-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="644.24072" />
+      </g>
+      <g
+         id="layer12"
+         inkscape:label="piernas1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 303.67005,695.87776 c 0,0 8.17142,20.65132 10.53645,31.4521 3.12408,14.26726 4.49063,28.95763 4.71781,43.56116 0.0425,2.73357 -0.62904,8.17755 -0.62904,8.17755 0,0 -13.5481,8.85046 -20.91565,12.10906 -2.21358,0.97904 -6.91946,2.20164 -6.91946,2.20164 0,0 -4.25625,-0.25265 -5.9759,0.78631 -1.86725,1.12814 -2.87795,3.35789 -3.77425,5.34685 -1.21716,2.70097 -2.89417,5.81127 -2.04439,8.64933 0.74456,2.48665 3.27563,4.32412 5.66138,5.34686 4.5353,1.94422 10.4375,0.95612 15.568 [...]
+           id="path45804"
+           sodipodi:nodetypes="csscscsssssscsccc" />
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 349.74737,702.16818 8.96385,72.02531 c 0,0 1.1094,6.66922 3.30248,9.5929 2.73079,3.64053 7.23484,4.9864 11.32275,6.13316 9.2398,2.59198 28.14963,-0.78631 28.14963,-0.78631 0,0 7.49833,-5.59383 8.80659,-10.06467 0.91855,-3.13907 0.53128,-6.91577 -1.10082,-9.75015 -1.00971,-1.75352 -2.94495,-3.00961 -4.87508,-3.617 -1.75081,-0.55096 -3.72827,-0.30668 -5.50412,0.15726 -4.80939,1.25645 -8.57615,5.12018 -13.20988,6.91947 -2.6787,1.04015 -5.47589,1.91194 -8.33481,2.20164 -3.708 [...]
+           id="path45806"
+           sodipodi:nodetypes="ccsscssssssscsssccc" />
+      </g>
+      <g
+         id="layer13"
+         inkscape:label="piernas2"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 296.59332,813.27273 c -1.65123,-1.49398 -2.14474,-1.41645 -2.3724,-5.09025 0,0 0.98475,-2.852 3.1587,-5.15134 l -0.80374,5.75966 0.72511,4.16741 z"
+           id="path50785"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 283.80717,811.40996 c -1.09189,-1.9407 -1.5845,-2.02376 -0.63475,-5.57997 0,0 1.83877,-2.39219 4.62994,-3.88295 l -2.58967,5.20704 -0.63462,4.18214 z"
+           id="path50785-5"
+           sodipodi:nodetypes="cccccc"
+           inkscape:transform-center-x="1.2111362"
+           inkscape:transform-center-y="0.54705423" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 406.70034,784.46583 c -0.51381,-2.16669 -0.20814,-2.56182 -3.31794,-4.53103 0,0 -2.97366,-0.51087 -6.03585,0.28661 l 5.43453,2.07014 3.30274,2.64292 z"
+           id="path50785-7"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 410.42874,777.16475 c -0.51381,-2.16669 -0.20814,-2.56182 -3.31794,-4.53103 0,0 -2.97366,-0.51087 -6.03585,0.28661 l 5.43453,2.07014 3.30274,2.64292 z"
+           id="path50785-7-0"
+           sodipodi:nodetypes="cccccc" />
+      </g>
+      <g
+         id="layer8"
+         inkscape:label="cola1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 266.43514,668.97904 c 0,0 -35.74884,34.3707 -51.59679,53.37598 -7.82609,9.38525 -14.93118,19.40333 -21.3504,29.8016 -5.01676,8.12647 -10.13103,16.36002 -13.34399,25.35359 -4.4804,12.54132 -6.29825,18.70817 -6.2272,32.02559 0.0413,7.73538 1.21731,22.30215 3.1136,29.8016 3.25519,12.87359 11.11999,38.25279 11.11999,38.25279 l 5.7824,33.35999 8.896,-16.4576 18.6816,48.48319 -6.2272,-42.70079 c 0,0 24.6715,21.78542 39.58719,28.0224 16.39477,6.85546 34.77126,7.94088 52.48639,9. [...]
+           id="path26360"
+           sodipodi:nodetypes="cssssscccccssssssssssssccsssssscsscc" />
+      </g>
+      <g
+         id="layer9"
+         inkscape:label="cola2"
+         style="display:inline">
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 352.28151,872.69739 c 0,0 7.44415,4.85397 10.2304,8.2288 1.81572,2.19929 3.29625,4.79864 4.0032,7.5616 1.30484,5.0997 0.91579,10.57227 0.2224,15.79039 -0.782,5.88496 -2.57092,11.661 -4.8928,17.1248 -2.31244,5.4416 -10.15408,16.28915 -10.15408,16.28915 0,0 30.85563,-3.23121 45.07087,-7.17076 13.95855,-3.86841 26.07208,-13.03889 40.03199,-16.90239 7.14369,-1.97707 14.72383,-1.79375 22.0176,-3.1136 7.09741,-1.28432 14.47159,-1.8928 21.12799,-4.6704 16.52917,-6.89734 32.61892 [...]
+           id="path30974"
+           sodipodi:nodetypes="csssscsssssssssscccccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 295.79193,876.25579 c 0,0 0.86685,2.27962 1.7792,5.3376 0.97587,3.27088 0.88529,6.84558 0.4448,10.23039 -0.93197,7.16143 -2.93554,14.374 -6.4496,20.6832 -4.29611,7.71331 -17.3472,20.01599 -17.3472,20.01599 -18.29893,-1.24213 -29.41982,-9.37518 -40.47679,-17.56959 l -5.1152,-3.5584 c 0,0 14.80505,-2.82191 19.3488,-4.8928 5.26384,-2.39908 10.73722,-4.88001 14.9008,-8.896 3.24121,-3.12632 6.06377,-7.02353 7.33919,-11.34239 1.82667,-6.18552 -0.2224,-15.7904 -0.2224,-15.7904 l [...]
+           id="path30976"
+           sodipodi:nodetypes="cssscccsssccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 173.91676,809.9806 c 0,0 6.53772,7.07804 10.8976,8.6736 7.10409,2.59984 22.68479,0.6672 22.68479,0.6672 l 20.01599,-6.0048 4.6704,15.3456 c 0,0 -2.92583,10.40351 -5.78239,14.9008 -2.36154,3.71794 -5.42281,7.16682 -9.1184,9.56319 -5.01672,3.25305 -10.99731,5.06684 -16.9024,6.0048 -5.5663,0.88415 -16.90239,-0.4448 -16.90239,-0.4448 l -3.1136,-9.5632 -5.1152,-19.12639 z"
+           id="path30978"
+           sodipodi:nodetypes="cscccssscccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 186.37115,764.83342 c 0,0 2.61472,6.12608 4.8928,8.45119 3.70148,3.77789 8.5302,6.61323 13.5664,8.2288 4.6723,1.49883 9.79676,1.60842 14.6784,1.112 4.83236,-0.49141 14.01119,-4.0032 14.01119,-4.0032 l 8.6736,-16.01279 c 0,0 -3.5584,0.2224 -7.784,0 -4.2256,-0.2224 -13.59615,1.11289 -19.57119,-1.5568 -3.9257,-1.75403 -7.03587,-5.26626 -9.3408,-8.896 -1.88504,-2.96851 -3.336,-10.008 -3.336,-10.008 z"
+           id="path30980"
+           sodipodi:nodetypes="csssccssscc" />
+      </g>
+      <g
+         id="layer11"
+         inkscape:label="cola3"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 213.28155,724.35663 c 1.31933,2.2684 3.06616,4.67929 7.8952,8.11759 5.15226,3.05071 10.30453,4.25128 15.45679,3.4472 -3.89287,-1.51625 -7.70178,-3.36833 -11.00879,-7.228 -4.65549,-4.19699 -3.58085,-7.57539 -4.448,-11.23119 z"
+           id="path40775"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 228.57154,708.45503 4.0588,5.6156 c 4.42518,4.67147 3.92725,4.15725 5.56,5.5044 4.59015,4.00912 10.45844,3.96209 16.0684,3.892 -3.57693,-2.13133 -9.02839,-4.26267 -10.7308,-6.394 -0.7713,-0.89985 -4.23439,-5.78656 -6.3384,-8.618 -1.12088,-1.50842 -3.3916,-4.5036 -3.3916,-4.5036 z"
+           id="path43167"
+           sodipodi:nodetypes="cccccscc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 242.24407,693.48199 c 1.31933,2.2684 3.06616,4.67929 7.8952,8.11759 5.15226,3.05071 10.30453,4.25128 15.45679,3.4472 -3.89287,-1.51625 -7.70178,-3.36833 -11.00879,-7.228 -4.65549,-4.19699 -3.58085,-7.57539 -4.448,-11.23119 z"
+           id="path40775-6"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:2.20844;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 255.92442,678.49794 c 0.76194,2.01697 1.84443,4.20907 5.23803,7.664 3.69756,3.18742 7.6251,4.88104 11.80188,4.95614 -2.41828,-1.84402 -5.67527,-3.8023 -7.8123,-7.38345 -3.16198,-4.04309 -1.89165,-6.61971 -2.1233,-9.6933 z"
+           id="path40775-3"
+           sodipodi:nodetypes="cccccc" />
+      </g>
+      <g
+         id="layer42"
+         inkscape:label="brazos"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 251.17189,538.75344 c -10.30848,7.4695 -21.90306,14.08159 -30.25013,22.85869 0.93037,8.39579 11.48929,15.65882 17.93107,23.40621 l 2.87445,15.05663 6.02265,7.93895 -3.8326,-27.78632 -9.03397,-12.31906 12.45593,-9.03397 z"
+           id="path106114"
+           sodipodi:nodetypes="ccccccccc" />
+      </g>
+      <g
+         id="layer43"
+         inkscape:label="brazos 1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 229.81886,606.09762 -1.64254,-3.8326 c 0,0 5.02138,-4.18315 7.93894,-3.83259 4.98818,0.59936 11.63467,9.58149 11.63467,9.58149 l -0.27376,10.67651 c 0,0 -16.95316,1.72375 -24.36435,-1.64254 -2.34995,-1.06739 -4.90487,-2.95792 -5.47514,-5.47513 -1.05857,-4.67255 4.79074,-13.55097 4.79074,-13.55097 0,0 4.88203,-7.88988 8.21271,-6.70704 2.76577,0.98222 1.77942,8.62334 1.77942,8.62334"
+           id="path108592"
+           sodipodi:nodetypes="ccaccaacac" />
+      </g>
+      <g
+         id="layer44"
+         inkscape:label="brazos 2"
+         style="display:none;opacity:1">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 410.96038,558.17441 c 0,0 10.7989,2.96383 12.96955,7.45265 5.79413,11.98202 -5.90405,39.48936 -5.90405,39.48936 0,0 4.54276,2.00875 6.19441,3.77472 1.76439,1.88651 3.63847,4.28954 3.58115,6.87192 -0.0314,1.41627 -2.12933,3.67793 -2.12933,3.67793 l -6.19441,3.87151 -10.84022,-43.45766 z"
+           id="path109612"
+           sodipodi:nodetypes="cacaacccc" />
+      </g>
+      <g
+         id="layer34"
+         inkscape:label="bracitoplc">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 404.95955,523.81479 c 0,0 7.56997,8.77919 10.84022,13.55028 14.94151,21.79874 39.87651,68.52566 39.87651,68.52566 h 13.55028 l 9.09804,0.38715 c 0,0 7.39921,5.48435 7.35586,9.48519 -0.0333,3.07341 -5.80726,7.16228 -5.80726,7.16228 h -6.38799 l -3.67793,-4.45223 c 0,0 6.30824,4.95935 5.22654,7.93659 -0.69013,1.8995 -3.80845,2.04074 -5.80726,1.74218 -4.14173,-0.61864 -10.45307,-6.96871 -10.45307,-6.96871 l -10.64664,-8.13017 -32.32708,-38.32791 z"
+           id="path1012"
+           sodipodi:nodetypes="cacccacccaacccc" />
+      </g>
+      <g
+         id="layer1-0"
+         inkscape:label="cuerpo1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:5.91496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 274.89137,499.14486 c 0,0 -12.68668,21.84593 -16.98413,33.65375 -5.48792,15.07878 -10.30664,30.83258 -11.00824,46.86363 -0.96332,22.01137 3.20928,44.28601 9.43563,65.42037 2.34659,7.96513 5.39306,16.00563 10.3792,22.64552 7.32006,9.7479 17.01388,17.99725 27.67784,23.90359 9.02196,4.9969 19.35356,7.67485 29.56498,9.12111 11.62794,1.64688 23.84306,2.2592 35.22635,-0.62904 8.81758,-2.23725 17.12692,-6.8826 24.21812,-12.58084 7.77455,-6.24736 13.87649,-14.51702 19.18579,-22.9 [...]
+           id="path948"
+           sodipodi:nodetypes="csssssssssssssccc" />
+      </g>
+      <g
+         id="layer2"
+         inkscape:label="cuerpo2"
+         style="display:inline">
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#67464f;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.992157"
+           d="m 254.76202,547.89562 c 0,0 6.01284,-0.6026 9.12112,0.62904 5.46166,2.16415 11.75134,1.01913 17.61317,0.62904 4.98734,-0.33189 14.78249,-2.51617 14.78249,-2.51617 0,0 -5.50262,-3.48901 -8.17755,-5.34685 -2.03224,-1.41147 -4.23666,-2.64338 -5.97589,-4.4033 -2.90413,-2.93868 -5.53439,-6.29888 -7.23399,-10.06467 -1.54841,-3.43081 -1.57944,-7.36261 -2.51617,-11.00824 -0.56983,-2.21771 -1.88712,-6.60494 -1.88712,-6.60494 z"
+           id="path4530"
+           sodipodi:nodetypes="csscsssscc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 249.10065,603.56584 c 0,0 16.74071,-2.54379 24.53264,-5.66138 5.5423,-2.2175 10.58478,-5.60871 15.41153,-9.12111 4.86456,-3.53992 13.5244,-11.9518 13.5244,-11.9518 0,0 -5.45796,-0.18457 -8.17755,0 -4.64498,0.31525 -9.18421,1.79268 -13.83892,1.88713 -6.63346,0.1346 -13.58445,0.39398 -19.81482,-1.88713 -4.31495,-1.57982 -11.32276,-7.86302 -11.32276,-7.86302 l -2.83069,12.26632 z"
+           id="path8585"
+           sodipodi:nodetypes="csscsssccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#6b4852;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 398.34087,536.88738 c 0,0 -4.40524,8.31835 -8.3348,10.3792 -6.46951,3.39293 -21.85922,1.5726 -21.85922,1.5726 l 7.86303,9.59289 c 0,0 8.07129,2.72998 12.26632,2.83069 4.42008,0.10611 9.28625,-0.0431 13.05262,-2.35891 2.51854,-1.54854 5.14278,-4.12726 5.34686,-7.07672 0.39362,-5.68889 -8.33481,-14.93975 -8.33481,-14.93975 z m -33.49649,42.77486"
+           id="path11029"
+           sodipodi:nodetypes="csccsssc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#6b4953;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           d="m 410.44993,571.95648 5.81864,17.92769 c 0,0 -3.66745,1.821 -5.66138,2.04439 -6.77165,0.75866 -13.92872,-0.065 -20.2866,-2.51617 -4.42369,-1.70546 -11.63728,-8.17754 -11.63728,-8.17754 l 11.00823,-0.47179 c 0,0 9.85612,-0.66712 14.15345,-2.83069 2.6519,-1.33514 6.60494,-5.97589 6.60494,-5.97589 z"
+           id="path11483"
+           sodipodi:nodetypes="ccssccsc" />
+      </g>
+      <g
+         id="layer3"
+         inkscape:label="cuerpo3"
+         style="display:inline">
+        <path
+           style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 339.60472,521.75027 -0.2224,71.39039 28.24479,25.35359 20.9056,-23.79679 c 0,0 1.15878,-20.29151 -0.4448,-30.2464 -1.53253,-9.51383 -8.6736,-27.57759 -8.6736,-27.57759 l -6.2272,-13.344 z"
+           id="path15367"
+           sodipodi:nodetypes="ccccsccc" />
+      </g>
+      <g
+         id="layer4"
+         inkscape:label="cuerpo4"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path17570-8"
+           sodipodi:type="arc"
+           sodipodi:cx="643.40137"
+           sodipodi:cy="363.7131"
+           sodipodi:rx="2.4238381"
+           sodipodi:ry="7.0955071"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 645.82521,363.7131 a 2.4238381,7.0955071 0 0 1 -2.38763,7.09472 2.4238381,7.0955071 0 0 1 -2.45897,-6.88273 2.4238381,7.0955071 0 0 1 2.31416,-7.30037 2.4238381,7.0955071 0 0 1 2.52811,6.66461 l -2.41951,0.42377 z"
+           transform="matrix(0.88968208,0.45658055,-0.54212471,0.84029804,0,0)" />
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path18346"
+           sodipodi:type="arc"
+           sodipodi:cx="383.65356"
+           sodipodi:cy="587.5553"
+           sodipodi:rx="1.4546597"
+           sodipodi:ry="1.3760295"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 385.10822,587.5553 a 1.4546597,1.3760295 0 0 1 -1.43292,1.37587 1.4546597,1.3760295 0 0 1 -1.47575,-1.33476 1.4546597,1.3760295 0 0 1 1.38884,-1.41576 1.4546597,1.3760295 0 0 1 1.51724,1.29247 l -1.45207,0.0822 z" />
+      </g>
+      <g
+         id="layer7"
+         inkscape:label="cuerpo5"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 291.89993,633.39505 c 0,0 3.89054,-1.12226 5.8936,-1.3344 3.17022,-0.33576 7.6637,-2.44906 9.5632,0.1112 0.71293,0.96093 -0.27054,2.49938 -1.0008,3.4472 -0.79147,1.02727 -2.05095,1.8274 -3.336,2.0016 -2.05856,0.27905 -6.0048,-1.668 -6.0048,-1.668 l -1.2232,-0.8896"
+           id="path22026"
+           sodipodi:nodetypes="csssscc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 277.44393,673.42704 c 0,0 0.96236,-3.33842 2.3352,-4.1144 1.25889,-0.71157 3.07074,-0.77887 4.5036,-0.5838 0.75716,0.10308 1.59414,0.64314 2.0572,1.251 0.94367,1.23875 0.34538,3.1816 -0.1112,4.6704 -0.54263,1.7694 -3.0024,4.6704 -3.0024,4.6704"
+           id="path22028"
+           sodipodi:nodetypes="cssssc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 335.82392,667.42224 c 0,0 0.76468,-4.17048 2.1128,-5.6712 0.94161,-1.04819 2.40947,-1.56667 3.7808,-1.8904 1.98413,-0.46839 4.12867,-0.4546 6.116,0 1.16358,0.26617 2.97066,0.39053 3.2248,1.5568 0.35872,1.64617 -1.74518,3.08621 -3.2248,3.892 -1.37686,0.74983 -4.6704,0.556 -4.6704,0.556"
+           id="path22030"
+           sodipodi:nodetypes="csssssc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 318.92152,681.21104 5.1152,-0.1112 c 0,0 1.84002,0.0173 2.0016,-0.6672 0.13248,-0.5612 -1.3344,-1.112 -1.3344,-1.112 l -3.2248,-1.112"
+           id="path22032"
+           sodipodi:nodetypes="ccscc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 380.41511,671.42544 8.2288,-4.448 c 0,0 2.08613,-0.60007 2.5576,0.1112 1.11458,1.68146 -0.9049,4.05547 -2.1128,5.6712 -0.44388,0.59375 -1.7792,1.3344 -1.7792,1.3344"
+           id="path22034"
+           sodipodi:nodetypes="ccssc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 395.7607,615.60305 c 0,0 -0.76638,2.41373 0,3.1136 0.90696,0.82825 2.59389,0.25922 3.6696,-0.3336 1.22718,-0.6763 2.89206,-1.9753 2.5576,-3.336 -0.27313,-1.1112 -1.75804,-1.52103 -2.79908,-1.99601 -1.07172,-0.48898 -4.56151,0.0484 -4.56151,0.0484"
+           id="path22036"
+           sodipodi:nodetypes="cssssc" />
+      </g>
+      <g
+         id="layer5"
+         inkscape:label="cuerpo6"
+         style="display:inline">
+        <path
+           style="fill:#47353a;fill-opacity:1;stroke:#48353a;stroke-width:1.00476;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           d="m 254.95538,649.80043 c 0,0 18.44089,3.8226 27.8543,4.71782 12.13083,1.15364 24.37576,0.90865 36.55876,0.62904 12.56559,-0.28839 25.19664,-0.16575 37.66662,-1.72987 9.51549,-1.19353 18.94306,-3.2207 28.17083,-5.81864 11.3354,-3.19131 33.23524,-11.9518 33.23524,-11.9518 l 3.16526,-24.21812 c 0,0 -5.37313,2.11683 -8.07141,3.14521 -8.41679,3.20784 -16.29513,7.11271 -24.68904,10.37919 -7.5347,2.93213 -15.28512,6.11555 -23.10642,8.17755 -14.45191,3.81009 -29.53062,5.2585 -44.471 [...]
+           id="path18608"
+           sodipodi:nodetypes="cssssccssssscccc" />
+      </g>
+      <g
+         id="layer6"
+         inkscape:label="cuerpo7"
+         style="display:inline">
+        <rect
+           style="fill:#47353a;fill-opacity:1;stroke:#8f8381;stroke-width:6.67087;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect21069"
+           width="36.327179"
+           height="16.826874"
+           x="277.61121"
+           y="659.9422"
+           transform="rotate(-4.2348532)" />
+      </g>
+      <g
+         id="layer14"
+         inkscape:label="cabeza1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 217.0195,218.90663 -38.37156,-11.32276 c 0,0 -58.46937,0.0343 -67.93654,13.83893 -6.96054,10.14957 -1.00939,27.41604 3.14521,39.00061 5.34747,14.91071 26.73429,38.37156 26.73429,38.37156 l 12.26632,11.00823 c 0,0 -1.4636,16.46148 -3.14521,24.53264 -1.75948,8.44492 -7.23399,24.84716 -7.23399,24.84716 l -16.35509,18.55675 23.58908,7.5485 -35.54088,20.12934 44.97651,7.86303 -25.79073,12.89536 c 0,0 48.88224,30.62342 74.22696,44.34747 21.44031,11.60983 42.86475,23.62943 65.73 [...]
+           id="path57316"
+           sodipodi:nodetypes="ccssccsccccccsscccccccccsscccccssccssssscc" />
+      </g>
+      <g
+         id="layer36"
+         inkscape:label="SOMBRAS 3"
+         style="display:inline">
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 155.53776,308.75262 c -2.62623,17.54433 -4.84338,37.94961 -11.32415,52.36212 l -13.84064,15.48602 c 0,0 26.42303,8.22696 25.26158,8.22696 -1.16145,0 -33.97247,19.26074 -33.97247,19.26074 l 45.4902,8.32374 -28.93951,14.13099 52.5557,31.55278 -16.77414,-15.94078 -14.48827,-14.93448 25.93909,-20.51898 c 0,0 -17.22335,1.62206 -24.19692,-2.51648 -3.03217,-1.79947 -6.21244,-5.19132 -6.00083,-8.71089 0.4856,-8.07682 16.06675,-18.19608 16.06675,-18.19608 0,0 -10.57214,-1.63693 -1 [...]
+           id="path65911"
+           sodipodi:nodetypes="cccscccccccaacaac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 480.45392,261.32667 c -20.50896,7.18066 -48.63851,54.13462 -62.33125,87.10889 -8.68146,20.90633 -11.00017,44.34101 -11.22737,66.97706 -0.22256,22.17337 9.67877,65.8156 9.67877,65.8156 l 10.45306,1.5486 2.32291,7.35586 -2.32291,7.74302 -16.26032,10.06591 -11.22737,8.51732 -2.71005,5.42011 19.74468,-1.93576 8.51731,-9.29161 17.03463,-18.97038 -0.58072,-22.7451 c 0,0 8.48676,-5.08539 12.77596,-7.54944 10.30639,-5.9208 16.16505,-16.08504 22.26116,-25.8423 4.83237,-7.73455 16. [...]
+           id="path65913"
+           sodipodi:nodetypes="caacccccccccccsscccccccccccc" />
+      </g>
+      <g
+         id="layer15"
+         inkscape:label="ojjos 1"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 202.55154,385.28825 c 0,0 21.31315,24.22071 33.33923,34.91183 10.68757,9.50119 22.05463,18.37662 34.28279,25.79073 10.82678,6.56443 22.60415,11.46424 34.28279,16.35509 11.62446,4.86816 23.18495,10.41378 35.54087,12.89536 6.3803,1.28143 12.9973,1.19081 19.50031,0.94356 3.37856,-0.12846 7.12276,0.40814 10.06467,-1.25808 6.95287,-3.93793 10.95952,-11.85453 14.78249,-18.87126 5.52024,-10.13193 9.52298,-21.31327 11.32275,-32.71019 1.63567,-10.35778 0.15288,-20.99516 -0.62904,- [...]
+           id="path61200"
+           sodipodi:nodetypes="csssssssssssssssssc" />
+      </g>
+      <g
+         id="layer16"
+         inkscape:label="ojos2"
+         style="display:inline">
+        <path
+           style="fill:#744a54;fill-opacity:1;stroke:#744a54;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 269.22999,399.4417 c 0,0 4.78954,-16.35662 9.12111,-23.58908 3.5524,-5.93148 8.66074,-10.81211 13.52441,-15.72605 4.024,-4.0656 8.08471,-8.22771 12.89536,-11.32276 5.80107,-3.73227 12.06628,-7.36317 18.87126,-8.49207 5.50596,-0.9134 11.88204,0.48822 16.66961,1.57261 3.1747,0.71907 6.80808,0.46276 9.62921,-1.16114 1.83406,-1.05573 3.72411,-3.8021 4.30187,-5.83792 0.76057,-2.67998 -0.13185,-6.00728 -1.93576,-8.13017 -3.03403,-3.57053 -12.96954,-5.42011 -12.96954,-5.42011 0, [...]
+           id="path63630"
+           sodipodi:nodetypes="csssssssscssssssssssssccssssc" />
+      </g>
+      <g
+         id="layer17"
+         inkscape:label="ojos3"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#f4eae0;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 274.48979,398.95871 c 0,0 4.13955,-13.53875 7.74301,-19.5511 3.69512,-6.16529 8.67339,-11.55954 13.93742,-16.4539 5.61443,-5.22015 11.78528,-10.00631 18.58323,-13.55028 3.87217,-2.01868 8.03099,-3.20496 12.38882,-3.48435 4.47055,-0.28662 8.94731,0.42084 13.16312,1.93575 4.67217,1.6789 9.27383,3.88306 13.16313,6.96871 5.69678,4.51965 10.43724,10.30824 14.32457,16.4539 5.34455,8.44943 9.47328,17.81483 12.00167,27.4877 1.14796,4.39173 1.35502,13.55027 1.35502,13.55027 0,0 -6 [...]
+           id="path67428"
+           sodipodi:nodetypes="csssssssscsssssc" />
+      </g>
+      <g
+         id="layer18"
+         inkscape:label="ojos4"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 314.3663,350.17773 c -2.33914,1.61419 -4.73085,3.26325 -6.58156,5.42011 -3.61747,4.21589 -6.41804,9.18135 -8.51731,14.32458 -1.85701,4.5497 -2.78357,9.46071 -3.48436,14.32457 -0.58037,4.02809 -0.89055,8.13736 -0.58072,12.19524 0.37091,4.85783 2.90363,14.32458 2.90363,14.32458 0,0 1.44908,3.64045 2.41969,4.30705 0.84954,0.58346 12.02736,3.85876 18.34125,5.27492 5.96771,1.33852 11.80171,1.92363 17.76054,2.22612 5.54352,0.28141 15.97871,1.26633 21.9708,-0.19357 5.91594,-1.44 [...]
+           id="path70242"
+           sodipodi:nodetypes="ssssscssssscsssssssss" />
+      </g>
+      <g
+         id="layer19"
+         inkscape:label="ojos5"
+         style="display:inline">
+        <path
+           style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:2.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 353.55558,353.9808 c 0,0 -4.55113,-0.32472 -6.28147,0.0684 -1.67452,0.38048 -4.20397,1.26512 -5.94615,2.91051 -1.74218,1.64539 -5.42224,4.70379 -7.7977,8.22007 -2.59931,3.84763 -4.20108,8.36707 -5.32332,12.87276 -1.30037,5.2209 -1.7468,10.69 -1.54861,16.06675 0.12661,3.43465 0.6825,6.89315 1.74218,10.1627 1.35237,4.1726 3.2043,8.27764 5.80726,11.8081 1.92315,2.60843 7.11389,6.92032 7.11389,6.92032 3.177,0.77776 6.67504,0.27133 10.01753,0.38714 3.85537,-0.17036 7.71075,-0. [...]
+           id="path78492"
+           sodipodi:nodetypes="csssssssccccsccccc" />
+      </g>
+      <g
+         id="layer20"
+         inkscape:label="ojos6"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path80803"
+           sodipodi:type="arc"
+           sodipodi:cx="341.92657"
+           sodipodi:cy="373.2132"
+           sodipodi:rx="5.347518"
+           sodipodi:ry="5.6136842"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 347.27409,373.2132 a 5.347518,5.6136842 0 0 1 -5.26763,5.61305 5.347518,5.6136842 0 0 1 -5.42502,-5.44534 5.347518,5.6136842 0 0 1 5.10554,-5.77576 5.347518,5.6136842 0 0 1 5.57757,5.27277 l -5.33798,0.33528 z" />
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 345.96747,382.04507 c -0.52605,-0.045 -0.91728,0.20181 -1.25824,0.60493 -0.32711,0.38674 -0.57973,0.90602 -0.48394,1.40341 0.11562,0.60036 0.41803,1.26055 0.94368,1.5728 0.49971,0.29684 1.2174,0.32248 1.74218,0.0726 0.46315,-0.22053 0.78564,-0.73883 0.91948,-1.23404 0.1313,-0.48582 0.11184,-1.08287 -0.16937,-1.50021 -0.35899,-0.53276 -1.05371,-0.86471 -1.69379,-0.91949 z"
+           id="path81104"
+           sodipodi:nodetypes="ssssssss" />
+      </g>
+      <g
+         id="layer21"
+         inkscape:label="ojos7"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 502.61754,353.96758 c 0,0 1.23515,-9.40721 0.27375,-13.9616 -1.20579,-5.71213 -3.84306,-11.24202 -7.39143,-15.8779 -4.13306,-5.39977 -9.53449,-10.07454 -15.60414,-13.14032 -6.28235,-3.17321 -13.49898,-4.64989 -20.53176,-4.92763 -5.26172,-0.2078 -10.8125,0.28 -15.60414,2.46382 -5.42213,2.47117 -10.07094,6.76236 -13.68784,11.49778 -4.75835,6.22987 -7.4632,13.8877 -9.85525,21.35303 -2.83428,8.84549 -4.10372,18.1523 -5.20138,27.37569 -1.3172,11.06813 -2.05038,22.25956 -1.6425 [...]
+           id="path84123"
+           sodipodi:nodetypes="cssssssssssccsssc" />
+      </g>
+      <g
+         id="layer22"
+         inkscape:label="ojos8"
+         style="display:inline">
+        <path
+           style="fill:#744a54;fill-opacity:1;stroke:#744a54;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 467.02915,310.714 c 0,0 -6.24469,0.99641 -8.76022,2.73757 -6.61529,4.57888 -14.85131,19.0261 -14.85131,19.0261 0,0 6.33033,-0.28027 9.30773,0.61595 5.8607,1.76412 11.3072,5.11014 15.94634,9.10242 4.18588,3.60222 7.80207,8.34958 10.26588,13.00344 2.46381,4.65387 4.31278,7.5869 5.33826,11.77155 0.98972,4.03874 1.18667,8.32814 0.68439,12.45593 -0.56484,4.64194 -1.21069,9.74233 -4.10635,13.41409 -4.78742,6.07056 -12.84614,8.80197 -19.98425,11.77154 -7.31589,3.04353 -15.22762, [...]
+           id="path87132"
+           sodipodi:nodetypes="cacaasaaaassssscaac" />
+      </g>
+      <g
+         id="layer23"
+         inkscape:label="ojos9"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#f4eae0;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 427.19753,340.00598 -7.39143,66.79667 c 0,0 9.0644,0.38848 13.55096,-0.13688 9.01468,-1.05559 18.10479,-2.70863 26.55441,-6.02265 6.87021,-2.69456 19.16298,-11.08715 19.16298,-11.08715 0,0 2.14811,-8.97556 2.19005,-13.55097 0.0414,-4.51657 -0.35645,-9.17521 -1.91629,-13.41408 -2.83271,-7.6979 -7.10724,-15.24819 -13.14033,-20.80552 -3.40731,-3.13862 -7.84064,-5.24818 -12.31906,-6.43329 -3.66335,-0.96942 -7.60932,-0.94494 -11.36091,-0.41063 -5.32799,0.75882 -15.33038,5.0645 [...]
+           id="path92268"
+           sodipodi:nodetypes="ccaacaaaaac" />
+      </g>
+      <g
+         id="layer24"
+         inkscape:label="ojos10"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 427.47129,339.73222 26.82817,62.55344 c 8.51952,-3.52914 12.42628,-5.36693 15.5357,-6.91236 l 2.39537,-11.97686 c 1.66485,-8.14938 2.74407,-14.1317 -0.61595,-26.07534 -0.48453,-2.7093 -3.97116,-11.17671 -5.88577,-13.41409 -3.35252,-3.79435 -7.44261,-6.87827 -13.34565,-8.48646 l -7.93895,-0.75283 z"
+           id="path95549"
+           sodipodi:nodetypes="ccccccccc" />
+      </g>
+      <g
+         id="layer25"
+         inkscape:label="ojos11"
+         style="display:inline">
+        <path
+           style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 426.94726,339.56284 -6.45677,56.97393 c 0,0 1.14877,4.63212 2.53225,6.50172 1.27054,1.71698 5.03029,3.96948 5.03029,3.96948 3.5926,0.125 7.90171,-0.19696 11.12136,-0.78705 4.01508,-0.77266 9.69122,-2.02184 14.4749,-3.28509 0.61056,-0.16123 1.81363,-0.54751 1.81363,-0.54751 0,0 4.30506,-5.7163 5.81734,-8.93132 2.02395,-4.30279 3.36692,-8.94581 4.24323,-13.6194 0.79648,-4.24783 1.24029,-8.6274 0.88971,-12.93501 -0.25855,-3.1768 -1.06849,-6.32428 -2.19006,-9.30773 -1.76325,- [...]
+           id="path99061"
+           sodipodi:nodetypes="ccaccacaaaaaaaac" />
+      </g>
+      <g
+         id="layer26"
+         inkscape:label="ojos12"
+         style="display:inline">
+        <path
+           style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path80803-0"
+           sodipodi:type="arc"
+           sodipodi:cx="433.45966"
+           sodipodi:cy="364.8652"
+           sodipodi:rx="3.9689827"
+           sodipodi:ry="4.0279403"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 437.42864,364.8652 a 3.9689827,4.0279403 0 0 1 -3.90969,4.02749 3.9689827,4.0279403 0 0 1 -4.02651,-3.90715 3.9689827,4.0279403 0 0 1 3.78939,-4.14423 3.9689827,4.0279403 0 0 1 4.13972,3.78333 l -3.96189,0.24056 z"
+           inkscape:transform-center-x="5.6407799"
+           inkscape:transform-center-y="0.9722915" />
+        <path
+           style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.685875px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 427.15746,373.80187 c -0.36481,-0.0305 -0.63612,0.13689 -0.87257,0.41035 -0.22685,0.26234 -0.40204,0.6146 -0.33561,0.952 0.0802,0.40725 0.2899,0.85509 0.65443,1.06691 0.34654,0.20136 0.84425,0.21875 1.20818,0.0492 0.32119,-0.1496 0.54483,-0.50119 0.63764,-0.83711 0.0911,-0.32956 0.0776,-0.73457 -0.11745,-1.01767 -0.24896,-0.3614 -0.73073,-0.58657 -1.17462,-0.62373 z"
+           id="path81104-5"
+           sodipodi:nodetypes="ssssssss" />
+      </g>
+      <g
+         id="layer10"
+         inkscape:label="nariz4"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#f4eae0;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 437.09305,464.77432 6.19441,12.77597 -1.35503,17.03463 -18.97038,17.2282 -4.06508,6.38798 -13.47938,5.16188 -7.86302,-0.31452 -9.12111,-13.83893 -3.21859,-31.85282 19.74468,-13.55027 z"
+           id="path944" />
+      </g>
+      <g
+         id="layer29"
+         inkscape:label="nariz3"
+         style="display:inline">
+        <path
+           style="fill:#f7b2c7;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 398.72682,507.13452 5.84558,-4.80659 1.03256,-3.50877 14.44067,-2.70335 c 0,0 -0.65017,2.29272 -0.51329,2.29272 0.13688,0 2.7522,1.30613 2.7522,1.30613 l -3.36815,2.04739 -13.55097,4.41433 -6.57016,1.5741 z"
+           id="path121669" />
+      </g>
+      <g
+         id="layer27"
+         inkscape:label="nariz1"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 330.43305,494.19777 16.4539,15.29244 c 0,0 10.35541,11.75749 17.42178,14.32458 6.91404,2.51175 14.87381,1.73059 22.06759,0.19357 4.99773,-1.06782 13.93742,-6.38798 13.93742,-6.38798 l 4.64581,-6.38799"
+           id="path103332"
+           sodipodi:nodetypes="ccaacc" />
+        <path
+           style="fill:none;stroke:#684650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           d="m 410.76681,511.42597 12.19524,0.38715 c 0,0 7.71212,-4.99359 11.03379,-8.13016 2.49884,-2.35959 5.00722,-4.88155 6.58156,-7.93659 1.49843,-2.90773 2.21151,-6.22833 2.51648,-9.48519 0.33174,-3.54276 -0.0128,-7.17083 -0.7743,-10.64664 -0.58994,-2.69265 -2.90363,-7.74302 -2.90363,-7.74302 l -2.3229,-3.0972"
+           id="path103334"
+           sodipodi:nodetypes="ccaaaacc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 392.18358,521.49188 c 0,0 9.02373,1.69497 13.55027,1.35503 3.38647,-0.25432 6.98431,-0.72983 9.87234,-2.51648 3.19022,-1.9736 7.35586,-8.51731 7.35586,-8.51731"
+           id="path103336"
+           sodipodi:nodetypes="caac" />
+        <path
+           style="fill:#f7b2c7;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 397.21654,500.68254 c 0,0 1.56844,-2.31284 2.80684,-2.71006 1.67703,-0.53792 4.20555,-0.66075 5.22653,0.77431 0.70428,0.98992 -0.67751,3.58114 -0.67751,3.58114 l -6.96871,5.42011 c 0,0 -7.10496,0.97495 -9.29162,-1.25824 -2.58985,-2.64496 -2.18162,-7.44905 -1.25824,-11.0338 0.75029,-2.91278 2.86558,-5.49222 5.22653,-7.35586 3.24944,-2.56498 7.3859,-4.38916 11.51774,-4.6458 1.63241,-0.10139 3.1146,1.41541 4.74259,1.25824 2.42726,-0.23433 4.15668,-2.93618 6.58156,-3.194 3.10 [...]
+           id="path103338"
+           sodipodi:nodetypes="caaccaaaaaaaaccacc" />
+        <path
+           style="fill:#f7b2c7;fill-opacity:1;stroke:#67464f;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 397.60369,507.74804 c 0,0 3.22164,1.4085 4.93617,1.45181 2.48761,0.0628 5.10779,-0.49153 7.25907,-1.74218 1.22343,-0.71124 2.90363,-3.0972 2.90363,-3.0972 0,0 0.33123,2.3459 1.25824,2.71005 1.58926,0.62429 3.42269,-0.85254 4.74259,-1.93575 1.67391,-1.37374 3.58115,-5.42011 3.58115,-5.42011 v 0"
+           id="path103340"
+           sodipodi:nodetypes="caacaacc" />
+      </g>
+      <g
+         id="layer37"
+         inkscape:label="sombra5"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#dad2d1;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 410.69422,513.43431 8.42052,0.29037 c -0.89939,1.28114 -1.55467,3.28485 -6.17021,5.80726 -6.91095,1.97763 -10.46171,1.62023 -13.62286,0.99207 l 2.3229,-1.33083 4.98457,-6.79933 5.81974,-6.8762 0.39353,1.12069 c 0.37206,0.43706 0.38352,1.01034 1.71098,1.08647 2.01068,-0.18971 2.20166,-0.657 2.9771,-1.03514 0,0 1.51372,-1.1186 2.13873,-1.81364 0.90858,-1.01039 1.60235,-2.20024 2.29271,-3.37063 1.05872,-1.79486 2.82312,-5.57779 2.82312,-5.57779 0,0 1.21845,-0.77832 1.77942,- [...]
+           id="path78067"
+           sodipodi:nodetypes="ccccccccccaacaaaaaaaaaaaaaaaccccccccccc"
+           clip-path="url(#clipPath81911)" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 412.26067,462.13575 2.66801,18.91099 1.45181,-0.12098 c 0,0 1.5728,0.0726 1.63329,0.0726 0.0605,0 1.45182,0.18148 1.50021,0.18148 0.0484,0 0.7864,0.18147 0.7864,0.18147 l 1.597,0.49604 0.87109,0.41135 0.83479,0.43554 0.7864,0.54443 0.84689,0.68962 1.42762,1.47601 1.19775,1.69378 0.67751,1.50021 0.39925,1.70588 v 1.04047 l -0.18148,0.7985 -0.38715,0.738 -0.7259,0.87109 -0.93158,0.8106 -1.34293,0.94368 -0.5846,0.41111 -2.65779,5.22677 -1.17355,2.00834 -1.00417,1.39133 -0.66 [...]
+           id="path82108"
+           sodipodi:nodetypes="cccssccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
+      </g>
+      <g
+         id="layer28"
+         inkscape:label="nariz2"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#684650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 426.39801,475.54195 c -0.75398,0.59916 -1.35987,1.76916 -1.06466,2.68585 0.4259,1.32251 2.13044,2.42705 3.50855,2.25032 1.5569,-0.19965 3.24382,-1.8913 3.19399,-3.46016 -0.0308,-0.96934 -1.1804,-1.71605 -2.10513,-2.00835 -1.1355,-0.35893 -2.60041,-0.20856 -3.53275,0.53234 z"
+           id="path103438"
+           sodipodi:nodetypes="aaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#67464f;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.992157"
+           d="m 430.82605,486.45475 c -0.65127,0.89445 -0.76426,2.38207 -0.16938,3.31498 0.61281,0.96104 2.06309,1.5551 3.1698,1.28244 0.94459,-0.23272 1.55756,-1.31089 1.88736,-2.22612 0.47581,-1.3204 1.11149,-3.42001 -0.0484,-4.21026 -1.42613,-0.97165 -3.82362,0.44391 -4.83938,1.83896 z"
+           id="path103440"
+           sodipodi:nodetypes="aaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694750;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 369.92242,501.94078 c -1.74253,0.11096 -3.65435,0.98243 -4.64581,2.41969 -0.94074,1.36374 -1.53205,3.57979 -0.58073,4.93617 1.5413,2.19757 5.2778,2.63962 7.8398,1.83896 1.28636,-0.40201 2.59478,-1.65764 2.71006,-3.00041 0.18604,-2.16706 -1.79343,-4.14886 -3.48436,-5.5169 -0.50786,-0.41089 -1.18702,-0.71902 -1.83896,-0.67751 z"
+           id="path103342"
+           sodipodi:nodetypes="aaaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 370.74511,482.34128 c -1.06402,0.75907 -1.98064,2.33168 -1.59699,3.58114 0.32323,1.05268 1.70828,1.66608 2.80684,1.74218 1.549,0.1073 3.78147,-0.40979 4.25865,-1.88736 0.44213,-1.36905 -0.89961,-3.06587 -2.17772,-3.72633 -0.97829,-0.50553 -2.39433,-0.34916 -3.29078,0.29037 z"
+           id="path103388"
+           sodipodi:nodetypes="aaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 352.64582,486.0676 c -0.36057,1.41343 1.2673,3.22088 2.71005,3.43596 1.39859,0.2085 3.28975,-1.0191 3.48436,-2.41969 0.1609,-1.15792 -1.09054,-2.43233 -2.22612,-2.71005 -1.39705,-0.34166 -3.61279,0.30019 -3.96829,1.69378 z"
+           id="path103390"
+           sodipodi:nodetypes="aaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 352.06308,514.48996 c 0,0 0.92034,-2.35683 1.98414,-2.66166 1.36499,-0.39114 3.41207,0.24216 3.9683,1.5486 0.44477,1.04465 -0.58195,2.27156 -1.30664,3.1456 -0.35696,0.43053 -1.40342,0.91948 -1.40342,0.91948"
+           id="path103392"
+           sodipodi:nodetypes="caaac" />
+      </g>
+      <g
+         id="layer31"
+         inkscape:label="SOMBRAS"
+         style="display:inline">
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 547.81813,821.92077 -14.71173,6.58156 c 0,0 -20.04642,9.4511 -20.13183,18.58323 -0.0401,4.28964 9.8648,4.6531 9.29162,8.90446 -1.22993,9.12259 -40.07226,7.0871 -40.65082,18.58323 -0.23206,4.6112 16.368,3.85278 12.38882,6.19441 -8.7326,5.13888 -115.3747,51.08568 -115.37088,51.10388 22.3368,-2.2537 41.71738,-14.30148 55.55041,-19.96007 11.32914,-1.74424 22.65827,-2.80865 33.98741,-5.52947 14.55542,-1.8339 26.06489,-10.97808 38.99618,-16.70988 18.06089,-13.95357 25.08208,-25 [...]
+           id="path949"
+           sodipodi:nodetypes="ccassscccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 445.3366,835.93267 c 0,0 -16.17886,14.32145 -25.27818,20.05735 -15.42858,9.72566 -49.16813,24.00334 -49.16813,24.00334 -4.44886,2.75522 -5.38193,1.67502 -5.87368,0.11339 l -7.23844,-6.64798 c 18.35192,-6.49248 36.75539,-13.2943 55.46787,-21.95016 z"
+           id="path951"
+           sodipodi:nodetypes="caccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 272.35476,872.90958 c 0,0 0.57084,7.71915 0.10249,11.53601 -0.2354,1.91841 -1.45182,5.61369 -1.45182,5.61369 l 25.1648,1.88735 c 0.47994,-2.9835 0.36177,-4.37206 0.49764,-6.43805 -0.55144,-2.5936 -1.0986,-5.18806 -2.27941,-7.65579 0,0 -5.84602,-0.64508 -8.71988,-1.24687 -4.50803,-0.94399 -13.31382,-3.69634 -13.31382,-3.69634 z"
+           id="path953"
+           sodipodi:nodetypes="caccccac" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 226.28954,815.53279 c 0,0 -7.95288,2.68162 -12.00168,3.7747 -3.38519,0.91392 -10.25948,2.32291 -10.25948,2.32291 0,0 1.3589,13.85165 3.48435,20.4222 1.2834,3.96745 5.5169,11.22737 5.5169,11.22737 5.56183,-2.04316 6.86738,-4.39034 9.00125,-6.67835 3.87527,-4.01314 6.35463,-11.0035 9.00125,-17.2282 z"
+           id="path955"
+           sodipodi:nodetypes="cacacccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 220.99255,764.33128 -8.78502,16.50455 c 2.97496,0.55016 6.51461,0.25328 10.21418,-0.28348 2.48336,-0.80195 1.67568,-0.38328 9.9428,-3.33373 l 6.71642,-12.83266 -8.92023,0.16037 z"
+           id="path957"
+           sodipodi:nodetypes="ccccccc" />
+      </g>
+      <g
+         id="layer32"
+         inkscape:label="SOMBRAS 1"
+         style="display:inline">
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 298.02413,877.42421 c 2.73354,7.81873 1.97618,9.48503 2.11154,13.52964 l 35.91107,-2.05603 25.81194,-4.66526 c -2.00278,-2.61499 -5.49159,-5.52718 -9.30134,-8.50356 l -23.63967,3.7249 z"
+           id="path960"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 232.36854,834.45015 c -1.72206,4.96881 -3.87893,9.57529 -6.69495,13.63246 -2.98321,3.45811 -6.32185,6.34751 -10.21656,8.34723 0,0 7.00444,12.3255 12.18753,16.98196 6.62044,5.94777 14.88148,10.07695 23.22904,13.16312 5.05634,1.86938 15.87318,3.0972 15.87318,3.0972 1.94325,-2.09404 3.81964,-10.11169 1.67265,-19.47249 -5.17626,-1.71992 -8.96515,-3.76359 -15.4165,-9.5638 z"
+           id="path962"
+           sodipodi:nodetypes="cccaacccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 210.58644,784.48054 c 0,0 -4.33631,9.886 -5.54524,15.11465 -1.37844,5.96186 -1.88391,18.2605 -1.88391,18.2605 3.64141,0.81129 13.27584,-3.06759 20.71256,-5.22654 0,0 -0.53922,-8.93795 0.1721,-13.32147 0.97292,-5.99566 5.53836,-17.36022 5.53836,-17.36022 0,0 -6.69889,2.0907 -10.1627,2.51648 -2.92174,0.35915 -8.83117,0.0166 -8.83117,0.0166 z"
+           id="path964"
+           sodipodi:nodetypes="caccacac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 222.12767,760.75097 c 2.04496,0.68598 14.10806,0.16978 21.88374,0.16808 35.976,-34.5304 40.26607,-47.39531 50.90058,-65.11259 -10.98778,-6.04029 -18.83771,-12.86789 -24.97123,-19.16397 0,0 5.48103,10.16148 4.93618,15.58282 -1.5279,15.20293 -12.85105,28.0321 -22.26116,40.07009 -8.56139,10.95226 -30.48811,28.45557 -30.48811,28.45557 z"
+           id="path966"
+           sodipodi:nodetypes="ccccaac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 320.27035,703.64625 c 0,0 11.9013,8.35426 14.61494,14.71173 4.09221,9.58716 0.7743,31.26241 0.7743,31.26241 0,0 2.56105,-10.59133 3.38757,-15.96996 1.43253,-9.32234 2.71005,-28.16521 2.71005,-28.16521 -7.31232,-0.0128 -14.43105,-0.80008 -21.48686,-1.83897 z"
+           id="path968"
+           sodipodi:nodetypes="cacacc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 352.50064,704.8077 5.90405,48.10347 c 0,0 -0.49128,-14.99406 0.67751,-22.35795 1.11707,-7.03805 2.1625,-14.51487 6.00083,-20.51898 2.90655,-4.54658 7.55844,-7.88631 12.19525,-10.64664 2.5438,-1.51434 8.32374,-3.09721 8.32374,-3.09721 1.71361,-2.54812 2.03574,-5.32816 2.22611,-8.13016 0,0 -10.62032,8.20645 -16.64747,11.03379 -5.88629,2.76125 -18.68002,5.61368 -18.68002,5.61368 z"
+           id="path1083"
+           sodipodi:nodetypes="ccaaaccac" />
+      </g>
+      <g
+         id="layer33"
+         inkscape:label="SOMBRAS 2"
+         style="display:inline">
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 311.69279,694.98153 c 0,0 21.20519,4.69219 31.9133,4.0926 8.86972,-0.49666 17.88896,-2.46095 25.89066,-6.31989 7.44831,-3.59207 13.96971,-9.14786 19.60849,-15.19636 7.11032,-7.62698 12.69856,-16.69142 17.38356,-26.0069 1.90749,-3.79279 4.28047,-11.99548 4.28047,-11.99548 0,0 -10.47172,4.15202 -15.81432,5.92586 -5.7265,1.9013 -17.38356,5.04789 -17.38356,5.04789 0,0 -3.26415,8.74334 -6.08337,12.37291 -7.32531,9.43088 -16.67786,17.69547 -27.23881,23.26933 -9.94266,5.24753 -3 [...]
+           id="path37537"
+           sodipodi:nodetypes="caaaacacaac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 315.02567,516.1685 c 0,0 8.11408,7.52388 11.63467,11.77154 3.8928,4.69674 10.40275,15.05663 10.40275,15.05663 l 0.13689,-19.09454 c -7.39144,-2.48908 -14.78288,-4.89781 -22.17431,-7.73363 z"
+           id="path37541"
+           sodipodi:nodetypes="caccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 396.60521,531.49889 0.65016,2.05317 c -0.50841,1.64487 -1.38541,3.23708 -2.53224,4.79074 -1.27909,1.80275 -2.59144,3.6166 -4.14057,5.50936 -3.42223,2.80405 -3.85636,2.02238 -5.16716,2.29271 -3.92172,-11.13692 -3.3389,-8.6049 -4.89341,-12.55859 l 6.09109,2.87445 z"
+           id="path37788"
+           sodipodi:nodetypes="cccccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 387.05794,550.69608 c 5.24841,-0.82446 8.96129,-4.92956 11.66889,-9.64993 3.16683,3.47899 4.59204,7.02643 6.57016,10.50542 -1.83514,2.1826 -3.46722,4.59796 -5.64624,5.7489 -4.67848,2.29176 -7.33873,1.6093 -10.36853,1.47144 -0.61183,-2.95115 -1.43945,-5.47069 -2.22428,-8.07583 z"
+           id="path37790"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 390.52954,563.38467 c 2.56922,-0.0156 5.13266,-0.0269 8.70898,-0.79778 2.48973,-0.6753 4.1443,-2.3528 6.03498,-3.74696 l 3.51875,12.25975 c -2.74256,2.86412 -5.43184,5.58839 -7.1618,5.79445 -3.13945,0.87612 -6.28817,1.74297 -10.18427,1.86244 -0.12873,-10.02199 -0.57481,-11.37611 -0.91664,-15.3719 z"
+           id="path37792"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 391.30116,587.75591 c 3.51978,1.44667 7.46595,2.19057 12.07952,2.36115 3.84475,0.13634 7.83163,0.52185 10.60809,-1.30034 l -4.1748,-13.68784 c 0,0 -5.03409,3.74951 -7.80207,5.20138 -0.79345,0.41618 -1.63058,0.76807 -2.49803,0.99237 -2.68337,0.69386 -8.24692,1.0608 -8.24692,1.0608 z"
+           id="path37794"
+           sodipodi:nodetypes="ccccaacc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:0.996364;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 391.30117,591.79383 c 0,0 -0.78111,10.57858 -0.95815,15.87788 -0.17521,5.2442 -0.10266,15.74103 -0.10266,15.74103 l 25.80158,-10.4712 c 0,0 0.68403,-7.53051 0.47908,-11.29247 -0.16885,-3.0992 -1.40301,-9.20507 -1.40301,-9.20507 0,0 -2.47918,1.04873 -3.79837,1.19769 -6.1974,0.69982 -18.64969,-1.50567 -18.64969,-1.50567 z"
+           id="path37796"
+           sodipodi:nodetypes="caccacasc" />
+      </g>
+      <g
+         id="layer38"
+         inkscape:label="SOMBRAS 4"
+         style="display:inline">
+        <path
+           style="fill:#908482;fill-opacity:1;stroke:#908482;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 174.79851,270.03756 17.80892,-21.68044 -11.03379,-6.19441 -19.74468,-0.19357 c 0,0 8.05542,8.61931 10.36719,13.92401 1.91521,4.39475 2.60236,14.14441 2.60236,14.14441 z"
+           id="path84668"
+           sodipodi:nodetypes="ccccac" />
+        <path
+           style="fill:#908482;fill-opacity:1;stroke:#908482;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 491.94102,223.45401 9.64993,-7.25455 9.78681,-1.23191 -3.90104,27.581 -5.0645,-4.51699 -10.40276,-14.23535 z"
+           id="path84798" />
+      </g>
+      <g
+         id="layer39"
+         inkscape:label="orejas"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 195.39394,245.83363 c 0,0 -3.45588,-4.19123 -5.7489,-5.54357 -2.13818,-1.26102 -4.66627,-1.79943 -7.11768,-2.19005 -2.56868,-0.40932 -5.20686,-0.31168 -7.80207,-0.13688 -2.85536,0.19231 -5.66572,0.81707 -8.48646,1.30034 -3.50152,0.59991 -10.47119,1.98474 -10.47119,1.98474 l -10.40276,2.12161 c -0.81574,0.68439 -1.30941,1.36879 0.75283,2.05318 v 0 l 8.07582,-0.0684 13.00345,0.13684 c 0,0 5.16735,-0.31374 7.73363,-0.0685 2.17787,0.20818 4.41163,0.46408 6.43329,1.30035 1.946 [...]
+           id="path87054"
+           sodipodi:nodetypes="caaaaccccccaaasaacscccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 487.49247,220.16893 21.14772,-6.6386 7.04924,-1.9163 c 0,0 0.34428,6.95974 -0.0684,10.40275 -0.50773,4.23597 -1.40696,8.47572 -2.94289,12.45594 -1.25722,3.25796 -5.0645,9.17086 -5.0645,9.17086 l -0.20532,0.88971 4.38011,10.40276 c 0,0 0.27376,2.66913 0,2.73757 -0.27375,0.0684 -5.47513,-1.43723 -5.47513,-1.43723 l 0.0684,-3.28508 -5.68045,-18.34171 4.85918,6.84392 0.61596,-0.13688 4.10635,-18.41014 c 0,0 1.47984,-5.02104 -0.0684,-6.57017 -1.46762,-1.46845 -4.20331,-0.52774 [...]
+           id="path92311"
+           sodipodi:nodetypes="cccaacccsccccccaaaacc" />
+      </g>
+      <g
+         id="layer30"
+         inkscape:label="casco1"
+         style="display:inline">
+        <path
+           style="fill:#ffe300;fill-opacity:0.996078;stroke:#694650;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 144.79433,311.2691 439.41595,-26.7134 -30.97204,-7.74301 -28.262,-11.61451 c -14.77268,-6.07097 -33.64256,-17.60462 -41.03797,-33.68211 -5.07051,-11.0232 0.14051,-24.43766 0.77431,-36.39216 0.49741,-9.38182 -5.60961,-18.05537 -10.06592,-26.32624 -7.23676,-13.43137 -15.48728,-26.83463 -26.71339,-37.16646 -8.5558,-7.87423 -30.24588,-8.00899 -42.58657,-17.03463 -8.36237,-6.116 -11.35719,-17.921827 -19.74468,-24.003335 -11.77674,-8.538948 -26.13513,-14.92456 -40.65082,-15.873 [...]
+           id="path1910"
+           sodipodi:nodetypes="cccsasasaaaacaaccaac" />
+      </g>
+      <g
+         id="layer40"
+         inkscape:label="casco2"
+         style="display:inline">
+        <path
+           style="fill:#cbb400;fill-opacity:1;stroke:#ccb500;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 257.33142,117.37324 c 0,0 14.66769,-3.34433 21.83211,-1.9163 11.50806,2.29381 31.20828,16.28853 31.20828,16.28853 -7.95406,-11.30046 -14.11739,-19.76237 -22.23496,-30.4088 -3.0627,1.22517 -10.9099,4.15792 -10.82118,4.4019 -0.36669,-0.45836 -13.96143,6.97356 -19.98425,11.63467 z"
+           id="path94173"
+           sodipodi:nodetypes="cacccc" />
+        <path
+           style="fill:#cbb400;fill-opacity:1;stroke:#ccb500;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 410.77212,118.81046 c 0,0 8.43736,17.37195 11.77155,26.41754 3.44769,9.35353 6.18704,18.45001 9.03397,27.10192 2.73472,8.31091 7.39144,25.18563 7.39144,25.18563 0,0 -1.64913,-34.41237 -5.20138,-51.19252 -1.03392,-4.88403 -2.39479,-9.78348 -4.65387,-14.23536 -0.81364,-1.60341 -3.1482,-4.38011 -3.1482,-4.38011 z"
+           id="path94175"
+           sodipodi:nodetypes="csscaacc" />
+        <path
+           style="fill:#cbb400;fill-opacity:1;stroke:#cbb400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 334.66772,259.11084 114.1566,-6.9808 c -19.16051,-2.69367 -30.65772,-5.90983 -57.55737,-8.07583 -21.52187,3.24857 -37.73931,10.03343 -56.59923,15.05663 z"
+           id="path94177"
+           sodipodi:nodetypes="cccc" />
+      </g>
+      <g
+         id="layer41"
+         inkscape:label="casco3"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 304.28072,264.85973 164.66473,-10.95027 -75.55689,-0.82127 z"
+           id="path94180" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 286.87072,99.523031 21.20439,28.623829 26.42303,26.81018 -23.32583,-29.52024 z"
+           id="path94182"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 381.34336,95.819779 c 0,0 8.10743,9.275991 11.61452,14.324571 5.94104,8.55232 10.85071,17.78486 15.87317,26.90697 5.59522,10.16239 15.87318,30.97205 15.87318,30.97205 l 16.64748,37.55361 c 0,0 -3.51333,-11.34761 -5.22654,-17.03463 -3.61001,-11.98342 -6.33752,-24.25485 -10.64664,-36.00501 -4.9536,-13.50755 -17.42178,-39.48936 -17.42178,-39.48936 L 397.99084,98.916983 Z"
+           id="path94184"
+           sodipodi:nodetypes="caaccaaccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 368.06606,84.180225 c 0,0 6.39675,3.886923 9.10241,6.433285 1.61991,1.524537 4.17489,5.206269 4.17489,5.206269 l 16.64748,3.097204 -8.77707,-10.082892 -13.89316,-8.897097 z"
+           id="path94186"
+           sodipodi:nodetypes="caccccc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/pom.xml
new file mode 100644
index 0000000000..3f95f27e84
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4x-hop-assemblies</artifactId>
+        <version>0.11.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>plc4x-hop-assemblies-action</artifactId>
+    <packaging>pom</packaging>
+    <name>PLC4J: Integrations: Apache Hop: Assemblies: Action</name>
+    
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4x-hop-action</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>    
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-assembly-plugin</artifactId>
+                    <version>${maven-assembly-plugin.version}</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>assembly</id>
+            <activation>
+                <file>
+                    <exists>${basedir}/src/assembly/assembly.xml</exists>
+                </file>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>assembly_package</id>
+                                <phase>compile</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <descriptorSourceDirectory>${basedir}/src/assembly</descriptorSourceDirectory>
+                                    <appendAssemblyId>false</appendAssemblyId>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>    
+    
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/src/assembly/assembly.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/src/assembly/assembly.xml
new file mode 100644
index 0000000000..84529d10ba
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/src/assembly/assembly.xml
@@ -0,0 +1,52 @@
+<!--
+  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.
+  -->  
+  
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+  
+    <id>plc4x-plugin-assemblies-action</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <baseDirectory>plugins/actions/plc4x</baseDirectory>
+    <files>
+        <file>
+            <source>${project.basedir}/src/main/resources/version.xml</source>
+            <outputDirectory>.</outputDirectory>
+            <filtered>true</filtered>
+        </file>
+    </files>
+    <fileSets>
+        <fileSet>
+            <outputDirectory>lib</outputDirectory>
+            <excludes>
+                <exclude>**/*</exclude>
+            </excludes>
+        </fileSet>
+    </fileSets>
+    <dependencySets>
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <includes>
+                <include>org.apache.plc4x:plc4x-hop-action:jar</include>
+            </includes>
+        </dependencySet>
+    </dependencySets>
+</assembly>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/src/main/resources/version.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/src/main/resources/version.xml
new file mode 100644
index 0000000000..2703899672
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-action/src/main/resources/version.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<version>${project.version}</version>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/pom.xml
new file mode 100644
index 0000000000..290099015a
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4x-hop-assemblies</artifactId>
+        <version>0.11.0-SNAPSHOT</version>
+    </parent>
+    
+    <artifactId>plc4x-hop-assemblies-metadata</artifactId>
+    <packaging>pom</packaging>
+    <name>PLC4J: Integrations: Apache Hop: Assemblies: Metadata</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4x-hop-metadata</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>      
+    
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-assembly-plugin</artifactId>
+                    <version>${maven-assembly-plugin.version}</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>    
+    
+    <profiles>
+        <profile>
+            <id>assembly</id>
+            <activation>
+                <file>
+                    <exists>${basedir}/src/assembly/assembly.xml</exists>
+                </file>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>assembly_package</id>
+                                <phase>compile</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <descriptorSourceDirectory>${basedir}/src/assembly</descriptorSourceDirectory>
+                                    <appendAssemblyId>false</appendAssemblyId>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>        
+    
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/assembly/assembly.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/assembly/assembly.xml
new file mode 100644
index 0000000000..c79e513518
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/assembly/assembly.xml
@@ -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.
+  -->  
+  
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+  
+    <id>plc4x-plugin-assemblies-metadata</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <baseDirectory>plugins/metadata/plc4x</baseDirectory>
+    <files>
+        <file>
+            <source>${project.basedir}/src/main/resources/version.xml</source>
+            <outputDirectory>.</outputDirectory>
+            <filtered>true</filtered>
+        </file>
+    </files>
+    <fileSets>
+        <fileSet>
+            <outputDirectory>lib</outputDirectory>
+            <excludes>
+                <exclude>**/*</exclude>
+            </excludes>
+        </fileSet>
+    </fileSets>
+    <dependencySets>
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <includes>
+                <include>org.apache.plc4x:plc4x-hop-metadata:jar</include>
+            </includes>
+        </dependencySet>
+
+        <dependencySet>
+            <outputDirectory>lib</outputDirectory>
+            <useProjectArtifact>false</useProjectArtifact>
+            <useTransitiveDependencies>true</useTransitiveDependencies>
+            <scope>runtime</scope>
+            <includes>
+                <include>com.github.jinahya:bit-io:jar</include>
+                <include>ch.qos.logback:logback-core</include>
+                <include>io.netty:netty-buffer</include>
+                <include>io.netty:netty-codec:jar</include>
+                <include>io.netty:netty-common:jar</include>
+                <include>io.netty:netty-resolver:jar</include>
+                <include>io.netty:netty-transport</include>
+            </includes>
+        </dependencySet>
+        
+    </dependencySets>
+</assembly>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/main/resources/version.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/main/resources/version.xml
new file mode 100644
index 0000000000..2703899672
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-metadata/src/main/resources/version.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<version>${project.version}</version>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/pom.xml
new file mode 100644
index 0000000000..66253b8596
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4x-hop-assemblies</artifactId>
+        <version>0.11.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>plc4x-hop-assemblies-transform</artifactId>
+    <packaging>pom</packaging>
+    <name>PLC4J: Integrations: Apache Hop: Assemblies: Transform</name>
+    
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4x-hop-transform</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>  
+    
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <artifactId>maven-assembly-plugin</artifactId>
+                    <version>${maven-assembly-plugin.version}</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>    
+    
+    <profiles>
+        <profile>
+            <id>assembly</id>
+            <activation>
+                <file>
+                    <exists>${basedir}/src/assembly/assembly.xml</exists>
+                </file>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-assembly-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>assembly_package</id>
+                                <phase>compile</phase>
+                                <goals>
+                                    <goal>single</goal>
+                                </goals>
+                                <configuration>
+                                    <descriptorSourceDirectory>${basedir}/src/assembly</descriptorSourceDirectory>
+                                    <appendAssemblyId>false</appendAssemblyId>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>    
+    
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/assembly/assembly.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/assembly/assembly.xml
new file mode 100644
index 0000000000..3321a4ce6f
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/assembly/assembly.xml
@@ -0,0 +1,52 @@
+<!--
+  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.
+  -->  
+  
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
+   
+    <id>plc4x-plugin-assemblies-transform</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <baseDirectory>plugins/transforms/plc4x</baseDirectory>
+    <files>
+        <file>
+            <source>${project.basedir}/src/main/resources/version.xml</source>
+            <outputDirectory>.</outputDirectory>
+            <filtered>true</filtered>
+        </file>
+    </files>
+    <fileSets>
+        <fileSet>
+            <outputDirectory>lib</outputDirectory>
+            <excludes>
+                <exclude>**/*</exclude>
+            </excludes>
+        </fileSet>
+    </fileSets>
+    <dependencySets>
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <includes>
+                <include>org.apache.plc4x:plc4x-hop-transform:jar</include>
+            </includes>
+        </dependencySet>
+    </dependencySets>
+</assembly>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/main/resources/version.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/main/resources/version.xml
new file mode 100644
index 0000000000..2703899672
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/plc4x-hop-assemblies-transform/src/main/resources/version.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<version>${project.version}</version>
\ No newline at end of file
diff --git a/plc4j/integrations/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/pom.xml
similarity index 53%
copy from plc4j/integrations/pom.xml
copy to plc4j/integrations/apache-hop/plc4x-hop-assemblies/pom.xml
index 253dcb038b..ccc6d04b8e 100644
--- a/plc4j/integrations/pom.xml
+++ b/plc4j/integrations/apache-hop/plc4x-hop-assemblies/pom.xml
@@ -8,7 +8,7 @@
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at
 
-      https://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
@@ -18,38 +18,25 @@
   under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j</artifactId>
-    <version>0.11.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>plc4j-integrations</artifactId>
-  <packaging>pom</packaging>
-
-  <name>PLC4J: Integrations</name>
-  <description>Parent of all product specific integration modules.</description>
-
-  <modules>
-    <module>apache-nifi</module>
-    <module>apache-calcite</module>
-    <module>opcua-server</module>
-  </modules>
-
-  <!-- ! the kafka maven plugin currently seems to have issues with Java 19 -->
-  <profiles>
-    <profile>
-      <id>java-version-not-19</id>
-      <activation>
-        <jdk>[1.8, 19)</jdk>
-      </activation>
-      <modules>
-        <module>apache-kafka</module>
-      </modules>
-    </profile>
-  </profiles>
-
-</project>
+    <modelVersion>4.0.0</modelVersion>
+    
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4j-apache-hop</artifactId>
+        <version>0.11.0-SNAPSHOT</version>
+    </parent>
+    
+    <artifactId>plc4x-hop-assemblies</artifactId>
+    <packaging>pom</packaging>
+    <name>PLC4J: Integrations: Apache Hop: Assemblies</name>
+    
+    <properties>
+        <assembly.dir>${project.build.directory}/assembly</assembly.dir>
+    </properties>    
+    
+    <modules>
+        <module>plc4x-hop-assemblies-metadata</module>
+        <module>plc4x-hop-assemblies-action</module>
+        <module>plc4x-hop-assemblies-transform</module>
+    </modules>
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-metadata/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-metadata/pom.xml
new file mode 100644
index 0000000000..22eccd03ab
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-metadata/pom.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4j-apache-hop</artifactId>
+        <version>0.11.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>plc4x-hop-metadata</artifactId>
+    <packaging>jar</packaging>
+    
+    <name>PLC4J: Integrations: Apache Hop: Metadata</name>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.jboss.jandex</groupId>
+                <artifactId>jandex-maven-plugin</artifactId>
+                <version>1.0.8</version>
+                <executions>
+                    <execution>
+                        <id>make-index</id>
+                        <goals>
+                            <goal>jandex</goal>
+                        </goals>
+                        <!-- phase is 'process-classes by default' -->
+                        <configuration>
+                            <!-- Nothing needed here for simple cases -->
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <configuration>
+                    <ignoredDependencies>
+                        <dependency>org.apache.plc4x:plc4j-spi:jar:${project.version}</dependency>
+                        <dependency>org.apache.plc4x:plc4j-driver-s7:jar:${project.version}</dependency>
+                        <dependency>org.apache.plc4x:plc4j-transport-tcp:jar:${project.version}</dependency>
+                        <dependency>org.apache.hop:hop-engine:jar:${hop.version}</dependency> 
+                        <dependency>javax.annotation:javax.annotation-api:jar:1.2</dependency>
+                    </ignoredDependencies>
+                </configuration>
+            </plugin>             
+        </plugins>         
+    </build>    
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-ui</artifactId>
+            <version>${hop.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-engine</artifactId>
+            <version>${hop.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>            
+        </dependency>        
+        <dependency>
+            <groupId>org.eclipse.platform</groupId>
+            <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
+            <version>3.114.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-driver-s7</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-spi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.plc4x</groupId>
+            <artifactId>plc4j-transport-tcp</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-core</artifactId>
+            <version>${hop.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>               
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/java/org/apache/plc4x/hop/metadata/Plc4xConnection.java b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/java/org/apache/plc4x/hop/metadata/Plc4xConnection.java
new file mode 100644
index 0000000000..3a2b711c53
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/java/org/apache/plc4x/hop/metadata/Plc4xConnection.java
@@ -0,0 +1,73 @@
+/*
+ * 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 org.apache.plc4x.hop.metadata;
+
+import org.apache.hop.core.gui.plugin.GuiElementType;
+import org.apache.hop.core.gui.plugin.GuiPlugin;
+import org.apache.hop.core.gui.plugin.GuiWidgetElement;
+import org.apache.hop.metadata.api.HopMetadata;
+import org.apache.hop.metadata.api.HopMetadataBase;
+import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.metadata.api.IHopMetadata;
+
+@GuiPlugin
+@HopMetadata(
+    key = "plc4x-connection",
+    name = "Plc4x Connection",
+    description = "Describes a connection to a PLC",
+    image = "plc4x_toddy.svg",
+    documentationUrl = "/metadata-types/plc4x/plc4x-connection.html")
+public class Plc4xConnection extends HopMetadataBase implements IHopMetadata {
+
+  public static final String WIDGET_ID_URL = "10000-url";    
+  
+  @HopMetadataProperty
+  @GuiWidgetElement(
+      id = WIDGET_ID_URL,
+      type = GuiElementType.TEXT,
+      parentId = Plc4xConnectionEditor.PARENT_WIDGET_ID,
+      label = "URL",
+      toolTip = "Specify the hostname of your cassandra server")
+  private String url;  
+  
+  
+    public Plc4xConnection() {}
+  
+  public Plc4xConnection(Plc4xConnection p) {
+    super(p.name);
+    this.url = p.url;
+  }  
+  
+  
+  /**
+   * Gets url
+   *
+   * @return value of hostname
+   */
+  public String getUrl() {
+    return url;
+  }
+
+  /** @param hostname The hostname to set */
+  public void setUrl(String url) {
+    this.url = url;
+  }  
+    
+    
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/java/org/apache/plc4x/hop/metadata/Plc4xConnectionEditor.java b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/java/org/apache/plc4x/hop/metadata/Plc4xConnectionEditor.java
new file mode 100644
index 0000000000..1118a5ff74
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/java/org/apache/plc4x/hop/metadata/Plc4xConnectionEditor.java
@@ -0,0 +1,148 @@
+/*
+ * 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 org.apache.plc4x.hop.metadata;
+
+import org.apache.hop.core.Const;
+import org.apache.hop.ui.core.PropsUi;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
+import org.apache.hop.ui.core.gui.GuiCompositeWidgets;
+import org.apache.hop.ui.core.gui.GuiCompositeWidgetsAdapter;
+import org.apache.hop.ui.core.metadata.IMetadataEditor;
+import org.apache.hop.ui.core.metadata.MetadataEditor;
+import org.apache.hop.ui.core.metadata.MetadataManager;
+import org.apache.hop.ui.hopgui.HopGui;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
+import org.apache.plc4x.java.api.PlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.*;
+
+
+public class Plc4xConnectionEditor  extends MetadataEditor<Plc4xConnection>
+    implements IMetadataEditor<Plc4xConnection>{
+
+  private static final Class<?> PKG = Plc4xConnectionEditor.class; // For Translator
+
+  public static final String PARENT_WIDGET_ID = "Plc4xConnectionEditor.Widgets.ParentId";
+
+  private Composite parent;
+  private Text wName;
+  private GuiCompositeWidgets widgets; 
+    
+    public Plc4xConnectionEditor(HopGui hopGui, MetadataManager<Plc4xConnection> manager, Plc4xConnection metadata) {
+        super(hopGui, manager, metadata);
+    }
+
+    
+    @Override
+    public void createControl(Composite parent) {
+    this.parent = parent;
+    PropsUi props = PropsUi.getInstance();
+    int margin = props.getMargin();
+    int middle = props.getMiddlePct();
+    // Name...
+    //
+    // What's the name
+    Label wlName = new Label(parent, SWT.RIGHT);
+    props.setLook(wlName);
+    wlName.setText("Plc4x url name");
+    FormData fdlName = new FormData();
+    fdlName.top = new FormAttachment(0, margin * 2);
+    fdlName.left = new FormAttachment(0, 0);
+    fdlName.right = new FormAttachment(middle, 0);
+    wlName.setLayoutData(fdlName); 
+    wName = new Text(parent, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wName);
+    
+    FormData fdName = new FormData();
+    fdName.top = new FormAttachment(wlName, 0, SWT.CENTER);
+    fdName.left = new FormAttachment(middle, margin);
+    fdName.right = new FormAttachment(100, 0);
+    wName.setLayoutData(fdName);
+
+    // Rest of the widgets...
+    //
+    widgets = new GuiCompositeWidgets(manager.getVariables());
+    widgets.createCompositeWidgets(getMetadata(), null, parent, PARENT_WIDGET_ID, wName);
+
+    // Set content on the widgets...
+    //
+    setWidgetsContent();
+
+    // Add changed listeners
+    wName.addListener(SWT.Modify, e -> setChanged());
+    widgets.setWidgetsListener(
+        new GuiCompositeWidgetsAdapter() {
+          @Override
+          public void widgetModified(
+              GuiCompositeWidgets compositeWidgets, Control changedWidget, String widgetId) {
+            setChanged();
+          }
+        });
+    }    
+    
+    
+    @Override
+    public void setWidgetsContent() {
+        Plc4xConnection meta = getMetadata();
+        wName.setText(Const.NVL(meta.getName(), ""));
+        widgets.setWidgetsContents(meta, parent, PARENT_WIDGET_ID);
+    }
+
+    @Override
+    public void getWidgetsContent(Plc4xConnection meta) {
+        meta.setName(wName.getText());
+        widgets.getWidgetsContents(meta, PARENT_WIDGET_ID);
+    }
+
+  @Override
+  public Button[] createButtonsForButtonBar(Composite parent) {
+    PropsUi props = PropsUi.getInstance();
+
+    Button wbTest = new Button(parent, SWT.PUSH | SWT.CENTER);
+    props.setLook(wbTest);
+    wbTest.setText("Test");
+    wbTest.addListener(SWT.Selection, e -> test());
+
+    return new Button[] {wbTest};
+  }
+  
+  public void test() {   
+    PlcConnection plcConnection;      
+    try {      
+        Plc4xConnection meta = getMetadata();
+        plcConnection = new DefaultPlcDriverManager().getConnection(meta.getUrl()); 
+        plcConnection.connect();       
+        Thread.sleep(100);
+        plcConnection.close();         
+        MessageBox box = new MessageBox(parent.getShell(), SWT.ICON_INFORMATION | SWT.OK);
+        box.setText("Success!");
+        box.setMessage("It's possible to connect to Device with this metadata!");
+        box.open();
+
+    } catch (Exception e) {
+      new ErrorDialog(parent.getShell(), "Error", "We couldn't connect using this information", e);
+    } 
+  }
+    
+    
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/resources/org/apache/plc4x/hop/metadata/messages/messages_en_US.properties b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/resources/org/apache/plc4x/hop/metadata/messages/messages_en_US.properties
new file mode 100644
index 0000000000..6db5c3fea3
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/resources/org/apache/plc4x/hop/metadata/messages/messages_en_US.properties
@@ -0,0 +1,22 @@
+
+#  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.
+
+Plc4x.Name=Sample Transform
+Plc4x.Description=Sample Transform Description
+Plc4x.Shell.Title=Sample Transform Title
+Plc4x.TransformName.Label=Sample Name
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/resources/plc4x_toddy.svg b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/resources/plc4x_toddy.svg
new file mode 100644
index 0000000000..01694ecd5d
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-metadata/src/main/resources/plc4x_toddy.svg
@@ -0,0 +1,1306 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="16"
+   height="16"
+   viewBox="0 0 16 16"
+   version="1.1"
+   id="svg5"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   sodipodi:docname="iconotoddyconplc2.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview7"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:document-units="px"
+     showgrid="false"
+     inkscape:zoom="101.5"
+     inkscape:cx="8.3201971"
+     inkscape:cy="4.5960591"
+     inkscape:window-width="1920"
+     inkscape:window-height="1001"
+     inkscape:window-x="-9"
+     inkscape:window-y="-9"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer52" />
+  <defs
+     id="defs2">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath78260">
+      <path
+         id="path78262"
+         style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="m 324.28906,352.80664 v 76.18359 h 20.58203 c -0.0462,-0.10335 -0.0829,-0.21015 -0.10742,-0.31835 -0.43816,-10e-6 -0.87632,-3e-5 -1.31445,0 -0.55264,8e-5 -1.10556,9.9e-4 -1.6582,0 -0.64072,-10e-4 -1.28115,0.007 -1.92188,0.002 -0.35799,-0.003 -0.73573,0.008 -1.09766,-0.0156 -0.003,0 0.007,-0.003 0.01,-0.004 0.0863,-0.0166 0.17347,-0.0342 0.25977,-0.0508 -0.2144,0.025 -0.42708,0.0642 -0.64063,0.0957 -0.49177,-0.0339 -0.98416,-0.0786 -1.47656,-0.10156 -0.0774,-0.004 0.30541,0.05 [...]
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath81911">
+      <path
+         id="path81913"
+         style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1.2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="m 395.09961,461.69922 v 42.96484 c 0.0746,-0.0504 0.14872,-0.10118 0.22266,-0.15234 0.93912,-0.64976 1.92039,-1.23589 2.85742,-1.88867 1.25063,-0.87125 2.48887,-1.7632 3.73242,-2.64453 1.05963,-0.76014 2.1181,-1.51916 3.17773,-2.2793 1.81669,-1.30323 3.50814,-1.82371 4.91016,-1.78711 0.85754,0.0224 1.60218,0.25706 2.20508,0.64258 0.23436,-0.0636 0.46865,-0.12661 0.70117,-0.19531 0.40305,-0.0456 0.80391,-0.11562 1.20898,-0.13672 0.21987,-0.0113 0.43985,-0.0169 0.66016,-0.0156  [...]
+    </clipPath>
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer52"
+     inkscape:label="Capa 2">
+    <path
+       style="fill:#f5f5f5;stroke:#f5f5f5;stroke-width:0.9355px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+       d="M 5.1062072,5.7391588 6.8487514,7.1431509 8.7779937,7.0574466 9.7326615,6.3436554 10.276258,4.8805204 9.7326615,4.1109178 6.1778718,4.5009157 Z"
+       id="path1177" />
+  </g>
+  <g
+     inkscape:label="Capa 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline;opacity:1"
+     sodipodi:insensitive="true">
+    <g
+       id="g1481"
+       transform="matrix(0.01850365,0,0,0.01824053,1.5356497,-1.2454454)">
+      <g
+         inkscape:label="Image"
+         id="g830"
+         style="display:none;opacity:1">
+        <image
+           width="696.6618"
+           height="985.07983"
+           preserveAspectRatio="none"
+           style="image-rendering:optimizeSpeed"
+           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAWGCAYAAAAcjY/0AAAACXBIWXMAADXTAAA10wEMIUN3AAAA B3RJTUUH5AMeFSExccvdCgAAIABJREFUeJzs3Xl83PV97/v3bxbNSCNrl7yMx+s4YGOMjTzYjLGd mIMzEGhZ0kKBljRtgSaFkJySntKQk5w4t7nNuU3vOb23hXNOcnqT9qa5N8staXFCSxsIDsaYGDBe sAy2ZSTbsrVY1jrL7/7xG1mLtcyMfrPq9eQxWJ75zff3ndHImvd8vosEAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [...]
+           id="image832" />
+      </g>
+      <g
+         id="layer45"
+         inkscape:label="bracitoplc 2"
+         style="display:inline">
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1712"
+           width="13.140327"
+           height="54.751366"
+           x="555.72638"
+           y="753.92633" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1714"
+           width="13.140317"
+           height="54.203869"
+           x="555.72638"
+           y="699.72247" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1721"
+           width="13.961588"
+           height="47.359943"
+           x="555.72638"
+           y="652.36255" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1723"
+           width="12.866549"
+           height="47.907455"
+           x="569.68799"
+           y="651.815" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1725"
+           width="13.687866"
+           height="54.203857"
+           x="568.8667"
+           y="699.72247" />
+        <rect
+           style="fill:#767479;fill-opacity:0.996078;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1727"
+           width="13.687866"
+           height="54.751343"
+           x="568.8667"
+           y="753.92633" />
+      </g>
+      <g
+         id="layer47"
+         inkscape:label="bracitoplc 4"
+         style="display:inline">
+        <path
+           style="display:inline;fill:#acacb8;fill-opacity:0.992157;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path7828"
+           sodipodi:type="arc"
+           sodipodi:cx="575.69299"
+           sodipodi:cy="659.0755"
+           sodipodi:rx="2.4196913"
+           sodipodi:ry="2.564873"
+           sodipodi:start="0"
+           sodipodi:end="6.2519963"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 578.11268,659.0755 a 2.4196913,2.564873 0 0 1 -2.40082,2.5648 2.4196913,2.564873 0 0 1 -2.43826,-2.5248 2.4196913,2.564873 0 0 1 2.3628,-2.60417 2.4196913,2.564873 0 0 1 2.47511,2.48419" />
+        <path
+           style="display:inline;fill:#acacb8;fill-opacity:0.992157;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path7828-6"
+           sodipodi:type="arc"
+           sodipodi:cx="572.78937"
+           sodipodi:cy="803.04718"
+           sodipodi:rx="2.4196913"
+           sodipodi:ry="2.564873"
+           sodipodi:start="0"
+           sodipodi:end="6.2519963"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 575.20906,803.04718 a 2.4196913,2.564873 0 0 1 -2.40083,2.5648 2.4196913,2.564873 0 0 1 -2.43826,-2.5248 2.4196913,2.564873 0 0 1 2.3628,-2.60417 2.4196913,2.564873 0 0 1 2.47511,2.48419" />
+        <path
+           style="display:inline;fill:#acacb8;fill-opacity:0.992157;stroke:#432c33;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path7828-6-9"
+           sodipodi:type="arc"
+           sodipodi:cx="561.36841"
+           sodipodi:cy="802.36963"
+           sodipodi:rx="2.4196913"
+           sodipodi:ry="2.564873"
+           sodipodi:start="0"
+           sodipodi:end="6.2519963"
+           sodipodi:open="true"
+           sodipodi:arc-type="arc"
+           d="m 563.7881,802.36963 a 2.4196913,2.564873 0 0 1 -2.40083,2.56479 2.4196913,2.564873 0 0 1 -2.43826,-2.52479 2.4196913,2.564873 0 0 1 2.3628,-2.60417 2.4196913,2.564873 0 0 1 2.47511,2.48419" />
+      </g>
+      <g
+         id="layer46"
+         inkscape:label="bracitoplc 3"
+         style="display:inline">
+        <path
+           style="fill:#9d9eab;fill-opacity:0.996078;stroke:#432c33;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 580.77512,652.91004 9.44461,1.77942 0.13688,27.23881 -9.44461,4.92762 7.93895,1.09503 -1.09503,23.81684 -7.52831,0.27376 z"
+           id="path1763" />
+        <path
+           style="fill:#939d4d;fill-opacity:0.992157;stroke:#432c33;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 578.9957,808.13017 7.52831,-6.70704 v -14.78287 l -6.84392,-4.24323 7.80207,-0.13688 0.27376,-22.72182 -8.62334,-0.27376 z"
+           id="path1765" />
+        <rect
+           style="fill:#939d4d;fill-opacity:0.992157;stroke:#432c33;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect1789"
+           width="8.6233397"
+           height="47.496811"
+           x="579.13257"
+           y="711.76776" />
+      </g>
+      <g
+         id="layer35"
+         inkscape:label="bracitoplc 1"
+         style="display:inline">
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1687"
+           width="138.26697"
+           height="114.77483"
+           x="425.67212"
+           y="619.44098" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1689"
+           width="42.706066"
+           height="10.40276"
+           x="439.65347"
+           y="734.21582" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1691"
+           width="42.706074"
+           height="11.497789"
+           x="482.35953"
+           y="734.21582" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1693"
+           width="41.611038"
+           height="96.909912"
+           x="439.65347"
+           y="744.61859" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1695"
+           width="43.801086"
+           height="95.81488"
+           x="481.26453"
+           y="745.71362" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1697"
+           width="13.414075"
+           height="106.49141"
+           x="525.06561"
+           y="735.03711" />
+        <rect
+           style="fill:#757378;fill-opacity:1;stroke:#432d34;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect1699"
+           width="15.877909"
+           height="102.93256"
+           x="538.47968"
+           y="735.03711" />
+      </g>
+      <g
+         id="layer48"
+         inkscape:label="bracitoplc 5"
+         style="display:inline">
+        <rect
+           style="fill:#6d9ed8;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14676"
+           width="31.552776"
+           height="10.646642"
+           x="435.73804"
+           y="632.60413" />
+        <rect
+           style="fill:#d3c9b7;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14678"
+           width="4.6458073"
+           height="5.4201088"
+           x="437.28662"
+           y="645.18652" />
+        <rect
+           style="fill:#f56a9e;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14680"
+           width="4.6458073"
+           height="16.647476"
+           x="437.28662"
+           y="655.25244" />
+        <rect
+           style="fill:#a6b27c;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14682"
+           width="4.8393826"
+           height="11.420943"
+           x="437.48019"
+           y="677.51361" />
+        <rect
+           style="fill:#191928;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14684"
+           width="7.9365878"
+           height="11.614519"
+           x="440.57742"
+           y="699.58118" />
+        <rect
+           style="fill:#191928;fill-opacity:1;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14686"
+           width="7.9365878"
+           height="11.808094"
+           x="440.771"
+           y="716.61578" />
+        <rect
+           style="fill:#9fbfc1;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14688"
+           width="8.7108889"
+           height="61.944099"
+           x="487.03549"
+           y="637.83063" />
+        <rect
+           style="fill:#72a2b1;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14690"
+           width="5.2265334"
+           height="11.227368"
+           x="487.42264"
+           y="715.45435" />
+        <rect
+           style="fill:#4e4d53;fill-opacity:0.996078;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14692"
+           width="7.1622868"
+           height="10.646642"
+           x="526.52484"
+           y="701.51691" />
+        <rect
+           style="fill:#4d4c52;fill-opacity:1;stroke:#432d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           id="rect14694"
+           width="6.775136"
+           height="9.4851904"
+           x="545.10809"
+           y="701.71051" />
+      </g>
+      <g
+         id="layer49"
+         inkscape:label="bracitoplc 6"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#432c33;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 480.6475,733.45686 479.48605,617.8924"
+           id="path33186" />
+        <path
+           style="fill:none;stroke:#422d34;stroke-width:3.4723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 521.10445,618.08707 0.96846,116.53014"
+           id="path33188" />
+        <path
+           style="fill:none;stroke:#432c33;stroke-width:3.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 541.8173,735.19904 0.38715,-116.72592"
+           id="path33190" />
+      </g>
+      <g
+         id="layer50"
+         inkscape:label="bracitoplc 7"
+         style="display:inline">
+        <rect
+           style="fill:#acacb8;fill-opacity:0.996078;stroke:#422d34;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect36118"
+           width="11.808094"
+           height="41.037968"
+           x="495.16565"
+           y="766.17108" />
+        <rect
+           style="fill:#acacb8;fill-opacity:1;stroke:#422d34;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect36120"
+           width="7.549437"
+           height="41.812267"
+           x="526.71844"
+           y="762.29956" />
+        <rect
+           style="fill:#acacb8;fill-opacity:1;stroke:#422d34;stroke-width:1.0613;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect36120-1"
+           width="7.549437"
+           height="47.095997"
+           x="541.91406"
+           y="762.04877" />
+        <rect
+           style="fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396"
+           width="3.7518525"
+           height="13.356678"
+           x="530.37915"
+           y="762.42542" />
+        <rect
+           style="fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:0.927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396-3"
+           width="3.7518525"
+           height="13.356678"
+           x="545.71167"
+           y="762.04877" />
+        <rect
+           style="display:inline;fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:0.927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396-3-0"
+           width="3.7518525"
+           height="13.356678"
+           x="528.73328"
+           y="786.12146"
+           inkscape:transform-center-x="-15.877896"
+           inkscape:transform-center-y="-23.679966" />
+        <rect
+           style="display:inline;fill:#422d34;fill-opacity:1;stroke:#422d34;stroke-width:0.927;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect38396-3-0-9"
+           width="3.7518525"
+           height="13.356678"
+           x="543.72144"
+           y="789.26965"
+           inkscape:transform-center-x="-15.877896"
+           inkscape:transform-center-y="-23.679966" />
+      </g>
+      <g
+         id="layer51"
+         inkscape:label="bracitoplc 8">
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="692.67322" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="688.22467" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="683.77612" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="679.32758" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="674.87903" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="670.43048" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="665.98193" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="661.53339" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="657.08484" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="652.63629" />
+        <rect
+           style="fill:#a6b27c;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="648.18774" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5-8"
+           width="3.6272781"
+           height="4.4485483"
+           x="528.0769"
+           y="643.7392" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-7"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="693.17474" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="688.7262" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="684.27765" />
+        <rect
+           style="fill:#a5b17b;fill-opacity:1;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-8"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="679.8291" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-6"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="675.38055" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="670.93201" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="666.48346" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-0"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="662.03491" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-2"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="657.58636" />
+        <rect
+           style="fill:#a5b17b;fill-opacity:1;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-4"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="653.13782" />
+        <rect
+           style="fill:#a6b27c;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5-9"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="648.68927" />
+        <rect
+           style="fill:#d2c8b6;fill-opacity:0.996078;stroke:#422d34;stroke-width:1.027;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect40699-4-3-3-1-9-3-6-4-0-5-8-1"
+           width="3.6272781"
+           height="4.4485483"
+           x="547.7467"
+           y="644.24072" />
+      </g>
+      <g
+         id="layer12"
+         inkscape:label="piernas1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 303.67005,695.87776 c 0,0 8.17142,20.65132 10.53645,31.4521 3.12408,14.26726 4.49063,28.95763 4.71781,43.56116 0.0425,2.73357 -0.62904,8.17755 -0.62904,8.17755 0,0 -13.5481,8.85046 -20.91565,12.10906 -2.21358,0.97904 -6.91946,2.20164 -6.91946,2.20164 0,0 -4.25625,-0.25265 -5.9759,0.78631 -1.86725,1.12814 -2.87795,3.35789 -3.77425,5.34685 -1.21716,2.70097 -2.89417,5.81127 -2.04439,8.64933 0.74456,2.48665 3.27563,4.32412 5.66138,5.34686 4.5353,1.94422 10.4375,0.95612 15.568 [...]
+           id="path45804"
+           sodipodi:nodetypes="csscscsssssscsccc" />
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 349.74737,702.16818 8.96385,72.02531 c 0,0 1.1094,6.66922 3.30248,9.5929 2.73079,3.64053 7.23484,4.9864 11.32275,6.13316 9.2398,2.59198 28.14963,-0.78631 28.14963,-0.78631 0,0 7.49833,-5.59383 8.80659,-10.06467 0.91855,-3.13907 0.53128,-6.91577 -1.10082,-9.75015 -1.00971,-1.75352 -2.94495,-3.00961 -4.87508,-3.617 -1.75081,-0.55096 -3.72827,-0.30668 -5.50412,0.15726 -4.80939,1.25645 -8.57615,5.12018 -13.20988,6.91947 -2.6787,1.04015 -5.47589,1.91194 -8.33481,2.20164 -3.708 [...]
+           id="path45806"
+           sodipodi:nodetypes="ccsscssssssscsssccc" />
+      </g>
+      <g
+         id="layer13"
+         inkscape:label="piernas2"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 296.59332,813.27273 c -1.65123,-1.49398 -2.14474,-1.41645 -2.3724,-5.09025 0,0 0.98475,-2.852 3.1587,-5.15134 l -0.80374,5.75966 0.72511,4.16741 z"
+           id="path50785"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 283.80717,811.40996 c -1.09189,-1.9407 -1.5845,-2.02376 -0.63475,-5.57997 0,0 1.83877,-2.39219 4.62994,-3.88295 l -2.58967,5.20704 -0.63462,4.18214 z"
+           id="path50785-5"
+           sodipodi:nodetypes="cccccc"
+           inkscape:transform-center-x="1.2111362"
+           inkscape:transform-center-y="0.54705423" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 406.70034,784.46583 c -0.51381,-2.16669 -0.20814,-2.56182 -3.31794,-4.53103 0,0 -2.97366,-0.51087 -6.03585,0.28661 l 5.43453,2.07014 3.30274,2.64292 z"
+           id="path50785-7"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 410.42874,777.16475 c -0.51381,-2.16669 -0.20814,-2.56182 -3.31794,-4.53103 0,0 -2.97366,-0.51087 -6.03585,0.28661 l 5.43453,2.07014 3.30274,2.64292 z"
+           id="path50785-7-0"
+           sodipodi:nodetypes="cccccc" />
+      </g>
+      <g
+         id="layer8"
+         inkscape:label="cola1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 266.43514,668.97904 c 0,0 -35.74884,34.3707 -51.59679,53.37598 -7.82609,9.38525 -14.93118,19.40333 -21.3504,29.8016 -5.01676,8.12647 -10.13103,16.36002 -13.34399,25.35359 -4.4804,12.54132 -6.29825,18.70817 -6.2272,32.02559 0.0413,7.73538 1.21731,22.30215 3.1136,29.8016 3.25519,12.87359 11.11999,38.25279 11.11999,38.25279 l 5.7824,33.35999 8.896,-16.4576 18.6816,48.48319 -6.2272,-42.70079 c 0,0 24.6715,21.78542 39.58719,28.0224 16.39477,6.85546 34.77126,7.94088 52.48639,9. [...]
+           id="path26360"
+           sodipodi:nodetypes="cssssscccccssssssssssssccsssssscsscc" />
+      </g>
+      <g
+         id="layer9"
+         inkscape:label="cola2"
+         style="display:inline">
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 352.28151,872.69739 c 0,0 7.44415,4.85397 10.2304,8.2288 1.81572,2.19929 3.29625,4.79864 4.0032,7.5616 1.30484,5.0997 0.91579,10.57227 0.2224,15.79039 -0.782,5.88496 -2.57092,11.661 -4.8928,17.1248 -2.31244,5.4416 -10.15408,16.28915 -10.15408,16.28915 0,0 30.85563,-3.23121 45.07087,-7.17076 13.95855,-3.86841 26.07208,-13.03889 40.03199,-16.90239 7.14369,-1.97707 14.72383,-1.79375 22.0176,-3.1136 7.09741,-1.28432 14.47159,-1.8928 21.12799,-4.6704 16.52917,-6.89734 32.61892 [...]
+           id="path30974"
+           sodipodi:nodetypes="csssscsssssssssscccccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 295.79193,876.25579 c 0,0 0.86685,2.27962 1.7792,5.3376 0.97587,3.27088 0.88529,6.84558 0.4448,10.23039 -0.93197,7.16143 -2.93554,14.374 -6.4496,20.6832 -4.29611,7.71331 -17.3472,20.01599 -17.3472,20.01599 -18.29893,-1.24213 -29.41982,-9.37518 -40.47679,-17.56959 l -5.1152,-3.5584 c 0,0 14.80505,-2.82191 19.3488,-4.8928 5.26384,-2.39908 10.73722,-4.88001 14.9008,-8.896 3.24121,-3.12632 6.06377,-7.02353 7.33919,-11.34239 1.82667,-6.18552 -0.2224,-15.7904 -0.2224,-15.7904 l [...]
+           id="path30976"
+           sodipodi:nodetypes="cssscccsssccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 173.91676,809.9806 c 0,0 6.53772,7.07804 10.8976,8.6736 7.10409,2.59984 22.68479,0.6672 22.68479,0.6672 l 20.01599,-6.0048 4.6704,15.3456 c 0,0 -2.92583,10.40351 -5.78239,14.9008 -2.36154,3.71794 -5.42281,7.16682 -9.1184,9.56319 -5.01672,3.25305 -10.99731,5.06684 -16.9024,6.0048 -5.5663,0.88415 -16.90239,-0.4448 -16.90239,-0.4448 l -3.1136,-9.5632 -5.1152,-19.12639 z"
+           id="path30978"
+           sodipodi:nodetypes="cscccssscccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 186.37115,764.83342 c 0,0 2.61472,6.12608 4.8928,8.45119 3.70148,3.77789 8.5302,6.61323 13.5664,8.2288 4.6723,1.49883 9.79676,1.60842 14.6784,1.112 4.83236,-0.49141 14.01119,-4.0032 14.01119,-4.0032 l 8.6736,-16.01279 c 0,0 -3.5584,0.2224 -7.784,0 -4.2256,-0.2224 -13.59615,1.11289 -19.57119,-1.5568 -3.9257,-1.75403 -7.03587,-5.26626 -9.3408,-8.896 -1.88504,-2.96851 -3.336,-10.008 -3.336,-10.008 z"
+           id="path30980"
+           sodipodi:nodetypes="csssccssscc" />
+      </g>
+      <g
+         id="layer11"
+         inkscape:label="cola3"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 213.28155,724.35663 c 1.31933,2.2684 3.06616,4.67929 7.8952,8.11759 5.15226,3.05071 10.30453,4.25128 15.45679,3.4472 -3.89287,-1.51625 -7.70178,-3.36833 -11.00879,-7.228 -4.65549,-4.19699 -3.58085,-7.57539 -4.448,-11.23119 z"
+           id="path40775"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 228.57154,708.45503 4.0588,5.6156 c 4.42518,4.67147 3.92725,4.15725 5.56,5.5044 4.59015,4.00912 10.45844,3.96209 16.0684,3.892 -3.57693,-2.13133 -9.02839,-4.26267 -10.7308,-6.394 -0.7713,-0.89985 -4.23439,-5.78656 -6.3384,-8.618 -1.12088,-1.50842 -3.3916,-4.5036 -3.3916,-4.5036 z"
+           id="path43167"
+           sodipodi:nodetypes="cccccscc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 242.24407,693.48199 c 1.31933,2.2684 3.06616,4.67929 7.8952,8.11759 5.15226,3.05071 10.30453,4.25128 15.45679,3.4472 -3.89287,-1.51625 -7.70178,-3.36833 -11.00879,-7.228 -4.65549,-4.19699 -3.58085,-7.57539 -4.448,-11.23119 z"
+           id="path40775-6"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:2.20844;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 255.92442,678.49794 c 0.76194,2.01697 1.84443,4.20907 5.23803,7.664 3.69756,3.18742 7.6251,4.88104 11.80188,4.95614 -2.41828,-1.84402 -5.67527,-3.8023 -7.8123,-7.38345 -3.16198,-4.04309 -1.89165,-6.61971 -2.1233,-9.6933 z"
+           id="path40775-3"
+           sodipodi:nodetypes="cccccc" />
+      </g>
+      <g
+         id="layer42"
+         inkscape:label="brazos"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 251.17189,538.75344 c -10.30848,7.4695 -21.90306,14.08159 -30.25013,22.85869 0.93037,8.39579 11.48929,15.65882 17.93107,23.40621 l 2.87445,15.05663 6.02265,7.93895 -3.8326,-27.78632 -9.03397,-12.31906 12.45593,-9.03397 z"
+           id="path106114"
+           sodipodi:nodetypes="ccccccccc" />
+      </g>
+      <g
+         id="layer43"
+         inkscape:label="brazos 1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 229.81886,606.09762 -1.64254,-3.8326 c 0,0 5.02138,-4.18315 7.93894,-3.83259 4.98818,0.59936 11.63467,9.58149 11.63467,9.58149 l -0.27376,10.67651 c 0,0 -16.95316,1.72375 -24.36435,-1.64254 -2.34995,-1.06739 -4.90487,-2.95792 -5.47514,-5.47513 -1.05857,-4.67255 4.79074,-13.55097 4.79074,-13.55097 0,0 4.88203,-7.88988 8.21271,-6.70704 2.76577,0.98222 1.77942,8.62334 1.77942,8.62334"
+           id="path108592"
+           sodipodi:nodetypes="ccaccaacac" />
+      </g>
+      <g
+         id="layer44"
+         inkscape:label="brazos 2"
+         style="display:none;opacity:1">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 410.96038,558.17441 c 0,0 10.7989,2.96383 12.96955,7.45265 5.79413,11.98202 -5.90405,39.48936 -5.90405,39.48936 0,0 4.54276,2.00875 6.19441,3.77472 1.76439,1.88651 3.63847,4.28954 3.58115,6.87192 -0.0314,1.41627 -2.12933,3.67793 -2.12933,3.67793 l -6.19441,3.87151 -10.84022,-43.45766 z"
+           id="path109612"
+           sodipodi:nodetypes="cacaacccc" />
+      </g>
+      <g
+         id="layer34"
+         inkscape:label="bracitoplc">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 404.95955,523.81479 c 0,0 7.56997,8.77919 10.84022,13.55028 14.94151,21.79874 39.87651,68.52566 39.87651,68.52566 h 13.55028 l 9.09804,0.38715 c 0,0 7.39921,5.48435 7.35586,9.48519 -0.0333,3.07341 -5.80726,7.16228 -5.80726,7.16228 h -6.38799 l -3.67793,-4.45223 c 0,0 6.30824,4.95935 5.22654,7.93659 -0.69013,1.8995 -3.80845,2.04074 -5.80726,1.74218 -4.14173,-0.61864 -10.45307,-6.96871 -10.45307,-6.96871 l -10.64664,-8.13017 -32.32708,-38.32791 z"
+           id="path1012"
+           sodipodi:nodetypes="cacccacccaacccc" />
+      </g>
+      <g
+         id="layer1-0"
+         inkscape:label="cuerpo1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:5.91496;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 274.89137,499.14486 c 0,0 -12.68668,21.84593 -16.98413,33.65375 -5.48792,15.07878 -10.30664,30.83258 -11.00824,46.86363 -0.96332,22.01137 3.20928,44.28601 9.43563,65.42037 2.34659,7.96513 5.39306,16.00563 10.3792,22.64552 7.32006,9.7479 17.01388,17.99725 27.67784,23.90359 9.02196,4.9969 19.35356,7.67485 29.56498,9.12111 11.62794,1.64688 23.84306,2.2592 35.22635,-0.62904 8.81758,-2.23725 17.12692,-6.8826 24.21812,-12.58084 7.77455,-6.24736 13.87649,-14.51702 19.18579,-22.9 [...]
+           id="path948"
+           sodipodi:nodetypes="csssssssssssssccc" />
+      </g>
+      <g
+         id="layer2"
+         inkscape:label="cuerpo2"
+         style="display:inline">
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#67464f;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.992157"
+           d="m 254.76202,547.89562 c 0,0 6.01284,-0.6026 9.12112,0.62904 5.46166,2.16415 11.75134,1.01913 17.61317,0.62904 4.98734,-0.33189 14.78249,-2.51617 14.78249,-2.51617 0,0 -5.50262,-3.48901 -8.17755,-5.34685 -2.03224,-1.41147 -4.23666,-2.64338 -5.97589,-4.4033 -2.90413,-2.93868 -5.53439,-6.29888 -7.23399,-10.06467 -1.54841,-3.43081 -1.57944,-7.36261 -2.51617,-11.00824 -0.56983,-2.21771 -1.88712,-6.60494 -1.88712,-6.60494 z"
+           id="path4530"
+           sodipodi:nodetypes="csscsssscc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 249.10065,603.56584 c 0,0 16.74071,-2.54379 24.53264,-5.66138 5.5423,-2.2175 10.58478,-5.60871 15.41153,-9.12111 4.86456,-3.53992 13.5244,-11.9518 13.5244,-11.9518 0,0 -5.45796,-0.18457 -8.17755,0 -4.64498,0.31525 -9.18421,1.79268 -13.83892,1.88713 -6.63346,0.1346 -13.58445,0.39398 -19.81482,-1.88713 -4.31495,-1.57982 -11.32276,-7.86302 -11.32276,-7.86302 l -2.83069,12.26632 z"
+           id="path8585"
+           sodipodi:nodetypes="csscsssccc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#6b4852;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 398.34087,536.88738 c 0,0 -4.40524,8.31835 -8.3348,10.3792 -6.46951,3.39293 -21.85922,1.5726 -21.85922,1.5726 l 7.86303,9.59289 c 0,0 8.07129,2.72998 12.26632,2.83069 4.42008,0.10611 9.28625,-0.0431 13.05262,-2.35891 2.51854,-1.54854 5.14278,-4.12726 5.34686,-7.07672 0.39362,-5.68889 -8.33481,-14.93975 -8.33481,-14.93975 z m -33.49649,42.77486"
+           id="path11029"
+           sodipodi:nodetypes="csccsssc" />
+        <path
+           style="fill:#a86971;fill-opacity:1;stroke:#6b4953;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           d="m 410.44993,571.95648 5.81864,17.92769 c 0,0 -3.66745,1.821 -5.66138,2.04439 -6.77165,0.75866 -13.92872,-0.065 -20.2866,-2.51617 -4.42369,-1.70546 -11.63728,-8.17754 -11.63728,-8.17754 l 11.00823,-0.47179 c 0,0 9.85612,-0.66712 14.15345,-2.83069 2.6519,-1.33514 6.60494,-5.97589 6.60494,-5.97589 z"
+           id="path11483"
+           sodipodi:nodetypes="ccssccsc" />
+      </g>
+      <g
+         id="layer3"
+         inkscape:label="cuerpo3"
+         style="display:inline">
+        <path
+           style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 339.60472,521.75027 -0.2224,71.39039 28.24479,25.35359 20.9056,-23.79679 c 0,0 1.15878,-20.29151 -0.4448,-30.2464 -1.53253,-9.51383 -8.6736,-27.57759 -8.6736,-27.57759 l -6.2272,-13.344 z"
+           id="path15367"
+           sodipodi:nodetypes="ccccsccc" />
+      </g>
+      <g
+         id="layer4"
+         inkscape:label="cuerpo4"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path17570-8"
+           sodipodi:type="arc"
+           sodipodi:cx="643.40137"
+           sodipodi:cy="363.7131"
+           sodipodi:rx="2.4238381"
+           sodipodi:ry="7.0955071"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 645.82521,363.7131 a 2.4238381,7.0955071 0 0 1 -2.38763,7.09472 2.4238381,7.0955071 0 0 1 -2.45897,-6.88273 2.4238381,7.0955071 0 0 1 2.31416,-7.30037 2.4238381,7.0955071 0 0 1 2.52811,6.66461 l -2.41951,0.42377 z"
+           transform="matrix(0.88968208,0.45658055,-0.54212471,0.84029804,0,0)" />
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path18346"
+           sodipodi:type="arc"
+           sodipodi:cx="383.65356"
+           sodipodi:cy="587.5553"
+           sodipodi:rx="1.4546597"
+           sodipodi:ry="1.3760295"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 385.10822,587.5553 a 1.4546597,1.3760295 0 0 1 -1.43292,1.37587 1.4546597,1.3760295 0 0 1 -1.47575,-1.33476 1.4546597,1.3760295 0 0 1 1.38884,-1.41576 1.4546597,1.3760295 0 0 1 1.51724,1.29247 l -1.45207,0.0822 z" />
+      </g>
+      <g
+         id="layer7"
+         inkscape:label="cuerpo5"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 291.89993,633.39505 c 0,0 3.89054,-1.12226 5.8936,-1.3344 3.17022,-0.33576 7.6637,-2.44906 9.5632,0.1112 0.71293,0.96093 -0.27054,2.49938 -1.0008,3.4472 -0.79147,1.02727 -2.05095,1.8274 -3.336,2.0016 -2.05856,0.27905 -6.0048,-1.668 -6.0048,-1.668 l -1.2232,-0.8896"
+           id="path22026"
+           sodipodi:nodetypes="csssscc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 277.44393,673.42704 c 0,0 0.96236,-3.33842 2.3352,-4.1144 1.25889,-0.71157 3.07074,-0.77887 4.5036,-0.5838 0.75716,0.10308 1.59414,0.64314 2.0572,1.251 0.94367,1.23875 0.34538,3.1816 -0.1112,4.6704 -0.54263,1.7694 -3.0024,4.6704 -3.0024,4.6704"
+           id="path22028"
+           sodipodi:nodetypes="cssssc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 335.82392,667.42224 c 0,0 0.76468,-4.17048 2.1128,-5.6712 0.94161,-1.04819 2.40947,-1.56667 3.7808,-1.8904 1.98413,-0.46839 4.12867,-0.4546 6.116,0 1.16358,0.26617 2.97066,0.39053 3.2248,1.5568 0.35872,1.64617 -1.74518,3.08621 -3.2248,3.892 -1.37686,0.74983 -4.6704,0.556 -4.6704,0.556"
+           id="path22030"
+           sodipodi:nodetypes="csssssc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 318.92152,681.21104 5.1152,-0.1112 c 0,0 1.84002,0.0173 2.0016,-0.6672 0.13248,-0.5612 -1.3344,-1.112 -1.3344,-1.112 l -3.2248,-1.112"
+           id="path22032"
+           sodipodi:nodetypes="ccscc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 380.41511,671.42544 8.2288,-4.448 c 0,0 2.08613,-0.60007 2.5576,0.1112 1.11458,1.68146 -0.9049,4.05547 -2.1128,5.6712 -0.44388,0.59375 -1.7792,1.3344 -1.7792,1.3344"
+           id="path22034"
+           sodipodi:nodetypes="ccssc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:2.89134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 395.7607,615.60305 c 0,0 -0.76638,2.41373 0,3.1136 0.90696,0.82825 2.59389,0.25922 3.6696,-0.3336 1.22718,-0.6763 2.89206,-1.9753 2.5576,-3.336 -0.27313,-1.1112 -1.75804,-1.52103 -2.79908,-1.99601 -1.07172,-0.48898 -4.56151,0.0484 -4.56151,0.0484"
+           id="path22036"
+           sodipodi:nodetypes="cssssc" />
+      </g>
+      <g
+         id="layer5"
+         inkscape:label="cuerpo6"
+         style="display:inline">
+        <path
+           style="fill:#47353a;fill-opacity:1;stroke:#48353a;stroke-width:1.00476;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           d="m 254.95538,649.80043 c 0,0 18.44089,3.8226 27.8543,4.71782 12.13083,1.15364 24.37576,0.90865 36.55876,0.62904 12.56559,-0.28839 25.19664,-0.16575 37.66662,-1.72987 9.51549,-1.19353 18.94306,-3.2207 28.17083,-5.81864 11.3354,-3.19131 33.23524,-11.9518 33.23524,-11.9518 l 3.16526,-24.21812 c 0,0 -5.37313,2.11683 -8.07141,3.14521 -8.41679,3.20784 -16.29513,7.11271 -24.68904,10.37919 -7.5347,2.93213 -15.28512,6.11555 -23.10642,8.17755 -14.45191,3.81009 -29.53062,5.2585 -44.471 [...]
+           id="path18608"
+           sodipodi:nodetypes="cssssccssssscccc" />
+      </g>
+      <g
+         id="layer6"
+         inkscape:label="cuerpo7"
+         style="display:inline">
+        <rect
+           style="fill:#47353a;fill-opacity:1;stroke:#8f8381;stroke-width:6.67087;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect21069"
+           width="36.327179"
+           height="16.826874"
+           x="277.61121"
+           y="659.9422"
+           transform="rotate(-4.2348532)" />
+      </g>
+      <g
+         id="layer14"
+         inkscape:label="cabeza1"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#694650;stroke-width:4.0252;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 217.0195,218.90663 -38.37156,-11.32276 c 0,0 -58.46937,0.0343 -67.93654,13.83893 -6.96054,10.14957 -1.00939,27.41604 3.14521,39.00061 5.34747,14.91071 26.73429,38.37156 26.73429,38.37156 l 12.26632,11.00823 c 0,0 -1.4636,16.46148 -3.14521,24.53264 -1.75948,8.44492 -7.23399,24.84716 -7.23399,24.84716 l -16.35509,18.55675 23.58908,7.5485 -35.54088,20.12934 44.97651,7.86303 -25.79073,12.89536 c 0,0 48.88224,30.62342 74.22696,44.34747 21.44031,11.60983 42.86475,23.62943 65.73 [...]
+           id="path57316"
+           sodipodi:nodetypes="ccssccsccccccsscccccccccsscccccssccssssscc" />
+      </g>
+      <g
+         id="layer36"
+         inkscape:label="SOMBRAS 3"
+         style="display:inline">
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 155.53776,308.75262 c -2.62623,17.54433 -4.84338,37.94961 -11.32415,52.36212 l -13.84064,15.48602 c 0,0 26.42303,8.22696 25.26158,8.22696 -1.16145,0 -33.97247,19.26074 -33.97247,19.26074 l 45.4902,8.32374 -28.93951,14.13099 52.5557,31.55278 -16.77414,-15.94078 -14.48827,-14.93448 25.93909,-20.51898 c 0,0 -17.22335,1.62206 -24.19692,-2.51648 -3.03217,-1.79947 -6.21244,-5.19132 -6.00083,-8.71089 0.4856,-8.07682 16.06675,-18.19608 16.06675,-18.19608 0,0 -10.57214,-1.63693 -1 [...]
+           id="path65911"
+           sodipodi:nodetypes="cccscccccccaacaac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 480.45392,261.32667 c -20.50896,7.18066 -48.63851,54.13462 -62.33125,87.10889 -8.68146,20.90633 -11.00017,44.34101 -11.22737,66.97706 -0.22256,22.17337 9.67877,65.8156 9.67877,65.8156 l 10.45306,1.5486 2.32291,7.35586 -2.32291,7.74302 -16.26032,10.06591 -11.22737,8.51732 -2.71005,5.42011 19.74468,-1.93576 8.51731,-9.29161 17.03463,-18.97038 -0.58072,-22.7451 c 0,0 8.48676,-5.08539 12.77596,-7.54944 10.30639,-5.9208 16.16505,-16.08504 22.26116,-25.8423 4.83237,-7.73455 16. [...]
+           id="path65913"
+           sodipodi:nodetypes="caacccccccccccsscccccccccccc" />
+      </g>
+      <g
+         id="layer15"
+         inkscape:label="ojjos 1"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 202.55154,385.28825 c 0,0 21.31315,24.22071 33.33923,34.91183 10.68757,9.50119 22.05463,18.37662 34.28279,25.79073 10.82678,6.56443 22.60415,11.46424 34.28279,16.35509 11.62446,4.86816 23.18495,10.41378 35.54087,12.89536 6.3803,1.28143 12.9973,1.19081 19.50031,0.94356 3.37856,-0.12846 7.12276,0.40814 10.06467,-1.25808 6.95287,-3.93793 10.95952,-11.85453 14.78249,-18.87126 5.52024,-10.13193 9.52298,-21.31327 11.32275,-32.71019 1.63567,-10.35778 0.15288,-20.99516 -0.62904,- [...]
+           id="path61200"
+           sodipodi:nodetypes="csssssssssssssssssc" />
+      </g>
+      <g
+         id="layer16"
+         inkscape:label="ojos2"
+         style="display:inline">
+        <path
+           style="fill:#744a54;fill-opacity:1;stroke:#744a54;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 269.22999,399.4417 c 0,0 4.78954,-16.35662 9.12111,-23.58908 3.5524,-5.93148 8.66074,-10.81211 13.52441,-15.72605 4.024,-4.0656 8.08471,-8.22771 12.89536,-11.32276 5.80107,-3.73227 12.06628,-7.36317 18.87126,-8.49207 5.50596,-0.9134 11.88204,0.48822 16.66961,1.57261 3.1747,0.71907 6.80808,0.46276 9.62921,-1.16114 1.83406,-1.05573 3.72411,-3.8021 4.30187,-5.83792 0.76057,-2.67998 -0.13185,-6.00728 -1.93576,-8.13017 -3.03403,-3.57053 -12.96954,-5.42011 -12.96954,-5.42011 0, [...]
+           id="path63630"
+           sodipodi:nodetypes="csssssssscssssssssssssccssssc" />
+      </g>
+      <g
+         id="layer17"
+         inkscape:label="ojos3"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#f4eae0;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 274.48979,398.95871 c 0,0 4.13955,-13.53875 7.74301,-19.5511 3.69512,-6.16529 8.67339,-11.55954 13.93742,-16.4539 5.61443,-5.22015 11.78528,-10.00631 18.58323,-13.55028 3.87217,-2.01868 8.03099,-3.20496 12.38882,-3.48435 4.47055,-0.28662 8.94731,0.42084 13.16312,1.93575 4.67217,1.6789 9.27383,3.88306 13.16313,6.96871 5.69678,4.51965 10.43724,10.30824 14.32457,16.4539 5.34455,8.44943 9.47328,17.81483 12.00167,27.4877 1.14796,4.39173 1.35502,13.55027 1.35502,13.55027 0,0 -6 [...]
+           id="path67428"
+           sodipodi:nodetypes="csssssssscsssssc" />
+      </g>
+      <g
+         id="layer18"
+         inkscape:label="ojos4"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 314.3663,350.17773 c -2.33914,1.61419 -4.73085,3.26325 -6.58156,5.42011 -3.61747,4.21589 -6.41804,9.18135 -8.51731,14.32458 -1.85701,4.5497 -2.78357,9.46071 -3.48436,14.32457 -0.58037,4.02809 -0.89055,8.13736 -0.58072,12.19524 0.37091,4.85783 2.90363,14.32458 2.90363,14.32458 0,0 1.44908,3.64045 2.41969,4.30705 0.84954,0.58346 12.02736,3.85876 18.34125,5.27492 5.96771,1.33852 11.80171,1.92363 17.76054,2.22612 5.54352,0.28141 15.97871,1.26633 21.9708,-0.19357 5.91594,-1.44 [...]
+           id="path70242"
+           sodipodi:nodetypes="ssssscssssscsssssssss" />
+      </g>
+      <g
+         id="layer19"
+         inkscape:label="ojos5"
+         style="display:inline">
+        <path
+           style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:2.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 353.55558,353.9808 c 0,0 -4.55113,-0.32472 -6.28147,0.0684 -1.67452,0.38048 -4.20397,1.26512 -5.94615,2.91051 -1.74218,1.64539 -5.42224,4.70379 -7.7977,8.22007 -2.59931,3.84763 -4.20108,8.36707 -5.32332,12.87276 -1.30037,5.2209 -1.7468,10.69 -1.54861,16.06675 0.12661,3.43465 0.6825,6.89315 1.74218,10.1627 1.35237,4.1726 3.2043,8.27764 5.80726,11.8081 1.92315,2.60843 7.11389,6.92032 7.11389,6.92032 3.177,0.77776 6.67504,0.27133 10.01753,0.38714 3.85537,-0.17036 7.71075,-0. [...]
+           id="path78492"
+           sodipodi:nodetypes="csssssssccccsccccc" />
+      </g>
+      <g
+         id="layer20"
+         inkscape:label="ojos6"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path80803"
+           sodipodi:type="arc"
+           sodipodi:cx="341.92657"
+           sodipodi:cy="373.2132"
+           sodipodi:rx="5.347518"
+           sodipodi:ry="5.6136842"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 347.27409,373.2132 a 5.347518,5.6136842 0 0 1 -5.26763,5.61305 5.347518,5.6136842 0 0 1 -5.42502,-5.44534 5.347518,5.6136842 0 0 1 5.10554,-5.77576 5.347518,5.6136842 0 0 1 5.57757,5.27277 l -5.33798,0.33528 z" />
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 345.96747,382.04507 c -0.52605,-0.045 -0.91728,0.20181 -1.25824,0.60493 -0.32711,0.38674 -0.57973,0.90602 -0.48394,1.40341 0.11562,0.60036 0.41803,1.26055 0.94368,1.5728 0.49971,0.29684 1.2174,0.32248 1.74218,0.0726 0.46315,-0.22053 0.78564,-0.73883 0.91948,-1.23404 0.1313,-0.48582 0.11184,-1.08287 -0.16937,-1.50021 -0.35899,-0.53276 -1.05371,-0.86471 -1.69379,-0.91949 z"
+           id="path81104"
+           sodipodi:nodetypes="ssssssss" />
+      </g>
+      <g
+         id="layer21"
+         inkscape:label="ojos7"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 502.61754,353.96758 c 0,0 1.23515,-9.40721 0.27375,-13.9616 -1.20579,-5.71213 -3.84306,-11.24202 -7.39143,-15.8779 -4.13306,-5.39977 -9.53449,-10.07454 -15.60414,-13.14032 -6.28235,-3.17321 -13.49898,-4.64989 -20.53176,-4.92763 -5.26172,-0.2078 -10.8125,0.28 -15.60414,2.46382 -5.42213,2.47117 -10.07094,6.76236 -13.68784,11.49778 -4.75835,6.22987 -7.4632,13.8877 -9.85525,21.35303 -2.83428,8.84549 -4.10372,18.1523 -5.20138,27.37569 -1.3172,11.06813 -2.05038,22.25956 -1.6425 [...]
+           id="path84123"
+           sodipodi:nodetypes="cssssssssssccsssc" />
+      </g>
+      <g
+         id="layer22"
+         inkscape:label="ojos8"
+         style="display:inline">
+        <path
+           style="fill:#744a54;fill-opacity:1;stroke:#744a54;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 467.02915,310.714 c 0,0 -6.24469,0.99641 -8.76022,2.73757 -6.61529,4.57888 -14.85131,19.0261 -14.85131,19.0261 0,0 6.33033,-0.28027 9.30773,0.61595 5.8607,1.76412 11.3072,5.11014 15.94634,9.10242 4.18588,3.60222 7.80207,8.34958 10.26588,13.00344 2.46381,4.65387 4.31278,7.5869 5.33826,11.77155 0.98972,4.03874 1.18667,8.32814 0.68439,12.45593 -0.56484,4.64194 -1.21069,9.74233 -4.10635,13.41409 -4.78742,6.07056 -12.84614,8.80197 -19.98425,11.77154 -7.31589,3.04353 -15.22762, [...]
+           id="path87132"
+           sodipodi:nodetypes="cacaasaaaassssscaac" />
+      </g>
+      <g
+         id="layer23"
+         inkscape:label="ojos9"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#f4eae0;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 427.19753,340.00598 -7.39143,66.79667 c 0,0 9.0644,0.38848 13.55096,-0.13688 9.01468,-1.05559 18.10479,-2.70863 26.55441,-6.02265 6.87021,-2.69456 19.16298,-11.08715 19.16298,-11.08715 0,0 2.14811,-8.97556 2.19005,-13.55097 0.0414,-4.51657 -0.35645,-9.17521 -1.91629,-13.41408 -2.83271,-7.6979 -7.10724,-15.24819 -13.14033,-20.80552 -3.40731,-3.13862 -7.84064,-5.24818 -12.31906,-6.43329 -3.66335,-0.96942 -7.60932,-0.94494 -11.36091,-0.41063 -5.32799,0.75882 -15.33038,5.0645 [...]
+           id="path92268"
+           sodipodi:nodetypes="ccaacaaaaac" />
+      </g>
+      <g
+         id="layer24"
+         inkscape:label="ojos10"
+         style="display:inline">
+        <path
+           style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 427.47129,339.73222 26.82817,62.55344 c 8.51952,-3.52914 12.42628,-5.36693 15.5357,-6.91236 l 2.39537,-11.97686 c 1.66485,-8.14938 2.74407,-14.1317 -0.61595,-26.07534 -0.48453,-2.7093 -3.97116,-11.17671 -5.88577,-13.41409 -3.35252,-3.79435 -7.44261,-6.87827 -13.34565,-8.48646 l -7.93895,-0.75283 z"
+           id="path95549"
+           sodipodi:nodetypes="ccccccccc" />
+      </g>
+      <g
+         id="layer25"
+         inkscape:label="ojos11"
+         style="display:inline">
+        <path
+           style="fill:#48353a;fill-opacity:1;stroke:#48353a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 426.94726,339.56284 -6.45677,56.97393 c 0,0 1.14877,4.63212 2.53225,6.50172 1.27054,1.71698 5.03029,3.96948 5.03029,3.96948 3.5926,0.125 7.90171,-0.19696 11.12136,-0.78705 4.01508,-0.77266 9.69122,-2.02184 14.4749,-3.28509 0.61056,-0.16123 1.81363,-0.54751 1.81363,-0.54751 0,0 4.30506,-5.7163 5.81734,-8.93132 2.02395,-4.30279 3.36692,-8.94581 4.24323,-13.6194 0.79648,-4.24783 1.24029,-8.6274 0.88971,-12.93501 -0.25855,-3.1768 -1.06849,-6.32428 -2.19006,-9.30773 -1.76325,- [...]
+           id="path99061"
+           sodipodi:nodetypes="ccaccacaaaaaaaac" />
+      </g>
+      <g
+         id="layer26"
+         inkscape:label="ojos12"
+         style="display:inline">
+        <path
+           style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:4.0252;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path80803-0"
+           sodipodi:type="arc"
+           sodipodi:cx="433.45966"
+           sodipodi:cy="364.8652"
+           sodipodi:rx="3.9689827"
+           sodipodi:ry="4.0279403"
+           sodipodi:start="0"
+           sodipodi:end="6.2234252"
+           sodipodi:arc-type="slice"
+           d="m 437.42864,364.8652 a 3.9689827,4.0279403 0 0 1 -3.90969,4.02749 3.9689827,4.0279403 0 0 1 -4.02651,-3.90715 3.9689827,4.0279403 0 0 1 3.78939,-4.14423 3.9689827,4.0279403 0 0 1 4.13972,3.78333 l -3.96189,0.24056 z"
+           inkscape:transform-center-x="5.6407799"
+           inkscape:transform-center-y="0.9722915" />
+        <path
+           style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.685875px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 427.15746,373.80187 c -0.36481,-0.0305 -0.63612,0.13689 -0.87257,0.41035 -0.22685,0.26234 -0.40204,0.6146 -0.33561,0.952 0.0802,0.40725 0.2899,0.85509 0.65443,1.06691 0.34654,0.20136 0.84425,0.21875 1.20818,0.0492 0.32119,-0.1496 0.54483,-0.50119 0.63764,-0.83711 0.0911,-0.32956 0.0776,-0.73457 -0.11745,-1.01767 -0.24896,-0.3614 -0.73073,-0.58657 -1.17462,-0.62373 z"
+           id="path81104-5"
+           sodipodi:nodetypes="ssssssss" />
+      </g>
+      <g
+         id="layer10"
+         inkscape:label="nariz4"
+         style="display:inline">
+        <path
+           style="fill:#f4eae0;fill-opacity:1;stroke:#f4eae0;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 437.09305,464.77432 6.19441,12.77597 -1.35503,17.03463 -18.97038,17.2282 -4.06508,6.38798 -13.47938,5.16188 -7.86302,-0.31452 -9.12111,-13.83893 -3.21859,-31.85282 19.74468,-13.55027 z"
+           id="path944" />
+      </g>
+      <g
+         id="layer29"
+         inkscape:label="nariz3"
+         style="display:inline">
+        <path
+           style="fill:#f7b2c7;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 398.72682,507.13452 5.84558,-4.80659 1.03256,-3.50877 14.44067,-2.70335 c 0,0 -0.65017,2.29272 -0.51329,2.29272 0.13688,0 2.7522,1.30613 2.7522,1.30613 l -3.36815,2.04739 -13.55097,4.41433 -6.57016,1.5741 z"
+           id="path121669" />
+      </g>
+      <g
+         id="layer27"
+         inkscape:label="nariz1"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 330.43305,494.19777 16.4539,15.29244 c 0,0 10.35541,11.75749 17.42178,14.32458 6.91404,2.51175 14.87381,1.73059 22.06759,0.19357 4.99773,-1.06782 13.93742,-6.38798 13.93742,-6.38798 l 4.64581,-6.38799"
+           id="path103332"
+           sodipodi:nodetypes="ccaacc" />
+        <path
+           style="fill:none;stroke:#684650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.996078"
+           d="m 410.76681,511.42597 12.19524,0.38715 c 0,0 7.71212,-4.99359 11.03379,-8.13016 2.49884,-2.35959 5.00722,-4.88155 6.58156,-7.93659 1.49843,-2.90773 2.21151,-6.22833 2.51648,-9.48519 0.33174,-3.54276 -0.0128,-7.17083 -0.7743,-10.64664 -0.58994,-2.69265 -2.90363,-7.74302 -2.90363,-7.74302 l -2.3229,-3.0972"
+           id="path103334"
+           sodipodi:nodetypes="ccaaaacc" />
+        <path
+           style="fill:none;stroke:#694650;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 392.18358,521.49188 c 0,0 9.02373,1.69497 13.55027,1.35503 3.38647,-0.25432 6.98431,-0.72983 9.87234,-2.51648 3.19022,-1.9736 7.35586,-8.51731 7.35586,-8.51731"
+           id="path103336"
+           sodipodi:nodetypes="caac" />
+        <path
+           style="fill:#f7b2c7;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 397.21654,500.68254 c 0,0 1.56844,-2.31284 2.80684,-2.71006 1.67703,-0.53792 4.20555,-0.66075 5.22653,0.77431 0.70428,0.98992 -0.67751,3.58114 -0.67751,3.58114 l -6.96871,5.42011 c 0,0 -7.10496,0.97495 -9.29162,-1.25824 -2.58985,-2.64496 -2.18162,-7.44905 -1.25824,-11.0338 0.75029,-2.91278 2.86558,-5.49222 5.22653,-7.35586 3.24944,-2.56498 7.3859,-4.38916 11.51774,-4.6458 1.63241,-0.10139 3.1146,1.41541 4.74259,1.25824 2.42726,-0.23433 4.15668,-2.93618 6.58156,-3.194 3.10 [...]
+           id="path103338"
+           sodipodi:nodetypes="caaccaaaaaaaaccacc" />
+        <path
+           style="fill:#f7b2c7;fill-opacity:1;stroke:#67464f;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 397.60369,507.74804 c 0,0 3.22164,1.4085 4.93617,1.45181 2.48761,0.0628 5.10779,-0.49153 7.25907,-1.74218 1.22343,-0.71124 2.90363,-3.0972 2.90363,-3.0972 0,0 0.33123,2.3459 1.25824,2.71005 1.58926,0.62429 3.42269,-0.85254 4.74259,-1.93575 1.67391,-1.37374 3.58115,-5.42011 3.58115,-5.42011 v 0"
+           id="path103340"
+           sodipodi:nodetypes="caacaacc" />
+      </g>
+      <g
+         id="layer37"
+         inkscape:label="sombra5"
+         style="display:inline">
+        <path
+           style="fill:none;stroke:#dad2d1;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 410.69422,513.43431 8.42052,0.29037 c -0.89939,1.28114 -1.55467,3.28485 -6.17021,5.80726 -6.91095,1.97763 -10.46171,1.62023 -13.62286,0.99207 l 2.3229,-1.33083 4.98457,-6.79933 5.81974,-6.8762 0.39353,1.12069 c 0.37206,0.43706 0.38352,1.01034 1.71098,1.08647 2.01068,-0.18971 2.20166,-0.657 2.9771,-1.03514 0,0 1.51372,-1.1186 2.13873,-1.81364 0.90858,-1.01039 1.60235,-2.20024 2.29271,-3.37063 1.05872,-1.79486 2.82312,-5.57779 2.82312,-5.57779 0,0 1.21845,-0.77832 1.77942,- [...]
+           id="path78067"
+           sodipodi:nodetypes="ccccccccccaacaaaaaaaaaaaaaaaccccccccccc"
+           clip-path="url(#clipPath81911)" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 412.26067,462.13575 2.66801,18.91099 1.45181,-0.12098 c 0,0 1.5728,0.0726 1.63329,0.0726 0.0605,0 1.45182,0.18148 1.50021,0.18148 0.0484,0 0.7864,0.18147 0.7864,0.18147 l 1.597,0.49604 0.87109,0.41135 0.83479,0.43554 0.7864,0.54443 0.84689,0.68962 1.42762,1.47601 1.19775,1.69378 0.67751,1.50021 0.39925,1.70588 v 1.04047 l -0.18148,0.7985 -0.38715,0.738 -0.7259,0.87109 -0.93158,0.8106 -1.34293,0.94368 -0.5846,0.41111 -2.65779,5.22677 -1.17355,2.00834 -1.00417,1.39133 -0.66 [...]
+           id="path82108"
+           sodipodi:nodetypes="cccssccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
+      </g>
+      <g
+         id="layer28"
+         inkscape:label="nariz2"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#684650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 426.39801,475.54195 c -0.75398,0.59916 -1.35987,1.76916 -1.06466,2.68585 0.4259,1.32251 2.13044,2.42705 3.50855,2.25032 1.5569,-0.19965 3.24382,-1.8913 3.19399,-3.46016 -0.0308,-0.96934 -1.1804,-1.71605 -2.10513,-2.00835 -1.1355,-0.35893 -2.60041,-0.20856 -3.53275,0.53234 z"
+           id="path103438"
+           sodipodi:nodetypes="aaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#67464f;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.992157"
+           d="m 430.82605,486.45475 c -0.65127,0.89445 -0.76426,2.38207 -0.16938,3.31498 0.61281,0.96104 2.06309,1.5551 3.1698,1.28244 0.94459,-0.23272 1.55756,-1.31089 1.88736,-2.22612 0.47581,-1.3204 1.11149,-3.42001 -0.0484,-4.21026 -1.42613,-0.97165 -3.82362,0.44391 -4.83938,1.83896 z"
+           id="path103440"
+           sodipodi:nodetypes="aaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694750;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 369.92242,501.94078 c -1.74253,0.11096 -3.65435,0.98243 -4.64581,2.41969 -0.94074,1.36374 -1.53205,3.57979 -0.58073,4.93617 1.5413,2.19757 5.2778,2.63962 7.8398,1.83896 1.28636,-0.40201 2.59478,-1.65764 2.71006,-3.00041 0.18604,-2.16706 -1.79343,-4.14886 -3.48436,-5.5169 -0.50786,-0.41089 -1.18702,-0.71902 -1.83896,-0.67751 z"
+           id="path103342"
+           sodipodi:nodetypes="aaaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 370.74511,482.34128 c -1.06402,0.75907 -1.98064,2.33168 -1.59699,3.58114 0.32323,1.05268 1.70828,1.66608 2.80684,1.74218 1.549,0.1073 3.78147,-0.40979 4.25865,-1.88736 0.44213,-1.36905 -0.89961,-3.06587 -2.17772,-3.72633 -0.97829,-0.50553 -2.39433,-0.34916 -3.29078,0.29037 z"
+           id="path103388"
+           sodipodi:nodetypes="aaaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 352.64582,486.0676 c -0.36057,1.41343 1.2673,3.22088 2.71005,3.43596 1.39859,0.2085 3.28975,-1.0191 3.48436,-2.41969 0.1609,-1.15792 -1.09054,-2.43233 -2.22612,-2.71005 -1.39705,-0.34166 -3.61279,0.30019 -3.96829,1.69378 z"
+           id="path103390"
+           sodipodi:nodetypes="aaaaa" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 352.06308,514.48996 c 0,0 0.92034,-2.35683 1.98414,-2.66166 1.36499,-0.39114 3.41207,0.24216 3.9683,1.5486 0.44477,1.04465 -0.58195,2.27156 -1.30664,3.1456 -0.35696,0.43053 -1.40342,0.91948 -1.40342,0.91948"
+           id="path103392"
+           sodipodi:nodetypes="caaac" />
+      </g>
+      <g
+         id="layer31"
+         inkscape:label="SOMBRAS"
+         style="display:inline">
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 547.81813,821.92077 -14.71173,6.58156 c 0,0 -20.04642,9.4511 -20.13183,18.58323 -0.0401,4.28964 9.8648,4.6531 9.29162,8.90446 -1.22993,9.12259 -40.07226,7.0871 -40.65082,18.58323 -0.23206,4.6112 16.368,3.85278 12.38882,6.19441 -8.7326,5.13888 -115.3747,51.08568 -115.37088,51.10388 22.3368,-2.2537 41.71738,-14.30148 55.55041,-19.96007 11.32914,-1.74424 22.65827,-2.80865 33.98741,-5.52947 14.55542,-1.8339 26.06489,-10.97808 38.99618,-16.70988 18.06089,-13.95357 25.08208,-25 [...]
+           id="path949"
+           sodipodi:nodetypes="ccassscccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 445.3366,835.93267 c 0,0 -16.17886,14.32145 -25.27818,20.05735 -15.42858,9.72566 -49.16813,24.00334 -49.16813,24.00334 -4.44886,2.75522 -5.38193,1.67502 -5.87368,0.11339 l -7.23844,-6.64798 c 18.35192,-6.49248 36.75539,-13.2943 55.46787,-21.95016 z"
+           id="path951"
+           sodipodi:nodetypes="caccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 272.35476,872.90958 c 0,0 0.57084,7.71915 0.10249,11.53601 -0.2354,1.91841 -1.45182,5.61369 -1.45182,5.61369 l 25.1648,1.88735 c 0.47994,-2.9835 0.36177,-4.37206 0.49764,-6.43805 -0.55144,-2.5936 -1.0986,-5.18806 -2.27941,-7.65579 0,0 -5.84602,-0.64508 -8.71988,-1.24687 -4.50803,-0.94399 -13.31382,-3.69634 -13.31382,-3.69634 z"
+           id="path953"
+           sodipodi:nodetypes="caccccac" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 226.28954,815.53279 c 0,0 -7.95288,2.68162 -12.00168,3.7747 -3.38519,0.91392 -10.25948,2.32291 -10.25948,2.32291 0,0 1.3589,13.85165 3.48435,20.4222 1.2834,3.96745 5.5169,11.22737 5.5169,11.22737 5.56183,-2.04316 6.86738,-4.39034 9.00125,-6.67835 3.87527,-4.01314 6.35463,-11.0035 9.00125,-17.2282 z"
+           id="path955"
+           sodipodi:nodetypes="cacacccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 220.99255,764.33128 -8.78502,16.50455 c 2.97496,0.55016 6.51461,0.25328 10.21418,-0.28348 2.48336,-0.80195 1.67568,-0.38328 9.9428,-3.33373 l 6.71642,-12.83266 -8.92023,0.16037 z"
+           id="path957"
+           sodipodi:nodetypes="ccccccc" />
+      </g>
+      <g
+         id="layer32"
+         inkscape:label="SOMBRAS 1"
+         style="display:inline">
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 298.02413,877.42421 c 2.73354,7.81873 1.97618,9.48503 2.11154,13.52964 l 35.91107,-2.05603 25.81194,-4.66526 c -2.00278,-2.61499 -5.49159,-5.52718 -9.30134,-8.50356 l -23.63967,3.7249 z"
+           id="path960"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 232.36854,834.45015 c -1.72206,4.96881 -3.87893,9.57529 -6.69495,13.63246 -2.98321,3.45811 -6.32185,6.34751 -10.21656,8.34723 0,0 7.00444,12.3255 12.18753,16.98196 6.62044,5.94777 14.88148,10.07695 23.22904,13.16312 5.05634,1.86938 15.87318,3.0972 15.87318,3.0972 1.94325,-2.09404 3.81964,-10.11169 1.67265,-19.47249 -5.17626,-1.71992 -8.96515,-3.76359 -15.4165,-9.5638 z"
+           id="path962"
+           sodipodi:nodetypes="cccaacccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 210.58644,784.48054 c 0,0 -4.33631,9.886 -5.54524,15.11465 -1.37844,5.96186 -1.88391,18.2605 -1.88391,18.2605 3.64141,0.81129 13.27584,-3.06759 20.71256,-5.22654 0,0 -0.53922,-8.93795 0.1721,-13.32147 0.97292,-5.99566 5.53836,-17.36022 5.53836,-17.36022 0,0 -6.69889,2.0907 -10.1627,2.51648 -2.92174,0.35915 -8.83117,0.0166 -8.83117,0.0166 z"
+           id="path964"
+           sodipodi:nodetypes="caccacac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 222.12767,760.75097 c 2.04496,0.68598 14.10806,0.16978 21.88374,0.16808 35.976,-34.5304 40.26607,-47.39531 50.90058,-65.11259 -10.98778,-6.04029 -18.83771,-12.86789 -24.97123,-19.16397 0,0 5.48103,10.16148 4.93618,15.58282 -1.5279,15.20293 -12.85105,28.0321 -22.26116,40.07009 -8.56139,10.95226 -30.48811,28.45557 -30.48811,28.45557 z"
+           id="path966"
+           sodipodi:nodetypes="ccccaac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 320.27035,703.64625 c 0,0 11.9013,8.35426 14.61494,14.71173 4.09221,9.58716 0.7743,31.26241 0.7743,31.26241 0,0 2.56105,-10.59133 3.38757,-15.96996 1.43253,-9.32234 2.71005,-28.16521 2.71005,-28.16521 -7.31232,-0.0128 -14.43105,-0.80008 -21.48686,-1.83897 z"
+           id="path968"
+           sodipodi:nodetypes="cacacc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 352.50064,704.8077 5.90405,48.10347 c 0,0 -0.49128,-14.99406 0.67751,-22.35795 1.11707,-7.03805 2.1625,-14.51487 6.00083,-20.51898 2.90655,-4.54658 7.55844,-7.88631 12.19525,-10.64664 2.5438,-1.51434 8.32374,-3.09721 8.32374,-3.09721 1.71361,-2.54812 2.03574,-5.32816 2.22611,-8.13016 0,0 -10.62032,8.20645 -16.64747,11.03379 -5.88629,2.76125 -18.68002,5.61368 -18.68002,5.61368 z"
+           id="path1083"
+           sodipodi:nodetypes="ccaaaccac" />
+      </g>
+      <g
+         id="layer33"
+         inkscape:label="SOMBRAS 2"
+         style="display:inline">
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 311.69279,694.98153 c 0,0 21.20519,4.69219 31.9133,4.0926 8.86972,-0.49666 17.88896,-2.46095 25.89066,-6.31989 7.44831,-3.59207 13.96971,-9.14786 19.60849,-15.19636 7.11032,-7.62698 12.69856,-16.69142 17.38356,-26.0069 1.90749,-3.79279 4.28047,-11.99548 4.28047,-11.99548 0,0 -10.47172,4.15202 -15.81432,5.92586 -5.7265,1.9013 -17.38356,5.04789 -17.38356,5.04789 0,0 -3.26415,8.74334 -6.08337,12.37291 -7.32531,9.43088 -16.67786,17.69547 -27.23881,23.26933 -9.94266,5.24753 -3 [...]
+           id="path37537"
+           sodipodi:nodetypes="caaaacacaac" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 315.02567,516.1685 c 0,0 8.11408,7.52388 11.63467,11.77154 3.8928,4.69674 10.40275,15.05663 10.40275,15.05663 l 0.13689,-19.09454 c -7.39144,-2.48908 -14.78288,-4.89781 -22.17431,-7.73363 z"
+           id="path37541"
+           sodipodi:nodetypes="caccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 396.60521,531.49889 0.65016,2.05317 c -0.50841,1.64487 -1.38541,3.23708 -2.53224,4.79074 -1.27909,1.80275 -2.59144,3.6166 -4.14057,5.50936 -3.42223,2.80405 -3.85636,2.02238 -5.16716,2.29271 -3.92172,-11.13692 -3.3389,-8.6049 -4.89341,-12.55859 l 6.09109,2.87445 z"
+           id="path37788"
+           sodipodi:nodetypes="cccccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 387.05794,550.69608 c 5.24841,-0.82446 8.96129,-4.92956 11.66889,-9.64993 3.16683,3.47899 4.59204,7.02643 6.57016,10.50542 -1.83514,2.1826 -3.46722,4.59796 -5.64624,5.7489 -4.67848,2.29176 -7.33873,1.6093 -10.36853,1.47144 -0.61183,-2.95115 -1.43945,-5.47069 -2.22428,-8.07583 z"
+           id="path37790"
+           sodipodi:nodetypes="cccccc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:1;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 390.52954,563.38467 c 2.56922,-0.0156 5.13266,-0.0269 8.70898,-0.79778 2.48973,-0.6753 4.1443,-2.3528 6.03498,-3.74696 l 3.51875,12.25975 c -2.74256,2.86412 -5.43184,5.58839 -7.1618,5.79445 -3.13945,0.87612 -6.28817,1.74297 -10.18427,1.86244 -0.12873,-10.02199 -0.57481,-11.37611 -0.91664,-15.3719 z"
+           id="path37792"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="fill:#96636a;fill-opacity:1;stroke:#96636a;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 391.30116,587.75591 c 3.51978,1.44667 7.46595,2.19057 12.07952,2.36115 3.84475,0.13634 7.83163,0.52185 10.60809,-1.30034 l -4.1748,-13.68784 c 0,0 -5.03409,3.74951 -7.80207,5.20138 -0.79345,0.41618 -1.63058,0.76807 -2.49803,0.99237 -2.68337,0.69386 -8.24692,1.0608 -8.24692,1.0608 z"
+           id="path37794"
+           sodipodi:nodetypes="ccccaacc" />
+        <path
+           style="fill:#dad2d1;fill-opacity:0.996364;stroke:#dad2d1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 391.30117,591.79383 c 0,0 -0.78111,10.57858 -0.95815,15.87788 -0.17521,5.2442 -0.10266,15.74103 -0.10266,15.74103 l 25.80158,-10.4712 c 0,0 0.68403,-7.53051 0.47908,-11.29247 -0.16885,-3.0992 -1.40301,-9.20507 -1.40301,-9.20507 0,0 -2.47918,1.04873 -3.79837,1.19769 -6.1974,0.69982 -18.64969,-1.50567 -18.64969,-1.50567 z"
+           id="path37796"
+           sodipodi:nodetypes="caccacasc" />
+      </g>
+      <g
+         id="layer38"
+         inkscape:label="SOMBRAS 4"
+         style="display:inline">
+        <path
+           style="fill:#908482;fill-opacity:1;stroke:#908482;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 174.79851,270.03756 17.80892,-21.68044 -11.03379,-6.19441 -19.74468,-0.19357 c 0,0 8.05542,8.61931 10.36719,13.92401 1.91521,4.39475 2.60236,14.14441 2.60236,14.14441 z"
+           id="path84668"
+           sodipodi:nodetypes="ccccac" />
+        <path
+           style="fill:#908482;fill-opacity:1;stroke:#908482;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 491.94102,223.45401 9.64993,-7.25455 9.78681,-1.23191 -3.90104,27.581 -5.0645,-4.51699 -10.40276,-14.23535 z"
+           id="path84798" />
+      </g>
+      <g
+         id="layer39"
+         inkscape:label="orejas"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 195.39394,245.83363 c 0,0 -3.45588,-4.19123 -5.7489,-5.54357 -2.13818,-1.26102 -4.66627,-1.79943 -7.11768,-2.19005 -2.56868,-0.40932 -5.20686,-0.31168 -7.80207,-0.13688 -2.85536,0.19231 -5.66572,0.81707 -8.48646,1.30034 -3.50152,0.59991 -10.47119,1.98474 -10.47119,1.98474 l -10.40276,2.12161 c -0.81574,0.68439 -1.30941,1.36879 0.75283,2.05318 v 0 l 8.07582,-0.0684 13.00345,0.13684 c 0,0 5.16735,-0.31374 7.73363,-0.0685 2.17787,0.20818 4.41163,0.46408 6.43329,1.30035 1.946 [...]
+           id="path87054"
+           sodipodi:nodetypes="caaaaccccccaaasaacscccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 487.49247,220.16893 21.14772,-6.6386 7.04924,-1.9163 c 0,0 0.34428,6.95974 -0.0684,10.40275 -0.50773,4.23597 -1.40696,8.47572 -2.94289,12.45594 -1.25722,3.25796 -5.0645,9.17086 -5.0645,9.17086 l -0.20532,0.88971 4.38011,10.40276 c 0,0 0.27376,2.66913 0,2.73757 -0.27375,0.0684 -5.47513,-1.43723 -5.47513,-1.43723 l 0.0684,-3.28508 -5.68045,-18.34171 4.85918,6.84392 0.61596,-0.13688 4.10635,-18.41014 c 0,0 1.47984,-5.02104 -0.0684,-6.57017 -1.46762,-1.46845 -4.20331,-0.52774 [...]
+           id="path92311"
+           sodipodi:nodetypes="cccaacccsccccccaaaacc" />
+      </g>
+      <g
+         id="layer30"
+         inkscape:label="casco1"
+         style="display:inline">
+        <path
+           style="fill:#ffe300;fill-opacity:0.996078;stroke:#694650;stroke-width:7;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 144.79433,311.2691 439.41595,-26.7134 -30.97204,-7.74301 -28.262,-11.61451 c -14.77268,-6.07097 -33.64256,-17.60462 -41.03797,-33.68211 -5.07051,-11.0232 0.14051,-24.43766 0.77431,-36.39216 0.49741,-9.38182 -5.60961,-18.05537 -10.06592,-26.32624 -7.23676,-13.43137 -15.48728,-26.83463 -26.71339,-37.16646 -8.5558,-7.87423 -30.24588,-8.00899 -42.58657,-17.03463 -8.36237,-6.116 -11.35719,-17.921827 -19.74468,-24.003335 -11.77674,-8.538948 -26.13513,-14.92456 -40.65082,-15.873 [...]
+           id="path1910"
+           sodipodi:nodetypes="cccsasasaaaacaaccaac" />
+      </g>
+      <g
+         id="layer40"
+         inkscape:label="casco2"
+         style="display:inline">
+        <path
+           style="fill:#cbb400;fill-opacity:1;stroke:#ccb500;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 257.33142,117.37324 c 0,0 14.66769,-3.34433 21.83211,-1.9163 11.50806,2.29381 31.20828,16.28853 31.20828,16.28853 -7.95406,-11.30046 -14.11739,-19.76237 -22.23496,-30.4088 -3.0627,1.22517 -10.9099,4.15792 -10.82118,4.4019 -0.36669,-0.45836 -13.96143,6.97356 -19.98425,11.63467 z"
+           id="path94173"
+           sodipodi:nodetypes="cacccc" />
+        <path
+           style="fill:#cbb400;fill-opacity:1;stroke:#ccb500;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.996078"
+           d="m 410.77212,118.81046 c 0,0 8.43736,17.37195 11.77155,26.41754 3.44769,9.35353 6.18704,18.45001 9.03397,27.10192 2.73472,8.31091 7.39144,25.18563 7.39144,25.18563 0,0 -1.64913,-34.41237 -5.20138,-51.19252 -1.03392,-4.88403 -2.39479,-9.78348 -4.65387,-14.23536 -0.81364,-1.60341 -3.1482,-4.38011 -3.1482,-4.38011 z"
+           id="path94175"
+           sodipodi:nodetypes="csscaacc" />
+        <path
+           style="fill:#cbb400;fill-opacity:1;stroke:#cbb400;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 334.66772,259.11084 114.1566,-6.9808 c -19.16051,-2.69367 -30.65772,-5.90983 -57.55737,-8.07583 -21.52187,3.24857 -37.73931,10.03343 -56.59923,15.05663 z"
+           id="path94177"
+           sodipodi:nodetypes="cccc" />
+      </g>
+      <g
+         id="layer41"
+         inkscape:label="casco3"
+         style="display:inline">
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 304.28072,264.85973 164.66473,-10.95027 -75.55689,-0.82127 z"
+           id="path94180" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 286.87072,99.523031 21.20439,28.623829 26.42303,26.81018 -23.32583,-29.52024 z"
+           id="path94182"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 381.34336,95.819779 c 0,0 8.10743,9.275991 11.61452,14.324571 5.94104,8.55232 10.85071,17.78486 15.87317,26.90697 5.59522,10.16239 15.87318,30.97205 15.87318,30.97205 l 16.64748,37.55361 c 0,0 -3.51333,-11.34761 -5.22654,-17.03463 -3.61001,-11.98342 -6.33752,-24.25485 -10.64664,-36.00501 -4.9536,-13.50755 -17.42178,-39.48936 -17.42178,-39.48936 L 397.99084,98.916983 Z"
+           id="path94184"
+           sodipodi:nodetypes="caaccaaccc" />
+        <path
+           style="fill:#694650;fill-opacity:1;stroke:#694650;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 368.06606,84.180225 c 0,0 6.39675,3.886923 9.10241,6.433285 1.61991,1.524537 4.17489,5.206269 4.17489,5.206269 l 16.64748,3.097204 -8.77707,-10.082892 -13.89316,-8.897097 z"
+           id="path94186"
+           sodipodi:nodetypes="caccccc" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/pom.xml b/plc4j/integrations/apache-hop/plc4x-hop-transformer/pom.xml
new file mode 100644
index 0000000000..e707e0d206
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/pom.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.plc4x</groupId>
+        <artifactId>plc4j-apache-hop</artifactId>
+        <version>0.11.0-SNAPSHOT</version>
+    </parent>
+    
+    <artifactId>plc4x-hop-transform</artifactId>
+    <packaging>jar</packaging>
+    <name>PLC4J: Integrations: Apache Hop: Transform</name>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.jboss.jandex</groupId>
+                <artifactId>jandex-maven-plugin</artifactId>
+                <version>1.0.8</version>
+                <executions>
+                    <execution>
+                        <id>make-index</id>
+                        <goals>
+                            <goal>jandex</goal>
+                        </goals>
+                        <!-- phase is 'process-classes by default' -->
+                        <configuration>
+                            <!-- Nothing needed here for simple cases -->
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <configuration>
+                    <ignoredDependencies>
+                        <dependency>io.netty:netty-common:jar:4.1.89.Final</dependency>   
+                        <dependency>io.netty:netty-all:jar:4.1.89.Final</dependency>                                              
+                        <dependency>commons-lang:commons-lang:jar:2.6</dependency>
+                        <dependency>xml-apis:xml-apis:jar:1.4.01</dependency>
+                        <dependency>org.apache.plc4x:plc4j-spi:jar:${project.version}</dependency>
+                        <dependency>com.fasterxml.jackson.core:jackson-annotations:jar:2.14.2</dependency>
+                    </ignoredDependencies>
+                </configuration>
+            </plugin>             
+        </plugins>
+    </build>    
+    
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-core</artifactId>
+            <version>${hop.version}</version>
+            <scope>compile</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>   
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-engine</artifactId>
+            <version>${hop.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>   
+        </dependency>
+        <dependency>
+            <groupId>org.apache.hop</groupId>
+            <artifactId>hop-ui</artifactId>
+            <version>${hop.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>  
+        </dependency>
+        <dependency>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
+            <version>${netty.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>plc4j-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>hop-plc4x-metadata</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.platform</groupId>
+            <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
+            <version>3.114.0</version>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>plc4j-driver-s7</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.12.0</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEvent.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEvent.java
new file mode 100644
index 0000000000..e87262ec01
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEvent.java
@@ -0,0 +1,346 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xevent;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
+import org.apache.hop.core.CheckResult;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.exception.HopPluginException;
+import org.apache.hop.core.logging.LogLevel;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.RowDataUtil;
+import org.apache.hop.core.row.RowMeta;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.transform.BaseTransform;
+import org.apache.hop.pipeline.transform.ITransform;
+import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.s7.events.S7ModeEvent;
+import org.apache.plc4x.java.s7.readwrite.ModeTransitionType;
+
+/**
+ * Transform That contains the basic skeleton needed to create your own plugin
+ *
+ */
+public class Plc4xEvent extends BaseTransform<Plc4xEventMeta, Plc4xEventData> implements ITransform {
+
+  public static String FIELD_MODE_EVENT = "MODE";
+  public static String FIELD_USER_EVENT = "USR";
+  public static String FIELD_SYS_EVENT = "SYS";
+  public static String FIELD_ALARM_EVENT = "ALM";
+
+  
+  private static final Class<?> PKG = Plc4xEvent.class; // Needed by Translator
+  
+  private Plc4xConnection connmeta              = null;
+  private Plc4xWrapperConnection connwrapper    = null;
+  private PlcReadRequest readRequest            = null;
+  private PlcConsumerRegistration registerMode  = null;
+  private PlcConsumerRegistration registerUser  = null;
+  private PlcConsumerRegistration registerSys   = null;
+  private PlcConsumerRegistration registerAlarm   = null;
+  private PlcSubscriptionRequest subsbuild      = null;
+  private PlcSubscriptionResponse subresponse   = null;
+  
+  private static final ReentrantLock lock = new ReentrantLock();
+  
+  private static final String dummy = "dummy";
+
+  public Plc4xEvent(TransformMeta transformMeta, Plc4xEventMeta meta, Plc4xEventData data, int copyNr, PipelineMeta pipelineMeta,
+                Pipeline pipeline ) {
+    super( transformMeta, meta, data, copyNr, pipelineMeta, pipeline );
+  }
+
+  /*
+  * Including Date and Time field for every row 
+  *
+  * @param meta Meta data from user dialog
+  * @param remarks Error registers
+  * @param origin transform instance name
+  */
+  public static final RowMetaAndData buildRow(
+    Plc4xEventMeta meta, List<ICheckResult> remarks, String origin) throws HopPluginException {
+    IRowMeta rowMeta = new RowMeta();
+    Object[] rowData = RowDataUtil.allocateRowData(2);
+    int index = 0;
+
+    return new RowMetaAndData(rowMeta, rowData);
+  }
+  
+  /* 
+  * 1. Block the other instances by means of a lock.  
+  * 2. Try to locate an existing connection.
+  * 3. If it doesn't exist, it tries to take control of the routine to 
+  *    create an instance of PlcConnection and his wrapper.
+  * 4. Register the connection wrapper for global access.
+  * 5. If the connection to the PLC is made, then it creates the query 
+  *    and executes it.
+  *
+  */
+  @Override
+  public  boolean processRow() throws HopException {
+    Object[] r = getRow(); // Get row from input rowset & set row busy!
+    setLogLevel(LogLevel.DEBUG);
+    
+    if ((!meta.isNeverEnding() && data.rowsWritten >= data.rowLimit) && !isStopped()) {   
+      setOutputDone(); // signal end to receiver(s)
+      return false;        
+    }    
+    
+    lock.lock(); //(01)
+    try {
+        IHopMetadataProvider metaprovider = getMetadataProvider();
+        connmeta = metaprovider.getSerializer(Plc4xConnection.class).load(meta.getConnection());
+        if (connwrapper == null) {
+            connwrapper = (Plc4xWrapperConnection) getPipeline().getExtensionDataMap().get(meta.getConnection()); //(02)
+            if (connwrapper != null) connwrapper.retain();
+        };
+
+        if (connmeta == null){    
+            logError(
+                BaseMessages.getString(
+                    PKG,
+                    "Plc4x.Read.Meta.Log.SetMetadata",
+                    meta.getConnection()));         
+        }
+
+        if ((connmeta != null) && (connwrapper == null)){
+            readRequest = null;
+            try{
+                PlcConnection conn =  new DefaultPlcDriverManager().getConnection(connmeta.getUrl()); //(03)
+                if (conn.isConnected()) {
+                    connwrapper = new Plc4xWrapperConnection(conn);            
+                    getPipeline().getExtensionDataMap().put(meta.getConnection(), connwrapper); //(04)
+                }
+            } catch (Exception ex){
+                setErrors(1L);
+                logError("Unable to create connection to PLC. " + ex.getMessage());
+            }
+        }
+    } finally {
+        lock.unlock();
+    }
+    
+    if ((connmeta != null) && (connwrapper != null)){
+        if (connwrapper.getConnection().isConnected()){
+            if (readRequest == null){
+                final PlcSubscriptionRequest.Builder subscription  = connwrapper.getConnection().subscriptionRequestBuilder(); //(05)
+                if (meta.isModeEvent())  subscription.addEventTagAddress(FIELD_MODE_EVENT, FIELD_MODE_EVENT);
+                if (meta.isUserEvent())  subscription.addEventTagAddress(FIELD_USER_EVENT, FIELD_USER_EVENT);
+                if (meta.isSysEvent())   subscription.addEventTagAddress(FIELD_SYS_EVENT, FIELD_SYS_EVENT);
+                if (meta.isAlarmEvent()) subscription.addEventTagAddress(FIELD_ALARM_EVENT, FIELD_ALARM_EVENT);
+                
+                subsbuild  = subscription.build();
+
+            }            
+            try {    
+                 subresponse = subsbuild.execute().get();    
+                 
+                if (meta.isModeEvent() && subresponse.getResponseCode(FIELD_MODE_EVENT) == PlcResponseCode.OK) {
+                    registerMode = 
+                        subresponse
+                        .getSubscriptionHandle(FIELD_MODE_EVENT)
+                        .register(msg -> {
+                            System.out.println("******** S7ModeEvent ********");
+                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
+                            map.forEach((x, y) -> { 
+                                System.out.println(x + " : " + y);
+                            });
+                            short currentmode = (short) 
+                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
+                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
+                            System.out.println("****************************");
+                        });
+                }    
+                
+                if (meta.isUserEvent() && subresponse.getResponseCode(FIELD_USER_EVENT) == PlcResponseCode.OK) {
+                    registerUser = 
+                        subresponse
+                        .getSubscriptionHandle(FIELD_USER_EVENT)
+                        .register(msg -> {
+                            System.out.println("******** S7ModeEvent ********");
+                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
+                            map.forEach((x, y) -> { 
+                                System.out.println(x + " : " + y);
+                            });
+                            short currentmode = (short) 
+                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
+                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
+                            System.out.println("****************************");
+                        });
+                } 
+
+                if (meta.isSysEvent() && subresponse.getResponseCode(FIELD_SYS_EVENT) == PlcResponseCode.OK) {
+                    registerSys = 
+                        subresponse
+                        .getSubscriptionHandle(FIELD_SYS_EVENT)
+                        .register(msg -> {
+                            System.out.println("******** S7ModeEvent ********");
+                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
+                            map.forEach((x, y) -> { 
+                                System.out.println(x + " : " + y);
+                            });
+                            short currentmode = (short) 
+                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
+                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
+                            System.out.println("****************************");
+                        });
+                } 
+
+                if (meta.isAlarmEvent() && subresponse.getResponseCode(FIELD_ALARM_EVENT) == PlcResponseCode.OK) {
+                    registerAlarm = 
+                        subresponse
+                        .getSubscriptionHandle(FIELD_ALARM_EVENT)
+                        .register(msg -> {
+                            System.out.println("******** S7ModeEvent ********");
+                            Map<String, Object> map = ((S7ModeEvent) msg).getMap();
+                            map.forEach((x, y) -> { 
+                                System.out.println(x + " : " + y);
+                            });
+                            short currentmode = (short) 
+                                    map.get(S7ModeEvent.Fields.CURRENT_MODE.name());
+                            System.out.println("CURRENT_MODE MSG: " + ModeTransitionType.enumForValue(currentmode).name());
+                            System.out.println("****************************");
+                        });
+                }                 
+
+            } catch (Exception ex) {
+                setErrors(1L);                
+                logError("Unable read from PLC. " + ex.getMessage());
+            }
+            
+        } else {
+            setErrors(1L);                
+            logError("PLC is not connected.");            
+            setOutputDone();
+             return false;   
+        }
+        
+    } else {
+        setErrors(1L);                
+        logError("PLC connection don't exist.");         
+        setOutputDone();
+        return false;        
+    }
+
+    
+    r = data.outputRowMeta.cloneRow(data.outputRowData); 
+    logBasic("Tamano de los datos: " + r.length);
+    data.prevDate = data.rowDate;
+    data.rowDate = new Date();    
+
+
+    putRow(data.outputRowMeta, r ); // return your data
+    data.rowsWritten++;
+    return true;
+  }
+
+
+  @Override
+  public boolean init() {
+    try {
+        if(super.init()){     
+            // Determine the number of rows to generate...
+            data.rowLimit = Const.toLong(resolve(meta.getRowLimit()), -1L);
+
+            if (data.rowLimit < 0L) { // Unable to parse
+              logError(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Wrong.RowLimit.Number"));
+              return false; // fail
+            }            
+            
+            // Create a row (constants) with all the values in it...
+            List<ICheckResult> remarks = new ArrayList<>(); // stores the errors...
+            RowMetaAndData outputRow = buildRow(meta, remarks, getTransformName());
+            if (!remarks.isEmpty()) {
+              for (int i = 0; i < remarks.size(); i++) {
+                CheckResult cr = (CheckResult) remarks.get(i);
+                logError(cr.getText());
+              }
+              return false;
+            }
+
+            data.outputRowData = outputRow.getData();
+            data.outputRowMeta = outputRow.getRowMeta();            
+
+          return true;
+        }
+    return false;
+    } catch (Exception ex){
+        setErrors(1L);
+        logError("Error initializing transform", ex);
+        return false;
+    }
+  }
+
+  /*
+  * Here, must perform the cleaning of any resource, main of the connection to 
+  * the associated PLC.
+  */
+    @Override
+    public void cleanup() {
+        super.cleanup();
+        logBasic("Cleanup. Release connection.");
+        if (connwrapper != null)
+        connwrapper.release();     
+    }
+
+
+    /*
+    * Here, must perform the cleaning of any resource. 
+    * 1. Check if we have reference to wrapper.
+    * 2. Release de reference to object.
+    * 3. The lastone remove the global reference to connection wrapper.
+    * 4. Clear local references.
+    */    
+    @Override
+    public void dispose() {
+        super.dispose();
+        if (connwrapper != null) {
+            logBasic("Dispose. Release connection: " + connwrapper.refCnt());            
+            connwrapper.release();   
+            if (!connwrapper.getConnection().isConnected()){           
+                getPipeline().getExtensionDataMap().remove(meta.getConnection());
+            }            
+            connwrapper = null;
+            readRequest = null;
+
+        }
+    }
+ 
+  
+  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventData.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventData.java
new file mode 100644
index 0000000000..ebadf2111b
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventData.java
@@ -0,0 +1,50 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xevent;
+
+import org.apache.plc4x.hop.transforms.plc4xoutput.*;
+import org.apache.plc4x.hop.transforms.plc4xinput.*;
+import java.util.Date;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.pipeline.transform.BaseTransformData;
+import org.apache.hop.pipeline.transform.ITransformData;
+
+
+public class Plc4xEventData extends BaseTransformData implements ITransformData {
+    
+  //The Plc4xConnection metadata
+  public String connection;    
+    
+  public IRowMeta outputRowMeta;
+  public Object[] outputRowData;
+
+  public long rowLimit;
+  public long rowsWritten;
+  public Date rowDate;
+  public Date prevDate;
+  public long delay;
+  
+
+    
+  /**
+   * Default constructor for SampleData.
+   */
+  public Plc4xEventData() {
+      super();
+  }
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventDialog.java
new file mode 100644
index 0000000000..ea369b5cb7
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventDialog.java
@@ -0,0 +1,663 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xevent;
+
+import org.apache.hop.core.Const;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.pipeline.transform.BaseTransformMeta;
+import org.apache.hop.pipeline.transform.ITransformDialog;
+import org.apache.hop.ui.core.ConstUi;
+import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.dialog.EnterNumberDialog;
+import org.apache.hop.ui.core.dialog.EnterTextDialog;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
+import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
+import org.apache.hop.ui.core.widget.MetaSelectionLine;
+import org.apache.hop.ui.core.widget.TableView;
+import org.apache.hop.ui.core.widget.TextVar;
+import org.apache.hop.ui.pipeline.dialog.PipelinePreviewProgressDialog;
+import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
+import org.apache.hop.ui.util.SwtSvgImageUtil;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class Plc4xEventDialog extends BaseTransformDialog implements ITransformDialog {
+  private static final Class<?> PKG = Plc4xEventDialog.class; // Needed by Translator
+
+  private MetaSelectionLine<Plc4xConnection> wConnection;  
+  
+  private Label wlLimit;
+  private TextVar wLimit;
+
+  private Button wNeverEnding;
+  
+  private Button wModeEvent;  
+  private Button wUserEvent;
+  private Button wSysEvent;
+  private Button wAlarmEvent;
+
+  private Label wlMaxwait;
+  private TextVar wMaxwait;  
+  
+  private Label wlInterval;
+  private TextVar wInterval;
+
+  private Label wlRowTimeField;
+  private TextVar wRowTimeField;
+
+  private Label wlLastTimeField;
+  private TextVar wLastTimeField;
+
+  private TableView wFields;
+  
+  private final Plc4xEventMeta input;
+
+  public Plc4xEventDialog(Shell parent, IVariables variables , Object in, PipelineMeta pipelineMeta, String sname ) {
+    super( parent, variables, (BaseTransformMeta) in, pipelineMeta, sname );
+    input = (Plc4xEventMeta) in;
+  }
+
+  @Override
+  public String open() {
+    Shell parent = getParent();
+
+    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | SWT.MIN);
+    props.setLook(shell);
+    setShellImage(shell, input);
+
+    ModifyListener lsMod = e -> input.setChanged();
+    changed = input.hasChanged();
+
+    FormLayout formLayout = new FormLayout();
+    formLayout.marginWidth = Const.FORM_MARGIN;
+    formLayout.marginHeight = Const.FORM_MARGIN;
+
+    shell.setLayout(formLayout);
+    shell.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.DialogTitle"));
+
+    int middle = props.getMiddlePct();
+    int margin = props.getMargin();
+
+    // Filename line
+    wlTransformName = new Label(shell, SWT.RIGHT);
+    wlTransformName.setText(BaseMessages.getString(PKG, "System.Label.TransformName"));
+    props.setLook(wlTransformName);
+    fdlTransformName = new FormData();
+    fdlTransformName.left = new FormAttachment(0, 0);
+    fdlTransformName.right = new FormAttachment(middle, -margin);
+    fdlTransformName.top = new FormAttachment(0, margin);
+    wlTransformName.setLayoutData(fdlTransformName);
+    
+    wTransformName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    wTransformName.setText(transformName);
+    props.setLook(wTransformName);
+    wTransformName.addModifyListener(lsMod);
+    fdTransformName = new FormData();
+    fdTransformName.left = new FormAttachment(middle, 0);
+    fdTransformName.top = new FormAttachment(0, margin);
+    fdTransformName.right = new FormAttachment(100, 0);
+    wTransformName.setLayoutData(fdTransformName);
+
+    // Connection line
+    wConnection =
+        new MetaSelectionLine<>(
+            variables,
+            metadataProvider,
+            Plc4xConnection.class,
+            shell,
+            SWT.NONE,
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Label"),
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Tooltip"));
+    FormData fdConnection = new FormData();
+    fdConnection.left = new FormAttachment(0, 0);
+    fdConnection.right = new FormAttachment(100, 0);
+    fdConnection.top = new FormAttachment(wTransformName, margin);
+    wConnection.setLayoutData(fdConnection);    
+    props.setLook(wConnection);
+    try {
+      wConnection.fillItems();
+    } catch (Exception e) {
+      new ErrorDialog(shell, "Error", "Error listing Cassandra connection metadata objects", e);
+    }    
+    
+    Control lastControl = wConnection;    
+    
+    wlLimit = new Label(shell, SWT.RIGHT);
+    wlLimit.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Limit.Label"));
+    props.setLook(wlLimit);
+    FormData fdlLimit = new FormData();
+    fdlLimit.left = new FormAttachment(0, 0);
+    fdlLimit.right = new FormAttachment(middle, -margin);
+    fdlLimit.top = new FormAttachment(lastControl, margin);
+    wlLimit.setLayoutData(fdlLimit);
+    wLimit = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLimit);
+    wLimit.addModifyListener(lsMod);
+    FormData fdLimit = new FormData();
+    fdLimit.left = new FormAttachment(middle, 0);
+    fdLimit.top = new FormAttachment(lastControl, margin);
+    fdLimit.right = new FormAttachment(100, 0);
+    wLimit.setLayoutData(fdLimit);
+    lastControl = wLimit;
+    
+    /********************
+    * Never Ending
+    ********************/
+    Label wlNeverEnding = new Label(shell, SWT.RIGHT);
+    wlNeverEnding.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlNeverEnding);
+    FormData fdlNeverEnding = new FormData();
+    fdlNeverEnding.left = new FormAttachment(0, 0);
+    fdlNeverEnding.right = new FormAttachment(middle, -margin);
+    fdlNeverEnding.top = new FormAttachment(lastControl, margin);
+    wlNeverEnding.setLayoutData(fdlNeverEnding);
+    wNeverEnding = new Button(shell, SWT.CHECK);
+    props.setLook(wNeverEnding);
+    wNeverEnding.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        });
+    
+    FormData fdNeverEnding = new FormData();
+    fdNeverEnding.left = new FormAttachment(middle, 0);
+    fdNeverEnding.top = new FormAttachment(wlNeverEnding, 0, SWT.CENTER);
+    fdNeverEnding.right = new FormAttachment(100, 0);
+    wNeverEnding.setLayoutData(fdNeverEnding);
+    lastControl = wlNeverEnding;    
+    
+    /********************
+    * Mode Events
+    ********************/
+    Label wlModeEvent = new Label(shell, SWT.RIGHT);
+    wlModeEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlModeEvent);
+    FormData fdlModeEvent = new FormData();
+    fdlModeEvent.left = new FormAttachment(0, 0);
+    fdlModeEvent.right = new FormAttachment(middle, -margin);
+    fdlModeEvent.top = new FormAttachment(lastControl, margin);
+    wlModeEvent.setLayoutData(fdlModeEvent);
+    wModeEvent = new Button(shell, SWT.CHECK);
+    props.setLook(wModeEvent);
+    wModeEvent.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        }); 
+    
+    FormData fdModeEvent = new FormData();
+    fdModeEvent.left = new FormAttachment(middle, 0);
+    fdModeEvent.top = new FormAttachment(wlModeEvent, 0, SWT.CENTER);
+    fdModeEvent.right = new FormAttachment(100, 0);
+    wModeEvent.setLayoutData(fdModeEvent);
+    lastControl = wlModeEvent;        
+    
+    /********************
+    * User Events
+    ********************/
+    Label wlUserEvent = new Label(shell, SWT.RIGHT);
+    wlUserEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlUserEvent);
+    FormData fdlUserEvent = new FormData();
+    fdlUserEvent.left = new FormAttachment(0, 0);
+    fdlUserEvent.right = new FormAttachment(middle, -margin);
+    fdlUserEvent.top = new FormAttachment(lastControl, margin);
+    wlUserEvent.setLayoutData(fdlUserEvent);
+    wUserEvent = new Button(shell, SWT.CHECK);
+    props.setLook(wUserEvent);
+    wUserEvent.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        });   
+    
+    FormData fdUserEvent = new FormData();
+    fdUserEvent.left = new FormAttachment(middle, 0);
+    fdUserEvent.top = new FormAttachment(wlUserEvent, 0, SWT.CENTER);
+    fdUserEvent.right = new FormAttachment(100, 0);
+    wUserEvent.setLayoutData(fdUserEvent);
+    lastControl = wlUserEvent;      
+    
+    /********************
+    * Sys Events
+    ********************/
+    Label wlSysEvent = new Label(shell, SWT.RIGHT);
+    wlSysEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlSysEvent);
+    FormData fdlSysEvent = new FormData();
+    fdlSysEvent.left = new FormAttachment(0, 0);
+    fdlSysEvent.right = new FormAttachment(middle, -margin);
+    fdlSysEvent.top = new FormAttachment(lastControl, margin);
+    wlSysEvent.setLayoutData(fdlSysEvent);
+    wSysEvent = new Button(shell, SWT.CHECK);
+    props.setLook(wSysEvent);
+    wSysEvent.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        });  
+    
+    FormData fdSysEvent = new FormData();
+    fdSysEvent.left = new FormAttachment(middle, 0);
+    fdSysEvent.top = new FormAttachment(wlSysEvent, 0, SWT.CENTER);
+    fdSysEvent.right = new FormAttachment(100, 0);
+    wSysEvent.setLayoutData(fdSysEvent);
+    lastControl = wlSysEvent;  
+    
+    /********************
+    * Alarm Events
+    ********************/
+    Label wlAlarmEvent = new Label(shell, SWT.RIGHT);
+    wlAlarmEvent.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlAlarmEvent);
+    FormData fdlAlarmEvent = new FormData();
+    fdlAlarmEvent.left = new FormAttachment(0, 0);
+    fdlAlarmEvent.right = new FormAttachment(middle, -margin);
+    fdlAlarmEvent.top = new FormAttachment(lastControl, margin);
+    wlAlarmEvent.setLayoutData(fdlAlarmEvent);
+    wAlarmEvent = new Button(shell, SWT.CHECK);
+    props.setLook(wAlarmEvent);
+    wAlarmEvent.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        });      
+    
+    FormData fdAlarmEvent = new FormData();
+    fdAlarmEvent.left = new FormAttachment(middle, 0);
+    fdAlarmEvent.top = new FormAttachment(wlAlarmEvent, 0, SWT.CENTER);
+    fdAlarmEvent.right = new FormAttachment(100, 0);
+    wAlarmEvent.setLayoutData(fdAlarmEvent);
+    lastControl = wlAlarmEvent;  
+
+    
+    wOk = new Button(shell, SWT.PUSH);
+    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
+    wOk.addListener(SWT.Selection, e -> ok());
+
+    wCancel = new Button(shell, SWT.PUSH);
+    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
+    wCancel.addListener(SWT.Selection, e -> cancel());
+
+    setButtonPositions(new Button[] {wOk, wCancel}, margin, null);    
+    
+        /*
+    
+    wlMaxwait = new Label(shell, SWT.RIGHT);
+    wlMaxwait.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Maxwait.Label"));
+    props.setLook(wlMaxwait);
+    FormData fdlMaxwait = new FormData();
+    fdlMaxwait.left = new FormAttachment(0, 0);
+    fdlMaxwait.right = new FormAttachment(middle, -margin);
+    fdlMaxwait.top = new FormAttachment(lastControl, margin);
+    wlMaxwait.setLayoutData(fdlMaxwait);
+    wMaxwait = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wMaxwait);
+    wMaxwait.addModifyListener(lsMod);
+    FormData fdMaxwait = new FormData();
+    fdMaxwait.left = new FormAttachment(middle, 0);
+    fdMaxwait.top = new FormAttachment(lastControl, margin);
+    fdMaxwait.right = new FormAttachment(100, 0);
+    wMaxwait.setLayoutData(fdMaxwait);
+    lastControl = wMaxwait;    
+
+    wlInterval = new Label(shell, SWT.RIGHT);
+    wlInterval.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Interval.Label"));
+    props.setLook(wlInterval);
+    FormData fdlInterval = new FormData();
+    fdlInterval.left = new FormAttachment(0, 0);
+    fdlInterval.right = new FormAttachment(middle, -margin);
+    fdlInterval.top = new FormAttachment(lastControl, margin);
+    wlInterval.setLayoutData(fdlInterval);
+    wInterval = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wInterval);
+    wInterval.addModifyListener(lsMod);
+    FormData fdInterval = new FormData();
+    fdInterval.left = new FormAttachment(middle, 0);
+    fdInterval.top = new FormAttachment(lastControl, margin);
+    fdInterval.right = new FormAttachment(100, 0);
+    wInterval.setLayoutData(fdInterval);
+    lastControl = wInterval;
+    
+
+    wlRowTimeField = new Label(shell, SWT.RIGHT);
+    wlRowTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.RowTimeField.Label"));
+    props.setLook(wlRowTimeField);
+    FormData fdlRowTimeField = new FormData();
+    fdlRowTimeField.left = new FormAttachment(0, 0);
+    fdlRowTimeField.right = new FormAttachment(middle, -margin);
+    fdlRowTimeField.top = new FormAttachment(lastControl, margin);
+    wlRowTimeField.setLayoutData(fdlRowTimeField);
+    wRowTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wRowTimeField);
+    wRowTimeField.addModifyListener(lsMod);
+    FormData fdRowTimeField = new FormData();
+    fdRowTimeField.left = new FormAttachment(middle, 0);
+    fdRowTimeField.top = new FormAttachment(lastControl, margin);
+    fdRowTimeField.right = new FormAttachment(100, 0);
+    wRowTimeField.setLayoutData(fdRowTimeField);
+    lastControl = wRowTimeField;
+
+    wlLastTimeField = new Label(shell, SWT.RIGHT);
+    wlLastTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.LastTimeField.Label"));
+    props.setLook(wlLastTimeField);
+    FormData fdlLastTimeField = new FormData();
+    fdlLastTimeField.left = new FormAttachment(0, 0);
+    fdlLastTimeField.right = new FormAttachment(middle, -margin);
+    fdlLastTimeField.top = new FormAttachment(lastControl, margin);
+    wlLastTimeField.setLayoutData(fdlLastTimeField);
+    wLastTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLastTimeField);
+    wLastTimeField.addModifyListener(lsMod);
+    FormData fdLastTimeField = new FormData();
+    fdLastTimeField.left = new FormAttachment(middle, 0);
+    fdLastTimeField.top = new FormAttachment(lastControl, margin);
+    fdLastTimeField.right = new FormAttachment(100, 0);
+    wLastTimeField.setLayoutData(fdLastTimeField);
+    lastControl = wLastTimeField;
+
+    wOk = new Button(shell, SWT.PUSH);
+    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
+    wOk.addListener(SWT.Selection, e -> ok());
+    wPreview = new Button(shell, SWT.PUSH);
+    wPreview.setText(BaseMessages.getString(PKG, "System.Button.Preview"));
+    wPreview.addListener(SWT.Selection, e -> preview());
+    wCancel = new Button(shell, SWT.PUSH);
+    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
+    wCancel.addListener(SWT.Selection, e -> cancel());
+
+    setButtonPositions(new Button[] {wOk, wPreview, wCancel}, margin, null);
+
+    Label wlFields = new Label(shell, SWT.NONE);
+    wlFields.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Label"));
+    props.setLook(wlFields);
+    FormData fdlFields = new FormData();
+    fdlFields.left = new FormAttachment(0, 0);
+    fdlFields.top = new FormAttachment(lastControl, margin);
+    wlFields.setLayoutData(fdlFields);
+    lastControl = wlFields;
+
+    final int nrFields = input.getFields().size();
+
+    ColumnInfo[] colinf =
+        new ColumnInfo[] {
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Name"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Item"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),            
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Type"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              ValueMetaFactory.getValueMetaNames()),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Format"),
+              ColumnInfo.COLUMN_TYPE_FORMAT,
+              2),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Length"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Precision"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Currency"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Decimal"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Group"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Value"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.SetEmptyString"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              new String[] {
+                BaseMessages.getString(PKG, "System.Combo.Yes"),
+                BaseMessages.getString(PKG, "System.Combo.No")
+              })
+        };
+
+    wFields =
+        new TableView(
+            variables,
+            shell,
+            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
+            colinf,
+            nrFields,
+            lsMod,
+            props);
+
+    FormData fdFields = new FormData();
+    fdFields.left = new FormAttachment(0, 0);
+    fdFields.top = new FormAttachment(lastControl, margin);
+    fdFields.right = new FormAttachment(100, 0);
+    fdFields.bottom = new FormAttachment(wOk, -2 * margin);
+    wFields.setLayoutData(fdFields);
+
+    lsResize =
+        event -> {
+          Point size = shell.getSize();
+          wFields.setSize(size.x - 10, size.y - 50);
+          wFields.table.setSize(size.x - 10, size.y - 50);
+          wFields.redraw();
+        };
+    */
+    
+    //shell.addListener(SWT.Resize, lsResize);
+
+    getData();
+    input.setChanged(changed);
+
+    BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());
+
+    return transformName;      
+    };
+
+
+    public void setActive() {
+        boolean neverEnding = wNeverEnding.getSelection();
+
+        wlLimit.setEnabled(!neverEnding);
+        wLimit.setEnabled(!neverEnding);
+    }
+
+
+
+  private Image getImage() {
+    return SwtSvgImageUtil.getImage( shell.getDisplay(), getClass().getClassLoader(), "plc4x_toddy_read.svg", ConstUi.LARGE_ICON_SIZE,
+      ConstUi.LARGE_ICON_SIZE );
+  }
+
+  /**
+   * Copy information from the meta-data input to the dialog fields.
+   * 
+   */
+  public void getData() {
+    if (isDebug()) {
+      logDebug("getting fields info...");
+    }
+    if (input.getConnection() == null) {
+        wConnection.setText("");
+    } else {
+        wConnection.setText(input.getConnection());        
+    }
+
+    wLimit.setText(input.getRowLimit());
+    wNeverEnding.setSelection(input.isNeverEnding());
+
+
+    setActive();
+
+    wTransformName.selectAll();
+    wTransformName.setFocus();
+  }
+
+  /**
+   * Stores the information from the dialog box in meta-data.
+   *
+   * @param meta 
+   */
+  private void getInfo( Plc4xEventMeta meta)  throws HopException  {
+    meta.setConnection(wConnection.getText());
+    meta.setRowLimit(wLimit.getText());
+    meta.setNeverEnding(wNeverEnding.getSelection());
+
+  }
+
+  /**
+   * Cancel the dialog.
+   */
+  private void cancel() {
+    transformName = null;
+    input.setChanged( changed );
+    dispose();
+  }
+
+  private void ok() {
+    if (Utils.isEmpty(wTransformName.getText())) {
+      return;
+    }
+
+    transformName = wTransformName.getText(); // return value
+    try {
+      getInfo(new Plc4xEventMeta()); // to see if there is an exception
+      getInfo(input); // to put the content on the input structure for real if all is well.
+      dispose();
+    } catch (HopException e) {
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Title"),
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Message"),
+          e);
+    }
+  }
+  
+
+  /**
+   * Preview the data generated by this transform. This generates a pipeline using this transform &
+   * a dummy and previews it.
+   */
+  private void preview() {
+    Plc4xEventMeta oneMeta = new Plc4xEventMeta();
+    try {
+      getInfo(oneMeta);
+    } catch (HopException e) {
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Title"),
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Message"),
+          e);
+      return;
+    }
+
+    PipelineMeta previewMeta =
+        PipelinePreviewFactory.generatePreviewPipeline(
+            pipelineMeta.getMetadataProvider(), oneMeta, wTransformName.getText());
+
+    EnterNumberDialog numberDialog =
+        new EnterNumberDialog(
+            shell,
+            props.getDefaultPreviewSize(),
+            BaseMessages.getString(PKG, "System.Dialog.EnterPreviewSize.Title"),
+            BaseMessages.getString(PKG, "System.Dialog.EnterPreviewSize.Message"));
+    int previewSize = numberDialog.open();
+    if (previewSize > 0) {
+      PipelinePreviewProgressDialog progressDialog =
+          new PipelinePreviewProgressDialog(
+              shell,
+              variables,
+              previewMeta,
+              new String[] {wTransformName.getText()},
+              new int[] {previewSize});
+      progressDialog.open();
+
+      Pipeline pipeline = progressDialog.getPipeline();
+      String loggingText = progressDialog.getLoggingText();
+
+      if (!progressDialog.isCancelled()) {
+        if (pipeline.getResult() != null && pipeline.getResult().getNrErrors() > 0) {
+          EnterTextDialog etd =
+              new EnterTextDialog(
+                  shell,
+                  BaseMessages.getString(PKG, "System.Dialog.PreviewError.Title"),
+                  BaseMessages.getString(PKG, "System.Dialog.PreviewError.Message"),
+                  loggingText,
+                  true);
+          etd.setReadOnly();
+          etd.open();
+        }
+      }
+
+      PreviewRowsDialog prd =
+          new PreviewRowsDialog(
+              shell,
+              variables,
+              SWT.NONE,
+              wTransformName.getText(),
+              progressDialog.getPreviewRowsMeta(wTransformName.getText()),
+              progressDialog.getPreviewRows(wTransformName.getText()),
+              loggingText);
+      prd.open();
+    }
+  }  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventMeta.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventMeta.java
new file mode 100644
index 0000000000..207adb7824
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xevent/Plc4xEventMeta.java
@@ -0,0 +1,239 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xevent;
+
+import java.util.ArrayList;
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.annotations.Transform;
+import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.transform.BaseTransformMeta;
+import org.apache.hop.pipeline.transform.ITransformMeta;
+import org.apache.hop.pipeline.transform.TransformMeta;
+
+import java.util.List;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.pipeline.transform.ITransformIOMeta;
+import org.apache.hop.pipeline.transform.TransformIOMeta;
+
+/**
+ * Meta data for the sample transform.
+ */
+@Transform(
+        id = "plc4x-event",
+        name = "i18n::Plc4x.Read.Name",
+        description = "i18n::Plc4x.Read.Description",
+        image = "plc4x_event.svg",
+        categoryDescription = "i18n:org.apache.plc4x.hop.transforms.plc4xevent:Plc4x.Category.plc4x",
+        documentationUrl = "https://plc4x.apache.org/users/integrations/apache-hop.html"
+)
+public class Plc4xEventMeta extends BaseTransformMeta implements ITransformMeta {
+
+  private static final Class<?> PKG = Plc4xEventMeta.class; // Needed by Translator
+
+  
+  @HopMetadataProperty(
+      key = "connection",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.Connection")
+  private String connection;  
+
+  @HopMetadataProperty(
+      key = "limit",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.RowLimit")
+  private String rowLimit;  
+  
+  @HopMetadataProperty(
+      key = "never_ending",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+  private boolean neverEnding;
+  
+  @HopMetadataProperty(
+      key = "never_ending",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+  private boolean modeEvent;
+
+  @HopMetadataProperty(
+      key = "never_ending",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+  private boolean userEvent;
+
+  @HopMetadataProperty(
+      key = "never_ending",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+  private boolean sysEvent;
+
+  @HopMetadataProperty(
+      key = "never_ending",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+  private boolean alarmEvent;  
+
+
+  public Plc4xEventMeta() {
+    rowLimit = "10";
+    neverEnding = false;
+    modeEvent = false;
+    userEvent = false;
+    sysEvent = false;
+    alarmEvent = false;
+
+  }  
+  
+  public Plc4xEventMeta(Plc4xEventMeta m) {
+    this.connection = m.connection;
+    this.neverEnding = m.neverEnding;
+    this.modeEvent = m.modeEvent;
+    this.userEvent = m.userEvent;
+    this.sysEvent = m.sysEvent;
+    this.alarmEvent = m.alarmEvent;
+  }
+
+  @Override
+  public Plc4xEventMeta clone() {
+    return new Plc4xEventMeta(this);
+  }  
+  
+  
+
+  @Override
+  public void getFields( IRowMeta inputRowMeta, String name, IRowMeta[] info, TransformMeta nextTransform,
+                         IVariables variables, IHopMetadataProvider metadataProvider ) throws HopTransformException {
+    try {
+        List<ICheckResult> remarks = new ArrayList<>();
+        RowMetaAndData rowMetaAndData = Plc4xEvent.buildRow(this, remarks, name);
+      if (!remarks.isEmpty()) {
+        StringBuilder stringRemarks = new StringBuilder();
+        for (ICheckResult remark : remarks) {
+          stringRemarks.append(remark.toString()).append(Const.CR);
+        }    
+        throw new HopTransformException(stringRemarks.toString());
+      }
+      for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
+        valueMeta.setOrigin(name);
+      }
+      inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
+    } catch (Exception e) {
+      throw new HopTransformException(e);
+    }
+  }
+
+  public Plc4xEvent createTransform(TransformMeta transformMeta, Plc4xEventData data, int copyNr,
+                                PipelineMeta pipelineMeta, Pipeline pipeline ) {
+    return new Plc4xEvent( transformMeta, this, data, copyNr, pipelineMeta, pipeline );
+  }
+
+    /**
+     *
+     * @return
+     */
+  public Plc4xEventData getTransformData() {
+    return new Plc4xEventData();
+  }
+
+  @Override
+  public void setDefault() {
+    //default values when creating a new transform
+  }
+  
+  
+  /**
+   * Returns the Input/Output metadata for this transform. 
+   * The generator transform only produces output, does not accept input!
+   * TransformIOMeta(inputAcceptor, outputProducer, inputOptional, outputDynamic, inputDynamic)
+   */
+  @Override
+  public ITransformIOMeta getTransformIOMeta() {
+    return new TransformIOMeta(false, true, false, false, false, false);
+  }
+
+  /**
+   * Gets Plc4xConnection metadata name.
+   *
+   * @return value of intervalInMs
+   */
+  public String getConnection() {
+    return connection;
+  }
+
+  /** @param connection  */
+  public void setConnection(String connection) {
+    this.connection = connection;
+  }  
+  
+  public String getRowLimit() {
+    return rowLimit;
+  }
+
+  /** @param connection  */
+  public void setRowLimit(String rowLimit) {
+    this.rowLimit = rowLimit;
+  }  
+
+  /**
+   * Gets neverEnding
+   *
+   * @return value of neverEnding
+   */
+  public boolean isNeverEnding() {
+    return neverEnding;
+  }
+
+  /** @param neverEnding The neverEnding to set */
+  public void setNeverEnding(boolean neverEnding) {
+    this.neverEnding = neverEnding;
+  }
+  
+  public boolean isModeEvent() {
+    return neverEnding;
+  }
+
+  public void setModeEvent(boolean modeEvent) {
+    this.modeEvent = modeEvent;
+  }
+  
+  public boolean isUserEvent() {
+    return neverEnding;
+  }
+
+  public void setUserEvent(boolean userEvent) {
+    this.userEvent = userEvent;
+  }
+
+  public boolean isSysEvent() {
+    return sysEvent;
+  }
+
+  public void setSysEvent(boolean sysEvent) {
+    this.sysEvent = sysEvent;
+  }  
+  
+  public boolean isAlarmEvent() {
+    return alarmEvent;
+  }
+
+  public void setAlarmEvent(boolean alarmEvent) {
+    this.alarmEvent = alarmEvent;
+  } 
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xRead.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xRead.java
new file mode 100644
index 0000000000..7b1832c16d
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xRead.java
@@ -0,0 +1,446 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xinput;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hop.core.CheckResult;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.exception.HopPluginException;
+import org.apache.hop.core.exception.HopValueException;
+import org.apache.hop.core.logging.LogLevel;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.core.row.RowDataUtil;
+import org.apache.hop.core.row.RowMeta;
+import org.apache.hop.core.row.value.ValueMetaDate;
+import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.StringUtil;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.transform.BaseTransform;
+import org.apache.hop.pipeline.transform.ITransform;
+import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+import org.apache.plc4x.hop.transforms.util.Plc4xPlcField;
+import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
+
+/**
+ * Transform That contains the basic skeleton needed to create your own plugin
+ *
+ */
+public class Plc4xRead extends BaseTransform<Plc4xReadMeta, Plc4xReadData> implements ITransform {
+
+  private static final Class<?> PKG = Plc4xRead.class; // Needed by Translator
+  
+  private Plc4xConnection connmeta = null;
+  private Plc4xWrapperConnection connwrapper = null;
+  private PlcReadRequest readRequest = null;
+  private PlcReadResponse readResponse = null;  
+  private int maxwait = 0;
+  private static final ReentrantLock lock = new ReentrantLock();
+  
+  private static final String dummy = "dummy";
+  
+  private Map<String, Integer> index = new HashMap();
+  private Map<String, Plc4xPlcField> plcfields = new HashMap();  
+
+  public Plc4xRead(TransformMeta transformMeta, Plc4xReadMeta meta, Plc4xReadData data, int copyNr, PipelineMeta pipelineMeta,
+                Pipeline pipeline ) {
+    super( transformMeta, meta, data, copyNr, pipelineMeta, pipeline );
+  }
+
+  /*
+  * Including Date and Time field for every row 
+  *
+  * @param meta Meta data from user dialog
+  * @param remarks Error registers
+  * @param origin transform instance name
+  */
+  public static final RowMetaAndData buildRow(
+      Plc4xReadMeta meta, List<ICheckResult> remarks, String origin) throws HopPluginException {
+    IRowMeta rowMeta = new RowMeta();
+    Object[] rowData = RowDataUtil.allocateRowData(meta.getFields().size() + 2);
+    int index = 0;
+
+    if (!Utils.isEmpty(meta.getRowTimeField())) {
+        rowMeta.addValueMeta(new ValueMetaDate(meta.getRowTimeField()));
+        rowData[index++] = null;
+    }
+
+    if (!Utils.isEmpty(meta.getLastTimeField())) {
+        rowMeta.addValueMeta(new ValueMetaDate(meta.getLastTimeField()));
+        rowData[index++] = null;
+    }
+      
+    for (Plc4xGeneratorField field : meta.getFields()) {
+      int typeString = ValueMetaFactory.getIdForValueMeta(field.getType());
+      if (StringUtils.isNotEmpty(field.getType())) {
+          System.out.println("typeString: " + typeString); 
+        IValueMeta valueMeta =
+            ValueMetaFactory.createValueMeta(field.getName(), typeString); // build a
+        // value!
+        valueMeta.setLength(field.getLength());
+        valueMeta.setPrecision(field.getPrecision());
+        valueMeta.setConversionMask(field.getFormat());
+        valueMeta.setCurrencySymbol(field.getCurrency());
+        valueMeta.setGroupingSymbol(field.getGroup());
+        valueMeta.setDecimalSymbol(field.getDecimal());
+        valueMeta.setOrigin(origin);
+
+        IValueMeta stringMeta = ValueMetaFactory.cloneValueMeta(valueMeta, IValueMeta.TYPE_STRING);
+
+        if (field.isSetEmptyString()) {
+          // Set empty string
+          rowData[index] = StringUtil.EMPTY_STRING;
+        } else {
+          String stringValue = field.getValue();
+
+          // If the value is empty: consider it to be NULL.
+          if (Utils.isEmpty(stringValue)) {
+            rowData[index] = null;
+
+            if (valueMeta.getType() == IValueMeta.TYPE_NONE) {
+              String message =
+                  BaseMessages.getString(
+                      PKG,
+                      "Plc4x.Read.Meta.CheckResult.SpecifyTypeError",
+                      valueMeta.getName(),
+                      stringValue);
+              remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+            }
+          } else {
+            // Convert the data from String to the specified type ...
+            //
+            try {
+                System.out.println("stringValue: " + stringValue);
+              rowData[index] = valueMeta.convertData(stringMeta, stringValue);
+            } catch (HopValueException e) {
+              switch (valueMeta.getType()) {
+                case IValueMeta.TYPE_NUMBER:
+                  String message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Number",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_DATE:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Date",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_INTEGER:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Integer",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_BIGNUMBER:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.BigNumber",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_TIMESTAMP:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Timestamp",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                default:
+                  // Boolean and binary don't throw errors normally, so it's probably an unspecified
+                  // error problem...
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.CheckResult.SpecifyTypeError",
+                          valueMeta.getName(),
+                          stringValue);
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+              }
+            }
+          }
+        }
+
+        // Now add value to the row!
+        // This is in fact a copy from the fields row, but now with data.
+        rowMeta.addValueMeta(valueMeta);
+        index++;
+      }
+    }
+
+    return new RowMetaAndData(rowMeta, rowData);
+  }
+  
+  /* 
+  * 1. Block the other instances by means of a lock.  
+  * 2. Try to locate an existing connection.
+  * 3. If it doesn't exist, it tries to take control of the routine to 
+  *    create an instance of PlcConnection and his wrapper.
+  * 4. Register the connection wrapper for global access.
+  * 5. If the connection to the PLC is made, then it creates the query 
+  *    and executes it.
+  *
+  */
+  @Override
+  public  boolean processRow() throws HopException {
+    Object[] r = getRow(); // Get row from input rowset & set row busy!
+    setLogLevel(LogLevel.DEBUG);
+    
+    if ((!meta.isNeverEnding() && data.rowsWritten >= data.rowLimit) && !isStopped()) {   
+      setOutputDone(); // signal end to receiver(s)
+      return false;        
+    }    
+    
+    if (first) {
+        index.clear();
+        plcfields.clear();
+        //This performs a minimal check on the user item.
+        //It guarantees that the rates are within those managed by Plc4x.
+        meta.getFields().forEach((f) ->{
+            plcfields.put(f.getName(),Plc4xPlcField.of(f.getItem()));
+        });
+        first = false;
+    }    
+    
+    lock.lock(); //(01)
+    try {
+        IHopMetadataProvider metaprovider = getMetadataProvider();
+        connmeta = metaprovider.getSerializer(Plc4xConnection.class).load(meta.getConnection());
+        if (connwrapper == null) {
+            connwrapper = (Plc4xWrapperConnection) getPipeline().getExtensionDataMap().get(meta.getConnection()); //(02)
+            if (connwrapper != null) connwrapper.retain();
+        };
+
+        if (connmeta == null){    
+            logError(
+                BaseMessages.getString(
+                    PKG,
+                    "Plc4x.Read.Meta.Log.SetMetadata",
+                    meta.getConnection()));         
+        }
+
+        if ((connmeta != null) && (connwrapper == null)){
+            readRequest = null;
+            try{
+                PlcConnection conn =  new DefaultPlcDriverManager().getConnection(connmeta.getUrl()); //(03)
+                if (conn.isConnected()) {
+                    connwrapper = new Plc4xWrapperConnection(conn);            
+                    getPipeline().getExtensionDataMap().put(meta.getConnection(), connwrapper); //(04)
+                }
+            } catch (Exception ex){
+                setErrors(1L);
+                logError("Unable to create connection to PLC. " + ex.getMessage());
+            }
+        }
+    } finally {
+        lock.unlock();
+    }
+    
+    if ((connmeta != null) && (connwrapper != null)){
+        if (connwrapper.getConnection().isConnected()){
+            if (readRequest == null){
+                PlcReadRequest.Builder builder = connwrapper.getConnection().readRequestBuilder(); //(05)
+                for (Plc4xGeneratorField field: meta.getFields()){
+                    builder.addTagAddress(field.getName(), field.getItem());
+                }                
+                readRequest = builder.build();                  
+            }            
+            try {            
+                maxwait = Integer.parseInt(meta.getMaxwaitInMs());
+                maxwait = (maxwait<100)?100:maxwait;
+                readResponse = readRequest.execute().get(maxwait, TimeUnit.MILLISECONDS);
+
+                for (Plc4xGeneratorField field: meta.getFields()){
+                    field.setValue(readResponse.getString(field.getName()));
+                }                  
+            } catch (Exception ex) {
+                setErrors(1L);                
+                logError("Unable read from PLC. " + ex.getMessage());
+            }
+            
+        } else {
+            setErrors(1L);                
+            logError("PLC is not connected.");            
+            setOutputDone();
+             return false;   
+        }
+        
+    } else {
+        setErrors(1L);                
+        logError("PLC connection don't exist.");         
+        setOutputDone();
+        return false;        
+    }
+
+    //
+    int interval = Integer.parseInt(meta.getIntervalInMs());
+    
+    try {
+        Thread.sleep(interval);
+    } catch (InterruptedException ex) {
+        setErrors(1L);                
+        logError(ex.getMessage());
+    }
+    
+    r = data.outputRowMeta.cloneRow(data.outputRowData); 
+    logBasic("Tamano de los datos: " + r.length);
+    data.prevDate = data.rowDate;
+    data.rowDate = new Date();    
+    int index = 0;
+    if (!Utils.isEmpty(meta.getRowTimeField())) {
+        r[index++] = data.rowDate;
+    }
+    if (!Utils.isEmpty(meta.getLastTimeField())) {
+        r[index++] = data.prevDate;
+    }  
+    for (Plc4xGeneratorField field: meta.getFields()){
+        if (field.getType().equalsIgnoreCase("Boolean")){
+            r[index++] = Boolean.parseBoolean(field.getValue());
+        } else if (field.getType().equalsIgnoreCase("Number")){
+            r[index++] = Double.parseDouble(field.getValue());
+        } else if (field.getType().equalsIgnoreCase("Integer")){
+            r[index++] = Integer.parseInt(field.getValue());
+        }
+    }
+    putRow(data.outputRowMeta, r ); // return your data
+    data.rowsWritten++;
+    return true;
+  }
+
+
+  @Override
+  public boolean init() {
+    try {
+        if(super.init()){     
+            // Determine the number of rows to generate...
+            data.rowLimit = Const.toLong(resolve(meta.getRowLimit()), -1L);
+            data.rowsWritten = 0L;
+            data.delay = Const.toLong(resolve(meta.getIntervalInMs()), -1L);
+
+            if (data.rowLimit < 0L) { // Unable to parse
+              logError(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Wrong.RowLimit.Number"));
+              return false; // fail
+            }            
+            
+            // Create a row (constants) with all the values in it...
+            List<ICheckResult> remarks = new ArrayList<>(); // stores the errors...
+            RowMetaAndData outputRow = buildRow(meta, remarks, getTransformName());
+            if (!remarks.isEmpty()) {
+              for (int i = 0; i < remarks.size(); i++) {
+                CheckResult cr = (CheckResult) remarks.get(i);
+                logError(cr.getText());
+              }
+              return false;
+            }
+
+            data.outputRowData = outputRow.getData();
+            data.outputRowMeta = outputRow.getRowMeta();            
+
+          return true;
+        }
+    return false;
+    } catch (Exception ex){
+        setErrors(1L);
+        logError("Error initializing transform", ex);
+        return false;
+    }
+  }
+
+  /*
+  * Here, must perform the cleaning of any resource, main of the connection to 
+  * the associated PLC.
+  */
+    @Override
+    public void cleanup() {
+        super.cleanup();
+        logBasic("Cleanup. Release connection.");
+        if (connwrapper != null)
+        connwrapper.release();     
+    }
+
+
+    /*
+    * Here, must perform the cleaning of any resource. 
+    * 1. Check if we have reference to wrapper.
+    * 2. Release de reference to object.
+    * 3. The lastone remove the global reference to connection wrapper.
+    * 4. Clear local references.
+    */    
+    @Override
+    public void dispose() {
+        super.dispose();
+        if (connwrapper != null) {
+            logBasic("Dispose. Release connection: " + connwrapper.refCnt());            
+            connwrapper.release();   
+            if (!connwrapper.getConnection().isConnected()){           
+                getPipeline().getExtensionDataMap().remove(meta.getConnection());
+            }            
+            connwrapper = null;
+            readRequest = null;
+
+        }
+    }
+ 
+  
+  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadData.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadData.java
new file mode 100644
index 0000000000..98b5889f0a
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadData.java
@@ -0,0 +1,48 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xinput;
+
+import java.util.Date;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.pipeline.transform.BaseTransformData;
+import org.apache.hop.pipeline.transform.ITransformData;
+
+
+public class Plc4xReadData extends BaseTransformData implements ITransformData {
+    
+  //The Plc4xConnection metadata
+  public String connection;    
+    
+  public IRowMeta outputRowMeta;
+  public Object[] outputRowData;
+
+  public long rowLimit;
+  public long rowsWritten;
+  public Date rowDate;
+  public Date prevDate;
+  public long delay;
+  
+
+    
+  /**
+   * Default constructor for SampleData.
+   */
+  public Plc4xReadData() {
+      super();
+  }
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadDialog.java
new file mode 100644
index 0000000000..a736e418da
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadDialog.java
@@ -0,0 +1,600 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xinput;
+
+import org.apache.hop.core.Const;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.pipeline.transform.BaseTransformMeta;
+import org.apache.hop.pipeline.transform.ITransformDialog;
+import org.apache.hop.ui.core.ConstUi;
+import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.dialog.EnterNumberDialog;
+import org.apache.hop.ui.core.dialog.EnterTextDialog;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
+import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
+import org.apache.hop.ui.core.widget.ColumnInfo;
+import org.apache.hop.ui.core.widget.MetaSelectionLine;
+import org.apache.hop.ui.core.widget.TableView;
+import org.apache.hop.ui.core.widget.TextVar;
+import org.apache.hop.ui.pipeline.dialog.PipelinePreviewProgressDialog;
+import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
+import org.apache.hop.ui.util.SwtSvgImageUtil;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+public class Plc4xReadDialog extends BaseTransformDialog implements ITransformDialog {
+  private static final Class<?> PKG = Plc4xReadDialog.class; // Needed by Translator
+
+  private MetaSelectionLine<Plc4xConnection> wConnection;  
+  
+  private Label wlLimit;
+  private TextVar wLimit;
+
+  private Button wNeverEnding;
+
+  private Label wlMaxwait;
+  private TextVar wMaxwait;  
+  
+  private Label wlInterval;
+  private TextVar wInterval;
+
+  private Label wlRowTimeField;
+  private TextVar wRowTimeField;
+
+  private Label wlLastTimeField;
+  private TextVar wLastTimeField;
+
+  private TableView wFields;
+  
+  private final Plc4xReadMeta input;
+
+  public Plc4xReadDialog(Shell parent, IVariables variables , Object in, PipelineMeta pipelineMeta, String sname ) {
+    super( parent, variables, (BaseTransformMeta) in, pipelineMeta, sname );
+    input = (Plc4xReadMeta) in;
+  }
+
+  @Override
+  public String open() {
+    Shell parent = getParent();
+
+    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | SWT.MIN);
+    props.setLook(shell);
+    setShellImage(shell, input);
+
+    ModifyListener lsMod = e -> input.setChanged();
+    changed = input.hasChanged();
+
+    FormLayout formLayout = new FormLayout();
+    formLayout.marginWidth = Const.FORM_MARGIN;
+    formLayout.marginHeight = Const.FORM_MARGIN;
+
+    shell.setLayout(formLayout);
+    shell.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.DialogTitle"));
+
+    int middle = props.getMiddlePct();
+    int margin = props.getMargin();
+
+    // Filename line
+    wlTransformName = new Label(shell, SWT.RIGHT);
+    wlTransformName.setText(BaseMessages.getString(PKG, "System.Label.TransformName"));
+    props.setLook(wlTransformName);
+    fdlTransformName = new FormData();
+    fdlTransformName.left = new FormAttachment(0, 0);
+    fdlTransformName.right = new FormAttachment(middle, -margin);
+    fdlTransformName.top = new FormAttachment(0, margin);
+    wlTransformName.setLayoutData(fdlTransformName);
+    
+    wTransformName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    wTransformName.setText(transformName);
+    props.setLook(wTransformName);
+    wTransformName.addModifyListener(lsMod);
+    fdTransformName = new FormData();
+    fdTransformName.left = new FormAttachment(middle, 0);
+    fdTransformName.top = new FormAttachment(0, margin);
+    fdTransformName.right = new FormAttachment(100, 0);
+    wTransformName.setLayoutData(fdTransformName);
+
+    // Connection line
+    wConnection =
+        new MetaSelectionLine<>(
+            variables,
+            metadataProvider,
+            Plc4xConnection.class,
+            shell,
+            SWT.NONE,
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Label"),
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Tooltip"));
+    FormData fdConnection = new FormData();
+    fdConnection.left = new FormAttachment(0, 0);
+    fdConnection.right = new FormAttachment(100, 0);
+    fdConnection.top = new FormAttachment(wTransformName, margin);
+    wConnection.setLayoutData(fdConnection);    
+    props.setLook(wConnection);
+    try {
+      wConnection.fillItems();
+    } catch (Exception e) {
+      new ErrorDialog(shell, "Error", "Error listing Cassandra connection metadata objects", e);
+    }    
+    
+    Control lastControl = wConnection;    
+    
+    wlLimit = new Label(shell, SWT.RIGHT);
+    wlLimit.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Limit.Label"));
+    props.setLook(wlLimit);
+    FormData fdlLimit = new FormData();
+    fdlLimit.left = new FormAttachment(0, 0);
+    fdlLimit.right = new FormAttachment(middle, -margin);
+    fdlLimit.top = new FormAttachment(lastControl, margin);
+    wlLimit.setLayoutData(fdlLimit);
+    wLimit = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLimit);
+    wLimit.addModifyListener(lsMod);
+    FormData fdLimit = new FormData();
+    fdLimit.left = new FormAttachment(middle, 0);
+    fdLimit.top = new FormAttachment(lastControl, margin);
+    fdLimit.right = new FormAttachment(100, 0);
+    wLimit.setLayoutData(fdLimit);
+    lastControl = wLimit;
+
+    Label wlNeverEnding = new Label(shell, SWT.RIGHT);
+    wlNeverEnding.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlNeverEnding);
+    FormData fdlNeverEnding = new FormData();
+    fdlNeverEnding.left = new FormAttachment(0, 0);
+    fdlNeverEnding.right = new FormAttachment(middle, -margin);
+    fdlNeverEnding.top = new FormAttachment(lastControl, margin);
+    wlNeverEnding.setLayoutData(fdlNeverEnding);
+    wNeverEnding = new Button(shell, SWT.CHECK);
+    props.setLook(wNeverEnding);
+    wNeverEnding.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        });
+    FormData fdNeverEnding = new FormData();
+    fdNeverEnding.left = new FormAttachment(middle, 0);
+    fdNeverEnding.top = new FormAttachment(wlNeverEnding, 0, SWT.CENTER);
+    fdNeverEnding.right = new FormAttachment(100, 0);
+    wNeverEnding.setLayoutData(fdNeverEnding);
+    lastControl = wlNeverEnding;
+    
+    wlMaxwait = new Label(shell, SWT.RIGHT);
+    wlMaxwait.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Maxwait.Label"));
+    props.setLook(wlMaxwait);
+    FormData fdlMaxwait = new FormData();
+    fdlMaxwait.left = new FormAttachment(0, 0);
+    fdlMaxwait.right = new FormAttachment(middle, -margin);
+    fdlMaxwait.top = new FormAttachment(lastControl, margin);
+    wlMaxwait.setLayoutData(fdlMaxwait);
+    wMaxwait = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wMaxwait);
+    wMaxwait.addModifyListener(lsMod);
+    FormData fdMaxwait = new FormData();
+    fdMaxwait.left = new FormAttachment(middle, 0);
+    fdMaxwait.top = new FormAttachment(lastControl, margin);
+    fdMaxwait.right = new FormAttachment(100, 0);
+    wMaxwait.setLayoutData(fdMaxwait);
+    lastControl = wMaxwait;    
+
+    wlInterval = new Label(shell, SWT.RIGHT);
+    wlInterval.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Interval.Label"));
+    props.setLook(wlInterval);
+    FormData fdlInterval = new FormData();
+    fdlInterval.left = new FormAttachment(0, 0);
+    fdlInterval.right = new FormAttachment(middle, -margin);
+    fdlInterval.top = new FormAttachment(lastControl, margin);
+    wlInterval.setLayoutData(fdlInterval);
+    wInterval = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wInterval);
+    wInterval.addModifyListener(lsMod);
+    FormData fdInterval = new FormData();
+    fdInterval.left = new FormAttachment(middle, 0);
+    fdInterval.top = new FormAttachment(lastControl, margin);
+    fdInterval.right = new FormAttachment(100, 0);
+    wInterval.setLayoutData(fdInterval);
+    lastControl = wInterval;
+    
+    /*
+    wlRowTimeField = new Label(shell, SWT.RIGHT);
+    wlRowTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.RowTimeField.Label"));
+    props.setLook(wlRowTimeField);
+    FormData fdlRowTimeField = new FormData();
+    fdlRowTimeField.left = new FormAttachment(0, 0);
+    fdlRowTimeField.right = new FormAttachment(middle, -margin);
+    fdlRowTimeField.top = new FormAttachment(lastControl, margin);
+    wlRowTimeField.setLayoutData(fdlRowTimeField);
+    wRowTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wRowTimeField);
+    wRowTimeField.addModifyListener(lsMod);
+    FormData fdRowTimeField = new FormData();
+    fdRowTimeField.left = new FormAttachment(middle, 0);
+    fdRowTimeField.top = new FormAttachment(lastControl, margin);
+    fdRowTimeField.right = new FormAttachment(100, 0);
+    wRowTimeField.setLayoutData(fdRowTimeField);
+    lastControl = wRowTimeField;
+
+    wlLastTimeField = new Label(shell, SWT.RIGHT);
+    wlLastTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.LastTimeField.Label"));
+    props.setLook(wlLastTimeField);
+    FormData fdlLastTimeField = new FormData();
+    fdlLastTimeField.left = new FormAttachment(0, 0);
+    fdlLastTimeField.right = new FormAttachment(middle, -margin);
+    fdlLastTimeField.top = new FormAttachment(lastControl, margin);
+    wlLastTimeField.setLayoutData(fdlLastTimeField);
+    wLastTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLastTimeField);
+    wLastTimeField.addModifyListener(lsMod);
+    FormData fdLastTimeField = new FormData();
+    fdLastTimeField.left = new FormAttachment(middle, 0);
+    fdLastTimeField.top = new FormAttachment(lastControl, margin);
+    fdLastTimeField.right = new FormAttachment(100, 0);
+    wLastTimeField.setLayoutData(fdLastTimeField);
+    lastControl = wLastTimeField;
+    */
+    wOk = new Button(shell, SWT.PUSH);
+    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
+    wOk.addListener(SWT.Selection, e -> ok());
+    wPreview = new Button(shell, SWT.PUSH);
+    wPreview.setText(BaseMessages.getString(PKG, "System.Button.Preview"));
+    wPreview.addListener(SWT.Selection, e -> preview());
+    wCancel = new Button(shell, SWT.PUSH);
+    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
+    wCancel.addListener(SWT.Selection, e -> cancel());
+
+    setButtonPositions(new Button[] {wOk, wPreview, wCancel}, margin, null);
+
+    Label wlFields = new Label(shell, SWT.NONE);
+    wlFields.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Label"));
+    props.setLook(wlFields);
+    FormData fdlFields = new FormData();
+    fdlFields.left = new FormAttachment(0, 0);
+    fdlFields.top = new FormAttachment(lastControl, margin);
+    wlFields.setLayoutData(fdlFields);
+    lastControl = wlFields;
+
+    final int nrFields = input.getFields().size();
+
+    ColumnInfo[] colinf =
+        new ColumnInfo[] {
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Name"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Item"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),            
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Type"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              ValueMetaFactory.getValueMetaNames()),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Format"),
+              ColumnInfo.COLUMN_TYPE_FORMAT,
+              2),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Length"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Precision"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Currency"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Decimal"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Group"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Value"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.SetEmptyString"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              new String[] {
+                BaseMessages.getString(PKG, "System.Combo.Yes"),
+                BaseMessages.getString(PKG, "System.Combo.No")
+              })
+        };
+
+    wFields =
+        new TableView(
+            variables,
+            shell,
+            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
+            colinf,
+            nrFields,
+            lsMod,
+            props);
+
+    FormData fdFields = new FormData();
+    fdFields.left = new FormAttachment(0, 0);
+    fdFields.top = new FormAttachment(lastControl, margin);
+    fdFields.right = new FormAttachment(100, 0);
+    fdFields.bottom = new FormAttachment(wOk, -2 * margin);
+    wFields.setLayoutData(fdFields);
+
+    lsResize =
+        event -> {
+          Point size = shell.getSize();
+          wFields.setSize(size.x - 10, size.y - 50);
+          wFields.table.setSize(size.x - 10, size.y - 50);
+          wFields.redraw();
+        };
+    shell.addListener(SWT.Resize, lsResize);
+
+    getData();
+    input.setChanged(changed);
+
+    BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());
+
+    return transformName;      
+    };
+
+  @Override
+    public void setActive() {
+        boolean neverEnding = wNeverEnding.getSelection();
+
+        wlLimit.setEnabled(!neverEnding);
+        wLimit.setEnabled(!neverEnding);
+
+        //wlInterval.setEnabled(neverEnding);
+        //wInterval.setEnabled(neverEnding);
+
+        //wlRowTimeField.setEnabled(neverEnding);
+        //wRowTimeField.setEnabled(neverEnding);
+
+        //wlLastTimeField.setEnabled(neverEnding);
+        //wLastTimeField.setEnabled(neverEnding);
+  }
+
+
+
+  private Image getImage() {
+    return SwtSvgImageUtil.getImage( shell.getDisplay(), getClass().getClassLoader(), "plc4x_toddy_read.svg", ConstUi.LARGE_ICON_SIZE,
+      ConstUi.LARGE_ICON_SIZE );
+  }
+
+  /**
+   * Copy information from the meta-data input to the dialog fields.
+   * 
+   */
+  public void getData() {
+    if (isDebug()) {
+      logDebug("getting fields info...");
+    }
+    if (input.getConnection() == null) {
+        wConnection.setText("");
+    } else {
+        wConnection.setText(input.getConnection());        
+    }
+
+    wLimit.setText(input.getRowLimit());
+    wNeverEnding.setSelection(input.isNeverEnding());
+    wMaxwait.setText(Const.NVL(input.getMaxwaitInMs(), ""));
+    wInterval.setText(Const.NVL(input.getIntervalInMs(), ""));
+   // wRowTimeField.setText(Const.NVL(input.getRowTimeField(), ""));
+    //wLastTimeField.setText(Const.NVL(input.getLastTimeField(), ""));
+
+    for (int i = 0; i < input.getFields().size(); i++) {
+      Plc4xGeneratorField field = input.getFields().get(i);
+      TableItem item = wFields.table.getItem(i);
+      int col = 1;
+      item.setText(col++, Const.NVL(field.getName(), ""));
+
+      item.setText(col++, Const.NVL(field.getItem(), ""));      
+      
+      String type = field.getType();
+      String format = field.getFormat();
+      String length = field.getLength() < 0 ? "" : ("" + field.getLength());
+      String prec = field.getPrecision() < 0 ? "" : ("" + field.getPrecision());
+
+      String curr = field.getCurrency();
+      String group = field.getGroup();
+      String decim = field.getDecimal();
+      String def = field.getValue();
+
+      item.setText(col++, Const.NVL(type, ""));
+      item.setText(col++, Const.NVL(format, ""));
+      item.setText(col++, Const.NVL(length, ""));
+      item.setText(col++, Const.NVL(prec, ""));
+      item.setText(col++, Const.NVL(curr, ""));
+      item.setText(col++, Const.NVL(decim, ""));
+      item.setText(col++, Const.NVL(group, ""));
+      item.setText(col++, Const.NVL(def, ""));
+      item.setText(
+          col++,
+          field.isSetEmptyString()
+              ? BaseMessages.getString(PKG, "System.Combo.Yes")
+              : BaseMessages.getString(PKG, "System.Combo.No"));
+    }
+
+    wFields.setRowNums();
+    wFields.optWidth(true);
+
+    setActive();
+
+    wTransformName.selectAll();
+    wTransformName.setFocus();
+  }
+
+  /**
+   * Stores the information from the dialog box in meta-data.
+   *
+   * @param meta 
+   */
+  private void getInfo( Plc4xReadMeta meta)  throws HopException  {
+    meta.setConnection(wConnection.getText());
+    meta.setRowLimit(wLimit.getText());
+    meta.setNeverEnding(wNeverEnding.getSelection());
+    meta.setMaxwaitInMs(wMaxwait.getText());
+    meta.setIntervalInMs(wInterval.getText());
+    //meta.setRowTimeField(wRowTimeField.getText());
+    //meta.setLastTimeField(wLastTimeField.getText());
+
+    meta.getFields().clear();
+
+    // CHECKSTYLE:Indentation:OFF
+    for (TableItem item : wFields.getNonEmptyItems()) {
+        Plc4xGeneratorField field = new Plc4xGeneratorField();
+        field.setName(item.getText(1));
+        field.setItem(item.getText(2));
+        field.setFormat(item.getText(4));
+        field.setLength(Const.toInt(item.getText(5), -1));
+        field.setPrecision(Const.toInt(item.getText(6), -1));
+        field.setCurrency(item.getText(7));
+        field.setDecimal(item.getText(8));
+        field.setGroup(item.getText(9));
+        field.setValue(field.isSetEmptyString() ? "" : item.getText(10));
+        field.setSetEmptyString(
+            BaseMessages.getString(PKG, "System.Combo.Yes").equalsIgnoreCase(item.getText(11)));
+            field.setType(field.isSetEmptyString() ? "String" : item.getText(3));   
+            
+        meta.getFields().add(field);            
+    }
+  }
+
+  /**
+   * Cancel the dialog.
+   */
+  private void cancel() {
+    transformName = null;
+    input.setChanged( changed );
+    dispose();
+  }
+
+  private void ok() {
+    if (Utils.isEmpty(wTransformName.getText())) {
+      return;
+    }
+
+    transformName = wTransformName.getText(); // return value
+    try {
+      getInfo(new Plc4xReadMeta()); // to see if there is an exception
+      getInfo(input); // to put the content on the input structure for real if all is well.
+      dispose();
+    } catch (HopException e) {
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Title"),
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Message"),
+          e);
+    }
+  }
+  
+
+  /**
+   * Preview the data generated by this transform. This generates a pipeline using this transform &
+   * a dummy and previews it.
+   */
+  private void preview() {
+    Plc4xReadMeta oneMeta = new Plc4xReadMeta();
+    try {
+      getInfo(oneMeta);
+    } catch (HopException e) {
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Title"),
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Message"),
+          e);
+      return;
+    }
+
+    PipelineMeta previewMeta =
+        PipelinePreviewFactory.generatePreviewPipeline(
+            pipelineMeta.getMetadataProvider(), oneMeta, wTransformName.getText());
+
+    EnterNumberDialog numberDialog =
+        new EnterNumberDialog(
+            shell,
+            props.getDefaultPreviewSize(),
+            BaseMessages.getString(PKG, "System.Dialog.EnterPreviewSize.Title"),
+            BaseMessages.getString(PKG, "System.Dialog.EnterPreviewSize.Message"));
+    int previewSize = numberDialog.open();
+    if (previewSize > 0) {
+      PipelinePreviewProgressDialog progressDialog =
+          new PipelinePreviewProgressDialog(
+              shell,
+              variables,
+              previewMeta,
+              new String[] {wTransformName.getText()},
+              new int[] {previewSize});
+      progressDialog.open();
+
+      Pipeline pipeline = progressDialog.getPipeline();
+      String loggingText = progressDialog.getLoggingText();
+
+      if (!progressDialog.isCancelled()) {
+        if (pipeline.getResult() != null && pipeline.getResult().getNrErrors() > 0) {
+          EnterTextDialog etd =
+              new EnterTextDialog(
+                  shell,
+                  BaseMessages.getString(PKG, "System.Dialog.PreviewError.Title"),
+                  BaseMessages.getString(PKG, "System.Dialog.PreviewError.Message"),
+                  loggingText,
+                  true);
+          etd.setReadOnly();
+          etd.open();
+        }
+      }
+
+      PreviewRowsDialog prd =
+          new PreviewRowsDialog(
+              shell,
+              variables,
+              SWT.NONE,
+              wTransformName.getText(),
+              progressDialog.getPreviewRowsMeta(wTransformName.getText()),
+              progressDialog.getPreviewRows(wTransformName.getText()),
+              loggingText);
+      prd.open();
+    }
+  }  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadMeta.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadMeta.java
new file mode 100644
index 0000000000..3946c9a310
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xinput/Plc4xReadMeta.java
@@ -0,0 +1,308 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xinput;
+
+import java.util.ArrayList;
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.annotations.Transform;
+import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.transform.BaseTransformMeta;
+import org.apache.hop.pipeline.transform.ITransformMeta;
+import org.apache.hop.pipeline.transform.TransformMeta;
+
+import java.util.List;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.pipeline.transform.ITransformIOMeta;
+import org.apache.hop.pipeline.transform.TransformIOMeta;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+
+/**
+ * Meta data for the sample transform.
+ */
+@Transform(
+        id = "plc4x-read",
+        name = "i18n::Plc4x.Read.Name",
+        description = "i18n::Plc4x.Read.Description",
+        image = "plc4x_read.svg",
+        categoryDescription = "i18n:org.apache.plc4x.hop.transforms.plc4xinput:Plc4x.Category.plc4x",
+        documentationUrl = "https://plc4x.apache.org/users/integrations/apache-calcite.html"
+)
+public class Plc4xReadMeta extends BaseTransformMeta implements ITransformMeta {
+
+  private static final Class<?> PKG = Plc4xReadMeta.class; // Needed by Translator
+
+  
+  @HopMetadataProperty(
+      key = "connection",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.Connection")
+  private String connection;  
+
+  @HopMetadataProperty(
+      key = "never_ending",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+  private boolean neverEnding;
+
+  @HopMetadataProperty(
+      key = "maxwait_in_ms",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.MaxwaitInMs")
+  private String maxwaitInMs;  
+ 
+  @HopMetadataProperty(
+      key = "interval_in_ms",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.IntervalInMs")
+  private String intervalInMs;
+
+  @HopMetadataProperty(
+      key = "row_time_field",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.RowTimeField")
+  private String rowTimeField;
+
+  @HopMetadataProperty(
+      key = "last_time_field",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.LastTimeField")
+  private String lastTimeField;
+
+  @HopMetadataProperty(
+      key = "limit",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.RowLimit")
+  private String rowLimit;
+
+  @HopMetadataProperty(
+      groupKey = "fields",
+      key = "field",
+      injectionGroupDescription = "Plc4x.Read.Meta.Injection.Fields",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.Fields")
+  private List<Plc4xGeneratorField> fields;
+
+  public Plc4xReadMeta() {
+    fields = new ArrayList<>();
+
+    rowLimit = "10";
+    neverEnding = false;
+    maxwaitInMs = "1000";
+    intervalInMs = "5000";
+    rowTimeField = "now";
+    lastTimeField = "last";
+  }  
+  
+  public Plc4xReadMeta(Plc4xReadMeta m) {
+    this.connection = m.connection;
+    this.neverEnding = m.neverEnding;
+    this.intervalInMs = m.intervalInMs;
+    this.rowTimeField = m.rowTimeField;
+    this.lastTimeField = m.lastTimeField;
+    this.rowLimit = m.rowLimit;
+    this.fields = new ArrayList<>();
+    for (Plc4xGeneratorField field : m.fields) {
+      this.fields.add(new Plc4xGeneratorField(field));
+    }
+  }
+
+  @Override
+  public Plc4xReadMeta clone() {
+    return new Plc4xReadMeta(this);
+  }  
+  
+  
+
+  @Override
+  public void getFields( IRowMeta inputRowMeta, String name, IRowMeta[] info, TransformMeta nextTransform,
+                         IVariables variables, IHopMetadataProvider metadataProvider ) throws HopTransformException {
+    try {
+        logBasic("PASO 1");
+        List<ICheckResult> remarks = new ArrayList<>();
+        RowMetaAndData rowMetaAndData = Plc4xRead.buildRow(this, remarks, name);
+        logBasic("PASO 2");
+      if (!remarks.isEmpty()) {
+        logBasic("PASO 3");
+        StringBuilder stringRemarks = new StringBuilder();
+        for (ICheckResult remark : remarks) {
+          logBasic("PASO 3x: " + remark.toString());   
+          stringRemarks.append(remark.toString()).append(Const.CR);
+        }
+        logBasic("PASO 3.1");        
+        throw new HopTransformException(stringRemarks.toString());
+      }
+              logBasic("PASO 4");
+      for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
+        valueMeta.setOrigin(name);
+      }
+        logBasic("PASO 5");
+      inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
+    } catch (Exception e) {
+      throw new HopTransformException(e);
+    }
+  }
+
+
+  public Plc4xRead createTransform(TransformMeta transformMeta, Plc4xReadData data, int copyNr,
+                                PipelineMeta pipelineMeta, Pipeline pipeline ) {
+    return new Plc4xRead( transformMeta, this, data, copyNr, pipelineMeta, pipeline );
+  }
+
+
+  public Plc4xReadData getTransformData() {
+    return new Plc4xReadData();
+  }
+  
+/*
+  @Override
+  public void loadXml( Node transformNode, IHopMetadataProvider metadataProvider ) throws HopXmlException {
+    //load the saved values from the transformnode
+    String sampleValue = XmlHandler.getTagValue( transformNode, "sampleValue" );
+
+  }
+*/
+  @Override
+  public void setDefault() {
+    //default values when creating a new transform
+  }
+  
+  
+  /**
+   * Returns the Input/Output metadata for this transform. 
+   * The generator transform only produces output, does not accept input!
+   * TransformIOMeta(inputAcceptor, outputProducer, inputOptional, outputDynamic, inputDynamic)
+   */
+  @Override
+  public ITransformIOMeta getTransformIOMeta() {
+    return new TransformIOMeta(false, true, false, false, false, false);
+  }
+
+  /**
+   * Gets Plc4xConnection metadata name.
+   *
+   * @return value of intervalInMs
+   */
+  public String getConnection() {
+    return connection;
+  }
+
+  /** @param connection  */
+  public void setConnection(String connection) {
+    this.connection = connection;
+  }  
+  
+  
+  /**
+   * Gets neverEnding
+   *
+   * @return value of neverEnding
+   */
+  public boolean isNeverEnding() {
+    return neverEnding;
+  }
+
+  /** @param neverEnding The neverEnding to set */
+  public void setNeverEnding(boolean neverEnding) {
+    this.neverEnding = neverEnding;
+  }
+  
+    /**
+   * Gets intervalInMs
+   *
+   * @return value of intervalInMs
+   */
+  public String getMaxwaitInMs() {
+    return maxwaitInMs;
+  }
+
+  /** @param intervalInMs The intervalInMs to set */
+  public void setMaxwaitInMs(String maxwaitInMs) {
+    this.maxwaitInMs = maxwaitInMs;
+  }
+
+  /**
+   * Gets intervalInMs
+   *
+   * @return value of intervalInMs
+   */
+  public String getIntervalInMs() {
+    return intervalInMs;
+  }
+
+  /** @param intervalInMs The intervalInMs to set */
+  public void setIntervalInMs(String intervalInMs) {
+    this.intervalInMs = intervalInMs;
+  }
+
+  /**
+   * Gets rowTimeField
+   *
+   * @return value of rowTimeField
+   */
+  public String getRowTimeField() {
+    return rowTimeField;
+  }
+
+  /** @param rowTimeField The rowTimeField to set */
+  public void setRowTimeField(String rowTimeField) {
+    this.rowTimeField = rowTimeField;
+  }
+
+  /**
+   * Gets lastTimeField
+   *
+   * @return value of lastTimeField
+   */
+  public String getLastTimeField() {
+    return lastTimeField;
+  }
+
+  /** @param lastTimeField The lastTimeField to set */
+  public void setLastTimeField(String lastTimeField) {
+    this.lastTimeField = lastTimeField;
+  }
+
+  /**
+   * Gets rowLimit
+   *
+   * @return value of rowLimit
+   */
+  public String getRowLimit() {
+    return rowLimit;
+  }
+
+  /** @param rowLimit The rowLimit to set */
+  public void setRowLimit(String rowLimit) {
+    this.rowLimit = rowLimit;
+  }
+
+  /**
+   * Gets fields
+   *
+   * @return value of fields
+   */
+  public List<Plc4xGeneratorField> getFields() {
+    return fields;
+  }  
+  
+  /** @param fields The fields to set */
+  public void setFields(List<Plc4xGeneratorField> fields) {
+    this.fields = fields;
+  }  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWrite.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWrite.java
new file mode 100644
index 0000000000..2381564a75
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWrite.java
@@ -0,0 +1,478 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xoutput;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hop.core.CheckResult;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.exception.HopPluginException;
+import org.apache.hop.core.exception.HopValueException;
+import org.apache.hop.core.logging.LogLevel;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.core.row.RowDataUtil;
+import org.apache.hop.core.row.RowMeta;
+import org.apache.hop.core.row.value.ValueMetaDate;
+import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.StringUtil;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.transform.BaseTransform;
+import org.apache.hop.pipeline.transform.ITransform;
+import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+import org.apache.plc4x.hop.transforms.util.Plc4xPlcField;
+import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteResponse;
+
+/**
+ * Transform That contains the basic skeleton needed to create your own plugin
+ *
+ */
+public class Plc4xWrite extends BaseTransform<Plc4xWriteMeta, Plc4xWriteData> implements ITransform {
+
+  private static final Class<?> PKG = Plc4xWrite.class; // Needed by Translator
+  
+  private Plc4xConnection connmeta = null;
+  private Plc4xWrapperConnection connwrapper = null;
+  private PlcWriteRequest writeRequest = null;
+  private PlcWriteRequest.Builder builder = null;
+  private PlcWriteResponse writeResponse = null;
+  
+  private static final ReentrantLock lock = new ReentrantLock();
+  
+  private static final String dummy = "dummy";
+  
+  private Map<String, Integer> index = new HashMap();
+  private Map<String, Plc4xPlcField> plcfields = new HashMap();  
+
+  public Plc4xWrite(TransformMeta transformMeta, Plc4xWriteMeta meta, Plc4xWriteData data, int copyNr, PipelineMeta pipelineMeta,
+                Pipeline pipeline ) {
+    super( transformMeta, meta, data, copyNr, pipelineMeta, pipeline );
+  }
+
+  /*
+  * Including Date and Time field for every row 
+  *
+  * @param meta Meta data from user dialog
+  * @param remarks Error registers
+  * @param origin transform instance name
+  */
+  public static final RowMetaAndData buildRow(
+      Plc4xWriteMeta meta, List<ICheckResult> remarks, String origin) throws HopPluginException {
+    IRowMeta rowMeta = new RowMeta();
+    Object[] rowData = RowDataUtil.allocateRowData(meta.getFields().size() + 2);
+    int index = 0;
+
+    if (!Utils.isEmpty(meta.getRowTimeField())) {
+        rowMeta.addValueMeta(new ValueMetaDate(meta.getRowTimeField()));
+        rowData[index++] = null;
+    }
+
+    if (!Utils.isEmpty(meta.getLastTimeField())) {
+        rowMeta.addValueMeta(new ValueMetaDate(meta.getLastTimeField()));
+        rowData[index++] = null;
+    }
+      
+    for (Plc4xGeneratorField field : meta.getFields()) {
+      int typeString = ValueMetaFactory.getIdForValueMeta(field.getType());
+      if (StringUtils.isNotEmpty(field.getType())) {
+          System.out.println("typeString: " + typeString); 
+        IValueMeta valueMeta =
+            ValueMetaFactory.createValueMeta(field.getName(), typeString); // build a
+        // value!
+        valueMeta.setLength(field.getLength());
+        valueMeta.setPrecision(field.getPrecision());
+        valueMeta.setConversionMask(field.getFormat());
+        valueMeta.setCurrencySymbol(field.getCurrency());
+        valueMeta.setGroupingSymbol(field.getGroup());
+        valueMeta.setDecimalSymbol(field.getDecimal());
+        valueMeta.setOrigin(origin);
+
+        IValueMeta stringMeta = ValueMetaFactory.cloneValueMeta(valueMeta, IValueMeta.TYPE_STRING);
+
+        if (field.isSetEmptyString()) {
+          // Set empty string
+          rowData[index] = StringUtil.EMPTY_STRING;
+        } else {
+          String stringValue = field.getValue();
+
+          // If the value is empty: consider it to be NULL.
+          if (Utils.isEmpty(stringValue)) {
+            rowData[index] = null;
+
+            if (valueMeta.getType() == IValueMeta.TYPE_NONE) {
+              String message =
+                  BaseMessages.getString(
+                      PKG,
+                      "Plc4x.Read.Meta.CheckResult.SpecifyTypeError",
+                      valueMeta.getName(),
+                      stringValue);
+              remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+            }
+          } else {
+            // Convert the data from String to the specified type ...
+            //
+            try {
+                System.out.println("stringValue: " + stringValue);
+              rowData[index] = valueMeta.convertData(stringMeta, stringValue);
+            } catch (HopValueException e) {
+              switch (valueMeta.getType()) {
+                case IValueMeta.TYPE_NUMBER:
+                  String message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Number",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_DATE:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Date",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_INTEGER:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Integer",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_BIGNUMBER:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.BigNumber",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_TIMESTAMP:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Timestamp",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                default:
+                  // Boolean and binary don't throw errors normally, so it's probably an unspecified
+                  // error problem...
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.CheckResult.SpecifyTypeError",
+                          valueMeta.getName(),
+                          stringValue);
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+              }
+            }
+          }
+        }
+
+        // Now add value to the row!
+        // This is in fact a copy from the fields row, but now with data.
+        rowMeta.addValueMeta(valueMeta);
+        index++;
+      }
+    }
+
+    return new RowMetaAndData(rowMeta, rowData);
+  }
+  
+  /* 
+  * 1. Stores the indexes of the incoming fields from the user's selection.
+  *    It is only done during the first cycle.
+  * 2. Block the other instances by means of a lock.  
+  * 3. Try to locate an existing connection.
+  * 4. If it doesn't exist, it tries to take control of the routine to 
+  *    create an instance of PlcConnection and his wrapper.
+  * 5. Register the connection wrapper for global access.
+  * 6. If the connection to the PLC is made, then it creates the query 
+  *    and executes it.
+  *
+  */
+  @Override
+  public  boolean processRow() throws HopException {
+    final Object[] r = getRow(); // Get row from input rowset & set row busy!
+    
+    if (r == null) {
+      setOutputDone();
+      return false;
+    }    
+    
+    data.outputRowMeta = getInputRowMeta();
+    
+    
+    if (first) {
+        index.clear();
+        plcfields.clear();
+        meta.getFields().forEach((f) ->{
+            Integer i = getInputRowMeta().indexOfValue(f.getName()); //(01)
+            if (i>=0) {
+                index.put(f.getName(), i);
+                plcfields.put(f.getName(),Plc4xPlcField.of(f.getItem()));
+            }
+        });
+        first = false;
+    }
+    
+    IRowMeta inputRowMeta = getInputRowMeta();
+
+    setLogLevel(LogLevel.DEBUG);
+
+    if ((!meta.isNeverEnding() && data.rowsWritten >= data.rowLimit) && !isStopped()) {   
+      setOutputDone(); // signal end to receiver(s)
+      return false;        
+    }    
+
+    lock.lock(); //(01)
+    try {
+        IHopMetadataProvider metaprovider = getMetadataProvider();
+        connmeta = metaprovider.getSerializer(Plc4xConnection.class).load(meta.getConnection());
+        if (connwrapper == null) {
+            connwrapper = (Plc4xWrapperConnection) getPipeline().getExtensionDataMap().get(meta.getConnection()); //(02)
+            if (connwrapper != null) connwrapper.retain();
+        };
+
+        if (connmeta == null){    
+            logError(
+                BaseMessages.getString(
+                    PKG,
+                    "Plc4x.Read.Meta.Log.SetMetadata",
+                    meta.getConnection()));         
+        }
+
+        if ((connmeta != null) && (connwrapper == null)){
+            writeRequest = null;
+            try{
+                PlcConnection conn =  new DefaultPlcDriverManager().getConnection(connmeta.getUrl()); //(03)
+                if (conn.isConnected()) {
+                    connwrapper = new Plc4xWrapperConnection(conn);            
+                    getPipeline().getExtensionDataMap().put(meta.getConnection(), connwrapper); //(04)
+                }
+            } catch (Exception ex){
+                setErrors(1L);
+                logError("Unable to create connection to PLC. " + ex.getMessage());
+            }
+        }
+    } finally {
+        lock.unlock();
+    }
+    
+    if ((connmeta != null) && (connwrapper != null)){
+        if (connwrapper.getConnection().isConnected()){
+            
+            builder = null;
+            builder = connwrapper.getConnection().writeRequestBuilder(); //(05)
+            Integer i;
+            for (Plc4xGeneratorField field: meta.getFields()){
+                i = index.get(field.getName());
+                if (i != null) {
+                    //From Input Type
+                    if (inputRowMeta.getValueMeta(i).getTypeDesc().
+                            equalsIgnoreCase(field.getType()))
+                    switch(inputRowMeta.getValueMeta(i).getType()) {
+                        case IValueMeta.TYPE_BOOLEAN:     
+                        case IValueMeta.TYPE_INTEGER:    
+                        case IValueMeta.TYPE_NUMBER:      
+                        case IValueMeta.TYPE_BIGNUMBER: 
+                            builder.addTagAddress(field.getName(), 
+                                field.getItem(),
+                                r[i]);                            
+                            break;
+                        case IValueMeta.TYPE_DATE:
+                            builder.addTagAddress(field.getName(), 
+                                field.getItem(),
+                                Double.parseDouble(inputRowMeta.getString(r, i)));                              
+                            break;                            
+                        case IValueMeta.TYPE_TIMESTAMP:
+                            builder.addTagAddress(field.getName(), 
+                                field.getItem(),
+                                Double.parseDouble(inputRowMeta.getString(r, i)));                              
+                            break;  
+                        case IValueMeta.TYPE_INET:
+                            builder.addTagAddress(field.getName(), 
+                                field.getItem(),
+                                Double.parseDouble(inputRowMeta.getString(r, i)));                              
+                            break;
+                        case IValueMeta.TYPE_STRING:
+                            builder.addTagAddress(field.getName(), 
+                                field.getItem(),
+                                Double.parseDouble(inputRowMeta.getString(r, i)));                              
+                            break;                             
+                        case IValueMeta.TYPE_SERIALIZABLE:
+                            builder.addTagAddress(field.getName(), 
+                                field.getItem(),
+                                Double.parseDouble(inputRowMeta.getString(r, i)));                              
+                            break;                     
+                            
+                    }
+                    //field.setValue(inputRowMeta.getString(r, i));
+                };
+            }
+
+            writeRequest = builder.build();                  
+       
+            try {            
+                int maxwait = Integer.parseInt(meta.getMaxwaitInMs());
+                maxwait = (maxwait<100)?100:maxwait;
+                writeResponse = writeRequest.execute().get(maxwait, TimeUnit.MILLISECONDS);
+
+                index.forEach((n,y)->{
+                    System.out.println("Resultado: " + writeResponse.getResponseCode(n));
+                });
+
+            } catch (Exception ex) {
+                setErrors(1L);                
+                logError("Unable read from PLC. " + ex.getMessage());
+            }
+            
+        } else {
+            setErrors(1L);                
+            logError("PLC is not connected.");            
+            setOutputDone();
+             return false;   
+        }
+        
+    } else {
+        setErrors(1L);                
+        logError("PLC connection don't exist.");         
+        setOutputDone();
+        return false;        
+    }
+  
+
+    putRow(data.outputRowMeta, r); // return your data
+    data.rowsWritten++;
+    return true;
+  }
+
+
+  @Override
+  public boolean init() {
+    try {
+        if(super.init()){     
+            // Determine the number of rows to generate...
+            data.rowLimit = Const.toLong(resolve(meta.getRowLimit()), -1L);
+            data.rowsWritten = 0L;
+            data.delay = Const.toLong(resolve(meta.getIntervalInMs()), -1L);
+
+            if (data.rowLimit < 0L) { // Unable to parse
+              logError(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Wrong.RowLimit.Number"));
+              return false; // fail
+            }            
+            
+            // Create a row (constants) with all the values in it...
+            List<ICheckResult> remarks = new ArrayList<>(); // stores the errors...
+            RowMetaAndData outputRow = buildRow(meta, remarks, getTransformName());
+            if (!remarks.isEmpty()) {
+              for (int i = 0; i < remarks.size(); i++) {
+                CheckResult cr = (CheckResult) remarks.get(i);
+                logError(cr.getText());
+              }
+              return false;
+            }
+
+            data.outputRowData = outputRow.getData();
+            data.outputRowMeta = outputRow.getRowMeta();            
+
+          return true;
+        }
+    return false;
+    } catch (Exception ex){
+        setErrors(1L);
+        logError("Error initializing transform", ex);
+        return false;
+    }
+  }
+
+  /*
+  * Here, must perform the cleaning of any resource, main of the connection to 
+  * the associated PLC.
+  */
+    @Override
+    public void cleanup() {
+        super.cleanup();
+        logBasic("Cleanup. Release connection.");
+        if (connwrapper != null)
+        connwrapper.release();     
+    }
+
+
+    /*
+    * Here, must perform the cleaning of any resource. 
+    * 1. Check if we have reference to wrapper.
+    * 2. Release de reference to object.
+    * 3. The lastone remove the global reference to connection wrapper.
+    * 4. Clear local references.
+    */    
+    @Override
+    public void dispose() {
+        super.dispose();
+        if (connwrapper != null) {
+            logBasic("Dispose. Release connection: " + connwrapper.refCnt());            
+            connwrapper.release();   
+            if (!connwrapper.getConnection().isConnected()){           
+                getPipeline().getExtensionDataMap().remove(meta.getConnection());
+            }            
+            connwrapper = null;
+            writeRequest = null;
+
+        }
+    }
+ 
+  
+  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteData.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteData.java
new file mode 100644
index 0000000000..81f9c909b8
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteData.java
@@ -0,0 +1,49 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xoutput;
+
+import org.apache.plc4x.hop.transforms.plc4xinput.*;
+import java.util.Date;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.pipeline.transform.BaseTransformData;
+import org.apache.hop.pipeline.transform.ITransformData;
+
+
+public class Plc4xWriteData extends BaseTransformData implements ITransformData {
+    
+  //The Plc4xConnection metadata
+  public String connection;    
+    
+  public IRowMeta outputRowMeta;
+  public Object[] outputRowData;
+
+  public long rowLimit;
+  public long rowsWritten;
+  public Date rowDate;
+  public Date prevDate;
+  public long delay;
+  
+
+    
+  /**
+   * Default constructor for SampleData.
+   */
+  public Plc4xWriteData() {
+      super();
+  }
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteDialog.java
new file mode 100644
index 0000000000..1e2b3107ca
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteDialog.java
@@ -0,0 +1,674 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xoutput;
+
+import org.apache.plc4x.hop.transforms.plc4xinput.*;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.pipeline.transform.BaseTransformMeta;
+import org.apache.hop.pipeline.transform.ITransformDialog;
+import org.apache.hop.ui.core.ConstUi;
+import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.dialog.EnterNumberDialog;
+import org.apache.hop.ui.core.dialog.EnterTextDialog;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
+import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
+import org.apache.hop.ui.core.widget.ColumnInfo;
+import org.apache.hop.ui.core.widget.MetaSelectionLine;
+import org.apache.hop.ui.core.widget.TableView;
+import org.apache.hop.ui.core.widget.TextVar;
+import org.apache.hop.ui.pipeline.dialog.PipelinePreviewProgressDialog;
+import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
+import org.apache.hop.ui.pipeline.transform.ITableItemInsertListener;
+import org.apache.hop.ui.util.SwtSvgImageUtil;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+public class Plc4xWriteDialog extends BaseTransformDialog implements ITransformDialog {
+  private static final Class<?> PKG = Plc4xWriteDialog.class; // Needed by Translator
+
+  private MetaSelectionLine<Plc4xConnection> wConnection;  
+  
+  private Label wlLimit;
+  private TextVar wLimit;
+
+  private Button wNeverEnding;
+
+  private Label wlMaxwait;
+  private TextVar wMaxwait;  
+  
+  private Label wlInterval;
+  private TextVar wInterval;
+
+  private Label wlRowTimeField;
+  private TextVar wRowTimeField;
+
+  private Label wlLastTimeField;
+  private TextVar wLastTimeField;
+
+  private TableView wFields;
+  
+  private Button wGetPrvFields;
+  
+  private final Plc4xWriteMeta input;
+
+  public Plc4xWriteDialog(Shell parent, IVariables variables , Object in, PipelineMeta pipelineMeta, String sname ) {
+    super( parent, variables, (BaseTransformMeta) in, pipelineMeta, sname );
+    input = (Plc4xWriteMeta) in;
+  }
+
+  @Override
+  public String open() {
+    Shell parent = getParent();
+
+    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | SWT.MIN);
+    props.setLook(shell);
+    setShellImage(shell, input);
+
+    ModifyListener lsMod = e -> input.setChanged();
+    changed = input.hasChanged();
+
+    FormLayout formLayout = new FormLayout();
+    formLayout.marginWidth = Const.FORM_MARGIN;
+    formLayout.marginHeight = Const.FORM_MARGIN;
+
+    shell.setLayout(formLayout);
+    shell.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.DialogTitle"));
+
+    int middle = props.getMiddlePct();
+    int margin = props.getMargin();
+
+    // Filename line
+    wlTransformName = new Label(shell, SWT.RIGHT);
+    wlTransformName.setText(BaseMessages.getString(PKG, "System.Label.TransformName"));
+    props.setLook(wlTransformName);
+    fdlTransformName = new FormData();
+    fdlTransformName.left = new FormAttachment(0, 0);
+    fdlTransformName.right = new FormAttachment(middle, -margin);
+    fdlTransformName.top = new FormAttachment(0, margin);
+    wlTransformName.setLayoutData(fdlTransformName);
+    
+    wTransformName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    wTransformName.setText(transformName);
+    props.setLook(wTransformName);
+    wTransformName.addModifyListener(lsMod);
+    fdTransformName = new FormData();
+    fdTransformName.left = new FormAttachment(middle, 0);
+    fdTransformName.top = new FormAttachment(0, margin);
+    fdTransformName.right = new FormAttachment(100, 0);
+    wTransformName.setLayoutData(fdTransformName);
+
+    // Connection line
+    wConnection =
+        new MetaSelectionLine<>(
+            variables,
+            metadataProvider,
+            Plc4xConnection.class,
+            shell,
+            SWT.NONE,
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Label"),
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Tooltip"));
+    FormData fdConnection = new FormData();
+    fdConnection.left = new FormAttachment(0, 0);
+    fdConnection.right = new FormAttachment(100, 0);
+    fdConnection.top = new FormAttachment(wTransformName, margin);
+    wConnection.setLayoutData(fdConnection);    
+    props.setLook(wConnection);
+    try {
+      wConnection.fillItems();
+    } catch (Exception e) {
+      new ErrorDialog(shell, "Error", "Error listing Cassandra connection metadata objects", e);
+    }    
+    
+    Control lastControl = wConnection;    
+    
+    wlLimit = new Label(shell, SWT.RIGHT);
+    wlLimit.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Limit.Label"));
+    props.setLook(wlLimit);
+    FormData fdlLimit = new FormData();
+    fdlLimit.left = new FormAttachment(0, 0);
+    fdlLimit.right = new FormAttachment(middle, -margin);
+    fdlLimit.top = new FormAttachment(lastControl, margin);
+    wlLimit.setLayoutData(fdlLimit);
+    wLimit = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLimit);
+    wLimit.addModifyListener(lsMod);
+    FormData fdLimit = new FormData();
+    fdLimit.left = new FormAttachment(middle, 0);
+    fdLimit.top = new FormAttachment(lastControl, margin);
+    fdLimit.right = new FormAttachment(100, 0);
+    wLimit.setLayoutData(fdLimit);
+    lastControl = wLimit;
+
+    Label wlNeverEnding = new Label(shell, SWT.RIGHT);
+    wlNeverEnding.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlNeverEnding);
+    FormData fdlNeverEnding = new FormData();
+    fdlNeverEnding.left = new FormAttachment(0, 0);
+    fdlNeverEnding.right = new FormAttachment(middle, -margin);
+    fdlNeverEnding.top = new FormAttachment(lastControl, margin);
+    wlNeverEnding.setLayoutData(fdlNeverEnding);
+    wNeverEnding = new Button(shell, SWT.CHECK);
+    props.setLook(wNeverEnding);
+    wNeverEnding.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        });
+    FormData fdNeverEnding = new FormData();
+    fdNeverEnding.left = new FormAttachment(middle, 0);
+    fdNeverEnding.top = new FormAttachment(wlNeverEnding, 0, SWT.CENTER);
+    fdNeverEnding.right = new FormAttachment(100, 0);
+    wNeverEnding.setLayoutData(fdNeverEnding);
+    lastControl = wlNeverEnding;
+    
+    wlMaxwait = new Label(shell, SWT.RIGHT);
+    wlMaxwait.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Maxwait.Label"));
+    props.setLook(wlMaxwait);
+    FormData fdlMaxwait = new FormData();
+    fdlMaxwait.left = new FormAttachment(0, 0);
+    fdlMaxwait.right = new FormAttachment(middle, -margin);
+    fdlMaxwait.top = new FormAttachment(lastControl, margin);
+    wlMaxwait.setLayoutData(fdlMaxwait);
+    wMaxwait = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wMaxwait);
+    wMaxwait.addModifyListener(lsMod);
+    FormData fdMaxwait = new FormData();
+    fdMaxwait.left = new FormAttachment(middle, 0);
+    fdMaxwait.top = new FormAttachment(lastControl, margin);
+    fdMaxwait.right = new FormAttachment(100, 0);
+    wMaxwait.setLayoutData(fdMaxwait);
+    lastControl = wMaxwait;    
+
+    wlInterval = new Label(shell, SWT.RIGHT);
+    wlInterval.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Interval.Label"));
+    props.setLook(wlInterval);
+    FormData fdlInterval = new FormData();
+    fdlInterval.left = new FormAttachment(0, 0);
+    fdlInterval.right = new FormAttachment(middle, -margin);
+    fdlInterval.top = new FormAttachment(lastControl, margin);
+    wlInterval.setLayoutData(fdlInterval);
+    wInterval = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wInterval);
+    wInterval.addModifyListener(lsMod);
+    FormData fdInterval = new FormData();
+    fdInterval.left = new FormAttachment(middle, 0);
+    fdInterval.top = new FormAttachment(lastControl, margin);
+    fdInterval.right = new FormAttachment(100, 0);
+    wInterval.setLayoutData(fdInterval);
+    lastControl = wInterval;
+    
+    /*
+    wlRowTimeField = new Label(shell, SWT.RIGHT);
+    wlRowTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.RowTimeField.Label"));
+    props.setLook(wlRowTimeField);
+    FormData fdlRowTimeField = new FormData();
+    fdlRowTimeField.left = new FormAttachment(0, 0);
+    fdlRowTimeField.right = new FormAttachment(middle, -margin);
+    fdlRowTimeField.top = new FormAttachment(lastControl, margin);
+    wlRowTimeField.setLayoutData(fdlRowTimeField);
+    wRowTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wRowTimeField);
+    wRowTimeField.addModifyListener(lsMod);
+    FormData fdRowTimeField = new FormData();
+    fdRowTimeField.left = new FormAttachment(middle, 0);
+    fdRowTimeField.top = new FormAttachment(lastControl, margin);
+    fdRowTimeField.right = new FormAttachment(100, 0);
+    wRowTimeField.setLayoutData(fdRowTimeField);
+    lastControl = wRowTimeField;
+
+    wlLastTimeField = new Label(shell, SWT.RIGHT);
+    wlLastTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.LastTimeField.Label"));
+    props.setLook(wlLastTimeField);
+    FormData fdlLastTimeField = new FormData();
+    fdlLastTimeField.left = new FormAttachment(0, 0);
+    fdlLastTimeField.right = new FormAttachment(middle, -margin);
+    fdlLastTimeField.top = new FormAttachment(lastControl, margin);
+    wlLastTimeField.setLayoutData(fdlLastTimeField);
+    wLastTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLastTimeField);
+    wLastTimeField.addModifyListener(lsMod);
+    FormData fdLastTimeField = new FormData();
+    fdLastTimeField.left = new FormAttachment(middle, 0);
+    fdLastTimeField.top = new FormAttachment(lastControl, margin);
+    fdLastTimeField.right = new FormAttachment(100, 0);
+    wLastTimeField.setLayoutData(fdLastTimeField);
+    lastControl = wLastTimeField;
+    */
+    wOk = new Button(shell, SWT.PUSH);
+    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
+    wOk.addListener(SWT.Selection, e -> ok());
+    
+    wGet = new Button(shell, SWT.PUSH);
+    wGet.setText(BaseMessages.getString(PKG, "Get Fields"));
+    wGet.addListener(SWT.Selection, e -> getfields());
+    
+    wPreview = new Button(shell, SWT.PUSH);
+    wPreview.setText(BaseMessages.getString(PKG, "System.Button.Preview"));
+    wPreview.addListener(SWT.Selection, e -> preview());
+    
+    wCancel = new Button(shell, SWT.PUSH);
+    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
+    wCancel.addListener(SWT.Selection, e -> cancel());
+
+    setButtonPositions(new Button[] {wOk, wPreview, wGet, wCancel}, margin, null);
+
+    Label wlFields = new Label(shell, SWT.NONE);
+    wlFields.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Label"));
+    props.setLook(wlFields);
+    FormData fdlFields = new FormData();
+    fdlFields.left = new FormAttachment(0, 0);
+    fdlFields.top = new FormAttachment(lastControl, margin);
+    wlFields.setLayoutData(fdlFields);
+    lastControl = wlFields;
+
+    final int nrFields = input.getFields().size();
+
+    ColumnInfo[] colinf =
+        new ColumnInfo[] {
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Name"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Item"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),            
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Type"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              ValueMetaFactory.getValueMetaNames()),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Format"),
+              ColumnInfo.COLUMN_TYPE_FORMAT,
+              2),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Length"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Precision"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Currency"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Decimal"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Group"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Value"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.SetEmptyString"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              new String[] {
+                BaseMessages.getString(PKG, "System.Combo.Yes"),
+                BaseMessages.getString(PKG, "System.Combo.No")
+              })
+        };
+
+    wFields =
+        new TableView(
+            variables,
+            shell,
+            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
+            colinf,
+            nrFields,
+            lsMod,
+            props);
+
+    FormData fdFields = new FormData();
+    fdFields.left = new FormAttachment(0, 0);
+    fdFields.top = new FormAttachment(lastControl, margin);
+    fdFields.right = new FormAttachment(100, 0);
+    fdFields.bottom = new FormAttachment(wOk, -2 * margin);
+    wFields.setLayoutData(fdFields);
+
+    lsResize =
+        event -> {
+          Point size = shell.getSize();
+          wFields.setSize(size.x - 10, size.y - 50);
+          wFields.table.setSize(size.x - 10, size.y - 50);
+          wFields.redraw();
+        };
+    shell.addListener(SWT.Resize, lsResize);
+
+    getData();
+    input.setChanged(changed);
+
+    BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());
+
+    return transformName;      
+    };
+
+    public void setActive() {
+        boolean neverEnding = wNeverEnding.getSelection();
+
+        wlLimit.setEnabled(!neverEnding);
+        wLimit.setEnabled(!neverEnding);
+
+        //wlInterval.setEnabled(neverEnding);
+        //wInterval.setEnabled(neverEnding);
+
+        //wlRowTimeField.setEnabled(neverEnding);
+        //wRowTimeField.setEnabled(neverEnding);
+
+        //wlLastTimeField.setEnabled(neverEnding);
+        //wLastTimeField.setEnabled(neverEnding);
+  }
+
+
+
+  private Image getImage() {
+    return SwtSvgImageUtil.getImage( shell.getDisplay(), getClass().getClassLoader(), "plc4x_toddy_read.svg", ConstUi.LARGE_ICON_SIZE,
+      ConstUi.LARGE_ICON_SIZE );
+  }
+
+  /**
+   * Copy information from the meta-data input to the dialog fields.
+   * 
+   */
+  public void getData() {
+    if (isDebug()) {
+      logDebug("getting fields info...");
+    }
+    if (input.getConnection() == null) {
+        wConnection.setText("");
+    } else {
+        wConnection.setText(input.getConnection());        
+    }
+
+    wLimit.setText(input.getRowLimit());
+    wNeverEnding.setSelection(input.isNeverEnding());
+    wMaxwait.setText(Const.NVL(input.getMaxwaitInMs(), ""));
+    wInterval.setText(Const.NVL(input.getIntervalInMs(), ""));
+   // wRowTimeField.setText(Const.NVL(input.getRowTimeField(), ""));
+    //wLastTimeField.setText(Const.NVL(input.getLastTimeField(), ""));
+
+    for (int i = 0; i < input.getFields().size(); i++) {
+      Plc4xGeneratorField field = input.getFields().get(i);
+      TableItem item = wFields.table.getItem(i);
+      int col = 1;
+      item.setText(col++, Const.NVL(field.getName(), ""));
+
+      item.setText(col++, Const.NVL(field.getItem(), ""));      
+      
+      String type = field.getType();
+      String format = field.getFormat();
+      String length = field.getLength() < 0 ? "" : ("" + field.getLength());
+      String prec = field.getPrecision() < 0 ? "" : ("" + field.getPrecision());
+
+      String curr = field.getCurrency();
+      String group = field.getGroup();
+      String decim = field.getDecimal();
+      String def = field.getValue();
+
+      item.setText(col++, Const.NVL(type, ""));
+      item.setText(col++, Const.NVL(format, ""));
+      item.setText(col++, Const.NVL(length, ""));
+      item.setText(col++, Const.NVL(prec, ""));
+      item.setText(col++, Const.NVL(curr, ""));
+      item.setText(col++, Const.NVL(decim, ""));
+      item.setText(col++, Const.NVL(group, ""));
+      item.setText(col++, Const.NVL(def, ""));
+      item.setText(
+          col++,
+          field.isSetEmptyString()
+              ? BaseMessages.getString(PKG, "System.Combo.Yes")
+              : BaseMessages.getString(PKG, "System.Combo.No"));
+    }
+
+    wFields.setRowNums();
+    wFields.optWidth(true);
+
+    setActive();
+
+    wTransformName.selectAll();
+    wTransformName.setFocus();
+  }
+
+  /**
+   * Stores the information from the dialog box in meta-data.
+   *
+   * @param meta 
+   */
+  private void getInfo( Plc4xWriteMeta meta)  throws HopException  {
+    meta.setConnection(wConnection.getText());
+    meta.setRowLimit(wLimit.getText());
+    meta.setNeverEnding(wNeverEnding.getSelection());
+    meta.setMaxwaitInMs(wMaxwait.getText());
+    meta.setIntervalInMs(wInterval.getText());
+    //meta.setRowTimeField(wRowTimeField.getText());
+    //meta.setLastTimeField(wLastTimeField.getText());
+
+    meta.getFields().clear();
+
+    // CHECKSTYLE:Indentation:OFF
+    for (TableItem item : wFields.getNonEmptyItems()) {
+        Plc4xGeneratorField field = new Plc4xGeneratorField();
+        field.setName(item.getText(1));
+        field.setItem(item.getText(2));
+        field.setFormat(item.getText(4));
+        field.setLength(Const.toInt(item.getText(5), -1));
+        field.setPrecision(Const.toInt(item.getText(6), -1));
+        field.setCurrency(item.getText(7));
+        field.setDecimal(item.getText(8));
+        field.setGroup(item.getText(9));
+        field.setValue(field.isSetEmptyString() ? "" : item.getText(10));
+        field.setSetEmptyString(
+            BaseMessages.getString(PKG, "System.Combo.Yes").equalsIgnoreCase(item.getText(11)));
+            field.setType(field.isSetEmptyString() ? "String" : item.getText(3));   
+            
+        meta.getFields().add(field);            
+    }
+  }
+  
+    /**
+   * Get previos transform fields.
+   * Clear all information in actual fields.
+   *
+   * @param meta 
+   */
+  private void getPrevFields(Plc4xWriteMeta meta)  throws HopException  {
+      IRowMeta r = pipelineMeta.getPrevTransformFields(variables, transformMeta);
+      if (r != null){
+          meta.getFields().clear();
+          r.getValueMetaList().forEach((f)->{
+            Plc4xGeneratorField field = new Plc4xGeneratorField();
+            field.setName(f.getName());
+            field.setItem("");
+            field.setType(f.getTypeDesc());
+            field.setFormat(f.getFormatMask());
+            field.setLength(f.getLength());
+            field.setPrecision(f.getPrecision());
+            field.setCurrency(f.getCurrencySymbol());
+            field.setDecimal(f.getDecimalSymbol());
+            field.setGroup(f.getGroupingSymbol());
+            field.setValue(f.getStringEncoding());
+            meta.getFields().add(field);  
+          });
+      }
+  }
+  
+
+  /**
+   * Cancel the dialog.
+   */
+  private void cancel() {
+    transformName = null;
+    input.setChanged( changed );
+    dispose();
+  }
+
+  private void ok() {
+    if (Utils.isEmpty(wTransformName.getText())) {
+      return;
+    }
+
+    transformName = wTransformName.getText(); // return value
+    try {
+      getInfo(new Plc4xWriteMeta()); // to see if there is an exception
+      getInfo(input); // to put the content on the input structure for real if all is well.
+      dispose();
+    } catch (HopException e) {
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Title"),
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Message"),
+          e);
+    }
+  }
+  
+private void getfields() {
+    try {
+        
+      IRowMeta r = pipelineMeta.getPrevTransformFields(variables, transformName);
+      
+      if (r != null && !r.isEmpty()) {
+        ITableItemInsertListener listener =
+            (tableItem, v) -> {
+
+              tableItem.setText(2, "");
+              tableItem.setText(3, v.getTypeDesc());
+              tableItem.setText(4, v.getFormatMask()==null?"":v.getFormatMask());
+              tableItem.setText(5, Integer.toString(v.getLength()));
+              tableItem.setText(6, Integer.toString(v.getPrecision()));
+              tableItem.setText(7, v.getCurrencySymbol()==null?"":v.getCurrencySymbol());
+              tableItem.setText(8, v.getDecimalSymbol()==null?"":v.getDecimalSymbol());
+              tableItem.setText(9, v.getGroupingSymbol()==null?"":v.getGroupingSymbol());
+              //tableItem.setText(10, "N");
+              tableItem.setText(11, "N");
+              return true;
+            };
+        BaseTransformDialog.getFieldsFromPrevious(
+            r, wFields, 1, new int[] {1}, null, -1, -1, listener);
+      }        
+        
+        
+        
+        
+    } catch (Exception ex){
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Title"),
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Message"),
+          ex);        
+    }
+}
+
+  /**
+   * Preview the data generated by this transform. This generates a pipeline using this transform &
+   * a dummy and previews it.
+   */
+  private void preview() {
+    Plc4xWriteMeta oneMeta = new Plc4xWriteMeta();
+    try {
+      getInfo(oneMeta);
+    } catch (HopException e) {
+      new ErrorDialog(
+          shell,
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Title"),
+          BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Illegal.Dialog.Settings.Message"),
+          e);
+      return;
+    }
+
+    PipelineMeta previewMeta =
+        PipelinePreviewFactory.generatePreviewPipeline(
+            pipelineMeta.getMetadataProvider(), oneMeta, wTransformName.getText());
+
+    EnterNumberDialog numberDialog =
+        new EnterNumberDialog(
+            shell,
+            props.getDefaultPreviewSize(),
+            BaseMessages.getString(PKG, "System.Dialog.EnterPreviewSize.Title"),
+            BaseMessages.getString(PKG, "System.Dialog.EnterPreviewSize.Message"));
+    int previewSize = numberDialog.open();
+    if (previewSize > 0) {
+      PipelinePreviewProgressDialog progressDialog =
+          new PipelinePreviewProgressDialog(
+              shell,
+              variables,
+              previewMeta,
+              new String[] {wTransformName.getText()},
+              new int[] {previewSize});
+      progressDialog.open();
+
+      Pipeline pipeline = progressDialog.getPipeline();
+      String loggingText = progressDialog.getLoggingText();
+
+      if (!progressDialog.isCancelled()) {
+        if (pipeline.getResult() != null && pipeline.getResult().getNrErrors() > 0) {
+          EnterTextDialog etd =
+              new EnterTextDialog(
+                  shell,
+                  BaseMessages.getString(PKG, "System.Dialog.PreviewError.Title"),
+                  BaseMessages.getString(PKG, "System.Dialog.PreviewError.Message"),
+                  loggingText,
+                  true);
+          etd.setReadOnly();
+          etd.open();
+        }
+      }
+
+      PreviewRowsDialog prd =
+          new PreviewRowsDialog(
+              shell,
+              variables,
+              SWT.NONE,
+              wTransformName.getText(),
+              progressDialog.getPreviewRowsMeta(wTransformName.getText()),
+              progressDialog.getPreviewRows(wTransformName.getText()),
+              loggingText);
+      prd.open();
+    }
+  }  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteMeta.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteMeta.java
new file mode 100644
index 0000000000..d3996ad4a9
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xoutput/Plc4xWriteMeta.java
@@ -0,0 +1,310 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xoutput;
+
+import org.apache.plc4x.hop.transforms.plc4xinput.*;
+import java.util.ArrayList;
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.annotations.Transform;
+import org.apache.hop.core.exception.HopTransformException;
+import org.apache.hop.core.exception.HopXmlException;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.core.xml.XmlHandler;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.transform.BaseTransformMeta;
+import org.apache.hop.pipeline.transform.ITransformMeta;
+import org.apache.hop.pipeline.transform.TransformMeta;
+import org.w3c.dom.Node;
+
+import java.util.List;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.metadata.api.HopMetadataProperty;
+import org.apache.hop.pipeline.transform.ITransformIOMeta;
+import org.apache.hop.pipeline.transform.TransformIOMeta;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+
+/**
+ * Meta data for the sample transform.
+ */
+@Transform(
+        id = "plc4x-write",
+        name = "i18n::Plc4x.Read.Name",
+        description = "i18n::Plc4x.Read.Description",
+        image = "plc4x_write.svg",
+        categoryDescription = "i18n:org.apache.plc4x.hop.transforms.plc4xoutput:Plc4x.Category.plc4x",
+        documentationUrl = "https://plc4x.apache.org/users/integrations/apache-calcite.html"
+)
+public class Plc4xWriteMeta extends BaseTransformMeta implements ITransformMeta {
+
+  private static final Class<?> PKG = Plc4xWriteMeta.class; // Needed by Translator
+
+  
+  @HopMetadataProperty(
+      key = "connection",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.Connection")
+  private String connection;  
+
+  @HopMetadataProperty(
+      key = "never_ending",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.NeverEnding")
+  private boolean neverEnding;
+
+  @HopMetadataProperty(
+      key = "maxwait_in_ms",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.MaxwaitInMs")
+  private String maxwaitInMs;  
+ 
+  @HopMetadataProperty(
+      key = "interval_in_ms",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.IntervalInMs")
+  private String intervalInMs;
+
+  @HopMetadataProperty(
+      key = "row_time_field",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.RowTimeField")
+  private String rowTimeField;
+
+  @HopMetadataProperty(
+      key = "last_time_field",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.LastTimeField")
+  private String lastTimeField;
+
+  @HopMetadataProperty(
+      key = "limit",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.RowLimit")
+  private String rowLimit;
+
+  @HopMetadataProperty(
+      groupKey = "fields",
+      key = "field",
+      injectionGroupDescription = "Plc4x.Read.Meta.Injection.Fields",
+      injectionKeyDescription = "Plc4x.Read.Meta.Injection.Fields")
+  private List<Plc4xGeneratorField> fields;
+
+  public Plc4xWriteMeta() {
+    fields = new ArrayList<>();
+
+    rowLimit = "10";
+    neverEnding = false;
+    maxwaitInMs = "1000";
+    intervalInMs = "5000";
+    rowTimeField = "now";
+    lastTimeField = "last";
+  }  
+  
+  public Plc4xWriteMeta(Plc4xWriteMeta m) {
+    this.connection = m.connection;
+    this.neverEnding = m.neverEnding;
+    this.intervalInMs = m.intervalInMs;
+    this.rowTimeField = m.rowTimeField;
+    this.lastTimeField = m.lastTimeField;
+    this.rowLimit = m.rowLimit;
+    this.fields = new ArrayList<>();
+    for (Plc4xGeneratorField field : m.fields) {
+      this.fields.add(new Plc4xGeneratorField(field));
+    }
+  }
+
+  @Override
+  public Plc4xWriteMeta clone() {
+    return new Plc4xWriteMeta(this);
+  }  
+  
+  
+
+  @Override
+  public void getFields( IRowMeta inputRowMeta, String name, IRowMeta[] info, TransformMeta nextTransform,
+                         IVariables variables, IHopMetadataProvider metadataProvider ) throws HopTransformException {
+    try {
+        logBasic("PASO 1");
+        List<ICheckResult> remarks = new ArrayList<>();
+        RowMetaAndData rowMetaAndData = Plc4xWrite.buildRow(this, remarks, name);
+        logBasic("PASO 2");
+      if (!remarks.isEmpty()) {
+        logBasic("PASO 3");
+        StringBuilder stringRemarks = new StringBuilder();
+        for (ICheckResult remark : remarks) {
+          logBasic("PASO 3x: " + remark.toString());   
+          stringRemarks.append(remark.toString()).append(Const.CR);
+        }
+        logBasic("PASO 3.1");        
+        throw new HopTransformException(stringRemarks.toString());
+      }
+              logBasic("PASO 4");
+      for (IValueMeta valueMeta : rowMetaAndData.getRowMeta().getValueMetaList()) {
+        valueMeta.setOrigin(name);
+      }
+        logBasic("PASO 5");
+      inputRowMeta.mergeRowMeta(rowMetaAndData.getRowMeta());
+    } catch (Exception e) {
+      throw new HopTransformException(e);
+    }
+  }
+
+
+  public Plc4xWrite createTransform(TransformMeta transformMeta, Plc4xWriteData data, int copyNr,
+                                PipelineMeta pipelineMeta, Pipeline pipeline ) {
+    return new Plc4xWrite( transformMeta, this, data, copyNr, pipelineMeta, pipeline );
+  }
+
+  public Plc4xWriteData getTransformData() {
+    return new Plc4xWriteData();
+  }
+/*
+  @Override
+  public void loadXml( Node transformNode, IHopMetadataProvider metadataProvider ) throws HopXmlException {
+    //load the saved values from the transformnode
+    String sampleValue = XmlHandler.getTagValue( transformNode, "sampleValue" );
+
+  }
+*/
+  @Override
+  public void setDefault() {
+    //default values when creating a new transform
+  }
+  
+  
+  /**
+   * Returns the Input/Output metadata for this transform. 
+   * The generator transform only produces output, does not accept input!
+   * TransformIOMeta(inputAcceptor, outputProducer, inputOptional, outputDynamic, inputDynamic)
+   */
+  @Override
+  public ITransformIOMeta getTransformIOMeta() {
+    return new TransformIOMeta(false, true, false, false, false, false);
+  }
+
+  /**
+   * Gets Plc4xConnection metadata name.
+   *
+   * @return value of intervalInMs
+   */
+  public String getConnection() {
+    return connection;
+  }
+
+  /** @param connection  */
+  public void setConnection(String connection) {
+    this.connection = connection;
+  }  
+  
+  
+  /**
+   * Gets neverEnding
+   *
+   * @return value of neverEnding
+   */
+  public boolean isNeverEnding() {
+    return neverEnding;
+  }
+
+  /** @param neverEnding The neverEnding to set */
+  public void setNeverEnding(boolean neverEnding) {
+    this.neverEnding = neverEnding;
+  }
+  
+    /**
+   * Gets intervalInMs
+   *
+   * @return value of intervalInMs
+   */
+  public String getMaxwaitInMs() {
+    return maxwaitInMs;
+  }
+
+  /** @param intervalInMs The intervalInMs to set */
+  public void setMaxwaitInMs(String maxwaitInMs) {
+    this.maxwaitInMs = maxwaitInMs;
+  }
+
+  /**
+   * Gets intervalInMs
+   *
+   * @return value of intervalInMs
+   */
+  public String getIntervalInMs() {
+    return intervalInMs;
+  }
+
+  /** @param intervalInMs The intervalInMs to set */
+  public void setIntervalInMs(String intervalInMs) {
+    this.intervalInMs = intervalInMs;
+  }
+
+  /**
+   * Gets rowTimeField
+   *
+   * @return value of rowTimeField
+   */
+  public String getRowTimeField() {
+    return rowTimeField;
+  }
+
+  /** @param rowTimeField The rowTimeField to set */
+  public void setRowTimeField(String rowTimeField) {
+    this.rowTimeField = rowTimeField;
+  }
+
+  /**
+   * Gets lastTimeField
+   *
+   * @return value of lastTimeField
+   */
+  public String getLastTimeField() {
+    return lastTimeField;
+  }
+
+  /** @param lastTimeField The lastTimeField to set */
+  public void setLastTimeField(String lastTimeField) {
+    this.lastTimeField = lastTimeField;
+  }
+
+  /**
+   * Gets rowLimit
+   *
+   * @return value of rowLimit
+   */
+  public String getRowLimit() {
+    return rowLimit;
+  }
+
+  /** @param rowLimit The rowLimit to set */
+  public void setRowLimit(String rowLimit) {
+    this.rowLimit = rowLimit;
+  }
+
+  /**
+   * Gets fields
+   *
+   * @return value of fields
+   */
+  public List<Plc4xGeneratorField> getFields() {
+    return fields;
+  }  
+  
+  /** @param fields The fields to set */
+  public void setFields(List<Plc4xGeneratorField> fields) {
+    this.fields = fields;
+  }  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java
new file mode 100644
index 0000000000..51c6c9d536
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubs.java
@@ -0,0 +1,446 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xsubs;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hop.core.CheckResult;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.ICheckResult;
+import org.apache.hop.core.RowMetaAndData;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.exception.HopPluginException;
+import org.apache.hop.core.exception.HopValueException;
+import org.apache.hop.core.logging.LogLevel;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.core.row.RowDataUtil;
+import org.apache.hop.core.row.RowMeta;
+import org.apache.hop.core.row.value.ValueMetaDate;
+import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.StringUtil;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.transform.BaseTransform;
+import org.apache.hop.pipeline.transform.ITransform;
+import org.apache.hop.pipeline.transform.TransformMeta;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+import org.apache.plc4x.hop.transforms.util.Plc4xPlcField;
+import org.apache.plc4x.hop.transforms.util.Plc4xWrapperConnection;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcReadResponse;
+
+/**
+ * Transform That contains the basic skeleton needed to create your own plugin
+ *
+ */
+public class Plc4xSubs extends BaseTransform<Plc4xSubsMeta, Plc4xSubsData> implements ITransform {
+
+  private static final Class<?> PKG = Plc4xSubs.class; // Needed by Translator
+  
+  private Plc4xConnection connmeta = null;
+  private Plc4xWrapperConnection connwrapper = null;
+  private PlcReadRequest readRequest = null;
+  private PlcReadResponse readResponse = null;  
+  private int maxwait = 0;
+  private static final ReentrantLock lock = new ReentrantLock();
+  
+  private static final String dummy = "dummy";
+  
+  private Map<String, Integer> index = new HashMap();
+  private Map<String, Plc4xPlcField> plcfields = new HashMap();  
+
+  public Plc4xSubs(TransformMeta transformMeta, Plc4xSubsMeta meta, Plc4xSubsData data, int copyNr, PipelineMeta pipelineMeta,
+                Pipeline pipeline ) {
+    super( transformMeta, meta, data, copyNr, pipelineMeta, pipeline );
+  }
+
+  /*
+  * Including Date and Time field for every row 
+  *
+  * @param meta Meta data from user dialog
+  * @param remarks Error registers
+  * @param origin transform instance name
+  */
+  public static final RowMetaAndData buildRow(
+      Plc4xSubsMeta meta, List<ICheckResult> remarks, String origin) throws HopPluginException {
+    IRowMeta rowMeta = new RowMeta();
+    Object[] rowData = RowDataUtil.allocateRowData(meta.getFields().size() + 2);
+    int index = 0;
+
+    if (!Utils.isEmpty(meta.getRowTimeField())) {
+        rowMeta.addValueMeta(new ValueMetaDate(meta.getRowTimeField()));
+        rowData[index++] = null;
+    }
+
+    if (!Utils.isEmpty(meta.getLastTimeField())) {
+        rowMeta.addValueMeta(new ValueMetaDate(meta.getLastTimeField()));
+        rowData[index++] = null;
+    }
+      
+    for (Plc4xGeneratorField field : meta.getFields()) {
+      int typeString = ValueMetaFactory.getIdForValueMeta(field.getType());
+      if (StringUtils.isNotEmpty(field.getType())) {
+          System.out.println("typeString: " + typeString); 
+        IValueMeta valueMeta =
+            ValueMetaFactory.createValueMeta(field.getName(), typeString); // build a
+        // value!
+        valueMeta.setLength(field.getLength());
+        valueMeta.setPrecision(field.getPrecision());
+        valueMeta.setConversionMask(field.getFormat());
+        valueMeta.setCurrencySymbol(field.getCurrency());
+        valueMeta.setGroupingSymbol(field.getGroup());
+        valueMeta.setDecimalSymbol(field.getDecimal());
+        valueMeta.setOrigin(origin);
+
+        IValueMeta stringMeta = ValueMetaFactory.cloneValueMeta(valueMeta, IValueMeta.TYPE_STRING);
+
+        if (field.isSetEmptyString()) {
+          // Set empty string
+          rowData[index] = StringUtil.EMPTY_STRING;
+        } else {
+          String stringValue = field.getValue();
+
+          // If the value is empty: consider it to be NULL.
+          if (Utils.isEmpty(stringValue)) {
+            rowData[index] = null;
+
+            if (valueMeta.getType() == IValueMeta.TYPE_NONE) {
+              String message =
+                  BaseMessages.getString(
+                      PKG,
+                      "Plc4x.Read.Meta.CheckResult.SpecifyTypeError",
+                      valueMeta.getName(),
+                      stringValue);
+              remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+            }
+          } else {
+            // Convert the data from String to the specified type ...
+            //
+            try {
+                System.out.println("stringValue: " + stringValue);
+              rowData[index] = valueMeta.convertData(stringMeta, stringValue);
+            } catch (HopValueException e) {
+              switch (valueMeta.getType()) {
+                case IValueMeta.TYPE_NUMBER:
+                  String message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Number",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_DATE:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Date",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_INTEGER:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Integer",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_BIGNUMBER:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.BigNumber",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                case IValueMeta.TYPE_TIMESTAMP:
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.BuildRow.Error.Parsing.Timestamp",
+                          valueMeta.getName(),
+                          stringValue,
+                          e.toString());
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+
+                default:
+                  // Boolean and binary don't throw errors normally, so it's probably an unspecified
+                  // error problem...
+                  message =
+                      BaseMessages.getString(
+                          PKG,
+                          "Plc4x.Read.Meta.CheckResult.SpecifyTypeError",
+                          valueMeta.getName(),
+                          stringValue);
+                  remarks.add(new CheckResult(ICheckResult.TYPE_RESULT_ERROR, message, null));
+                  break;
+              }
+            }
+          }
+        }
+
+        // Now add value to the row!
+        // This is in fact a copy from the fields row, but now with data.
+        rowMeta.addValueMeta(valueMeta);
+        index++;
+      }
+    }
+
+    return new RowMetaAndData(rowMeta, rowData);
+  }
+  
+  /* 
+  * 1. Block the other instances by means of a lock.  
+  * 2. Try to locate an existing connection.
+  * 3. If it doesn't exist, it tries to take control of the routine to 
+  *    create an instance of PlcConnection and his wrapper.
+  * 4. Register the connection wrapper for global access.
+  * 5. If the connection to the PLC is made, then it creates the query 
+  *    and executes it.
+  *
+  */
+  @Override
+  public  boolean processRow() throws HopException {
+    Object[] r = getRow(); // Get row from input rowset & set row busy!
+    setLogLevel(LogLevel.DEBUG);
+    
+    if ((!meta.isNeverEnding() && data.rowsWritten >= data.rowLimit) && !isStopped()) {   
+      setOutputDone(); // signal end to receiver(s)
+      return false;        
+    }    
+    
+    if (first) {
+        index.clear();
+        plcfields.clear();
+        //This performs a minimal check on the user item.
+        //It guarantees that the rates are within those managed by Plc4x.
+        meta.getFields().forEach((f) ->{
+            plcfields.put(f.getName(),Plc4xPlcField.of(f.getItem()));
+        });
+        first = false;
+    }    
+    
+    lock.lock(); //(01)
+    try {
+        IHopMetadataProvider metaprovider = getMetadataProvider();
+        connmeta = metaprovider.getSerializer(Plc4xConnection.class).load(meta.getConnection());
+        if (connwrapper == null) {
+            connwrapper = (Plc4xWrapperConnection) getPipeline().getExtensionDataMap().get(meta.getConnection()); //(02)
+            if (connwrapper != null) connwrapper.retain();
+        };
+
+        if (connmeta == null){    
+            logError(
+                BaseMessages.getString(
+                    PKG,
+                    "Plc4x.Read.Meta.Log.SetMetadata",
+                    meta.getConnection()));         
+        }
+
+        if ((connmeta != null) && (connwrapper == null)){
+            readRequest = null;
+            try{
+                PlcConnection conn =  new DefaultPlcDriverManager().getConnection(connmeta.getUrl()); //(03)
+                if (conn.isConnected()) {
+                    connwrapper = new Plc4xWrapperConnection(conn);            
+                    getPipeline().getExtensionDataMap().put(meta.getConnection(), connwrapper); //(04)
+                }
+            } catch (Exception ex){
+                setErrors(1L);
+                logError("Unable to create connection to PLC. " + ex.getMessage());
+            }
+        }
+    } finally {
+        lock.unlock();
+    }
+    
+    if ((connmeta != null) && (connwrapper != null)){
+        if (connwrapper.getConnection().isConnected()){
+            if (readRequest == null){
+                PlcReadRequest.Builder builder = connwrapper.getConnection().readRequestBuilder(); //(05)
+                for (Plc4xGeneratorField field: meta.getFields()){
+                    builder.addTagAddress(field.getName(), field.getItem());
+                }                
+                readRequest = builder.build();                  
+            }            
+            try {            
+                maxwait = Integer.parseInt(meta.getMaxwaitInMs());
+                maxwait = (maxwait<100)?100:maxwait;
+                readResponse = readRequest.execute().get(maxwait, TimeUnit.MILLISECONDS);
+
+                for (Plc4xGeneratorField field: meta.getFields()){
+                    field.setValue(readResponse.getString(field.getName()));
+                }                  
+            } catch (Exception ex) {
+                setErrors(1L);                
+                logError("Unable read from PLC. " + ex.getMessage());
+            }
+            
+        } else {
+            setErrors(1L);                
+            logError("PLC is not connected.");            
+            setOutputDone();
+             return false;   
+        }
+        
+    } else {
+        setErrors(1L);                
+        logError("PLC connection don't exist.");         
+        setOutputDone();
+        return false;        
+    }
+
+    //
+    int interval = Integer.parseInt(meta.getIntervalInMs());
+    
+    try {
+        Thread.sleep(interval);
+    } catch (InterruptedException ex) {
+        setErrors(1L);                
+        logError(ex.getMessage());
+    }
+    
+    r = data.outputRowMeta.cloneRow(data.outputRowData); 
+    logBasic("Tamano de los datos: " + r.length);
+    data.prevDate = data.rowDate;
+    data.rowDate = new Date();    
+    int index = 0;
+    if (!Utils.isEmpty(meta.getRowTimeField())) {
+        r[index++] = data.rowDate;
+    }
+    if (!Utils.isEmpty(meta.getLastTimeField())) {
+        r[index++] = data.prevDate;
+    }  
+    for (Plc4xGeneratorField field: meta.getFields()){
+        if (field.getType().equalsIgnoreCase("Boolean")){
+            r[index++] = Boolean.parseBoolean(field.getValue());
+        } else if (field.getType().equalsIgnoreCase("Number")){
+            r[index++] = Double.parseDouble(field.getValue());
+        } else if (field.getType().equalsIgnoreCase("Integer")){
+            r[index++] = Integer.parseInt(field.getValue());
+        }
+    }
+    putRow(data.outputRowMeta, r ); // return your data
+    data.rowsWritten++;
+    return true;
+  }
+
+
+  @Override
+  public boolean init() {
+    try {
+        if(super.init()){     
+            // Determine the number of rows to generate...
+            data.rowLimit = Const.toLong(resolve(meta.getRowLimit()), -1L);
+            data.rowsWritten = 0L;
+            data.delay = Const.toLong(resolve(meta.getIntervalInMs()), -1L);
+
+            if (data.rowLimit < 0L) { // Unable to parse
+              logError(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Wrong.RowLimit.Number"));
+              return false; // fail
+            }            
+            
+            // Create a row (constants) with all the values in it...
+            List<ICheckResult> remarks = new ArrayList<>(); // stores the errors...
+            RowMetaAndData outputRow = buildRow(meta, remarks, getTransformName());
+            if (!remarks.isEmpty()) {
+              for (int i = 0; i < remarks.size(); i++) {
+                CheckResult cr = (CheckResult) remarks.get(i);
+                logError(cr.getText());
+              }
+              return false;
+            }
+
+            data.outputRowData = outputRow.getData();
+            data.outputRowMeta = outputRow.getRowMeta();            
+
+          return true;
+        }
+    return false;
+    } catch (Exception ex){
+        setErrors(1L);
+        logError("Error initializing transform", ex);
+        return false;
+    }
+  }
+
+  /*
+  * Here, must perform the cleaning of any resource, main of the connection to 
+  * the associated PLC.
+  */
+    @Override
+    public void cleanup() {
+        super.cleanup();
+        logBasic("Cleanup. Release connection.");
+        if (connwrapper != null)
+        connwrapper.release();     
+    }
+
+
+    /*
+    * Here, must perform the cleaning of any resource. 
+    * 1. Check if we have reference to wrapper.
+    * 2. Release de reference to object.
+    * 3. The lastone remove the global reference to connection wrapper.
+    * 4. Clear local references.
+    */    
+    @Override
+    public void dispose() {
+        super.dispose();
+        if (connwrapper != null) {
+            logBasic("Dispose. Release connection: " + connwrapper.refCnt());            
+            connwrapper.release();   
+            if (!connwrapper.getConnection().isConnected()){           
+                getPipeline().getExtensionDataMap().remove(meta.getConnection());
+            }            
+            connwrapper = null;
+            readRequest = null;
+
+        }
+    }
+ 
+  
+  
+  
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsData.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsData.java
new file mode 100644
index 0000000000..e39dad1456
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsData.java
@@ -0,0 +1,49 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xsubs;
+
+import org.apache.plc4x.hop.transforms.plc4xinput.*;
+import java.util.Date;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.pipeline.transform.BaseTransformData;
+import org.apache.hop.pipeline.transform.ITransformData;
+
+
+public class Plc4xSubsData extends BaseTransformData implements ITransformData {
+    
+  //The Plc4xConnection metadata
+  public String connection;    
+    
+  public IRowMeta outputRowMeta;
+  public Object[] outputRowData;
+
+  public long rowLimit;
+  public long rowsWritten;
+  public Date rowDate;
+  public Date prevDate;
+  public long delay;
+  
+
+    
+  /**
+   * Default constructor for SampleData.
+   */
+  public Plc4xSubsData() {
+      super();
+  }
+}
diff --git a/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsDialog.java b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsDialog.java
new file mode 100644
index 0000000000..e5d14f2c8b
--- /dev/null
+++ b/plc4j/integrations/apache-hop/plc4x-hop-transformer/src/main/java/org/apache/plc4x/hop/transforms/plc4xsubs/Plc4xSubsDialog.java
@@ -0,0 +1,601 @@
+/*
+ * 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 org.apache.plc4x.hop.transforms.plc4xsubs;
+
+import org.apache.plc4x.hop.transforms.plc4xinput.*;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.row.value.ValueMetaFactory;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.pipeline.Pipeline;
+import org.apache.hop.pipeline.PipelineMeta;
+import org.apache.hop.pipeline.PipelinePreviewFactory;
+import org.apache.hop.pipeline.transform.BaseTransformMeta;
+import org.apache.hop.pipeline.transform.ITransformDialog;
+import org.apache.hop.ui.core.ConstUi;
+import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.dialog.EnterNumberDialog;
+import org.apache.hop.ui.core.dialog.EnterTextDialog;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
+import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
+import org.apache.hop.ui.core.widget.ColumnInfo;
+import org.apache.hop.ui.core.widget.MetaSelectionLine;
+import org.apache.hop.ui.core.widget.TableView;
+import org.apache.hop.ui.core.widget.TextVar;
+import org.apache.hop.ui.pipeline.dialog.PipelinePreviewProgressDialog;
+import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
+import org.apache.hop.ui.util.SwtSvgImageUtil;
+import org.apache.plc4x.hop.metadata.Plc4xConnection;
+import org.apache.plc4x.hop.transforms.util.Plc4xGeneratorField;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+public class Plc4xSubsDialog extends BaseTransformDialog implements ITransformDialog {
+  private static final Class<?> PKG = Plc4xSubsDialog.class; // Needed by Translator
+
+  private MetaSelectionLine<Plc4xConnection> wConnection;  
+  
+  private Label wlLimit;
+  private TextVar wLimit;
+
+  private Button wNeverEnding;
+
+  private Label wlMaxwait;
+  private TextVar wMaxwait;  
+  
+  private Label wlInterval;
+  private TextVar wInterval;
+
+  private Label wlRowTimeField;
+  private TextVar wRowTimeField;
+
+  private Label wlLastTimeField;
+  private TextVar wLastTimeField;
+
+  private TableView wFields;
+  
+  private final Plc4xSubsMeta input;
+
+  public Plc4xSubsDialog(Shell parent, IVariables variables , Object in, PipelineMeta pipelineMeta, String sname ) {
+    super( parent, variables, (BaseTransformMeta) in, pipelineMeta, sname );
+    input = (Plc4xSubsMeta) in;
+  }
+
+  @Override
+  public String open() {
+    Shell parent = getParent();
+
+    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX | SWT.MIN);
+    props.setLook(shell);
+    setShellImage(shell, input);
+
+    ModifyListener lsMod = e -> input.setChanged();
+    changed = input.hasChanged();
+
+    FormLayout formLayout = new FormLayout();
+    formLayout.marginWidth = Const.FORM_MARGIN;
+    formLayout.marginHeight = Const.FORM_MARGIN;
+
+    shell.setLayout(formLayout);
+    shell.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.DialogTitle"));
+
+    int middle = props.getMiddlePct();
+    int margin = props.getMargin();
+
+    // Filename line
+    wlTransformName = new Label(shell, SWT.RIGHT);
+    wlTransformName.setText(BaseMessages.getString(PKG, "System.Label.TransformName"));
+    props.setLook(wlTransformName);
+    fdlTransformName = new FormData();
+    fdlTransformName.left = new FormAttachment(0, 0);
+    fdlTransformName.right = new FormAttachment(middle, -margin);
+    fdlTransformName.top = new FormAttachment(0, margin);
+    wlTransformName.setLayoutData(fdlTransformName);
+    
+    wTransformName = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    wTransformName.setText(transformName);
+    props.setLook(wTransformName);
+    wTransformName.addModifyListener(lsMod);
+    fdTransformName = new FormData();
+    fdTransformName.left = new FormAttachment(middle, 0);
+    fdTransformName.top = new FormAttachment(0, margin);
+    fdTransformName.right = new FormAttachment(100, 0);
+    wTransformName.setLayoutData(fdTransformName);
+
+    // Connection line
+    wConnection =
+        new MetaSelectionLine<>(
+            variables,
+            metadataProvider,
+            Plc4xConnection.class,
+            shell,
+            SWT.NONE,
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Label"),
+            BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Connection.Tooltip"));
+    FormData fdConnection = new FormData();
+    fdConnection.left = new FormAttachment(0, 0);
+    fdConnection.right = new FormAttachment(100, 0);
+    fdConnection.top = new FormAttachment(wTransformName, margin);
+    wConnection.setLayoutData(fdConnection);    
+    props.setLook(wConnection);
+    try {
+      wConnection.fillItems();
+    } catch (Exception e) {
+      new ErrorDialog(shell, "Error", "Error listing Cassandra connection metadata objects", e);
+    }    
+    
+    Control lastControl = wConnection;    
+    
+    wlLimit = new Label(shell, SWT.RIGHT);
+    wlLimit.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Limit.Label"));
+    props.setLook(wlLimit);
+    FormData fdlLimit = new FormData();
+    fdlLimit.left = new FormAttachment(0, 0);
+    fdlLimit.right = new FormAttachment(middle, -margin);
+    fdlLimit.top = new FormAttachment(lastControl, margin);
+    wlLimit.setLayoutData(fdlLimit);
+    wLimit = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLimit);
+    wLimit.addModifyListener(lsMod);
+    FormData fdLimit = new FormData();
+    fdLimit.left = new FormAttachment(middle, 0);
+    fdLimit.top = new FormAttachment(lastControl, margin);
+    fdLimit.right = new FormAttachment(100, 0);
+    wLimit.setLayoutData(fdLimit);
+    lastControl = wLimit;
+
+    Label wlNeverEnding = new Label(shell, SWT.RIGHT);
+    wlNeverEnding.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.NeverEnding.Label"));
+    props.setLook(wlNeverEnding);
+    FormData fdlNeverEnding = new FormData();
+    fdlNeverEnding.left = new FormAttachment(0, 0);
+    fdlNeverEnding.right = new FormAttachment(middle, -margin);
+    fdlNeverEnding.top = new FormAttachment(lastControl, margin);
+    wlNeverEnding.setLayoutData(fdlNeverEnding);
+    wNeverEnding = new Button(shell, SWT.CHECK);
+    props.setLook(wNeverEnding);
+    wNeverEnding.addSelectionListener(
+        new SelectionAdapter() {
+          @Override
+          public void widgetSelected(SelectionEvent e) {
+            setActive();
+            input.setChanged();
+          }
+        });
+    FormData fdNeverEnding = new FormData();
+    fdNeverEnding.left = new FormAttachment(middle, 0);
+    fdNeverEnding.top = new FormAttachment(wlNeverEnding, 0, SWT.CENTER);
+    fdNeverEnding.right = new FormAttachment(100, 0);
+    wNeverEnding.setLayoutData(fdNeverEnding);
+    lastControl = wlNeverEnding;
+    
+    wlMaxwait = new Label(shell, SWT.RIGHT);
+    wlMaxwait.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Maxwait.Label"));
+    props.setLook(wlMaxwait);
+    FormData fdlMaxwait = new FormData();
+    fdlMaxwait.left = new FormAttachment(0, 0);
+    fdlMaxwait.right = new FormAttachment(middle, -margin);
+    fdlMaxwait.top = new FormAttachment(lastControl, margin);
+    wlMaxwait.setLayoutData(fdlMaxwait);
+    wMaxwait = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wMaxwait);
+    wMaxwait.addModifyListener(lsMod);
+    FormData fdMaxwait = new FormData();
+    fdMaxwait.left = new FormAttachment(middle, 0);
+    fdMaxwait.top = new FormAttachment(lastControl, margin);
+    fdMaxwait.right = new FormAttachment(100, 0);
+    wMaxwait.setLayoutData(fdMaxwait);
+    lastControl = wMaxwait;    
+
+    wlInterval = new Label(shell, SWT.RIGHT);
+    wlInterval.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Interval.Label"));
+    props.setLook(wlInterval);
+    FormData fdlInterval = new FormData();
+    fdlInterval.left = new FormAttachment(0, 0);
+    fdlInterval.right = new FormAttachment(middle, -margin);
+    fdlInterval.top = new FormAttachment(lastControl, margin);
+    wlInterval.setLayoutData(fdlInterval);
+    wInterval = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wInterval);
+    wInterval.addModifyListener(lsMod);
+    FormData fdInterval = new FormData();
+    fdInterval.left = new FormAttachment(middle, 0);
+    fdInterval.top = new FormAttachment(lastControl, margin);
+    fdInterval.right = new FormAttachment(100, 0);
+    wInterval.setLayoutData(fdInterval);
+    lastControl = wInterval;
+    
+    /*
+    wlRowTimeField = new Label(shell, SWT.RIGHT);
+    wlRowTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.RowTimeField.Label"));
+    props.setLook(wlRowTimeField);
+    FormData fdlRowTimeField = new FormData();
+    fdlRowTimeField.left = new FormAttachment(0, 0);
+    fdlRowTimeField.right = new FormAttachment(middle, -margin);
+    fdlRowTimeField.top = new FormAttachment(lastControl, margin);
+    wlRowTimeField.setLayoutData(fdlRowTimeField);
+    wRowTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wRowTimeField);
+    wRowTimeField.addModifyListener(lsMod);
+    FormData fdRowTimeField = new FormData();
+    fdRowTimeField.left = new FormAttachment(middle, 0);
+    fdRowTimeField.top = new FormAttachment(lastControl, margin);
+    fdRowTimeField.right = new FormAttachment(100, 0);
+    wRowTimeField.setLayoutData(fdRowTimeField);
+    lastControl = wRowTimeField;
+
+    wlLastTimeField = new Label(shell, SWT.RIGHT);
+    wlLastTimeField.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.LastTimeField.Label"));
+    props.setLook(wlLastTimeField);
+    FormData fdlLastTimeField = new FormData();
+    fdlLastTimeField.left = new FormAttachment(0, 0);
+    fdlLastTimeField.right = new FormAttachment(middle, -margin);
+    fdlLastTimeField.top = new FormAttachment(lastControl, margin);
+    wlLastTimeField.setLayoutData(fdlLastTimeField);
+    wLastTimeField = new TextVar(variables, shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    props.setLook(wLastTimeField);
+    wLastTimeField.addModifyListener(lsMod);
+    FormData fdLastTimeField = new FormData();
+    fdLastTimeField.left = new FormAttachment(middle, 0);
+    fdLastTimeField.top = new FormAttachment(lastControl, margin);
+    fdLastTimeField.right = new FormAttachment(100, 0);
+    wLastTimeField.setLayoutData(fdLastTimeField);
+    lastControl = wLastTimeField;
+    */
+    wOk = new Button(shell, SWT.PUSH);
+    wOk.setText(BaseMessages.getString(PKG, "System.Button.OK"));
+    wOk.addListener(SWT.Selection, e -> ok());
+    wPreview = new Button(shell, SWT.PUSH);
+    wPreview.setText(BaseMessages.getString(PKG, "System.Button.Preview"));
+    wPreview.addListener(SWT.Selection, e -> preview());
+    wCancel = new Button(shell, SWT.PUSH);
+    wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));
+    wCancel.addListener(SWT.Selection, e -> cancel());
+
+    setButtonPositions(new Button[] {wOk, wPreview, wCancel}, margin, null);
+
+    Label wlFields = new Label(shell, SWT.NONE);
+    wlFields.setText(BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Label"));
+    props.setLook(wlFields);
+    FormData fdlFields = new FormData();
+    fdlFields.left = new FormAttachment(0, 0);
+    fdlFields.top = new FormAttachment(lastControl, margin);
+    wlFields.setLayoutData(fdlFields);
+    lastControl = wlFields;
+
+    final int nrFields = input.getFields().size();
+
+    ColumnInfo[] colinf =
+        new ColumnInfo[] {
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Name"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "Plc4x.Read.Meta.Dialog.Fields.Item"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),            
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Type"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              ValueMetaFactory.getValueMetaNames()),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Format"),
+              ColumnInfo.COLUMN_TYPE_FORMAT,
+              2),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Length"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Precision"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Currency"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Decimal"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Group"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.Value"),
+              ColumnInfo.COLUMN_TYPE_TEXT,
+              false),
+          new ColumnInfo(
+              BaseMessages.getString(PKG, "System.Column.SetEmptyString"),
+              ColumnInfo.COLUMN_TYPE_CCOMBO,
+              new String[] {
+                BaseMessages.getString(PKG, "System.Combo.Yes"),
+                BaseMessages.getString(PKG, "System.Combo.No")
+              })
+        };
+
+    wFields =
+        new TableView(
+            variables,
+            shell,
+            SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
+            colinf,
+            nrFields,
+            lsMod,
+            props);
+
+    FormData fdFields = new FormData();
+    fdFields.left = new FormAttachment(0, 0);
+    fdFields.top = new FormAttachment(lastControl, margin);
+    fdFields.right = new FormAttachment(100, 0);
+    fdFields.bottom = new FormAttachment(wOk, -2 * margin);
+    wFields.setLayoutData(fdFields);
+
+    lsResize =
+        event -> {
+          Point size = shell.getSize();
+          wFields.setSize(size.x - 10, size.y - 50);
+          wFields.table.setSize(size.x - 10, size.y - 50);
+          wFields.redraw();
+        };
+    shell.addListener(SWT.Resize, lsResize);
+
+    getData();
+    input.setChanged(changed);
+
+    BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());
+
+    return transformName;      
+    };
+
+  @Override
+    public void setActive() {
+    boolean neverEnding = wNeverEnding.getSelection();
+
+    wlLimit.setEnabled(!neverEnding);
+    wLimit.setEnabled(!neverEnding);
+
+    //wlInterval.setEnabled(neverEnding);
+    //wInterval.setEnabled(neverEnding);
+
+    //wlRowTimeField.setEnabled(neverEnding);
+    //wRowTimeField.setEnabled(neverEnding);
+
+    //wlLastTimeField.setEnabled(neverEnding);
+    //wLastTimeField.setEnabled(neverEnding);
+  }
+
+
+
+  private Image getImage() {
+    return SwtSvgImageUtil.getImage( shell.getDisplay(), getClass().getClassLoader(), "plc4x_toddy_read.svg", ConstUi.LARGE_ICON_SIZE,
+      ConstUi.LARGE_ICON_SIZE );
+  }
+
+  /**
+   * Copy information from the meta-data input to the dialog fields.
+   * 
+   */
+  public void getData() {
+    if (isDebug()) {
+      logDebug("getting fields info...");
+    }
+    if (input.getConnection() == null) {
+        wConnection.setText("");
+    } else {
+        wConnection.setText(input.getConnection());        
+    }
+
+    wLimit.setText(input.getRowLimit());
+    wNeverEnding.setSelection(input.isNeverEnding());
+    wMaxwait.setText(Const.NVL(input.getMaxwaitInMs(), ""));
+    wInterval.setText(Const.NVL(input.getIntervalInMs(), ""));
+   // wRowTimeField.setText(Const.NVL(input.getRowTimeField(), ""));
+    //wLastTimeField.setText(Const.NVL(input.getLastTimeField(), ""));
+
+    for (int i = 0; i < input.getFields().size(); i++) {
+      Plc4xGeneratorField field = input.getFields().get(i);
+      TableItem item = wFields.table.getItem(i);
... 9496 lines suppressed ...


[plc4x] 06/07: Update repo.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 3ff9b6761a9f5ba8b66d0aed28d7e0f49a4cddb1
Author: César García <ce...@ceos.com.ve>
AuthorDate: Thu Feb 23 21:11:20 2023 -0400

    Update repo.
---
 .../org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java        | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
index 3ad63e9cba..3a8b12ea1b 100644
--- a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
+++ b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
@@ -1615,6 +1615,8 @@ public enum BACnetVendorId {
   THING_WAREHOUSELLC((int) 1404, (int) 1404, (String) "Thing Warehouse LLC"),
   INNOFRIENDS_GMBH((int) 1405, (int) 1405, (String) "Innofriends GmbH"),
   METRONICAKP_SPJ((int) 1406, (int) 1406, (String) "Metronic AKP Sp. J."),
+  TECHKNAVE((int) 1407, (int) 1407, (String) "Techknave"),
+  ELSNER_ELEKTRONIK((int) 1408, (int) 1408, (String) "Elsner Elektronik"),
   UNKNOWN_VENDOR((int) 0xFFFF, (int) 0xFFFF, (String) "Unknown");
   private static final Map<Integer, BACnetVendorId> map;
 


[plc4x] 03/07: New feature _lastitem.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 10aa8e39baf9e4802a249c03a9540657e9fd4ea5
Author: César García <ce...@ceos.com.ve>
AuthorDate: Sat Feb 4 12:15:13 2023 -0400

    New feature _lastitem.
---
 .../org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java         | 1 -
 1 file changed, 1 deletion(-)

diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
index 2ef8f4bb00..5cd7c9ebe5 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
@@ -119,7 +119,6 @@ public class S7VarPayloadDataItem implements Message {
         (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)),
         (short) 0x00,
         writeUnsignedShort(writeBuffer, 8));
-
     writeBuffer.popContext("S7VarPayloadDataItem");
   }
 


[plc4x] 04/07: Update local repo.

Posted by cg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feat/hop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 82bad92b17ba3127158a3419a3f10f14191c3242
Author: César García <ce...@ceos.com.ve>
AuthorDate: Thu Feb 16 11:01:22 2023 -0400

    Update local repo.
---
 .../org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java         | 1 +
 1 file changed, 1 insertion(+)

diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
index 5cd7c9ebe5..2ef8f4bb00 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
@@ -119,6 +119,7 @@ public class S7VarPayloadDataItem implements Message {
         (int) ((((!(_lastItem))) ? ((COUNT(data)) % (2)) : 0)),
         (short) 0x00,
         writeUnsignedShort(writeBuffer, 8));
+
     writeBuffer.popContext("S7VarPayloadDataItem");
   }