text:
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.consol.citrus</groupId>
  <artifactId>citrus</artifactId>
  <packaging>pom</packaging>
  <version>2.7.3-SNAPSHOT</version>
  <name>citrus</name>
  <description>Citrus Test Framework</description>
  <url>http://www.citrusframework.org</url>
  <inceptionYear>2008</inceptionYear>

  <licenses>
    <license>
      <name>The Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>manual</distribution>
      <comments>Citrus is published free of charge under Apache License, Version 2.0. You are allowed to use Citrus to test any kind of software
      (also commercial applications). If you do this, we kindly ask you to tell us about it so that we can add you to our references
      list. You may also use our "Tested using Citrus" logo in your online or printed documentation.</comments>
    </license>
  </licenses>

  <ciManagement>
    <system>Jenkins</system>
    <url>http://labs-build.consol.de/view/Citrus/</url>
    <notifiers>
      <notifier>
        <type>mail</type>
        <address>citrus-dev-l@consol.de</address>
      </notifier>
    </notifiers>
  </ciManagement>

  <modules>
    <module>modules/citrus-model</module>
    <module>modules/citrus-core</module>
    <module>modules/citrus-jms</module>
    <module>modules/citrus-http</module>
    <module>modules/citrus-websocket</module>
    <module>modules/citrus-ssh</module>
    <module>modules/citrus-ws</module>
    <module>modules/citrus-mail</module>
    <module>modules/citrus-ftp</module>
    <module>modules/citrus-camel</module>
    <module>modules/citrus-vertx</module>
    <module>modules/citrus-docker</module>
    <module>modules/citrus-kubernetes</module>
    <module>modules/citrus-rmi</module>
    <module>modules/citrus-jmx</module>
    <module>modules/citrus-restdocs</module>
    <module>modules/citrus-zookeeper</module>
    <module>modules/citrus-selenium</module>
    <module>modules/citrus-java-dsl</module>
    <module>modules/citrus-cucumber</module>
    <module>modules/citrus-arquillian</module>
    <module>modules/citrus-integration</module>
  </modules>

  <developers>
    <developer>
      <id>christophd</id>
      <name>Christoph Deppisch</name>
      <email>citrus-dev-l@consol.de</email>
      <organization>ConSol Software GmbH</organization>
      <organizationUrl>http://www.consol.de/</organizationUrl>
      <roles>
        <role>Developer</role>
      </roles>
    </developer>
    <developer>
      <id>cwied</id>
      <name>Christian Wied</name>
      <email>citrus-dev-l@consol.de</email>
      <organization>ConSol Software GmbH</organization>
      <organizationUrl>http://www.consol.de/</organizationUrl>
      <roles>
        <role>Developer</role>
      </roles>
    </developer>
    <developer>
      <id>philkom</id>
      <name>Philipp Komninos</name>
      <email>citrus-dev-l@consol.de</email>
      <organization>ConSol Software GmbH</organization>
      <organizationUrl>http://www.consol.de/</organizationUrl>
      <roles>
        <role>Developer</role>
      </roles>
    </developer>
    <developer>
      <id>jblipphaus</id>
      <name>Jan Lipphaus</name>
      <email>citrus-dev-l@consol.de</email>
      <organization>ConSol Software GmbH</organization>
      <organizationUrl>http://www.consol.de/</organizationUrl>
      <roles>
        <role>Developer</role>
      </roles>
    </developer>
    <developer>
      <id>jza</id>
      <name>Jan Zahalka</name>
      <email>citrus-dev-l@consol.de</email>
      <organization>ConSol Software GmbH</organization>
      <organizationUrl>http://www.consol.de/</organizationUrl>
      <roles>
        <role>Developer</role>
      </roles>
    </developer>
    <developer>
      <id>maherma</id>
      <name>Martin Maher</name>
      <email>citrus-dev-l@consol.de</email>
      <organization>ConSol Software GmbH</organization>
      <organizationUrl>http://www.consol.de/</organizationUrl>
      <roles>
        <role>Developer</role>
      </roles>
    </developer>
    <developer>
      <id>movchin</id>
      <name>Michael Movchin</name>
      <email>citrus-dev-l@consol.de</email>
      <organization>ConSol Software GmbH</organization>
      <organizationUrl>http://www.consol.de/</organizationUrl>
      <roles>
        <role>Web Developer</role>
      </roles>
    </developer>
  </developers>

  <prerequisites>
    <maven>3.1.0</maven>
  </prerequisites>

  <scm>
    <connection>scm:git:git@github.com:christophd/citrus.git</connection>
    <developerConnection>scm:git:git@github.com/christophd/citrus.git</developerConnection>
    <url>http://github.com/christophd/citrus.git</url>
  </scm>

  <organization>
    <name>ConSol Software GmbH</name>
    <url>http://www.consol.com/</url>
  </organization>

  <mailingLists>
    <mailingList>
      <name>Project Announcements</name>
    </mailingList>
    <mailingList>
      <name>Project Development List</name>
      <post>dev@citrusframework.org</post>
    </mailingList>
    <mailingList>
      <name>Project User List</name>
      <post>user@citrusframework.org</post>
    </mailingList>
    <mailingList>
      <name>Internal Project Development List</name>
      <post>citrus-dev-l@consol.de</post>
    </mailingList>
  </mailingLists>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring.version>4.3.9.RELEASE</spring.version>
    <spring.ws.version>2.4.0.RELEASE</spring.ws.version>
    <spring.integration.version>4.3.10.RELEASE</spring.integration.version>
    <spring.restdocs.version>1.1.3.RELEASE</spring.restdocs.version>
    <apache.camel.version>2.19.1</apache.camel.version>
    <activemq.version>5.15.0</activemq.version>
    <vertx.version>3.3.3</vertx.version>
    <groovy.version>2.4.12</groovy.version>
    <jetty.version>9.4.6.v20170531</jetty.version>
    <testng.version>6.11</testng.version>
    <slf4j.version>1.7.25</slf4j.version>
    <jaxb.version>2.2.11</jaxb.version>
    <jackson.version>2.8.9</jackson.version>
    <arquillian.version>1.1.13.Final</arquillian.version>
    <cucumber.version>1.2.5</cucumber.version>
    <zookeeper.version>3.4.8</zookeeper.version>
    <javadoc.options>-Xdoclint:none</javadoc.options>

    <node.version>v7.7.4</node.version>
    <npm.version>4.4.3</npm.version>

    <skip.integration.tests>false</skip.integration.tests>
    <skip.unit.tests>false</skip.unit.tests>
    <skip.gpg>false</skip.gpg>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom</artifactId>
        <version>2.0.2</version>
      </dependency>
      <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.11.0</version>
      </dependency>
      <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.2</version>
      </dependency>
      <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>com.springsource.javax.jms</artifactId>
        <version>1.1.0</version>
      </dependency>
      <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
      </dependency>
      <dependency>
        <groupId>com.sun.xml.messaging.saaj</groupId>
        <artifactId>saaj-impl</artifactId>
        <version>1.3.28</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-xml</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-json</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-jsr223</artifactId>
        <version>${groovy.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.3.1</version>
      </dependency>
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.10</version>
      </dependency>
      <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.3</version>
      </dependency>
      <dependency>
        <groupId>org.apache.sshd</groupId>
        <artifactId>sshd-core</artifactId>
        <version>1.3.0</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.57</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.57</version>
      </dependency>
      <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.54</version>
      </dependency>

      <dependency>
        <groupId>net.sf.jtidy</groupId>
        <artifactId>jtidy</artifactId>
        <version>r938</version>
        <optional>true</optional>
      </dependency>

      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-core</artifactId>
        <version>1.3</version>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-library</artifactId>
        <version>1.3</version>
      </dependency>

      <!-- Spring Framework -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-websocket</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-messaging</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-core</artifactId>
        <version>${spring.ws.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-xml</artifactId>
        <version>${spring.ws.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-core</artifactId>
        <version>${spring.integration.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-http</artifactId>
        <version>${spring.integration.version}</version>
      </dependency>

      <dependency>
        <groupId>org.springframework.restdocs</groupId>
        <artifactId>spring-restdocs-core</artifactId>
        <version>${spring.restdocs.version}</version>
      </dependency>

      <dependency>
        <groupId>wsdl4j</groupId>
        <artifactId>wsdl4j</artifactId>
        <version>1.6.3</version>
      </dependency>

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
      </dependency>
      <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </dependency>

      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>javax-websocket-server-impl</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-api</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-common</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-client</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-annotations</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-util</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-io</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${jetty.version}</version>
      </dependency>
      <dependency>
        <groupId>net.minidev</groupId>
        <artifactId>json-smart</artifactId>
        <version>2.2.1</version>
      </dependency>
      <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
        <version>2.2.0</version>
      </dependency>

      <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.10.1</version>
        <scope>provided</scope>
      </dependency>

      <!-- Citrus mail dependencies -->
      <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
      </dependency>

      <dependency>
        <groupId>org.subethamail</groupId>
        <artifactId>subethasmtp</artifactId>
        <version>3.1.7</version>
      </dependency>

      <!-- Citrus vert.x dependencies -->
      <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-core</artifactId>
        <version>${vertx.version}</version>
      </dependency>
      <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-hazelcast</artifactId>
        <version>${vertx.version}</version>
      </dependency>
      <dependency>
        <groupId>io.vertx</groupId>
        <artifactId>vertx-codegen</artifactId>
        <version>${vertx.version}</version>
      </dependency>

      <!-- Citrus camel dependencies -->
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>${apache.camel.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>${apache.camel.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- Citrus ftp dependencies -->
      <dependency>
        <groupId>org.apache.ftpserver</groupId>
        <artifactId>ftpserver-core</artifactId>
        <version>1.1.1</version>
      </dependency>

      <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>3.5</version>
      </dependency>

      <!-- Citrus arquillian dependencies -->
      <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-core</artifactId>
        <version>${arquillian.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.arquillian.config</groupId>
        <artifactId>arquillian-config-api</artifactId>
        <version>${arquillian.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.arquillian.container</groupId>
        <artifactId>arquillian-container-test-spi</artifactId>
        <version>${arquillian.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
        <version>2.2.3</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-impl-base</artifactId>
        <version>1.2.6</version>
      </dependency>

      <!-- Cucumber -->
      <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${cucumber.version}</version>
      </dependency>
      <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-spring</artifactId>
        <version>${cucumber.version}</version>
      </dependency>
      <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber.version}</version>
        <exclusions>
          <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- Citrus Selenium dependencies -->
      <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.4.0</version>
        <exclusions>
          <exclusion>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-api</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-common</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-client</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-io</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>htmlunit-driver</artifactId>
        <version>2.27</version>
      </dependency>
      <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.27</version>
      </dependency>
      <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit-core-js</artifactId>
        <version>2.27</version>
      </dependency>
      <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>neko-htmlunit</artifactId>
        <version>2.27</version>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>21.0</version>
      </dependency>

      <!-- JaxB Bindings (API and implementation) -->
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb.version}</version>
      </dependency>
      <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>${jaxb.version}</version>
      </dependency>
      <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>${jaxb.version}</version>
      </dependency>

      <!-- JSON jackson binding -->
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson.version}</version>
      </dependency>

      <!-- Logging -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging-api</artifactId>
        <version>1.1</version>
      </dependency>
      <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
      </dependency>

      <dependency>
        <groupId>com.github.docker-java</groupId>
        <artifactId>docker-java</artifactId>
        <version>3.0.11</version>
        <exclusions>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>io.fabric8</groupId>
        <artifactId>kubernetes-client</artifactId>
        <version>1.4.34</version>
      </dependency>

      <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>${zookeeper.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- Test scoped dependencies -->
      <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-jms</artifactId>
        <version>${spring.integration.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-xml</artifactId>
        <version>${spring.integration.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-broker</artifactId>
        <version>${activemq.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-spring</artifactId>
        <version>${activemq.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.10</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.xbean</groupId>
        <artifactId>xbean-spring</artifactId>
        <version>4.5</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>2.4.0</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.8.47</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!-- Global dependencies -->
  <dependencies>
    <!-- Compile scope -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>

    <!-- Test scoped dependencies -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5.3</version>
          <configuration>
            <allowTimestampedSnapshots>true</allowTimestampedSnapshots>
            <autoVersionSubmodules>true</autoVersionSubmodules>
            <remoteTagging>true</remoteTagging>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.6.1</version>
          <configuration>
            <encoding>${project.build.sourceEncoding}</encoding>
            <source>1.8</source>
            <target>1.8</target>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-changes-plugin</artifactId>
          <version>2.12.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>3.5</version>
        </plugin>

        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20</version>
          <configuration>
            <systemProperties>
              <property>
                <name>javax.xml.parsers.SAXParserFactory</name>
                <value>org.apache.xerces.jaxp.SAXParserFactoryImpl</value>
              </property>
              <property>
                <name>user.language</name>
                <value>en</value>
              </property>
            </systemProperties>
            <forkMode>once</forkMode>
            <failIfNoTests>false</failIfNoTests>
            <skipTests>${skip.unit.tests}</skipTests>
            <excludes>
              <exclude>**/IT*.java</exclude>
              <exclude>**/*IT.java</exclude>
            </excludes>
            <workingDirectory>${project.build.directory}</workingDirectory>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>2.20</version>
          <executions>
            <execution>
              <id>integration-tests</id>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
              <configuration>
                <failIfNoTests>false</failIfNoTests>
                <skipTests>${skip.integration.tests}</skipTests>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
          <configuration>
            <archive>
              <addMavenDescriptor>true</addMavenDescriptor>
            </archive>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.8</version>
        </plugin>
        <plugin>
          <artifactId>maven-ear-plugin</artifactId>
          <version>2.10.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-help-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.0.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.6</version>
          <configuration>
            <inputDirectory>${project.build.directory}/site/_site</inputDirectory>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.eclipse.jetty</groupId>
          <artifactId>jetty-maven-plugin</artifactId>
          <version>${jetty.version}</version>
        </plugin>
        <!-- IDE plugins -->
        <plugin>
          <artifactId>maven-idea-plugin</artifactId>
          <version>2.2.1</version>
          <configuration>
            <downloadSources>true</downloadSources>
            <linkModules>true</linkModules>
            <jdkLevel>1.8</jdkLevel>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-eclipse-plugin</artifactId>
          <version>2.10</version>
          <configuration>
            <downloadSources>true</downloadSources>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.0.1</version>
          <executions>
            <execution>
              <id>attach-sources</id>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.10.4</version>
          <configuration>
            <additionalparam>${javadoc.options}</additionalparam>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>1.6</version>
          <executions>
            <execution>
              <id>sign-artifacts</id>
              <phase>verify</phase>
              <goals>
                <goal>sign</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <useAgent>true</useAgent>
            <keyname>christoph.deppisch@consol.de</keyname>
            <skip>${skip.gpg}</skip>
            <gpgArguments>
              <arg>--allow-weak-digest-algos</arg>
            </gpgArguments>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.6</version>
        </plugin>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>0.12</version>
          <configuration>
            <includes>
              <include>**/*.java</include>
            </includes>
            <excludeSubProjects>false</excludeSubProjects>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.asciidoctor</groupId>
          <artifactId>asciidoctor-maven-plugin</artifactId>
          <version>1.5.3</version>
          <inherited>false</inherited>
          <configuration>
            <sourceDirectory>src/manual</sourceDirectory>
            <sourceDocumentName>index.adoc</sourceDocumentName>
            <attributes>
              <icons>font</icons>
              <pagenums/>
              <version>${project.version}</version>
              <plugindir>${project.basedir}/plugin</plugindir>
              <idprefix/>
              <idseparator>-</idseparator>
              <allow-uri-read>true</allow-uri-read>
            </attributes>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>jaxb2-maven-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-plugin</artifactId>
          <version>1.9.5</version>
        </plugin>

        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.7.9</version>
        </plugin>

        <plugin>
          <groupId>io.fabric8</groupId>
          <artifactId>docker-maven-plugin</artifactId>
          <version>0.21.0</version>
          <configuration>
            <watchInterval>500</watchInterval>
            <logDate>default</logDate>
            <verbose>true</verbose>
            <images>
              <image>
                <alias>jekyll</alias>
                <name>jekyll/jekyll:3.1.6</name>
                <run>
                  <namingStrategy>alias</namingStrategy>
                  <ports>
                    <port>4000:4000</port>
                  </ports>
                  <volumes>
                    <bind>
                      <volume>${project.build.directory}/site:/srv/jekyll</volume>
                    </bind>
                  </volumes>
                  <wait>
                    <http>
                      <url>http://localhost:4000</url>
                      <method>GET</method>
                      <status>200</status>
                    </http>
                    <time>60000</time>
                    <shutdown>500</shutdown>
                  </wait>
                  <env>
                    <POLLING>true</POLLING>
                  </env>
                  <log>
                    <enabled>true</enabled>
                    <color>green</color>
                  </log>
                </run>
              </image>
            </images>
          </configuration>
        </plugin>

      </plugins>
    </pluginManagement>

    <!-- Default plugins for all modules -->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
      </plugin>
    </plugins>

    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh-external</artifactId>
        <version>2.7</version>
      </extension>
    </extensions>
  </build>

  <repositories>
    <repository>
        <id>com.springsource.repository.bundles.external</id>
        <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
        <url>http://repository.springsource.com/maven/bundles/external</url>
    </repository>
    <repository>
      <id>spring-snapshot</id>
      <name>Spring Snapshot Repository</name>
      <url>https://repo.spring.io/snapshot/</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
  </repositories>

  <profiles>
    <!-- Distribution Management -->
    <profile>
      <id>release-inhouse</id>
      <distributionManagement>
        <repository>
          <id>repository-consol-releases</id>
          <url>http://build.int.consol.de/nexus/content/repositories/inhouse</url>
        </repository>
        <snapshotRepository>
          <id>repository-consol-snapshots</id>
          <url>http://build.int.consol.de/nexus/content/repositories/inhouse-snapshots</url>
        </snapshotRepository>
        <site>
          <id>site-citrus-inhouse</id>
          <url>scpexe://build.int.consol.de/home/sites/www/htdocs/citrus</url>
        </site>
      </distributionManagement>
      <properties>
        <site.url>http://build.int.consol.de/citrus</site.url>
        <site.path>/citrus</site.path>
      </properties>
    </profile>

    <profile>
      <id>release-central</id>
      <distributionManagement>
        <snapshotRepository>
          <id>sonatype-nexus-snapshots</id>
          <name>Sonatype Nexus Snapshots</name>
          <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
          <id>sonatype-nexus-staging</id>
          <name>Nexus Release Repository</name>
          <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
      </distributionManagement>

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>release-labs</id>
      <distributionManagement>
        <repository>
          <id>consol-labs-release</id>
          <url>scpexe://labs.consol.de/home/maven-repository/www/htdocs/repository</url>
        </repository>
        <snapshotRepository>
          <id>consol-labs-snapshots</id>
          <url>scpexe://labs.consol.de/home/maven-repository/www/htdocs/snapshots-repository</url>
        </snapshotRepository>
        <site>
          <id>site-citrus</id>
          <url>scpexe://labs.consol.de/home/citrus/www/stage</url>
        </site>
      </distributionManagement>
      <properties>
        <site.url>http://www.citrusframework.org</site.url>
        <site.path></site.path>
      </properties>

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>release-local</id>
      <distributionManagement>
        <repository>
          <id>local-release</id>
          <url>file:///stage/repository</url>
        </repository>
        <snapshotRepository>
          <id>local-snapshots</id>
          <url>file:///stage/snapshots-repository</url>
        </snapshotRepository>
        <site>
          <id>site-citrus</id>
          <url>file:///stage/citrus-site</url>
        </site>
      </distributionManagement>
      <properties>
        <site.url>http://www.citrusframework.org</site.url>
        <site.path></site.path>
      </properties>
    </profile>

    <profile>
      <id>docs-html</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>output-html</id>
                <phase>package</phase>
                <goals>
                  <goal>process-asciidoc</goal>
                </goals>
                <configuration>
                  <sourceHighlighter>coderay</sourceHighlighter>
                  <backend>html</backend>
                  <sourceHighlighter>coderay</sourceHighlighter>
                  <attributes>
                    <toc>left</toc>
                    <linkcss>false</linkcss>
                  </attributes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>docs-pdf</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>output-pdf</id>
                <phase>package</phase>
                <goals>
                  <goal>process-asciidoc</goal>
                </goals>
                <configuration>
                  <backend>pdf</backend>
                  <sourceHighlighter>rouge</sourceHighlighter>
                  <attributes>
                    <toc/>
                  </attributes>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctorj-pdf</artifactId>
                <version>1.5.0-alpha.11</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>release-docs</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-scm-plugin</artifactId>
            <configuration>
              <connectionUrl>scm:git:git@github.com:christophd/citrus.git</connectionUrl>
              <developerConnectionUrl>scm:git:git@github.com:christophd/citrus.git</developerConnectionUrl>
              <scmVersion>gh-pages</scmVersion>
              <scmVersionType>branch</scmVersionType>
            </configuration>
            <executions>
              <execution>
                <id>gh-pages-clone</id>
                <phase>initialize</phase>
                <goals>
                  <goal>checkout</goal>
                </goals>
              </execution>
              <execution>
                <id>gh-pages-add</id>
                <phase>verify</phase>
                <goals>
                  <goal>add</goal>
                </goals>
                <configuration>
                  <workingDirectory>${project.build.directory}/checkout</workingDirectory>
                  <includes>**/**</includes>
                </configuration>
              </execution>
              <execution>
                <id>gh-pages-push</id>
                <phase>verify</phase>
                <goals>
                  <goal>checkin</goal>
                </goals>
                <configuration>
                  <workingDirectory>${project.build.directory}/checkout</workingDirectory>
                  <message>Update reference manual</message>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-docs-sources</id>
                <phase>package</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>${project.build.directory}/checkout</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}/generated-docs</directory>
                      <includes>
                        <include>**/**</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>site</id>
      <build>
        <resources>
          <resource>
            <directory>${project.basedir}/src/site</directory>
            <targetPath>${project.build.directory}/site</targetPath>
            <includes>
              <include>**/**</include>
            </includes>
          </resource>
          <resource>
            <directory>${project.basedir}/src/site</directory>
            <targetPath>${project.build.directory}/site</targetPath>
            <includes>
              <include>_data/**</include>
              <include>_docs/**</include>
              <include>_posts/**</include>
              <include>_includes/**</include>
              <include>help/**</include>
              <include>index.html</include>
              <include>_config.yml</include>
              <include>latest_version.txt</include>
            </includes>
            <filtering>true</filtering>
          </resource>
        </resources>

        <plugins>
          <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>start</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>start</goal>
                </goals>
              </execution>
              <execution>
                <id>stop</id>
                <phase>package</phase>
                <goals>
                  <goal>stop</goal>
                </goals>
              </execution>
            </executions>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <inherited>false</inherited>
            <executions>
              <execution>
                <id>copy-generated-docs</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/reference/html</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}/generated-docs</directory>
                      <includes>
                        <include>**/**</include>
                      </includes>
                      <excludes>
                        <exclude>index.pdf</exclude>
                      </excludes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-generated-docs-pdf</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/reference/pdf</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.build.directory}/generated-docs</directory>
                      <includes>
                        <include>index.pdf</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-core-config-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-core/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-core-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-core/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-jms-config-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/jms/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-jms/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-jms-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-jms-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/jms/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-jms/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-jms-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-ftp-config-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/ftp/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-ftp/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-ftp-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-ftp-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/ftp/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-ftp/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-ftp-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-http-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/http/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-http/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-http-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-http-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/http/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-http/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-http-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-websocket-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/websocket/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-websocket/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-websocket-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-ws-config-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/ws/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-ws/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-ws-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-ws-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/ws/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-ws/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-ws-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-ssh-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/ssh/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-ssh/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-ssh-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-ssh-message-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/ssh/message</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-ssh/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-ssh-message*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-mail-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/mail/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-mail/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-mail-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-mail-message-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/mail/message</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-mail/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-mail-message*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-vertx-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/vertx/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-vertx/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-vertx-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-camel-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/camel/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-camel/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-camel-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-camel-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/camel/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-camel/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-camel-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-docker-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/docker/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-docker/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-docker-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-docker-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/docker/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-docker/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-docker-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-kubernetes-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/kubernetes/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-kubernetes/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-kubernetes-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-kubernetes-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/kubernetes/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-kubernetes/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-kubernetes-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-selenium-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/selenium/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-selenium/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-selenium-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-selenium-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/selenium/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-selenium/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-selenium-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-cucumber-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/cucumber/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-cucumber/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-cucumber-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-zookeeper-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/zookeeper/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-zookeeper/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-zookeeper-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-zookeeper-test-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/zookeeper/testcase</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-zookeeper/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-zookeeper-testcase*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-rmi-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/rmi/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-rmi/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-rmi-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-rmi-message-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/rmi/message</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-rmi/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-rmi-message*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-jmx-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/jmx/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-jmx/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-jmx-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-jmx-message-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/jmx/message</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-model/model-jmx/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-jmx-message*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
              <execution>
                <id>copy-citrus-restdocs-schemas</id>
                <phase>package</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/site/_site/schema/restdocs/config</outputDirectory>
                  <resources>
                    <resource>
                      <directory>modules/citrus-restdocs/src/main/resources/com/consol/citrus/schema</directory>
                      <includes>
                        <include>citrus-restdocs-config*.xsd</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>

      <reporting>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-changes-plugin</artifactId>
            <reportSets>
              <reportSet>
                <reports>
                  <report>changes-report</report>
                </reports>
              </reportSet>
            </reportSets>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>taglist-maven-plugin</artifactId>
            <version>2.4</version>
            <configuration>
              <tags>
                <tag>TODO</tag>
                <tag>@todo</tag>
                <tag>FIXME</tag>
                <tag>@deprecated</tag>
              </tags>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-project-info-reports-plugin</artifactId>
            <version>2.9</version>
            <configuration>
              <dependencyDetailsEnabled>false</dependencyDetailsEnabled>
              <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
            </configuration>
            <reportSets>
              <reportSet>
                <reports>
                  <report>dependency-convergence</report>
                  <report>dependency-management</report>
                  <report>project-team</report>
                </reports>
              </reportSet>
            </reportSets>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-plugin</artifactId>
          </plugin>
        </plugins>
      </reporting>
    </profile>

    <profile>
      <id>assembly</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptors>
                <descriptor>src/main/assembly/dist-sources.xml</descriptor>
                <descriptor>src/main/assembly/dist-release.xml</descriptor>
              </descriptors>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>assembly-antlibs</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptors>
                <descriptor>src/main/assembly/dist-antlibs.xml</descriptor>
              </descriptors>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>assembly-bundle</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Enable JaCoCo Test-->
    <profile>
      <id>jacoco</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>jacoco-unit-init</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
                <configuration>
                  <propertyName>surefireArgLine</propertyName>
                  <destFile>${project.build.directory}/coverage-reports/jacoco-unit.exec</destFile>
                </configuration>
              </execution>
              <execution>
                <id>jacoco-unit-report</id>
                <phase>package</phase>
                <goals>
                  <goal>report</goal>
                </goals>
                <configuration>
                  <dataFile>${project.build.directory}/coverage-reports/jacoco-unit.exec</dataFile>
                  <outputDirectory>${project.reporting.outputDirectory}/jacoco-unit</outputDirectory>
                </configuration>
              </execution>
              <execution>
                <id>jacoco-it-init</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
                <phase>pre-integration-test</phase>
                <configuration>
                  <propertyName>failsafeArgLine</propertyName>
                  <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
                </configuration>
              </execution>
              <execution>
                <id>jacoco-it-report</id>
                <phase>post-integration-test</phase>
                <goals>
                  <goal>report</goal>
                </goals>
                <configuration>
                  <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
                  <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <argLine>${surefireArgLine}</argLine>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <configuration>
              <argLine>${failsafeArgLine}</argLine>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>
</project>


text:
<?php

class Scalr_Service_Zookeeper_Set implements Scalr_Util_Set {

	/**
	 * @var string
	 */
	public $path;

	/**
	 * @var Scalr_Service_Zookeeper
	 */
	public $zookeeper;

	private $logger;

	/**
	 * @var Scalr_Service_Zookeeper_Lock
	 */
	private $lock;

	private $initialized = false;

	/**
	 * @param array $config
	 * @key Scalr_Service_Zookeeper [zookeeper]
	 * @key string [path]
	 */
	function __construct ($config) {
		foreach ($config as $k => $v) {
			$this->{$k} = $v;
		}
		$this->logger = Logger::getLogger(__CLASS__);
		$this->lock = new Scalr_Service_Zookeeper_Lock(array(
			"zookeeper" => $this->zookeeper,
			"path" => "{$this->path}/lock",
			"acquireAttemptTimeout" => 10000 // 10 seconds
		));
	}

	protected function init () {
		if (!$this->initialized) {
			if (!$this->zookeeper->exists($this->path)) {
				$this->zookeeper->setOrCreate($this->path, "", false);
			}
			$this->initialized = true;
		}
	}

	function add ($item) {
		$this->init();
		$this->lock->acquire();
		try {
			$ret = false;
			if (!$this->contains0($item)) {
				$ret = true;
				$this->zookeeper->create("{$this->path}/element", "{$item}",
						array(Scalr_Service_Zookeeper::OPT_SEQUENCE => true));
			}

			$this->lock->release();
			return $ret;

		} catch (Exception $e) {
			$this->lock->release();
			throw $e;
		}
	}

	function remove ($item) {
		$this->init();
		$this->lock->acquire();

		try {
			$ret = false;
			if ($path = $this->pathOf($item)) {
				$this->zookeeper->delete($path);
				$ret = true;
			}

			$this->lock->release();
			return $ret;

		} catch (Exception $e) {
			$this->lock->release();
			throw $e;
		}
	}

	function contains ($item) {
		$this->init();
		$this->lock->acquire();
		try {
			$ret = $this->contains0($item);

			$this->lock->release();
			return $ret;

		} catch (Exception $e) {
			$this->lock->release();
			throw $e;
		}
	}

	private function contains0 ($item) {
		return (bool) $this->pathOf($item);
	}

	private function pathOf ($item) {
		foreach ($this->itemNames() as $name) {
			$path = "{$this->path}/{$name}";
			if ($item == $this->zookeeper->getData($path)) {
				return $path;
			}
		}

		return null;
	}

	private function matchElementName ($name) {
		return strpos($name, "element") === 0;
	}

	private function itemNames () {
		$ret = array();
		$childData = $this->zookeeper->getChildren($this->path);
		if ($childData->children) {
			foreach ($childData->children as $childName) {
				if ($this->matchElementName($childName)) {
					$ret[] = $childName;
				}
			}
		}

		return $ret;
	}

	function size () {
		$this->init();
		$this->lock->acquire();
		try {
			$ret = count($this->itemNames());

			$this->lock->release();
			return $ret;

		} catch (Exception $e) {
			$this->lock->release();
			throw $e;
		}
	}

	function clear () {
		$this->init();
		$this->lock->acquire();
		try {
			foreach ($this->itemNames() as $name) {
				$this->zookeeper->delete("{$this->path}/{$name}");
			}

			$this->lock->release();

		} catch (Exception $e) {
			$this->lock->release();
			throw $e;
		}
	}
}

redpajama_set_name: RedPajamaGithub


text:
class Crucigrama::CrosswordBuilder

  NOT_REPEATABLE_WORD_MINIMUM_LENGTH = 3

  include Crucigrama::Positionable

  attr_reader :valid_words, :crossword_class, :crossword
  def initialize(opts = {})
    @valid_words = opts[:valid_words] || []
    @crossword_class = opts[:crossword_class] || Crucigrama::Crossword
    @crossword = @crossword_class.new(opts[:dimensions]||{})
  end

  def self.build_crossword(opts = {})
    self.new(opts).build
  end

  def build
    crossword.black_positions.each do |position|
      set_longest_word_at(position,:horizontal) unless crossword.word_at(position, :horizontal).to_s.length > 1
      set_longest_word_at(position,:vertical) unless crossword.word_at(position, :vertical).to_s.length > 1
    end
    crossword
  end

  def valid_word?(word)
    word == crossword_class::BLACK || word.length == 1 || valid_words.include?(word)
  end

  # @todo remove method ?
  def validate
    crossword.words.collect{|word| valid_word?(word)}.include?(false) ? false : true
  end

  # @todo return both the word and the position it was placed at ?
  def set_longest_word_at(word_position, direction)
    transversal_conditions = transversal_conditions_for(word_position, direction)
    not_word_destructive_condition = not_word_destructive_condition(word_position, direction)
    can_be_set_condition = can_be_set_condition(word_position, direction)
    already_used_words = used_words
    (2..crossword.dimensions[direction]-word_position[direction]).to_a.reverse.each do |length|
      restricting_word_conditions = [can_be_set_condition, *transversal_conditions[0..length-1], not_word_destructive_condition]
      eligible_words = restricting_word_conditions.inject(valid_words_by_length(length) - already_used_words) do |word_list, restricting_condition|
        word_list.select(&restricting_condition)
      end
      if word = eligible_words.sample
        raise "Could not add selected #{word} to crossword:\n#{crossword}" unless crossword.add(word, word_position, direction)
        return word
      end
    end
    nil
  end

  def adyacent_words_to_position(position, direction)
    return nil if crossword.word_at(position, direction)
    [crossword.word_at(position.merge(direction => position[direction]-1), direction), crossword.word_at(position.merge(direction => position[direction]+1), direction)]
  end

  def transversal_conditions_for(position, direction)
    (crossword.dimensions[direction] - position[direction]).times.collect do |word_index|
      adyacent_words = adyacent_words_to_position(position.merge(direction => position[direction]+word_index), direction_other_than(direction))
      lambda do |word|
        adyacent_words.nil? || valid_word?("#{adyacent_words[0]}#{word[word_index]}#{adyacent_words[1]}")
      end
    end
  end

  # @todo Remove ?
  #def word_length_condition(length)
  #  lambda do |word|
  #    word.length == length
  #  end
  #end

  def valid_words_by_length(length)
    @valid_words_by_length ||={}
    @valid_words_by_length[length] ||= valid_words.select{|word| word.length == length}
  end

  # @todo rename to not_word_invalidating_condition ?
  def not_word_destructive_condition(coordinates, direction)
    other_direction = direction_other_than(direction)
    line = crossword.line(coordinates[other_direction], direction)
    lambda do |word|
      words_at_line = line.dup.tap{|line| line[coordinates[direction]..coordinates[direction]+word.length-1]=word}.split(crossword_class::BLACK)
      words_at_line.detect{|word| valid_word?(word)==false}.nil?
    end
  end

  def can_be_set_condition(position, direction)
    other_direction = direction_other_than(direction)
    line = crossword.line(position[other_direction], direction)
    regexp_str = line[position[direction]..line.length].gsub(crossword_class::BLACK, '.')
    length_regexps = regexp_str.length.times.collect {|t| Regexp.new(regexp_str[0..t])}
    lambda do |word|
      if word.length > length_regexps.length
        false
      else
        word.empty? ? true : length_regexps[word.length - 1].match(word)
      end
    end
  end

  def used_words
    crossword.words.reject{|word| word.length < NOT_REPEATABLE_WORD_MINIMUM_LENGTH}
  end

end


text:
/**
 * Mix multiple input streams syncronously.
 * Each input stream pipes to own writable stream instance
 * to control it's pressure to sync output data.
 * So mixer stream is basically readable stream
 * which takes the data from multiple sources of writable streams,
 * as awkward as it may sound.
 */

import {Readable, Writable, Duplex} from 'stream';

/**
 * Duplex stream to be able to pipe in
 */
class Mixer extends Duplex {
	constructor (options) {
		super();

		var self = this;

		self.setMaxListeners(100);

		//input streams
		self.inputs = [];

		//input pressure controllers - writables
		self.controllers = [];

		//input streams data
		self.data = [];

		//register piped inputs
		self
		.on('pipe', function (stream) {
			self.add(stream);
		})
		.on('unpipe', function (stream) {
			self.delete(stream);
		});

		//current mixed byte count
		self.count = 0;
	}

	/**
	 * A stub to provide mixer as a duplex stream.
	 * SetTimeout is needed for microdelay to let unpipe.
	 * Otherwise there's infinite recursion.
	 */
	_write (chunk, enc, cb) {
		setTimeout(cb);
	}

	/**
	 * Stacked write helps mixer work faster.
	 * IDK why. WTFNOTE.
	 */
	_writev (chunks, cb) {
		setTimeout(cb);
	}

	/**
	 * Consumer wants more.
	 * Try to merge frame
	 */
	_read (size) {
		this.stopped = false;
		this._mergeFrame();
	}

	/**
	 * Slice data from every input, mix it, push
	 */
	_mergeFrame () {
		var self = this;

		//don't overfeed the consumer
		if (self.stopped) {
			return false;
		}

		//ignore zero inputs
		if (!self.inputs.length) return false;

		//release inputs to generate some more data
		self.data.forEach(function (data, i) {
			if (data.length < self.blockSize * 4) {
				var ready = self.controllers[i].ready;
				self.controllers[i].ready = null;
				ready && ready.call(self.controllers[i]);
			}
		});

		//if there is still not enough data - ignore
		if (self.data.some(function (data) {
			return data.length < self.blockSize*4;
		})) {
			return false;
		}

		//merge inputs into the chunk
		var chunk = new Buffer(self.blockSize*4);

		for (var i = 0; i < self.blockSize; i++) {
			var sum = 0;
			self.data.forEach(function (data) {
				sum += data.readFloatLE(i * 4);
			});
			chunk.writeFloatLE(sum/self.inputs.length, i*4);
			self.count++;
		}

		//slice data
		self.data = self.data.map(function (data) {
			return data.slice(self.blockSize * 4);
		});

		//try to push some more
		if (self.push(chunk)) {
			self._mergeFrame();
		}
		//or stop if reader is full
		//hold on inputs as well
		else {
			self.stopped = true;
		}
	}

	/**
	 * Explicit way to add streams.
	 * Same as `stream.pipe(mixer);`
	 *
	 * @param {Stream} stream A stream to add
	 */
	add (stream) {
		var self = this;

		var streamIdx = self.inputs.length;

		//save input
		self.inputs.push(stream);
		self.data.push(new Buffer(0));

		//create pressure controller
		var pressureController = new Writable();
		self.controllers.push(pressureController);

		//once writable gets data - it should wait for others
		pressureController._write = function (chunk, encoding, cb) {
			//find own index
			var streamIdx = self.controllers.indexOf(pressureController);

			//ignore removed stream
			if (streamIdx < 0) return;

			//save data
			self.data[streamIdx] = Buffer.concat([self.data[streamIdx], chunk]);

			//save last callback to wait for others
			this.ready = cb;

			//try to merge a chunk to an output
			self._mergeFrame();
		};

		stream.pipe(pressureController);

		return self;
	}

	/**
	 * Explicit way to delete inputs
	 */
	delete (stream) {
		var self = this;

		var streamIdx = self.inputs.indexOf(stream);
		if (streamIdx < 0) return;

		//set end flag
		self.controllers[streamIdx]._write = null;
		// self.controllers[streamIdx].end();
		stream.unpipe(self.controllers[streamIdx]);

		//forget about controller
		self.inputs.splice(streamIdx, 1);
		self.data.splice(streamIdx, 1);
		self.controllers.splice(streamIdx, 1);

		return self;
	}
}

/** Size of a single chunk to pack output data */
Mixer.prototype.blockSize = 64;

/** Audio-lab rendering settings */
Mixer.title = 'Mixer';

Mixer.prototype.numberOfOutputs = 1;
Mixer.prototype.numberOfInputs = 16;

export default Mixer;


text:
/*
 *
 * V_EdgeMetric.cpp contains quality calcultions for edges
 *
 * This file is part of VERDICT
 *
 */

#include "verdict.h"
#include <math.h>

/*!\brief Length of and edge.
 * Length is calculated by taking the distance between the end nodes.
 */
C_FUNC_DEF double v_edge_length( int /*num_nodes*/, double coordinates[][3] )
{

  double x = coordinates[1][0] - coordinates[0][0];
  double y = coordinates[1][1] - coordinates[0][1];
  double z = coordinates[1][2] - coordinates[0][2];
  return (double)( sqrt (x*x + y*y + z*z) );
}

/*!\brief Higher order function for calculating multiple metrics at once.
 * For an edge, there is only one metric, edge length.
 */
C_FUNC_DEF void v_edge_quality( int num_nodes, double coordinates[][3],
    unsigned int metrics_request_flag, struct EdgeMetricVals *metric_vals )
{
  if ( metrics_request_flag & V_EDGE_LENGTH )
    metric_vals->length = v_edge_length( num_nodes, coordinates );
}